laneya2

cave exploration game
git clone https://git.ce9e.org/laneya2.git

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;