UNPKG

@duydang2311/ragemp-utils

Version:

A collection of utilities for RAGE Multiplayer JavaScript module.

1 lines 22.1 kB
{"version":3,"sources":["../src/index.ts","../src/lib/vector.ts","../src/lib/spatial-grid.ts","../src/lib/local-marker.ts"],"sourcesContent":["export * from './lib/vector';\r\nexport * from './lib/spatial-grid';\r\nexport * from './lib/local-marker';\r\n","/**\r\n * Represents a 2D vector with x and y coordinates.\r\n */\r\nexport interface Vector2 {\r\n /**\r\n * The x coordinate of the vector.\r\n */\r\n readonly x: number;\r\n\r\n /**\r\n * The y coordinate of the vector.\r\n */\r\n readonly y: number;\r\n}\r\n\r\nexport const distanceSquared: {\r\n (a: IVector3, b: IVector3): number;\r\n (a: Vector2, b: Vector2): number;\r\n} = (a: Vector2 | IVector3, b: Vector2 | IVector3): number => {\r\n const dx = a.x - b.x;\r\n const dy = a.y - b.y;\r\n if ('z' in a && 'z' in b) {\r\n const dz = (a as Vector3).z - (b as Vector3).z;\r\n return dx * dx + dy * dy + dz * dz;\r\n }\r\n return dx * dx + dy * dy;\r\n};\r\n","import type { Grid2D } from './grid';\r\nimport type { Vector2 } from './vector';\r\n\r\nexport interface CreateSpatialGrid2DOptions {\r\n min?: Vector2;\r\n max?: Vector2;\r\n cellSize?: number;\r\n}\r\n\r\ntype CellItem<T> = [id: number, item: T, radius?: number];\r\ntype CellItemLookup = [cells: number[]];\r\n\r\nexport class SpatialGrid2D<T> implements Grid2D<T> {\r\n static readonly DEFAULT_MIN_X = -4000;\r\n static readonly DEFAULT_MAX_X = 4000;\r\n static readonly DEFAULT_MIN_Y = -4000;\r\n static readonly DEFAULT_MAX_Y = 8000;\r\n static readonly DEFAULT_CELL_SIZE = 128;\r\n\r\n #idCounter: number;\r\n #min: Vector2;\r\n #max: Vector2;\r\n #rows: number;\r\n #columns: number;\r\n #cells: CellItem<T>[][];\r\n #cellSize: number;\r\n #idLookup: Map<number, CellItemLookup> = new Map();\r\n\r\n constructor(options?: CreateSpatialGrid2DOptions) {\r\n this.#idCounter = 0;\r\n this.#min = options?.min ?? {\r\n x: SpatialGrid2D.DEFAULT_MIN_X,\r\n y: SpatialGrid2D.DEFAULT_MIN_Y,\r\n };\r\n this.#max = options?.max ?? {\r\n x: SpatialGrid2D.DEFAULT_MAX_X,\r\n y: SpatialGrid2D.DEFAULT_MAX_Y,\r\n };\r\n this.#cellSize = options?.cellSize ?? SpatialGrid2D.DEFAULT_CELL_SIZE;\r\n this.#rows = Math.ceil((this.#max.y - this.#min.y) / this.#cellSize);\r\n this.#columns = Math.ceil((this.#max.x - this.#min.x) / this.#cellSize);\r\n this.#cells = new Array(this.#rows * this.#columns)\r\n .fill(0)\r\n .map(() => []);\r\n }\r\n\r\n public get min() {\r\n return this.#min;\r\n }\r\n\r\n public get max() {\r\n return this.#max;\r\n }\r\n\r\n public get cellSize() {\r\n return this.#cellSize;\r\n }\r\n\r\n public get rows() {\r\n return this.#rows;\r\n }\r\n\r\n public get columns() {\r\n return this.#columns;\r\n }\r\n\r\n public cellAt(coords: Vector2) {\r\n this.#assertInBounds(coords);\r\n return this.#safeCellAt(coords);\r\n }\r\n\r\n public nearbyCells(coords: Vector2, radius: number) {\r\n this.#assertInBounds(coords);\r\n const minCol = Math.max(\r\n 0,\r\n Math.floor((coords.x - radius - this.#min.x) / this.#cellSize)\r\n );\r\n const maxCol = Math.min(\r\n this.#columns - 1,\r\n Math.floor((coords.x + radius - this.#min.x) / this.#cellSize)\r\n );\r\n const minRow = Math.max(\r\n 0,\r\n Math.floor((coords.y - radius - this.#min.y) / this.#cellSize)\r\n );\r\n const maxRow = Math.min(\r\n this.#rows - 1,\r\n Math.floor((coords.y + radius - this.#min.y) / this.#cellSize)\r\n );\r\n const cells: number[] = new Array(\r\n (maxRow - minRow + 1) * (maxCol - minCol + 1)\r\n );\r\n let index = 0;\r\n for (let row = minRow; row <= maxRow; ++row) {\r\n for (let col = minCol; col <= maxCol; ++col) {\r\n cells[index++] = row * this.#columns + col;\r\n }\r\n }\r\n return cells;\r\n }\r\n\r\n public add(item: T, coords: Vector2, radius?: number) {\r\n this.#assertInBounds(coords);\r\n const id = ++this.#idCounter;\r\n if (radius == null) {\r\n const cellIndex = this.#safeCellAt(coords);\r\n this.#cells[cellIndex]!.push([id, item]);\r\n this.#idLookup.set(id, [[cellIndex]]);\r\n return id;\r\n }\r\n\r\n const minCol = Math.max(\r\n 0,\r\n Math.floor(\r\n (coords.x - (radius ?? 0) - this.#min.x) / this.#cellSize\r\n )\r\n );\r\n const maxCol = Math.min(\r\n this.#columns - 1,\r\n Math.floor(\r\n (coords.x + (radius ?? 0) - this.#min.x) / this.#cellSize\r\n )\r\n );\r\n const minRow = Math.max(\r\n 0,\r\n Math.floor(\r\n (coords.y - (radius ?? 0) - this.#min.y) / this.#cellSize\r\n )\r\n );\r\n const maxRow = Math.min(\r\n this.#rows - 1,\r\n Math.floor(\r\n (coords.y + (radius ?? 0) - this.#min.y) / this.#cellSize\r\n )\r\n );\r\n const cells: number[] = [];\r\n for (let row = minRow; row <= maxRow; ++row) {\r\n for (let col = minCol; col <= maxCol; ++col) {\r\n const cellIndex = row * this.#columns + col;\r\n cells.push(cellIndex);\r\n this.#cells[cellIndex]!.push([id, item, radius]);\r\n }\r\n }\r\n this.#idLookup.set(id, [cells]);\r\n return id;\r\n }\r\n\r\n public update(id: number, coords: Vector2, radius?: number) {\r\n const itemLookup = this.#idLookup.get(id);\r\n if (!itemLookup) {\r\n return false;\r\n }\r\n\r\n const [lookUpCells] = itemLookup;\r\n let item: T | undefined;\r\n for (const cell of lookUpCells) {\r\n item = this.#cells[cell]!.find(\r\n (cellItem) => cellItem[0] === id\r\n )?.[1];\r\n if (item) {\r\n break;\r\n }\r\n }\r\n if (!item || !this.remove(id)) {\r\n return false;\r\n }\r\n\r\n if (radius == null) {\r\n const cellIndex = this.#safeCellAt(coords);\r\n this.#cells[cellIndex]!.push([id, item]);\r\n this.#idLookup.set(id, [[cellIndex]]);\r\n return true;\r\n }\r\n\r\n const minCol = Math.max(\r\n 0,\r\n Math.floor(\r\n (coords.x - (radius ?? 0) - this.#min.x) / this.#cellSize\r\n )\r\n );\r\n const maxCol = Math.min(\r\n this.#columns - 1,\r\n Math.floor(\r\n (coords.x + (radius ?? 0) - this.#min.x) / this.#cellSize\r\n )\r\n );\r\n const minRow = Math.max(\r\n 0,\r\n Math.floor(\r\n (coords.y - (radius ?? 0) - this.#min.y) / this.#cellSize\r\n )\r\n );\r\n const maxRow = Math.min(\r\n this.#rows - 1,\r\n Math.floor(\r\n (coords.y + (radius ?? 0) - this.#min.y) / this.#cellSize\r\n )\r\n );\r\n const cells: number[] = [];\r\n for (let row = minRow; row <= maxRow; ++row) {\r\n for (let col = minCol; col <= maxCol; ++col) {\r\n const cellIndex = row * this.#columns + col;\r\n cells.push(cellIndex);\r\n this.#cells[cellIndex]!.push([id, item, radius]);\r\n }\r\n }\r\n this.#idLookup.set(id, [cells]);\r\n return true;\r\n }\r\n\r\n public remove(id: number): boolean {\r\n const itemLookup = this.#idLookup.get(id);\r\n if (!itemLookup) {\r\n return false;\r\n }\r\n\r\n const [cells] = itemLookup;\r\n for (const cellIndex of cells) {\r\n const cellItems = this.#cells[cellIndex]!;\r\n const itemIndex = cellItems.findIndex(\r\n (cellItem) => cellItem[0] === id\r\n );\r\n if (itemIndex !== -1) {\r\n cellItems.splice(itemIndex, 1);\r\n }\r\n }\r\n return this.#idLookup.delete(id);\r\n }\r\n\r\n #safeCellAt(coords: Vector2): number {\r\n const col = Math.floor((coords.x - this.#min.x) / this.#cellSize);\r\n const row = Math.floor((coords.y - this.#min.y) / this.#cellSize);\r\n return row * this.#columns + col;\r\n }\r\n\r\n #assertInBounds(coords: Vector2): void {\r\n if (\r\n coords.x < this.#min.x ||\r\n coords.x >= this.#max.x ||\r\n coords.y < this.#min.y ||\r\n coords.y >= this.#max.y\r\n ) {\r\n throw new Error(\r\n `Coordinates (${coords.x}, ${coords.y}) are out of bounds for the grid.`\r\n );\r\n }\r\n }\r\n}\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[0],\r\n this.#color[1],\r\n this.#color[2],\r\n this.#color[3],\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"],"mappings":"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","names":[]}