rock-mod
Version:
Rock-Mod is a powerful framework designed for creating and managing mods for Grand Theft Auto (GTA) games.
59 lines (58 loc) • 3.61 kB
TypeScript
import { type IGraphicsManager, type ILoopedParticleFxAtCoordOptions, type IParticleFxAtCoordOptions, type IScreenTextOptions } from "../../common/graphics/IGraphicsManager";
import { type IVector2D, type IVector3D } from "../../../../shared/common/utils";
/**
* Реализация `IGraphicsManager` под CCMP.
*
* RageMP даёт высокоуровневые обёртки `mp.game.graphics.drawText` /
* `world3dToScreen2d` / etc. У CCMP таких помощников нет — есть только
* сырые GTA V натив-биндинги в `ccmp.natives.{hud,graphics}.*`. Этот класс
* собирает их в эквивалент RageMP API.
*
* ### `drawText` — мульти-нативная цепочка
*
* Стандартная GTA V последовательность:
* 1. `SET_TEXT_FONT/SCALE/COLOUR/OUTLINE/CENTRE` — стиль текста
* 2. `BEGIN_TEXT_COMMAND_DISPLAY_TEXT('STRING')` — открыть text command
* 3. `ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(text)` — добавить содержимое
* 4. `END_TEXT_COMMAND_DISPLAY_TEXT(x, y, 0)` — отрисовать
*
* **Hot path:** вызывается каждый render-tick из `HudController.onRender`
* (ammo, nametags, etc). Все вызовы синхронны (V8-ops), общая стоимость —
* единицы микросекунд на текст.
*
* **Ограничение длины:** `ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME` усекает
* вход на 99 символов. Для типичных HUD-меток (ammo "30/120", имена игроков)
* не критично; для длинных строк нужно разбивать на чанки последовательными
* `ADD_*` вызовами. Сейчас не реализовано — добавим если понадобится.
*
* ### `world3dToScreen2d`
*
* `getScreenCoordFromWorldCoord` возвращает `{return, screenx, screeny}` —
* `return=false` означает, что точка вне frustum'а; маппим в `null` для
* совпадения с RageMP-семантикой.
*
* ### `getActiveScreenResolution`
*
* Маппится на `getActualScreenResolution` (GTA native `0x873C9F3104101DD3`),
* который возвращает физическое разрешение рендера — то же, что RageMP'шный
* `getActiveScreenResolution` (это один и тот же натив, переименованный по-
* разному в разных биндингах).
*
* ### `startScreenEffect` / `stopScreenEffect`
*
* Маппятся на `animpostfxPlay` / `animpostfxStop` (`ANIMPOSTFX_PLAY`/`STOP`) —
* это и есть GTA V натив для screen effect'ов (по-старому называвшийся
* `START_SCREEN_EFFECT`).
*/
export declare class CCMPGraphicsManager implements IGraphicsManager {
drawText(text: string, position: IVector2D, options?: IScreenTextOptions): void;
world3dToScreen2d(position: IVector3D): IVector2D | null;
startScreenEffect(effectName: string, duration: number, looped: boolean): void;
stopScreenEffect(effectName: string): void;
setPtfxAssetNextCall(assetName: string): void;
startParticleFxNonLoopedAtCoord(options: IParticleFxAtCoordOptions): boolean;
startParticleFxLoopedAtCoord(options: ILoopedParticleFxAtCoordOptions): number;
stopParticleFxLooped(handle: number, p1: boolean): void;
getSafeZoneSize(): number;
getActiveScreenResolution(): IVector2D;
}