| Существует целое множество систем ввода данных всякого разного вида: портабельные, непереносимые, процедурные, обьектные - да какие хотите. Зачем же проекту GameEngine потребовалась своя, новая система ввода? Первое: переносимость существующих систем, мягко говоря, ограниченна. Даже если упоминать о таких монстрах переносимости, как SDL, то ни о каком переносе, например, под PlayStation речи идти не может. В силу идеологической недодуманности. Второе: как только мы уходим от DirectInput, то сразу лишаемся плюшки под названием ForceFeedback. А я вам скажу (а вы поверьте) - это очень вкусная плюшка. Сомневающиеся запускают Descent3 на фидбэковом джойстике\геймпаде, а потом идут завершать просвещение на PlayStation2, Tekken4. Исходя из этого, требуется система ввода, которая не знает о том, что есть клавиатура или там мышка, но зато знает, что к системе подключен некий набор устройств, у каждого есть кнопки, оси там всякие. А потом если программу будет интересовать состояние, например, кнопочки Esc на клавиатуре, то она так честно и спросит: riSystem->buttons("keyboard.esc")->isPressed(); Кроме того, она должна держать ForceFeedback и иметь разумную имплементацию под Windows, Linux, PlayStation... И самое главное - это должна быть удобная, грамотно спроектированная система. Как, например, предложенная здесь и сейчас. (все ваши комментарии и пожелания вы можете оставить в гостевой книге)
Самая последняя версия системы доступна из CVS на sourceforge.net/projects/gameengine в составе всего GameEngine, выкачивается анонимусом. Стабильные релизы: Документация:
"Exclusive mouse" and "Exclusive keyboard" parameters added to DI8 vesrion. Autogenerated documentation is availible for download since now. DI8 problem with local buttons names fixed. Problems with outputBinds() are fixed. Version is stable now! RawDI8 system optimized: non-poll devices now works without update() method. Also "deadzone" parameter added for axes: set gamepad.xaxis.deadzone 100. Input object listeners added to InputSystem. They work asynchronous (if raw level supports this). Virtual buttons fixed: now they work in respect with host object. Also outputBinds() function added to save all binds. INPUT_GECONSOLE_SUPPORT and INPUT_GESTREAM_SUPPORT compilation switches added to improve independence of input system. New event type added: etPrintableChar. This allows programmer to abtract from the platform and implement only hi-logic code, without processing WM_CHAR for example. RawDI8 realization now produces such messages. Also RawDI8 supports event-based updates, so timestamps on events are much better (more precise). This works because of new cool multithread system. Logic (virtual) input level completed. Now there is now need to know anything about keybaords etc: just creating InputSystem object, then creating one (or many) virtual input device, for example createDevice("player",axes("strafe","walk"), buttons("fire","jump")) then make severals binds (bind gamepad.x-axis player.strafe). So, now you are done: x = x + inputSys->axes("player.strafe"); RawDI8 realization is splitted into several files now. Now it's easier to read it. |