Содержание

API игрового движка через DLL

Данная статья описывает публичный API, доступный через динамически подключаемые библиотеки (DLL).

API разделён на две основные части:

  1. me_crypto.h — функции криптографии и строковых преобразований.
  2. me_engine.h — функции управления движком, окном, камерой и объектами.

Типы переменных

Все типы переменных в API перечислены в файле «sources/API/me_interface.h»

// ...
#define CONST			const
#define ME_DEF			typedef
#define ME_CALL			__stdcall*
#define ME_Int			int
#define ME_Bool			bool
#define ME_Char			char
#define ME_CharSign		unsigned char*
#define ME_Void			void
#define ME_String		std::string
#define ME_WString		std::wstring
#define ME_Size			size_t
#define ME_UInt			unsigned int
#define ME_Float		float
// ...

me_crypto

MESplit

Разделяет строку на значения по указанному символу-разделителю.

Синтаксис:

size_t MESplit(CONST ME_String& txt, std::vector<ME_String>& strs, char ch)

Параметры:

Возвращает: количество полученных подстрок.

Пример:

std::vector<std::string> list;
MESplit("a;b;c", list, ';');
std::cout << "a=" << list[0].c_str() << std::endl;
std::cout << "b=" << list[1].c_str() << std::endl;
std::cout << "c=" << list[2].c_str() << std::endl;

ReadFileME

Читает содержимое файла и возвращает его как строку.

Синтаксис:

ME_String ReadFileME(CONST ME_String& str)

Параметры:

Возвращает: содержимое файла в виде строки текст или ошибку «error».

getRegisterAccount

Возвращает уникальный идентификатор пользователя (User ID).

Синтаксис:

ME_String getRegisterAccount()

Возвращает: строку с идентификатором пользователя.

ConvertToWSTR

Преобразует тип строки ME_String в ME_WString'.

Синтаксис:

ME_WString ConvertToWSTR(const ME_String& str)

Параметры:

Возвращает: ME_WString.

ConvertToString

Преобразует тип строки ME_WString в ME_String.

Синтаксис:

ME_String ConvertToString(const ME_WString& wstr)

Параметры:

Возвращает: строка ME_String.

ConvertToSign

Преобразует тип строки ME_String в ME_CharSign.

Синтаксис:

ME_CharSign ConvertToSign(CONST ME_String& str)

Параметры:

Возвращает: ME_CharSign.

ToBase64

Кодирует массив байтов в строку Base64.

Синтаксис:

ME_String ToBase64(ME_CharSign bytes_to_encode, ME_Size len, ME_Bool url)

Параметры:

Возвращает: закодированная строка Base64.

ofBase64

Декодирует строку Base64 обратно в ME_String.

Синтаксис:

ME_String ofBase64(ME_String CONST& s, ME_Bool remove_linebreaks)

Параметры:

Возвращает: декодированная строка ME_String.

ToHex

Преобразует 32-битное целое число в шестнадцатеричную строку, представляя его как последовательность байтов в младшем порядке (little-endian). Каждый байт кодируется двумя шестнадцатеричными символами в нижнем регистре без префикса `0x`.

Синтаксис:

ME_String ToHex(ME_UInt value)

Параметры:

Возвращает: строка ME_String в формате HEX (без префикса «0x», в нижнем регистре).

ToMD5

Вычисляет MD5-хеш от заданной строки ME_String.

Синтаксис:

ME_String ToMD5(ME_String str)

Параметры:

Возвращает: MD5-хеш в виде 32-символьной шестнадцатеричной строки.

genMD5

Генерирует случайный MD5-хеш.

Синтаксис:

ME_String genMD5()

Возвращает: случайный MD5-хеш с типом ME_String.

me_engine

meInitialize

Инициализирует игровой движок.

Синтаксис:

ME_Int meInitialize(CONST ME_Int mode)

Параметры:

Возвращает: 0 при успехе.

meExit

Завершает работу движка.

Синтаксис:

ME_Void meExit()

meSetWindow

Устанавливает окно для рендеринга.

Синтаксис:

ME_Int meSetWindow(HWND hWnd, ME_Int width, ME_Int height, ME_Bool noDops)

Параметры:

Возвращает: ME_Int: успешно = 0, если неудачно = 1.

meSetFullscreen

Переключает полноэкранный режим.

Синтаксис:

ME_Void meSetFullscreen(ME_Bool fullscreen = true)

Параметры:

meSetSceneCallBack

Устанавливает callback-функцию для обработки событий сцены. Работает только при полностью запущеном игровом движке в режиме редактора.

Синтаксис:

ME_Int meSetSceneCallBack(EditorSceneCallback callback)

Параметры:

Тип callback:

ME_Void(ME_CALL EditorSceneCallback)(CONST ME_Char* id, ME_Int action)

Возвращает: ME_Int: успешно = 0, если неудачно = 1.

meLoadLevel

Загружает или очищает текущий уровень.

Синтаксис:

ME_Int meLoadLevel(CONST ME_Char* name)

Параметры:

Возвращает: ME_Int: 0 обычно.

meGetHWND

Возвращает дескриптор окна, используемого движком.

Синтаксис:

HWND meGetHWND()

Возвращает: HWND дескриптор окна или «NULL».

meCameraAt

Телепортирует камеру в заданную точку.

Синтаксис:

ME_Int meCameraAt(ME_Float x, ME_Float y, ME_Float z)

Параметры:

Возвращает: ME_Int: успешно = 0, если неудачно = 1.

meGetCameraAt

Получает текущие координаты и направление камеры.

Синтаксис:

ME_Int meGetCameraAt(ME_Float& x, ME_Float& y, ME_Float& z, ME_Float& yaw)

Параметры:

Возвращает: ME_Int: успешно = 0, если неудачно = 1.

GetObjectAt

Возвращает список объектов в заданной области.

Синтаксис:

CONST ME_Char* GetObjectAt(ME_Float x, ME_Float y, ME_Float z, ME_Int radius)

Параметры:

Возвращает: строка с идентификаторами объектов (разделённых символом «;»), иначе пустая строка.

meSetPos

Устанавливает позицию окна на экране. (работает в режиме редактора)

Синтаксис:

ME_Void meSetPos(ME_Int x, ME_Int y)

Параметры:

meIsOpen

Проверяет, открыто ли окно игрового движка.

Синтаксис:

ME_Bool meIsOpen()

Возвращает: «true», если окно открыто и активно.

meBoolAction

Выполняет логическое действие (вкл/выкл) над системными функциями.

Синтаксис:

ME_Bool meBoolAction(meActions type, ME_Int set = -1)

Параметры:

Возвращает: ME_Bool: новое состояние («true»/«false»).

meImgStream

Выполняет создание скриншота

Синтаксис:

ME_Void meImgStream(ME_Bool answer)

Параметры:

meImgData

Возвращает последний сделанный скриншот с помощью функции «meImgStream» в формате Base64.

Синтаксис:

CONST ME_Char* meImgData()

Возвращает: строка Base64 с изображением png, либо пустая строка.

meGetTitle

Возвращает заголовок окна (Windows).

Синтаксис:

LPWSTR meGetTitle()

Возвращает: LPWSTR строка.

meGetTitleScript

Возвращает заголовок окна который был присвоен с помощью скрипта.

Синтаксис:

CONST ME_Char* meGetTitleScript()

Возвращает: ME_Char строка.

meWindowHide

Скрывает или показывает окно игрового движка.

Синтаксис:

ME_Void meWindowHide(ME_Bool visible)

Параметры:

meClickCamera

Включает/отключает управление камерой нажатием мыши.

Синтаксис:

ME_Void meClickCamera(ME_Bool enabled)

Параметры:

meWindowState

Устанавливает состояние окна (свёрнуто, развёрнуто и т.д.).

Синтаксис:

ME_Void meWindowState(ME_Int mode)

Параметры:

mePauseEditor

Режим редактора на паузе или активен.

Синтаксис:

ME_Void mePauseEditor(ME_Bool paused)

Параметры:

meManipulate

Выполняет манипуляции с объектами сцены (в режиме редактора).

Синтаксис:

ME_Void meManipulate(ME_Int type, CONST ME_Char* arguments)

Параметры:

Работа с параметрами [type = 0 — Взаимодействие с объектами, type = 1 — Взаимодействие с миром]

type <подтип> описание формат
0 1 режим выделения (если <id-объекта> = -1, убрать выделение) 1;<группа>;<id-объекта>
0 2 изменение оси вращения 2;<цифра: X = 0, Y = 1, Z = 2>
0 3 новый или изменить объект подгрузить из файла objects.json 3;<id-объекта>
0 5 удалить объект 5;<id-объекта>
0 6 удалить группу вместе с объектами 6;<группа
0 7 создать новую группу с названием 7;<название группы>
0 8 обновить трансформацию у объекта 8;<id-объекта>
1 1 ambient 1;0.1
1 2 _color 2;0.5;0.5;0.5
1 3 sunColor 3;0.75;0.901961;1.0
1 4 sunLight 4;0.6
1 5 sunRadiosity 5;0.6
1 6 sunDiffuseColor 6;0.5;0.5;0.5
1 7 diffuseFraction 7;0.583333
1 8 sunDirection 8;-30.0;42.0;0.0
1 9 sunIsPrimaryLight 9;1
1 10 radiosityScale 10;0.8
1 11 contrastGain 11;1.0
1 12 shadowIsOutdoor 12;1
1 13 shadowSize 13;2.0
1 14 shadowOpacity 14;0.5

meGetObjData

Получает трансформацию объекта: позицию, поворот, масштаб.

Синтаксис:

CONST ME_Char* meGetObjData(ME_Int type, CONST ME_Char* id)

Параметры:

Возвращает: ME_Char*: строка с данными в формате,
например: «position.x;position.y;position.z;rotation.x;rotation.y;rotation.z;scale.x;scale.y;scale.z»
или пустой ответ: «0;0;0;0;0;0;0;0;0».

Примечания

  1. Все типы `ME_*` (например, `ME_String`, `ME_Int`, `ME_Bool`) определены в me_interface.h.
  2. На Windows используется HWND, LPWSTR и другие типы Windows API.
  3. Для использования API необходимо подключить соответствующие заголовочные файлы и линковать с DLL движка.