Skip to content

Commit

Permalink
feat(package): points system
Browse files Browse the repository at this point in the history
  • Loading branch information
LukeWasTakenn committed Feb 19, 2023
1 parent 8eca169 commit 7ff9f93
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 0 deletions.
1 change: 1 addition & 0 deletions package/client/resource/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ export * from './interface/radial';
export * from './streaming';
export * from './vehicleProperties';
export * from './callback';
export * from './points';
105 changes: 105 additions & 0 deletions package/client/resource/points/index.ts
Original file line number Diff line number Diff line change
@@ -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);
1 change: 1 addition & 0 deletions package/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
"@citizenfx/client": "2.0.5885-1",
"@citizenfx/server": "2.0.5885-1",
"@fortawesome/fontawesome-common-types": "6.1.1",
"@nativewrappers/client": "^1.7.33",
"@types/node": "16.9.1",
"@types/react": "^18.0.26",
"typescript": "^4.9.4"
Expand Down
6 changes: 6 additions & 0 deletions package/pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 7ff9f93

Please sign in to comment.