@panda0day/fivex 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/core.d.ts +10 -0
- package/dist/client/core.d.ts.map +1 -1
- package/dist/client/core.js +10 -2
- package/dist/client/core.js.map +1 -1
- package/dist/client/entities/blip.d.ts +14 -0
- package/dist/client/entities/blip.d.ts.map +1 -0
- package/dist/client/entities/blip.js +33 -0
- package/dist/client/entities/blip.js.map +1 -0
- package/dist/client/entities/checkpoint.d.ts +8 -0
- package/dist/client/entities/checkpoint.d.ts.map +1 -0
- package/dist/client/entities/checkpoint.js +15 -0
- package/dist/client/entities/checkpoint.js.map +1 -0
- package/dist/client/entities/colshape.d.ts +20 -0
- package/dist/client/entities/colshape.d.ts.map +1 -0
- package/dist/client/entities/colshape.js +36 -0
- package/dist/client/entities/colshape.js.map +1 -0
- package/dist/client/entities/label.d.ts +7 -0
- package/dist/client/entities/label.d.ts.map +1 -0
- package/dist/client/entities/label.js +28 -0
- package/dist/client/entities/label.js.map +1 -0
- package/dist/client/entities/marker.d.ts +7 -0
- package/dist/client/entities/marker.d.ts.map +1 -0
- package/dist/client/entities/marker.js +14 -0
- package/dist/client/entities/marker.js.map +1 -0
- package/dist/client/entities/pickup.d.ts +9 -0
- package/dist/client/entities/pickup.d.ts.map +1 -0
- package/dist/client/entities/pickup.js +29 -0
- package/dist/client/entities/pickup.js.map +1 -0
- package/dist/client/managers/blip-pool.d.ts +15 -0
- package/dist/client/managers/blip-pool.d.ts.map +1 -0
- package/dist/client/managers/blip-pool.js +31 -0
- package/dist/client/managers/blip-pool.js.map +1 -0
- package/dist/client/managers/checkpoint-pool.d.ts +10 -0
- package/dist/client/managers/checkpoint-pool.d.ts.map +1 -0
- package/dist/client/managers/checkpoint-pool.js +17 -0
- package/dist/client/managers/checkpoint-pool.js.map +1 -0
- package/dist/client/managers/colshape-pool.d.ts +14 -0
- package/dist/client/managers/colshape-pool.d.ts.map +1 -0
- package/dist/client/managers/colshape-pool.js +52 -0
- package/dist/client/managers/colshape-pool.js.map +1 -0
- package/dist/client/managers/label-pool.d.ts +12 -0
- package/dist/client/managers/label-pool.d.ts.map +1 -0
- package/dist/client/managers/label-pool.js +21 -0
- package/dist/client/managers/label-pool.js.map +1 -0
- package/dist/client/managers/marker-pool.d.ts +12 -0
- package/dist/client/managers/marker-pool.d.ts.map +1 -0
- package/dist/client/managers/marker-pool.js +21 -0
- package/dist/client/managers/marker-pool.js.map +1 -0
- package/dist/client/managers/orchestration.d.ts +13 -0
- package/dist/client/managers/orchestration.d.ts.map +1 -0
- package/dist/client/managers/orchestration.js +27 -0
- package/dist/client/managers/orchestration.js.map +1 -0
- package/dist/client/managers/pickup-pool.d.ts +10 -0
- package/dist/client/managers/pickup-pool.d.ts.map +1 -0
- package/dist/client/managers/pickup-pool.js +17 -0
- package/dist/client/managers/pickup-pool.js.map +1 -0
- package/dist/client/managers/tick-orchestration.d.ts +16 -0
- package/dist/client/managers/tick-orchestration.d.ts.map +1 -0
- package/dist/client/managers/tick-orchestration.js +39 -0
- package/dist/client/managers/tick-orchestration.js.map +1 -0
- package/dist/server/core.d.ts +11 -3
- package/dist/server/core.d.ts.map +1 -1
- package/dist/server/core.js +11 -3
- package/dist/server/core.js.map +1 -1
- package/dist/server/entities/blip.d.ts +17 -0
- package/dist/server/entities/blip.d.ts.map +1 -0
- package/dist/server/entities/blip.js +39 -0
- package/dist/server/entities/blip.js.map +1 -0
- package/dist/server/entities/checkpoint.d.ts +16 -0
- package/dist/server/entities/checkpoint.d.ts.map +1 -0
- package/dist/server/entities/checkpoint.js +23 -0
- package/dist/server/entities/checkpoint.js.map +1 -0
- package/dist/server/entities/colshape.d.ts +16 -0
- package/dist/server/entities/colshape.d.ts.map +1 -0
- package/dist/server/entities/colshape.js +15 -0
- package/dist/server/entities/colshape.js.map +1 -0
- package/dist/server/entities/label.d.ts +21 -0
- package/dist/server/entities/label.d.ts.map +1 -0
- package/dist/server/entities/label.js +31 -0
- package/dist/server/entities/label.js.map +1 -0
- package/dist/server/entities/marker.d.ts +22 -0
- package/dist/server/entities/marker.d.ts.map +1 -0
- package/dist/server/entities/marker.js +39 -0
- package/dist/server/entities/marker.js.map +1 -0
- package/dist/server/entities/pickup.d.ts +16 -0
- package/dist/server/entities/pickup.d.ts.map +1 -0
- package/dist/server/entities/pickup.js +23 -0
- package/dist/server/entities/pickup.js.map +1 -0
- package/dist/server/managers/blip-pool.d.ts +14 -0
- package/dist/server/managers/blip-pool.d.ts.map +1 -0
- package/dist/server/managers/blip-pool.js +16 -0
- package/dist/server/managers/blip-pool.js.map +1 -0
- package/dist/server/managers/checkpoint-pool.d.ts +18 -0
- package/dist/server/managers/checkpoint-pool.d.ts.map +1 -0
- package/dist/server/managers/checkpoint-pool.js +32 -0
- package/dist/server/managers/checkpoint-pool.js.map +1 -0
- package/dist/server/managers/colshape-pool.d.ts +17 -0
- package/dist/server/managers/colshape-pool.d.ts.map +1 -0
- package/dist/server/managers/colshape-pool.js +76 -0
- package/dist/server/managers/colshape-pool.js.map +1 -0
- package/dist/server/managers/label-pool.d.ts +10 -0
- package/dist/server/managers/label-pool.d.ts.map +1 -0
- package/dist/server/managers/label-pool.js +16 -0
- package/dist/server/managers/label-pool.js.map +1 -0
- package/dist/server/managers/marker-pool.d.ts +10 -0
- package/dist/server/managers/marker-pool.d.ts.map +1 -0
- package/dist/server/managers/marker-pool.js +16 -0
- package/dist/server/managers/marker-pool.js.map +1 -0
- package/dist/server/managers/orchestration.d.ts +14 -0
- package/dist/server/managers/orchestration.d.ts.map +1 -0
- package/dist/server/managers/orchestration.js +23 -0
- package/dist/server/managers/orchestration.js.map +1 -0
- package/dist/server/managers/pickup-pool.d.ts +18 -0
- package/dist/server/managers/pickup-pool.d.ts.map +1 -0
- package/dist/server/managers/pickup-pool.js +32 -0
- package/dist/server/managers/pickup-pool.js.map +1 -0
- package/dist/shared/checkpoints.d.ts +17 -0
- package/dist/shared/checkpoints.d.ts.map +1 -0
- package/dist/shared/checkpoints.js +6 -0
- package/dist/shared/checkpoints.js.map +1 -0
- package/dist/shared/colshape.d.ts +10 -0
- package/dist/shared/colshape.d.ts.map +1 -0
- package/dist/shared/colshape.js +22 -0
- package/dist/shared/colshape.js.map +1 -0
- package/dist/shared/labels.d.ts +18 -0
- package/dist/shared/labels.d.ts.map +1 -0
- package/dist/shared/labels.js +6 -0
- package/dist/shared/labels.js.map +1 -0
- package/dist/shared/markers.d.ts +21 -0
- package/dist/shared/markers.d.ts.map +1 -0
- package/dist/shared/markers.js +6 -0
- package/dist/shared/markers.js.map +1 -0
- package/dist/shared/orchestration.d.ts +9 -0
- package/dist/shared/orchestration.d.ts.map +1 -0
- package/dist/shared/orchestration.js +2 -0
- package/dist/shared/orchestration.js.map +1 -0
- package/dist/shared/pickups.d.ts +10 -0
- package/dist/shared/pickups.d.ts.map +1 -0
- package/dist/shared/pickups.js +6 -0
- package/dist/shared/pickups.js.map +1 -0
- package/package.json +1 -1
- package/dist/client/blips-internal.d.ts +0 -2
- package/dist/client/blips-internal.d.ts.map +0 -1
- package/dist/client/blips-internal.js +0 -32
- package/dist/client/blips-internal.js.map +0 -1
- package/dist/server/blips.d.ts +0 -9
- package/dist/server/blips.d.ts.map +0 -1
- package/dist/server/blips.js +0 -25
- package/dist/server/blips.js.map +0 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type CheckpointData } from "../../shared/checkpoints";
|
|
2
|
+
import { Checkpoint } from "../entities/checkpoint";
|
|
3
|
+
import type { Player } from "../entities/player";
|
|
4
|
+
import type { ColshapePool } from "./colshape-pool";
|
|
5
|
+
import { ServerOrchestration } from "./orchestration";
|
|
6
|
+
interface CheckpointOptions extends Omit<CheckpointData, "id"> {
|
|
7
|
+
onEnter?: (player: Player) => void;
|
|
8
|
+
removeOnEnter?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare class CheckpointPool extends ServerOrchestration<CheckpointData, Checkpoint> {
|
|
11
|
+
private readonly colshapes;
|
|
12
|
+
protected readonly net: import("../../shared/orchestration").OrchestrationNet;
|
|
13
|
+
constructor(colshapes: ColshapePool);
|
|
14
|
+
protected wrap(target: number, data: CheckpointData, _onChange: () => void, onRemove: () => void): Checkpoint;
|
|
15
|
+
create(options: CheckpointOptions): Checkpoint;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=checkpoint-pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-pool.d.ts","sourceRoot":"","sources":["../../../src/server/managers/checkpoint-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAiB,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,UAAU,iBAAkB,SAAQ,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC;IAC7D,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,cAAe,SAAQ,mBAAmB,CACtD,cAAc,EACd,UAAU,CACV;IAGY,OAAO,CAAC,QAAQ,CAAC,SAAS;IAFtC,SAAS,CAAC,QAAQ,CAAC,GAAG,wDAAiB;gBAEV,SAAS,EAAE,YAAY;IAIpD,SAAS,CAAC,IAAI,CACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,MAAM,IAAI,EACrB,QAAQ,EAAE,MAAM,IAAI,GAClB,UAAU;IAIb,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU;CAmB9C"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { CheckpointNet } from "../../shared/checkpoints";
|
|
2
|
+
import { Checkpoint } from "../entities/checkpoint";
|
|
3
|
+
import { ServerOrchestration } from "./orchestration";
|
|
4
|
+
export class CheckpointPool extends ServerOrchestration {
|
|
5
|
+
colshapes;
|
|
6
|
+
net = CheckpointNet;
|
|
7
|
+
constructor(colshapes) {
|
|
8
|
+
super();
|
|
9
|
+
this.colshapes = colshapes;
|
|
10
|
+
}
|
|
11
|
+
wrap(target, data, _onChange, onRemove) {
|
|
12
|
+
return new Checkpoint(target, data, onRemove);
|
|
13
|
+
}
|
|
14
|
+
create(options) {
|
|
15
|
+
const { onEnter, removeOnEnter = false, ...data } = options;
|
|
16
|
+
const checkpoint = this.spawn(-1, data);
|
|
17
|
+
checkpoint.onEnter = onEnter;
|
|
18
|
+
const shape = this.colshapes.create({
|
|
19
|
+
kind: "sphere",
|
|
20
|
+
center: data.coords,
|
|
21
|
+
radius: data.radius ?? 3,
|
|
22
|
+
onEnter: (_s, player) => {
|
|
23
|
+
checkpoint.onEnter?.(player);
|
|
24
|
+
if (removeOnEnter)
|
|
25
|
+
checkpoint.remove();
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
checkpoint.attachColshape(shape);
|
|
29
|
+
return checkpoint;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=checkpoint-pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-pool.js","sourceRoot":"","sources":["../../../src/server/managers/checkpoint-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAOtD,MAAM,OAAO,cAAe,SAAQ,mBAGnC;IAG6B;IAFV,GAAG,GAAG,aAAa,CAAC;IAEvC,YAA6B,SAAuB;QACnD,KAAK,EAAE,CAAC;QADoB,cAAS,GAAT,SAAS,CAAc;IAEpD,CAAC;IAES,IAAI,CACb,MAAc,EACd,IAAoB,EACpB,SAAqB,EACrB,QAAoB;QAEpB,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,OAA0B;QAChC,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;QAE5D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACxC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YACnC,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC;YACxB,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;gBACvB,UAAU,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;gBAC7B,IAAI,aAAa;oBAAE,UAAU,CAAC,MAAM,EAAE,CAAC;YACxC,CAAC;SACD,CAAC,CAAC;QACH,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAEjC,OAAO,UAAU,CAAC;IACnB,CAAC;CACD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Pool } from "../../shared/pool-base";
|
|
2
|
+
import { Colshape, type ColshapeOptions } from "../entities/colshape";
|
|
3
|
+
export declare class ColshapePool extends Pool<Colshape> {
|
|
4
|
+
private shapes;
|
|
5
|
+
private nextId;
|
|
6
|
+
private interval;
|
|
7
|
+
private readonly rateMs;
|
|
8
|
+
protected ids(): number[];
|
|
9
|
+
protected wrap(id: number): Colshape;
|
|
10
|
+
at(id: number): Colshape | undefined;
|
|
11
|
+
create(options: ColshapeOptions): Colshape;
|
|
12
|
+
remove(id: number): void;
|
|
13
|
+
handleDropped(source: number): void;
|
|
14
|
+
private ensureLoop;
|
|
15
|
+
private check;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=colshape-pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colshape-pool.d.ts","sourceRoot":"","sources":["../../../src/server/managers/colshape-pool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGtE,qBAAa,YAAa,SAAQ,IAAI,CAAC,QAAQ,CAAC;IAC/C,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAA+C;IAC/D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAO;IAE9B,SAAS,CAAC,GAAG,IAAI,MAAM,EAAE;IAIzB,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ;IAMpC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIpC,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ;IAO1C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAQxB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQnC,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,KAAK;CA8Bb"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Vector3 } from "../../shared";
|
|
2
|
+
import { isInsideShape } from "../../shared/colshape";
|
|
3
|
+
import { Pool } from "../../shared/pool-base";
|
|
4
|
+
import { Colshape } from "../entities/colshape";
|
|
5
|
+
import { Player } from "../entities/player";
|
|
6
|
+
export class ColshapePool extends Pool {
|
|
7
|
+
shapes = new Map();
|
|
8
|
+
nextId = 1;
|
|
9
|
+
interval = null;
|
|
10
|
+
rateMs = 300;
|
|
11
|
+
ids() {
|
|
12
|
+
return [...this.shapes.keys()];
|
|
13
|
+
}
|
|
14
|
+
wrap(id) {
|
|
15
|
+
const shape = this.shapes.get(id);
|
|
16
|
+
if (!shape)
|
|
17
|
+
throw new Error(`[fx] colshape ${id} not found in pool`);
|
|
18
|
+
return shape;
|
|
19
|
+
}
|
|
20
|
+
at(id) {
|
|
21
|
+
return this.shapes.get(id);
|
|
22
|
+
}
|
|
23
|
+
create(options) {
|
|
24
|
+
const shape = new Colshape(this.nextId++, options, (id) => this.remove(id));
|
|
25
|
+
this.shapes.set(shape.id, shape);
|
|
26
|
+
this.ensureLoop();
|
|
27
|
+
return shape;
|
|
28
|
+
}
|
|
29
|
+
remove(id) {
|
|
30
|
+
this.shapes.delete(id);
|
|
31
|
+
if (this.shapes.size === 0 && this.interval !== null) {
|
|
32
|
+
clearInterval(this.interval);
|
|
33
|
+
this.interval = null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
handleDropped(source) {
|
|
37
|
+
for (const shape of this.shapes.values()) {
|
|
38
|
+
if (shape.inside.delete(source)) {
|
|
39
|
+
shape.options.onExit?.(shape, new Player(source));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
ensureLoop() {
|
|
44
|
+
if (this.interval !== null)
|
|
45
|
+
return;
|
|
46
|
+
this.interval = setInterval(() => this.check(), this.rateMs);
|
|
47
|
+
}
|
|
48
|
+
check() {
|
|
49
|
+
const players = getPlayers().map(Number);
|
|
50
|
+
for (const shape of this.shapes.values()) {
|
|
51
|
+
for (const src of players) {
|
|
52
|
+
const ped = GetPlayerPed(String(src));
|
|
53
|
+
if (ped === 0)
|
|
54
|
+
continue;
|
|
55
|
+
if (shape.options.dimension !== undefined &&
|
|
56
|
+
GetPlayerRoutingBucket(String(src)) !== shape.options.dimension) {
|
|
57
|
+
if (shape.inside.delete(src))
|
|
58
|
+
shape.options.onExit?.(shape, new Player(src));
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
const coords = Vector3.from(GetEntityCoords(ped));
|
|
62
|
+
const inside = isInsideShape(shape.options, coords);
|
|
63
|
+
const was = shape.inside.has(src);
|
|
64
|
+
if (inside && !was) {
|
|
65
|
+
shape.inside.add(src);
|
|
66
|
+
shape.options.onEnter?.(shape, new Player(src));
|
|
67
|
+
}
|
|
68
|
+
else if (!inside && was) {
|
|
69
|
+
shape.inside.delete(src);
|
|
70
|
+
shape.options.onExit?.(shape, new Player(src));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=colshape-pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colshape-pool.js","sourceRoot":"","sources":["../../../src/server/managers/colshape-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type LabelData } from "../../shared/labels";
|
|
2
|
+
import { Label } from "../entities/label";
|
|
3
|
+
import { ServerOrchestration } from "./orchestration";
|
|
4
|
+
export declare class LabelPool extends ServerOrchestration<LabelData, Label> {
|
|
5
|
+
protected readonly net: import("../../shared/orchestration").OrchestrationNet;
|
|
6
|
+
protected wrap(target: number, data: LabelData, onChange: () => void, onRemove: () => void): Label;
|
|
7
|
+
create(data: Omit<LabelData, "id">): Label;
|
|
8
|
+
createFor(source: number, data: Omit<LabelData, "id">): Label;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=label-pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"label-pool.d.ts","sourceRoot":"","sources":["../../../src/server/managers/label-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAY,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,qBAAa,SAAU,SAAQ,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC;IACnE,SAAS,CAAC,QAAQ,CAAC,GAAG,wDAAY;IAElC,SAAS,CAAC,IAAI,CACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,MAAM,IAAI,EACpB,QAAQ,EAAE,MAAM,IAAI,GAClB,KAAK;IAIR,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,KAAK;IAI1C,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,KAAK;CAG7D"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { LabelNet } from "../../shared/labels";
|
|
2
|
+
import { Label } from "../entities/label";
|
|
3
|
+
import { ServerOrchestration } from "./orchestration";
|
|
4
|
+
export class LabelPool extends ServerOrchestration {
|
|
5
|
+
net = LabelNet;
|
|
6
|
+
wrap(target, data, onChange, onRemove) {
|
|
7
|
+
return new Label(target, data, onChange, onRemove);
|
|
8
|
+
}
|
|
9
|
+
create(data) {
|
|
10
|
+
return this.spawn(-1, data);
|
|
11
|
+
}
|
|
12
|
+
createFor(source, data) {
|
|
13
|
+
return this.spawn(source, data);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=label-pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"label-pool.js","sourceRoot":"","sources":["../../../src/server/managers/label-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,OAAO,SAAU,SAAQ,mBAAqC;IAChD,GAAG,GAAG,QAAQ,CAAC;IAExB,IAAI,CACb,MAAc,EACd,IAAe,EACf,QAAoB,EACpB,QAAoB;QAEpB,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,IAA2B;QACjC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,SAAS,CAAC,MAAc,EAAE,IAA2B;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;CACD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type MarkerData } from "../../shared/markers";
|
|
2
|
+
import { Marker } from "../entities/marker";
|
|
3
|
+
import { ServerOrchestration } from "./orchestration";
|
|
4
|
+
export declare class MarkerPool extends ServerOrchestration<MarkerData, Marker> {
|
|
5
|
+
protected readonly net: import("../../shared/orchestration").OrchestrationNet;
|
|
6
|
+
protected wrap(target: number, data: MarkerData, onChange: () => void, onRemove: () => void): Marker;
|
|
7
|
+
create(data: Omit<MarkerData, "id">): Marker;
|
|
8
|
+
createFor(source: number, data: Omit<MarkerData, "id">): Marker;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=marker-pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marker-pool.d.ts","sourceRoot":"","sources":["../../../src/server/managers/marker-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAa,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,qBAAa,UAAW,SAAQ,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC;IACtE,SAAS,CAAC,QAAQ,CAAC,GAAG,wDAAa;IAEnC,SAAS,CAAC,IAAI,CACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,IAAI,EACpB,QAAQ,EAAE,MAAM,IAAI,GAClB,MAAM;IAIT,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,MAAM;IAI5C,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,MAAM;CAG/D"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { MarkerNet } from "../../shared/markers";
|
|
2
|
+
import { Marker } from "../entities/marker";
|
|
3
|
+
import { ServerOrchestration } from "./orchestration";
|
|
4
|
+
export class MarkerPool extends ServerOrchestration {
|
|
5
|
+
net = MarkerNet;
|
|
6
|
+
wrap(target, data, onChange, onRemove) {
|
|
7
|
+
return new Marker(target, data, onChange, onRemove);
|
|
8
|
+
}
|
|
9
|
+
create(data) {
|
|
10
|
+
return this.spawn(-1, data);
|
|
11
|
+
}
|
|
12
|
+
createFor(source, data) {
|
|
13
|
+
return this.spawn(source, data);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=marker-pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marker-pool.js","sourceRoot":"","sources":["../../../src/server/managers/marker-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,OAAO,UAAW,SAAQ,mBAAuC;IACnD,GAAG,GAAG,SAAS,CAAC;IAEzB,IAAI,CACb,MAAc,EACd,IAAgB,EAChB,QAAoB,EACpB,QAAoB;QAEpB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,IAA4B;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,SAAS,CAAC,MAAc,EAAE,IAA4B;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;CACD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Orchestrated, OrchestrationNet } from "../../shared/orchestration";
|
|
2
|
+
export declare abstract class ServerOrchestration<TData extends {
|
|
3
|
+
id: number;
|
|
4
|
+
}, TInstance extends Orchestrated<TData>> {
|
|
5
|
+
private registry;
|
|
6
|
+
private nextId;
|
|
7
|
+
protected abstract readonly net: OrchestrationNet;
|
|
8
|
+
protected abstract wrap(target: number, data: TData, onChange: () => void, onRemove: () => void): TInstance;
|
|
9
|
+
protected spawn(target: number, data: Omit<TData, "id">): TInstance;
|
|
10
|
+
private destroy;
|
|
11
|
+
syncTo(source: number): void;
|
|
12
|
+
toArray(): TInstance[];
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=orchestration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestration.d.ts","sourceRoot":"","sources":["../../../src/server/managers/orchestration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,YAAY,EACZ,gBAAgB,EAChB,MAAM,4BAA4B,CAAC;AAEpC,8BAAsB,mBAAmB,CACxC,KAAK,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAC5B,SAAS,SAAS,YAAY,CAAC,KAAK,CAAC;IAErC,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,MAAM,CAAK;IAEnB,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAElD,SAAS,CAAC,QAAQ,CAAC,IAAI,CACtB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,KAAK,EACX,QAAQ,EAAE,MAAM,IAAI,EACpB,QAAQ,EAAE,MAAM,IAAI,GAClB,SAAS;IAEZ,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,SAAS;IAanE,OAAO,CAAC,OAAO;IAKf,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ5B,OAAO,IAAI,SAAS,EAAE;CAGtB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export class ServerOrchestration {
|
|
2
|
+
registry = new Map();
|
|
3
|
+
nextId = 1;
|
|
4
|
+
spawn(target, data) {
|
|
5
|
+
const full = { ...data, id: this.nextId++ };
|
|
6
|
+
const instance = this.wrap(target, full, () => emitNet(this.net.add, target, full), () => this.destroy(full.id, target));
|
|
7
|
+
if (target === -1)
|
|
8
|
+
this.registry.set(full.id, instance);
|
|
9
|
+
emitNet(this.net.add, target, full);
|
|
10
|
+
return instance;
|
|
11
|
+
}
|
|
12
|
+
destroy(id, target) {
|
|
13
|
+
this.registry.delete(id);
|
|
14
|
+
emitNet(this.net.remove, target, id);
|
|
15
|
+
}
|
|
16
|
+
syncTo(source) {
|
|
17
|
+
emitNet(this.net.sync, source, [...this.registry.values()].map((i) => i.data));
|
|
18
|
+
}
|
|
19
|
+
toArray() {
|
|
20
|
+
return [...this.registry.values()];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=orchestration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestration.js","sourceRoot":"","sources":["../../../src/server/managers/orchestration.ts"],"names":[],"mappings":"AAMA,MAAM,OAAgB,mBAAmB;IAIhC,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAC;IACxC,MAAM,GAAG,CAAC,CAAC;IAWT,KAAK,CAAC,MAAc,EAAE,IAAuB;QACtD,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAW,CAAC;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACzB,MAAM,EACN,IAAI,EACJ,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EACzC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CACnC,CAAC;QACF,IAAI,MAAM,KAAK,CAAC,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACpC,OAAO,QAAQ,CAAC;IACjB,CAAC;IAEO,OAAO,CAAC,EAAU,EAAE,MAAc;QACzC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,MAAc;QACpB,OAAO,CACN,IAAI,CAAC,GAAG,CAAC,IAAI,EACb,MAAM,EACN,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAC9C,CAAC;IACH,CAAC;IAED,OAAO;QACN,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACpC,CAAC;CACD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type PickupData } from "../../shared/pickups";
|
|
2
|
+
import { Pickup } from "../entities/pickup";
|
|
3
|
+
import type { Player } from "../entities/player";
|
|
4
|
+
import type { ColshapePool } from "./colshape-pool";
|
|
5
|
+
import { ServerOrchestration } from "./orchestration";
|
|
6
|
+
interface PickupOptions extends Omit<PickupData, "id"> {
|
|
7
|
+
onCollect?: (player: Player) => void;
|
|
8
|
+
removeOnCollect?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare class PickupPool extends ServerOrchestration<PickupData, Pickup> {
|
|
11
|
+
private readonly colshapes;
|
|
12
|
+
protected readonly net: import("../../shared/orchestration").OrchestrationNet;
|
|
13
|
+
constructor(colshapes: ColshapePool);
|
|
14
|
+
protected wrap(target: number, data: PickupData, onRemove: () => void): Pickup;
|
|
15
|
+
create(options: PickupOptions): Pickup;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=pickup-pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pickup-pool.d.ts","sourceRoot":"","sources":["../../../src/server/managers/pickup-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAa,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,UAAU,aAAc,SAAQ,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;IACrD,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,qBAAa,UAAW,SAAQ,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC;IAG1D,OAAO,CAAC,QAAQ,CAAC,SAAS;IAFtC,SAAS,CAAC,QAAQ,CAAC,GAAG,wDAAa;gBAEN,SAAS,EAAE,YAAY;IAIpD,SAAS,CAAC,IAAI,CACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,IAAI,GAClB,MAAM;IAIT,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM;CAmBtC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { PickupNet } from "../../shared/pickups";
|
|
2
|
+
import { Pickup } from "../entities/pickup";
|
|
3
|
+
import { ServerOrchestration } from "./orchestration";
|
|
4
|
+
export class PickupPool extends ServerOrchestration {
|
|
5
|
+
colshapes;
|
|
6
|
+
net = PickupNet;
|
|
7
|
+
constructor(colshapes) {
|
|
8
|
+
super();
|
|
9
|
+
this.colshapes = colshapes;
|
|
10
|
+
}
|
|
11
|
+
wrap(target, data, onRemove) {
|
|
12
|
+
return new Pickup(target, data, onRemove);
|
|
13
|
+
}
|
|
14
|
+
create(options) {
|
|
15
|
+
const { onCollect, removeOnCollect = true, ...data } = options;
|
|
16
|
+
const pickup = this.spawn(-1, data);
|
|
17
|
+
pickup.onCollect = onCollect;
|
|
18
|
+
const shape = this.colshapes.create({
|
|
19
|
+
kind: "sphere",
|
|
20
|
+
center: data.coords,
|
|
21
|
+
radius: data.radius ?? 1.5,
|
|
22
|
+
onEnter: (_s, player) => {
|
|
23
|
+
pickup.onCollect?.(player);
|
|
24
|
+
if (removeOnCollect)
|
|
25
|
+
pickup.remove();
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
pickup.attachColshape(shape);
|
|
29
|
+
return pickup;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=pickup-pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pickup-pool.js","sourceRoot":"","sources":["../../../src/server/managers/pickup-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAOtD,MAAM,OAAO,UAAW,SAAQ,mBAAuC;IAGzC;IAFV,GAAG,GAAG,SAAS,CAAC;IAEnC,YAA6B,SAAuB;QACnD,KAAK,EAAE,CAAC;QADoB,cAAS,GAAT,SAAS,CAAc;IAEpD,CAAC;IAES,IAAI,CACb,MAAc,EACd,IAAgB,EAChB,QAAoB;QAEpB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,OAAsB;QAC5B,MAAM,EAAE,SAAS,EAAE,eAAe,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;QAE/D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;QAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YACnC,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,GAAG;YAC1B,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;gBACvB,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC;gBAC3B,IAAI,eAAe;oBAAE,MAAM,CAAC,MAAM,EAAE,CAAC;YACtC,CAAC;SACD,CAAC,CAAC;QACH,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE7B,OAAO,MAAM,CAAC;IACf,CAAC;CACD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { IVector3 } from "./index";
|
|
2
|
+
import type { OrchestrationNet } from "./orchestration";
|
|
3
|
+
export interface CheckpointData {
|
|
4
|
+
id: number;
|
|
5
|
+
coords: IVector3;
|
|
6
|
+
radius?: number;
|
|
7
|
+
type?: number;
|
|
8
|
+
color?: {
|
|
9
|
+
r: number;
|
|
10
|
+
g: number;
|
|
11
|
+
b: number;
|
|
12
|
+
a?: number;
|
|
13
|
+
};
|
|
14
|
+
nextCoords?: IVector3;
|
|
15
|
+
}
|
|
16
|
+
export declare const CheckpointNet: OrchestrationNet;
|
|
17
|
+
//# sourceMappingURL=checkpoints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoints.d.ts","sourceRoot":"","sources":["../../src/shared/checkpoints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,cAAc;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,UAAU,CAAC,EAAE,QAAQ,CAAC;CACtB;AAED,eAAO,MAAM,aAAa,EAAE,gBAI3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoints.js","sourceRoot":"","sources":["../../src/shared/checkpoints.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC9C,GAAG,EAAE,qBAAqB;IAC1B,MAAM,EAAE,wBAAwB;IAChC,IAAI,EAAE,sBAAsB;CAC5B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IVector3 } from "./index";
|
|
2
|
+
export type ColshapeKind = "sphere" | "circle" | "box";
|
|
3
|
+
export interface ColshapeShape {
|
|
4
|
+
kind: ColshapeKind;
|
|
5
|
+
center: IVector3;
|
|
6
|
+
radius?: number;
|
|
7
|
+
size?: IVector3;
|
|
8
|
+
}
|
|
9
|
+
export declare function isInsideShape(shape: ColshapeShape, p: IVector3): boolean;
|
|
10
|
+
//# sourceMappingURL=colshape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colshape.d.ts","sourceRoot":"","sources":["../../src/shared/colshape.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,QAAQ,CAAC;CAChB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAyBxE"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export function isInsideShape(shape, p) {
|
|
2
|
+
const c = shape.center;
|
|
3
|
+
switch (shape.kind) {
|
|
4
|
+
case "sphere": {
|
|
5
|
+
const r = shape.radius ?? 1;
|
|
6
|
+
const dx = p.x - c.x, dy = p.y - c.y, dz = p.z - c.z;
|
|
7
|
+
return dx * dx + dy * dy + dz * dz <= r * r;
|
|
8
|
+
}
|
|
9
|
+
case "circle": {
|
|
10
|
+
const r = shape.radius ?? 1;
|
|
11
|
+
const dx = p.x - c.x, dy = p.y - c.y;
|
|
12
|
+
return dx * dx + dy * dy <= r * r; // ignores z
|
|
13
|
+
}
|
|
14
|
+
case "box": {
|
|
15
|
+
const s = shape.size ?? { x: 1, y: 1, z: 1 };
|
|
16
|
+
return (Math.abs(p.x - c.x) <= s.x / 2 &&
|
|
17
|
+
Math.abs(p.y - c.y) <= s.y / 2 &&
|
|
18
|
+
Math.abs(p.z - c.z) <= s.z / 2);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=colshape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colshape.js","sourceRoot":"","sources":["../../src/shared/colshape.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,aAAa,CAAC,KAAoB,EAAE,CAAW;IAC9D,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;YAC5B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EACnB,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EACd,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7C,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;YAC5B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EACnB,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY;QAChD,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACZ,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7C,OAAO,CACN,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAC9B,CAAC;QACH,CAAC;IACF,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { IVector3 } from "./index";
|
|
2
|
+
import type { OrchestrationNet } from "./orchestration";
|
|
3
|
+
export interface LabelData {
|
|
4
|
+
id: number;
|
|
5
|
+
coords: IVector3;
|
|
6
|
+
text: string;
|
|
7
|
+
color?: {
|
|
8
|
+
r: number;
|
|
9
|
+
g: number;
|
|
10
|
+
b: number;
|
|
11
|
+
a?: number;
|
|
12
|
+
};
|
|
13
|
+
scale?: number;
|
|
14
|
+
font?: number;
|
|
15
|
+
drawDistance?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare const LabelNet: OrchestrationNet;
|
|
18
|
+
//# sourceMappingURL=labels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../src/shared/labels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,SAAS;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,QAAQ,EAAE,gBAItB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"labels.js","sourceRoot":"","sources":["../../src/shared/labels.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,QAAQ,GAAqB;IACzC,GAAG,EAAE,gBAAgB;IACrB,MAAM,EAAE,mBAAmB;IAC3B,IAAI,EAAE,iBAAiB;CACvB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { IVector3 } from "./index";
|
|
2
|
+
import type { OrchestrationNet } from "./orchestration";
|
|
3
|
+
export interface MarkerData {
|
|
4
|
+
id: number;
|
|
5
|
+
type: number;
|
|
6
|
+
coords: IVector3;
|
|
7
|
+
color: {
|
|
8
|
+
r: number;
|
|
9
|
+
g: number;
|
|
10
|
+
b: number;
|
|
11
|
+
};
|
|
12
|
+
scale?: IVector3;
|
|
13
|
+
direction?: IVector3;
|
|
14
|
+
rotation?: IVector3;
|
|
15
|
+
alpha?: number;
|
|
16
|
+
bobUpAndDown?: boolean;
|
|
17
|
+
faceCamera?: boolean;
|
|
18
|
+
rotationOrder?: number;
|
|
19
|
+
}
|
|
20
|
+
export declare const MarkerNet: OrchestrationNet;
|
|
21
|
+
//# sourceMappingURL=markers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markers.d.ts","sourceRoot":"","sources":["../../src/shared/markers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,UAAU;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,CAAC;IACjB,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,SAAS,EAAE,gBAIvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markers.js","sourceRoot":"","sources":["../../src/shared/markers.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAC,MAAM,SAAS,GAAqB;IAC1C,GAAG,EAAE,iBAAiB;IACtB,MAAM,EAAE,oBAAoB;IAC5B,IAAI,EAAE,kBAAkB;CACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestration.d.ts","sourceRoot":"","sources":["../../src/shared/orchestration.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY,CAAC,KAAK;IAClC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestration.js","sourceRoot":"","sources":["../../src/shared/orchestration.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IVector3 } from "./index";
|
|
2
|
+
import type { OrchestrationNet } from "./orchestration";
|
|
3
|
+
export interface PickupData {
|
|
4
|
+
id: number;
|
|
5
|
+
coords: IVector3;
|
|
6
|
+
model: number | string;
|
|
7
|
+
radius?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare const PickupNet: OrchestrationNet;
|
|
10
|
+
//# sourceMappingURL=pickups.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pickups.d.ts","sourceRoot":"","sources":["../../src/shared/pickups.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,UAAU;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,QAAQ,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,SAAS,EAAE,gBAIvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pickups.js","sourceRoot":"","sources":["../../src/shared/pickups.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,SAAS,GAAqB;IAC1C,GAAG,EAAE,iBAAiB;IACtB,MAAM,EAAE,oBAAoB;IAC5B,IAAI,EAAE,kBAAkB;CACxB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"blips-internal.d.ts","sourceRoot":"","sources":["../../src/client/blips-internal.ts"],"names":[],"mappings":"AAmBA,wBAAgB,oBAAoB,IAAI,IAAI,CAU3C"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/// <reference types="@citizenfx/client" />
|
|
2
|
-
import { BlipNet } from "../shared/blips";
|
|
3
|
-
const handles = new Map();
|
|
4
|
-
function draw(d) {
|
|
5
|
-
const blip = AddBlipForCoord(d.coords.x, d.coords.y, d.coords.z);
|
|
6
|
-
if (d.sprite !== undefined)
|
|
7
|
-
SetBlipSprite(blip, d.sprite);
|
|
8
|
-
if (d.color !== undefined)
|
|
9
|
-
SetBlipColour(blip, d.color);
|
|
10
|
-
if (d.scale !== undefined)
|
|
11
|
-
SetBlipScale(blip, d.scale);
|
|
12
|
-
if (d.shortRange)
|
|
13
|
-
SetBlipAsShortRange(blip, true);
|
|
14
|
-
if (d.label) {
|
|
15
|
-
BeginTextCommandSetBlipName("STRING");
|
|
16
|
-
AddTextComponentSubstringPlayerName(d.label);
|
|
17
|
-
EndTextCommandSetBlipName(blip);
|
|
18
|
-
}
|
|
19
|
-
handles.set(d.id, blip);
|
|
20
|
-
}
|
|
21
|
-
export function registerBlipHandlers() {
|
|
22
|
-
onNet(BlipNet.add, (d) => draw(d));
|
|
23
|
-
onNet(BlipNet.sync, (list) => list.forEach(draw));
|
|
24
|
-
onNet(BlipNet.remove, (id) => {
|
|
25
|
-
const h = handles.get(id);
|
|
26
|
-
if (h !== undefined) {
|
|
27
|
-
RemoveBlip(h);
|
|
28
|
-
handles.delete(id);
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=blips-internal.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"blips-internal.js","sourceRoot":"","sources":["../../src/client/blips-internal.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,EAAiB,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEzD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE1C,SAAS,IAAI,CAAC,CAAW;IACxB,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACjE,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;QAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAC1D,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS;QAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IACxD,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS;QAAE,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IACvD,IAAI,CAAC,CAAC,UAAU;QAAE,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClD,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACb,2BAA2B,CAAC,QAAQ,CAAC,CAAC;QACtC,mCAAmC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC7C,yBAAyB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,oBAAoB;IACnC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAW,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAU,EAAE,EAAE;QACpC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACrB,UAAU,CAAC,CAAC,CAAC,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC"}
|