mirror of
https://github.com/CommunityOx/ox_lib.git
synced 2026-08-18 15:36:02 +01:00
feat(package): points system
This commit is contained in:
@@ -12,3 +12,4 @@ export * from './interface/radial';
|
|||||||
export * from './streaming';
|
export * from './streaming';
|
||||||
export * from './vehicleProperties';
|
export * from './vehicleProperties';
|
||||||
export * from './callback';
|
export * from './callback';
|
||||||
|
export * from './points';
|
||||||
|
|||||||
105
package/client/resource/points/index.ts
Normal file
105
package/client/resource/points/index.ts
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
import { Vector3 } from '@nativewrappers/client';
|
||||||
|
|
||||||
|
let points: Point[] = [];
|
||||||
|
let nearbyPoints: Point[] = [];
|
||||||
|
let nearbyCount: number = 0;
|
||||||
|
let closestPoint: Point | undefined;
|
||||||
|
let tick: number | undefined;
|
||||||
|
|
||||||
|
interface LibPoint {
|
||||||
|
coords: number[];
|
||||||
|
distance: number;
|
||||||
|
onEnter?: () => void;
|
||||||
|
onExit?: () => void;
|
||||||
|
nearby?: () => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Point {
|
||||||
|
id: number = 0;
|
||||||
|
coords: Vector3;
|
||||||
|
distance: number = 0;
|
||||||
|
onEnter?: () => void;
|
||||||
|
onExit?: () => void;
|
||||||
|
nearby?: () => void;
|
||||||
|
inside: boolean = false;
|
||||||
|
currentDistance?: number;
|
||||||
|
isClosest: boolean = false;
|
||||||
|
|
||||||
|
constructor(point: LibPoint) {
|
||||||
|
this.id = points.length + 1;
|
||||||
|
this.coords = Vector3.fromArray(point.coords);
|
||||||
|
this.distance = point.distance;
|
||||||
|
this.onEnter = point.onEnter;
|
||||||
|
this.onExit = point.onExit;
|
||||||
|
this.nearby = point.nearby;
|
||||||
|
points.push(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
remove = () => {
|
||||||
|
points = points.filter((point) => point.id !== this.id);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
setInterval(() => {
|
||||||
|
if (nearbyCount !== 0) {
|
||||||
|
nearbyPoints = [];
|
||||||
|
nearbyCount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const coords = Vector3.fromArray(GetEntityCoords(PlayerPedId(), false));
|
||||||
|
|
||||||
|
if (closestPoint && coords.distance(closestPoint.coords) > closestPoint.distance) {
|
||||||
|
closestPoint = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < points.length; i++) {
|
||||||
|
const point = points[i];
|
||||||
|
const distance = coords.distance(point.coords);
|
||||||
|
|
||||||
|
if (distance <= point.distance) {
|
||||||
|
point.currentDistance = distance;
|
||||||
|
|
||||||
|
if (closestPoint && closestPoint.currentDistance) {
|
||||||
|
if (distance < closestPoint.currentDistance) {
|
||||||
|
closestPoint.isClosest = false;
|
||||||
|
point.isClosest = true;
|
||||||
|
closestPoint = point;
|
||||||
|
}
|
||||||
|
} else if (distance < point.distance) {
|
||||||
|
point.isClosest = true;
|
||||||
|
closestPoint = point;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (point.nearby) {
|
||||||
|
nearbyCount++;
|
||||||
|
nearbyPoints[nearbyCount - 1] = point;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (point.onEnter && !point.inside) {
|
||||||
|
point.inside = true;
|
||||||
|
point.onEnter();
|
||||||
|
}
|
||||||
|
} else if (point.currentDistance) {
|
||||||
|
if (point.onExit) point.onExit();
|
||||||
|
point.inside = false;
|
||||||
|
point.currentDistance = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!tick) {
|
||||||
|
if (nearbyCount !== 0) {
|
||||||
|
tick = setTick(() => {
|
||||||
|
for (let i = 0; i < nearbyCount; i++) {
|
||||||
|
const point = nearbyPoints[i];
|
||||||
|
|
||||||
|
if (point && point.nearby) {
|
||||||
|
point.nearby();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if (nearbyCount === 0) {
|
||||||
|
clearTick(tick);
|
||||||
|
tick = undefined;
|
||||||
|
}
|
||||||
|
}, 300);
|
||||||
@@ -26,6 +26,7 @@
|
|||||||
"@citizenfx/client": "2.0.5885-1",
|
"@citizenfx/client": "2.0.5885-1",
|
||||||
"@citizenfx/server": "2.0.5885-1",
|
"@citizenfx/server": "2.0.5885-1",
|
||||||
"@fortawesome/fontawesome-common-types": "6.1.1",
|
"@fortawesome/fontawesome-common-types": "6.1.1",
|
||||||
|
"@nativewrappers/client": "^1.7.33",
|
||||||
"@types/node": "16.9.1",
|
"@types/node": "16.9.1",
|
||||||
"@types/react": "^18.0.26",
|
"@types/react": "^18.0.26",
|
||||||
"typescript": "^4.9.4"
|
"typescript": "^4.9.4"
|
||||||
|
|||||||
6
package/pnpm-lock.yaml
generated
6
package/pnpm-lock.yaml
generated
@@ -4,6 +4,7 @@ specifiers:
|
|||||||
'@citizenfx/client': 2.0.5885-1
|
'@citizenfx/client': 2.0.5885-1
|
||||||
'@citizenfx/server': 2.0.5885-1
|
'@citizenfx/server': 2.0.5885-1
|
||||||
'@fortawesome/fontawesome-common-types': 6.1.1
|
'@fortawesome/fontawesome-common-types': 6.1.1
|
||||||
|
'@nativewrappers/client': ^1.7.33
|
||||||
'@types/node': 16.9.1
|
'@types/node': 16.9.1
|
||||||
'@types/react': ^18.0.26
|
'@types/react': ^18.0.26
|
||||||
prettier: ^2.8.1
|
prettier: ^2.8.1
|
||||||
@@ -13,6 +14,7 @@ dependencies:
|
|||||||
'@citizenfx/client': 2.0.5885-1
|
'@citizenfx/client': 2.0.5885-1
|
||||||
'@citizenfx/server': 2.0.5885-1
|
'@citizenfx/server': 2.0.5885-1
|
||||||
'@fortawesome/fontawesome-common-types': 6.1.1
|
'@fortawesome/fontawesome-common-types': 6.1.1
|
||||||
|
'@nativewrappers/client': 1.7.33
|
||||||
'@types/node': 16.9.1
|
'@types/node': 16.9.1
|
||||||
'@types/react': 18.0.26
|
'@types/react': 18.0.26
|
||||||
typescript: 4.9.4
|
typescript: 4.9.4
|
||||||
@@ -36,6 +38,10 @@ packages:
|
|||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/@nativewrappers/client/1.7.33:
|
||||||
|
resolution: {integrity: sha512-phuBBGdDPxZiZyw5CaFs1XWfvllnEtwATMdLaNucwMofVg/O/FjlP1bTUq4SOm4qhSZ4Zdo351ijHzBSIbZs6g==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@types/node/16.9.1:
|
/@types/node/16.9.1:
|
||||||
resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==}
|
resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|||||||
Reference in New Issue
Block a user