Create input-interface.md [ci skip]

This commit is contained in:
Alibek Omarov 2019-11-15 14:08:40 +03:00 committed by GitHub
parent b36fc0e2ae
commit e4e34cc835
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 88 additions and 0 deletions

View File

@ -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. Они будут применены к генерируемым командам