UNPKG

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
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; }