@duydang2311/ragemp-utils-client
Version:
A collection of utilities for RAGE Multiplayer JavaScript module.
1 lines • 17.4 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts","../src/local-marker.ts","../src/streamed-meta.ts","../src/utils.ts"],"sourcesContent":["export * from './local-marker';\r\nexport * from './streamed-meta';\r\nexport * from './utils';\r\n","export interface LocalMarker {\r\n type: RageEnums.Markers;\r\n position: IVector3;\r\n destination: IVector3;\r\n rotation: IVector3;\r\n scale: IVector3;\r\n radius: number;\r\n color: RGBA;\r\n bobUpAndDown: boolean;\r\n faceCamera: boolean;\r\n rotate: boolean;\r\n textureDict: string | null;\r\n textureName: string | null;\r\n drawOnEnts: boolean;\r\n\r\n render(): void;\r\n}\r\n\r\nexport class RageMpLocalMarker implements LocalMarker {\r\n #type: RageEnums.Markers;\r\n #position: IVector3;\r\n #destination: IVector3;\r\n #direction: IVector3;\r\n #rotation: IVector3;\r\n #scale: IVector3;\r\n #radius: number;\r\n #color: RGBA;\r\n #bobUpAndDown: boolean;\r\n #faceCamera: boolean;\r\n #rotate: boolean;\r\n #textureDict: string | null;\r\n #textureName: string | null;\r\n #drawOnEnts: boolean;\r\n\r\n constructor(\r\n type: RageEnums.Markers,\r\n position: IVector3,\r\n destination: IVector3,\r\n rotation: IVector3,\r\n scale: IVector3,\r\n radius: number,\r\n color: RGBA,\r\n bobUpAndDown: boolean = false,\r\n faceCamera: boolean = false,\r\n rotate: boolean = false,\r\n textureDict: string | null = null,\r\n textureName: string | null = null,\r\n drawOnEnts: boolean = false\r\n ) {\r\n this.#type = type;\r\n this.#position = position;\r\n this.#destination = destination;\r\n this.#rotation = rotation;\r\n this.#scale = scale;\r\n this.#radius = radius;\r\n this.#color = color;\r\n this.#bobUpAndDown = bobUpAndDown;\r\n this.#faceCamera = faceCamera;\r\n this.#rotate = rotate;\r\n this.#textureDict = textureDict;\r\n this.#textureName = textureName;\r\n this.#drawOnEnts = drawOnEnts;\r\n this.#direction = this.#getDirectionVector();\r\n }\r\n\r\n get type() {\r\n return this.#type;\r\n }\r\n\r\n get position() {\r\n return this.#position;\r\n }\r\n\r\n get destination() {\r\n return this.#destination;\r\n }\r\n\r\n get rotation() {\r\n return this.#rotation;\r\n }\r\n\r\n get scale() {\r\n return this.#scale;\r\n }\r\n\r\n get radius() {\r\n return this.#radius;\r\n }\r\n\r\n get color() {\r\n return this.#color;\r\n }\r\n\r\n get bobUpAndDown() {\r\n return this.#bobUpAndDown;\r\n }\r\n\r\n get faceCamera() {\r\n return this.#faceCamera;\r\n }\r\n\r\n get rotate() {\r\n return this.#rotate;\r\n }\r\n\r\n get textureDict() {\r\n return this.#textureDict;\r\n }\r\n\r\n get textureName() {\r\n return this.#textureName;\r\n }\r\n\r\n get drawOnEnts() {\r\n return this.#drawOnEnts;\r\n }\r\n\r\n set type(value: number) {\r\n this.#type = value;\r\n }\r\n\r\n set position(value: IVector3) {\r\n this.#position = value;\r\n }\r\n\r\n set destination(value: IVector3) {\r\n this.#destination = value;\r\n this.#direction = this.#getDirectionVector();\r\n }\r\n\r\n set rotation(value: IVector3) {\r\n this.#rotation = value;\r\n }\r\n\r\n set scale(value: IVector3) {\r\n this.#scale = value;\r\n }\r\n\r\n set radius(value: number) {\r\n this.#radius = value;\r\n }\r\n\r\n set color(value: RGBA) {\r\n this.#color = value;\r\n }\r\n\r\n set bobUpAndDown(value: boolean) {\r\n this.#bobUpAndDown = value;\r\n }\r\n\r\n set faceCamera(value: boolean) {\r\n this.#faceCamera = value;\r\n }\r\n\r\n set rotate(value: boolean) {\r\n this.#rotate = value;\r\n }\r\n\r\n set textureDict(value: string | null) {\r\n this.#textureDict = value;\r\n }\r\n\r\n set textureName(value: string | null) {\r\n this.#textureName = value;\r\n }\r\n\r\n set drawOnEnts(value: boolean) {\r\n this.#drawOnEnts = value;\r\n }\r\n\r\n render() {\r\n mp.game.graphics.drawMarker(\r\n this.#type,\r\n this.#position.x,\r\n this.#position.y,\r\n this.#position.z,\r\n this.#direction.x,\r\n this.#direction.y,\r\n this.#direction.z,\r\n this.#rotation.x,\r\n this.#rotation.y,\r\n this.#rotation.z,\r\n this.#scale.x,\r\n this.#scale.y,\r\n this.#scale.z,\r\n ...this.#color,\r\n this.#bobUpAndDown,\r\n this.#faceCamera,\r\n 2,\r\n this.#rotate,\r\n this.#textureDict,\r\n this.#textureName,\r\n this.#drawOnEnts\r\n );\r\n }\r\n\r\n #getDirectionVector() {\r\n return new mp.Vector3(\r\n this.#destination.x - this.#position.x,\r\n this.#destination.y - this.#position.y,\r\n this.#destination.z - this.#position.z\r\n );\r\n }\r\n}\r\n","import type { StreamedMetaSchema } from '@duydang2311/ragemp-utils-meta';\r\nimport type { EntityType } from '@duydang2311/ragemp-utils-shared';\r\n\r\nexport type StreamedMetaOnChangeFn<V> = (\r\n entity: EntityMp,\r\n currentValue: V | undefined,\r\n previousValue: V | undefined\r\n) => void;\r\n\r\nexport interface StreamedMetaStore {\r\n init(): void;\r\n on<K extends keyof StreamedMetaSchema, V extends StreamedMetaSchema[K]>(\r\n eventName: 'change',\r\n name: K,\r\n fn: StreamedMetaOnChangeFn<V>\r\n ): () => void;\r\n}\r\n\r\nexport interface CreateRageMpStreamedMetaStoreOptions {\r\n entityTypes?: Exclude<EntityType, 'blip' | 'dummy'>[];\r\n changeEventName?: string;\r\n streamedInEventName?: string;\r\n streamedOutEventName?: string;\r\n debug?: boolean;\r\n}\r\n\r\nexport class RageMpStreamedMetaStore implements StreamedMetaStore {\r\n static #poolByType = new Map<EntityType, EntityMpPool<EntityMp>>([\r\n // ['blip', mp.blips],\r\n ['checkpoint', mp.checkpoints],\r\n ['colshape', mp.colshapes],\r\n // ['dummy', mp.dummies],\r\n ['marker', mp.markers],\r\n ['object', mp.objects],\r\n ['pickup', mp.pickups],\r\n ['player', mp.players],\r\n ['vehicle', mp.vehicles],\r\n ['ped', mp.peds],\r\n ['textlabel', mp.labels],\r\n ]);\r\n #changeHandlersByName: Map<string, Set<StreamedMetaOnChangeFn<unknown>>> =\r\n new Map();\r\n #entityTypes: Set<string>;\r\n #changeEventName: string;\r\n #streamedInEventName: string;\r\n #streamedOutEventName: string;\r\n #debug: boolean;\r\n\r\n constructor(options?: CreateRageMpStreamedMetaStoreOptions) {\r\n this.#entityTypes = new Set(options?.entityTypes ?? []);\r\n this.#changeEventName =\r\n options?.changeEventName ?? 'streamedMeta.change';\r\n this.#streamedInEventName =\r\n options?.streamedInEventName ?? 'streamedMeta.streamedIn';\r\n this.#streamedOutEventName =\r\n options?.streamedOutEventName ?? 'streamedMeta.streamedOut';\r\n this.#debug = options?.debug ?? false;\r\n }\r\n\r\n init() {\r\n mp.events.add('entityStreamIn', (entity: EntityMp) => {\r\n if (this.#debug) {\r\n mp.console.logInfo(\r\n `[StreamedMetaStore] entityStreamIn, ${entity.type}, ${entity.remoteId}`\r\n );\r\n }\r\n if (!this.#entityTypes.has(entity.type)) {\r\n return;\r\n }\r\n mp.events.callRemote(\r\n this.#streamedInEventName,\r\n entity.type,\r\n entity.remoteId\r\n );\r\n });\r\n mp.events.add('entityStreamOut', (entity: EntityMp) => {\r\n if (this.#debug) {\r\n mp.console.logInfo(\r\n `[StreamedMetaStore] entityStreamOut, ${entity.type}, ${entity.remoteId}`\r\n );\r\n }\r\n if (!this.#entityTypes.has(entity.type)) {\r\n return;\r\n }\r\n mp.events.callRemote(\r\n this.#streamedOutEventName,\r\n entity.type,\r\n entity.remoteId\r\n );\r\n });\r\n mp.events.add(\r\n this.#changeEventName,\r\n (\r\n type: EntityType,\r\n remoteId: number,\r\n name: string,\r\n current: any,\r\n previous: any\r\n ) => {\r\n if (this.#debug) {\r\n mp.console.logInfo(\r\n `[StreamedMetaStore] ${\r\n this.#changeEventName\r\n }, ${type}, ${remoteId}, ${name}, ${current}, ${previous}`\r\n );\r\n }\r\n const pool = RageMpStreamedMetaStore.#poolByType.get(type);\r\n if (!pool) {\r\n return;\r\n }\r\n\r\n const entity = pool.atRemoteId(remoteId);\r\n if (!entity || !pool.exists(entity)) {\r\n return;\r\n }\r\n\r\n const handlers = this.#changeHandlersByName.get(name);\r\n if (handlers) {\r\n for (const handler of handlers) {\r\n handler(entity, current, previous);\r\n }\r\n }\r\n }\r\n );\r\n }\r\n\r\n public on<\r\n K extends keyof StreamedMetaSchema,\r\n V extends StreamedMetaSchema[K]\r\n >(eventName: 'change', name: K, fn: StreamedMetaOnChangeFn<V>): () => void;\r\n public on<\r\n K extends keyof StreamedMetaSchema,\r\n V extends StreamedMetaSchema[K]\r\n >(eventName: 'change', name: K, fn: StreamedMetaOnChangeFn<V>) {\r\n switch (eventName) {\r\n case 'change':\r\n let handlers = this.#changeHandlersByName.get(name);\r\n if (!handlers) {\r\n handlers = new Set<StreamedMetaOnChangeFn<unknown>>([\r\n fn as StreamedMetaOnChangeFn<unknown>,\r\n ]);\r\n this.#changeHandlersByName.set(\r\n name,\r\n new Set<StreamedMetaOnChangeFn<unknown>>([\r\n fn as StreamedMetaOnChangeFn<unknown>,\r\n ])\r\n );\r\n } else {\r\n handlers.add(fn as StreamedMetaOnChangeFn<unknown>);\r\n }\r\n return () => {\r\n handlers.delete(fn as StreamedMetaOnChangeFn<unknown>);\r\n if (handlers.size === 0) {\r\n this.#changeHandlersByName.delete(name);\r\n }\r\n };\r\n default:\r\n throw new Error(`Unsupported event: ${eventName}`);\r\n }\r\n }\r\n}\r\n","export const renderPromise = <T>(\r\n fn: (\r\n resolve: (value: T | PromiseLike<T>) => void,\r\n reject: (reason?: any) => void\r\n ) => void\r\n) => {\r\n let scopedResolve: (value: T | PromiseLike<T>) => void = undefined!;\r\n let scopedReject: (reason?: any) => void = undefined!;\r\n const promise = new Promise<T>((resolve, reject) => {\r\n scopedResolve = (value) => {\r\n resolve(value);\r\n mp.events.remove('render', wrapped);\r\n };\r\n scopedReject = (reason) => {\r\n reject(reason);\r\n mp.events.remove('render', wrapped);\r\n };\r\n });\r\n\r\n const wrapped = () => {\r\n fn(scopedResolve, scopedReject);\r\n };\r\n mp.events.add('render', wrapped);\r\n return promise;\r\n};\r\n"],"mappings":"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","names":[]}