diff --git a/Documentation/input-interface.md b/Documentation/input-interface.md new file mode 100644 index 00000000..ccf2b159 --- /dev/null +++ b/Documentation/input-interface.md @@ -0,0 +1,88 @@ +## Purpose / Цель +**Eng:** +Clients have different platform-depended input code now. +It is bad because we cannot use same functions (if we won't rewrite almost half of SDL) on different platforms. + +**Rus:** +На текущий момент клиенты имеют некоторые части платформозависимого кода внутри себя. Это плохо, т.к. мы не можем использовать одинаковые функции (если не перепишем почти половину кода SDL) на разных платформах. +## Client part / Клиентская часть +**Eng:** +* Client will have ability to fully implement touch input. Drawing may be done by HUD. +* Client will receive basic motion and look events from engine + +**Rus:** +* Клиент будет иметь возможность полностью реализовать touch-ввод. Отрисовка может быть произведена через HUD. +* Клиент получит простые события движения и обзора от движка + +### Client implementation / Клиентская реализация +**Eng:** +#### Client will optionally export some functions to Engine: +* `int IN_ClientTouchEvent ( int fingerID, float x, float y, float dx, float dy );` + +Return 1 if touch is active, 0 otherwise. + +* `void IN_ClientMoveEvent ( float forwardmove, float sidemove );` + +Client wil accumulate move values before creating commands and flush it on CreateMove. + +* `void IN_ClientLookEvent ( float relyaw, float relpitch );` + +Client will rotate camera when needed as in mouse implementation + +**Rus:** +#### Клиент будет экспортировать некоторые функции движку (опционально): +* `int IN_ClientTouchEvent ( int fingerID, float x, float y, float dx, float dy );` + +Вернёт 1 если касание активно, иначе 0. + +* `void IN_ClientMoveEvent ( float forwardmove, float sidemove );` + +Клиент будет накапливать значения величин для команд движения перед созданием команд и очищать их при CreateMove. + +* `void IN_ClientLookEvent ( float relyaw, float relpitch );` + +Клиент будет вращать камерой когда нужно, прямо как в реализации мыши + +## Engine part / Движковая часть +**Eng:** +* Engine will handle platform events and call client functions. +* Engine will implement fallback look and movement system when client interface not present + +**Rus:** +* Движок будет управлять событиями платформы и вызывать клиентские функции +* Движок реализует стандартную систему взгляда и движения если её нет в клиенте + +### Engine implementation / Реализация в движке +**Eng:** +#### Touch events + +Before calling ClientMove engine must get touch events. + +If client exported IN_ClientTouchEvent, event will be sent to client. + +Otherwise engine will draw own touch interface. + +**Rus:** +#### События касания + +Перед вызовом ClientMove движок обязан получить события о касании. + +Если из клиента экспортирована функция IN_ClientTouchEvent, событие будет отправлено клиенту. + +Иначе, движок будет рисовать свой touch-интерфейс. +#### Other events / Другие события +**Eng:** +Engine touch interface and joystick support code will generate two types of events: +* Move events (IN_ClientMoveEvent function) +* Look events (IN_ClientLookEvent function) + +If client exported these functions, events will be sent to client before CreateMove +Otherwise Look Event will be processed before CreateMove, but MoveEvent after. It will be applied to generated command + +**Rus:** +Интерфейс прикосновений и код джойстика в движке будут генерировать следующие два типа событий: +* События движения (функция IN_ClientMoveEvent) +* События просмотра (функция IN_ClientLookEvent) + +Если клиент экспортирует эти функции, события будут отправляться клиенту перед CreateMove +Иначе события просмотра будут происходить перед CreateMove, но после MoveEvent. Они будут применены к генерируемым командам