-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathGameRoom.ts
74 lines (64 loc) · 3.31 KB
/
GameRoom.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import { Room, Client } from "colyseus";
import { StateHandler } from "./StateHandler";
import { Player } from "../entities/Player";
export class GameRoom extends Room<StateHandler> {
maxClients = 16;
onCreate (options) {
this.setSimulationInterval(() => this.onUpdate());
this.setState(new StateHandler());
this.onMessage("position", (client, message) => {
this.state.players.get(client.sessionId).newCoordinate = message;
});
this.onMessage("rotation", (client, message) => {
this.state.players.get(client.sessionId).newRotation = message;
});
this.onMessage("notes", (client, message) => {
this.state.players.forEach((player, sessionId) => {
const keys = [player.keyA1, player.keyA2, player.keyA3, player.keyA4,
player.keyA5, player.keyA6, player.keyA7, player.keyA8, player.keyA9,
player.keyA10, player.keyA11, player.keyA12, player.keyB1, player.keyB2, player.keyB3,
player.keyB4, player.keyB5, player.keyB6, player.keyB7, player.keyB8,
player.keyB9, player.keyB10, player.keyB11, player.keyB12, player.keyC1, player.keyC2,
player.keyC3, player.keyC4, player.keyC5, player.keyC6, player.keyC7,
player.keyC8, player.keyC9, player.keyC10, player.keyC11, player.keyC12, player.keyD1,
player.keyD2, player.keyD3, player.keyD4, player.keyD5, player.keyD6,
player.keyD7, player.keyD8, player.keyD9, player.keyD10, player.keyD11, player.keyD12]
if (message.instrument == 'acoustic_grand_piano') {
keys[message.noteNumber].ispressed = Boolean(message.ispressed);
keys[message.noteNumber].pressedBy = message.pressedBy;
} else if (message.instrument == 'koto') {
keys[message.noteNumber].ispressed2 = Boolean(message.ispressed);
keys[message.noteNumber].pressedBy2 = message.pressedBy;
} else if (message.instrument == 'gunshot') {
keys[message.noteNumber].ispressed3 = Boolean(message.ispressed);
keys[message.noteNumber].pressedBy3 = message.pressedBy;
} else if (message.instrument == 'woodblock') {
keys[message.noteNumber].ispressed4 = Boolean(message.ispressed);
keys[message.noteNumber].pressedBy4 = message.pressedBy;
}
});
});
}
onJoin (client) {
const player = new Player();
player.name = `Player ${ this.clients.length }`;
player.position.x = Math.random();
player.position.y = Math.random();
player.position.z = Math.random();
this.state.players.set(client.sessionId, player);
}
onUpdate () {
this.state.players.forEach((player, sessionId) => {
player.position.x = player.newCoordinate.x;
player.position.z = player.newCoordinate.z;
player.rotation.x = player.newRotation.x;
player.rotation.y = player.newRotation.y;
player.rotation.z = player.newRotation.z;
});
}
onLeave (client: Client) {
this.state.players.delete(client.sessionId);
}
onDispose () {
}
}