## Цель

На текущий момент клиенты имеют некоторые части платформозависимого кода внутри себя. Это плохо, т.к. мы не можем использовать одинаковые функции (если не перепишем почти половину кода SDL) на разных платформах.

## Клиентская часть

* Клиент будет иметь возможность полностью реализовать touch-ввод. Отрисовка может быть произведена через HUD.
* Клиент получит простые события движения и обзора от движка

### Клиентская реализация

#### Клиент будет экспортировать некоторые функции движку (опционально):

* `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 );`

Клиент будет вращать камерой когда нужно, прямо как в реализации мыши

## Движковая часть

* Движок будет управлять событиями платформы и вызывать клиентские функции
* Движок реализует стандартную систему взгляда и движения если её нет в клиенте

### Движковая реализация

#### События касания

Перед вызовом ClientMove движок обязан получить события о касании.

Если из клиента экспортирована функция IN_ClientTouchEvent, событие будет отправлено клиенту.

Иначе, движок будет рисовать свой touch-интерфейс.

#### Другие события

Интерфейс прикосновений и код джойстика в движке будут генерировать следующие два типа событий:
* События движения (функция IN_ClientMoveEvent)
* События просмотра (функция IN_ClientLookEvent)

Если клиент экспортирует эти функции, события будут отправляться клиенту перед CreateMove
Иначе события просмотра будут происходить перед CreateMove, но после MoveEvent. Они будут применены к генерируемым командам
