- commit
- e9f8f9a653f2443e6b788c860361efba02b25872
- parent
- 68543081ff6b75d8c677efe5e57d8424db178d2b
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2024-10-05 23:06
use each players' line of sight
Diffstat
| M | game.go | 22 | ++++++++++++---------- |
| M | player.go | 6 | ++++++ |
| M | static/main.js | 31 | ++++++++++++++++--------------- |
3 files changed, 34 insertions, 25 deletions
diff --git a/game.go b/game.go
@@ -275,22 +275,24 @@ func (game *Game) run() {
275 275 }
276 276 for p := range game.Players {
277 277 player.Enqueue(Message{
278 -1 "action": "create",
279 -1 "type": "player",
280 -1 "rune": "@",
281 -1 "id": p.Id,
282 -1 "pos": p.Pos,
-1 278 "action": "create",
-1 279 "type": "player",
-1 280 "rune": "@",
-1 281 "id": p.Id,
-1 282 "pos": p.Pos,
-1 283 "lineOfSight": p.LineOfSight,
283 284 })
284 285 }
285 286
286 287 game.Players[player] = true
287 288
288 289 game.Enqueue(Message{
289 -1 "action": "create",
290 -1 "type": "player",
291 -1 "rune": "@",
292 -1 "id": player.Id,
293 -1 "pos": player.Pos,
-1 290 "action": "create",
-1 291 "type": "player",
-1 292 "rune": "@",
-1 293 "id": player.Id,
-1 294 "pos": player.Pos,
-1 295 "lineOfSight": player.LineOfSight,
294 296 })
295 297 case player := <-game.unregister:
296 298 game.removePlayer(player)
diff --git a/player.go b/player.go
@@ -65,6 +65,12 @@ func (player *Player) CommitStats() {
65 65 "lineOfSight": player.LineOfSight,
66 66 "speed": player.Speed,
67 67 })
-1 68
-1 69 player.Game.Enqueue(Message{
-1 70 "action": "setLineOfSight",
-1 71 "id": player.Id,
-1 72 "value": player.LineOfSight,
-1 73 })
68 74 }
69 75
70 76 func (player *Player) ApplyItem(item Item) {
diff --git a/static/main.js b/static/main.js
@@ -65,11 +65,10 @@ var game = {
65 65 }
66 66 },
67 67
68 -1 inView(a, b) {
-1 68 inView(a, b, r) {
69 69 // check radius
70 70 var dx = a.x - b.x;
71 71 var dy = a.y - b.y;
72 -1 var r = this.stats.lineOfSight;
73 72 if (dx * dx + dy * dy >= r * r) {
74 73 return false;
75 74 }
@@ -128,7 +127,7 @@ var game = {
128 127 }
129 128
130 129 var inView = () => Object.values(this.objects).some(
131 -1 obj => obj.type === 'player' && this.inView(obj.pos, {x, y})
-1 130 obj => obj.type === 'player' && this.inView(obj.pos, {x, y}, obj.lineOfSight)
132 131 );
133 132
134 133 var objs = Object.values(this.objects).filter(obj => x === obj.pos.x && y === obj.pos.y);
@@ -149,13 +148,12 @@ var game = {
149 148 return [' ', -1];
150 149 },
151 150
152 -1 updateSeen(pos) {
153 -1 var r = this.stats.lineOfSight;
-1 151 updateSeen(pos, r) {
154 152 for (let dy = -r; dy <= r; dy++) {
155 153 const y = pos.y + dy;
156 154 for (let dx = -r; dx <= r; dx++) {
157 155 const x = pos.x + dx;
158 -1 if (!this.seen[[x, y]] && this.inView(pos, {x, y})) {
-1 156 if (!this.seen[[x, y]] && this.inView(pos, {x, y}, r)) {
159 157 this.seen[[x, y]] = true;
160 158 }
161 159 }
@@ -359,18 +357,21 @@ socket.onmessage = function(event) {
359 357 }
360 358 }
361 359 } else if (msg.action === 'create') {
362 -1 game.objects[msg.id] = {
363 -1 type: msg.type,
364 -1 pos: msg.pos,
365 -1 rune: msg.rune,
366 -1 };
-1 360 game.objects[msg.id] = msg;
367 361 if (msg.type === 'player') {
368 -1 game.updateSeen(msg.pos);
-1 362 game.updateSeen(msg.pos, msg.lineOfSight);
369 363 }
370 364 } else if (msg.action === 'setPosition') {
371 -1 game.objects[msg.id].pos = msg.pos;
372 -1 if (game.objects[msg.id].type === 'player') {
373 -1 game.updateSeen(msg.pos);
-1 365 const obj = game.objects[msg.id];
-1 366 obj.pos = msg.pos;
-1 367 if (obj.type === 'player') {
-1 368 game.updateSeen(obj.pos, obj.lineOfSight);
-1 369 }
-1 370 } else if (msg.action === 'setLineOfSight') {
-1 371 const obj = game.objects[msg.id];
-1 372 obj.lineOfSight = msg.value;
-1 373 if (obj.type === 'player') {
-1 374 game.updateSeen(obj.pos, obj.lineOfSight);
374 375 }
375 376 } else if (msg.action === 'setStats') {
376 377 game.stats = msg;