Adding a playersStore
The playerStore can be useful to get the details of a given player from its ID.
This commit is contained in:
parent
194d6a6414
commit
46e6917df6
8 changed files with 62 additions and 24 deletions
43
front/src/Stores/PlayersStore.ts
Normal file
43
front/src/Stores/PlayersStore.ts
Normal file
|
@ -0,0 +1,43 @@
|
|||
import { writable } from "svelte/store";
|
||||
import type {PlayerInterface} from "../Phaser/Game/PlayerInterface";
|
||||
import type {RoomConnection} from "../Connexion/RoomConnection";
|
||||
|
||||
/**
|
||||
* A store that contains the list of players currently known.
|
||||
*/
|
||||
function createPlayersStore() {
|
||||
let players = new Map<number, PlayerInterface>();
|
||||
|
||||
const { subscribe, set, update } = writable(players);
|
||||
|
||||
return {
|
||||
subscribe,
|
||||
connectToRoomConnection: (roomConnection: RoomConnection) => {
|
||||
players = new Map<number, PlayerInterface>();
|
||||
set(players);
|
||||
roomConnection.onUserJoins((message) => {
|
||||
update((users) => {
|
||||
users.set(message.userId, {
|
||||
userId: message.userId,
|
||||
name: message.name,
|
||||
characterLayers: message.characterLayers,
|
||||
visitCardUrl: message.visitCardUrl,
|
||||
companion: message.companion,
|
||||
});
|
||||
return users;
|
||||
});
|
||||
});
|
||||
roomConnection.onUserLeft((userId) => {
|
||||
update((users) => {
|
||||
users.delete(userId);
|
||||
return users;
|
||||
});
|
||||
});
|
||||
},
|
||||
getPlayerById(userId: number): PlayerInterface|undefined {
|
||||
return players.get(userId);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export const playersStore = createPlayersStore();
|
Loading…
Add table
Add a link
Reference in a new issue