Skip to content

Commit

Permalink
feat: refactor occupants to not use alt passengers map (#34)
Browse files Browse the repository at this point in the history
* feat: refactor occupants to not use alt passengers map

* fix: convert seats to mp

* fix: const assignment
  • Loading branch information
vadzz-dev authored Sep 3, 2024
1 parent e82efc5 commit a30695a
Showing 1 changed file with 46 additions and 14 deletions.
60 changes: 46 additions & 14 deletions bindings/src/server/entities/Vehicle.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as alt from 'alt-server';
import {SyncedMetaProxy} from '../../shared/meta.js';
import mp from '../../shared/mp.js';
import {deg2rad, hashIfNeeded, mpSeatToAlt, rad2deg, TemporaryContainer} from '../../shared/utils.js';
import {deg2rad, hashIfNeeded, altSeatToMp, rad2deg, TemporaryContainer} from '../../shared/utils.js';
import {_Entity} from './Entity.js';
import {ServerPool} from '../pools/ServerPool';
import {EntityGetterView} from '../../shared/pools/EntityGetterView';
Expand Down Expand Up @@ -254,22 +254,13 @@ export class _Vehicle extends _Entity {
}

getOccupant(id) {
if (mpSeatToAlt(id) === 1) return this.alt.driver?.mp;
// TODO: implement in core

return this.alt.passengers?.[mpSeatToAlt(id)]?.mp;
return this.__occupantsMap?.get(id);
}

getOccupants() {
// TODO: implement in core
const occupants = [];
const driver = this.alt.driver;
if (driver) occupants.push(driver.mp);

const passengers = Object.values(this.alt.passengers);
if (passengers?.length) occupants.push(...passengers.map(p => p.mp));

return occupants;
return this.__occupantsMap !== undefined
? Array.from(this.__occupantsMap.values())
: [];
}

// TODO: getPaint
Expand Down Expand Up @@ -401,3 +392,44 @@ alt.on('vehicleSiren', (vehicle, player, state) => {
alt.on('vehicleDestroy', (vehicle) => {
mp.events.dispatchLocal('vehicleDeath', vehicle.mp);
});

alt.on('playerEnteredVehicle', (player, vehicle, seat) => {
let occupants = vehicle.mp.__occupantsMap;
if (!occupants) {
occupants = new Map();
vehicle.mp.__occupantsMap = occupants;
}

occupants.set(altSeatToMp(seat), player);
});

alt.on('playerLeftVehicle', (player, vehicle, seat) => {
let occupants = vehicle.mp.__occupantsMap;
if (!occupants) {
occupants = new Map();
vehicle.mp.__occupantsMap = occupants;
}

occupants.forEach((p, s) => {
if (p === player) {
occupants.delete(s);
}
});
});

alt.on('playerChangedVehicleSeat', (player, vehicle, oldSeat, newSeat) => {
let occupants = vehicle.mp.__occupantsMap;
if (!occupants) {
occupants = new Map();
vehicle.mp.__occupantsMap = occupants;
}

occupants.delete(altSeatToMp(oldSeat));
occupants.set(altSeatToMp(newSeat), player);
});

alt.on('removeEntity', (entity) => {
if (entity instanceof alt.Vehicle) {
delete entity.mp.__occupantsMap;
}
});

0 comments on commit a30695a

Please sign in to comment.