49 lines
3.0 KiB
49 lines
3.0 KiB
5 years ago
|
## Цель
|
||
|
|
||
|
На текущий момент клиенты имеют некоторые части платформозависимого кода внутри себя. Это плохо, т.к. мы не можем использовать одинаковые функции (если не перепишем почти половину кода 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. Они будут применены к генерируемым командам
|