Fix demo game fog layer accumulation and web IDBFS mkdir race
- Add stairs position to occupied set to prevent enemy/item overlap
- Remove old fog layer before creating new one on level transitions
- Reset fog_layer reference on new game to avoid stale grid reference
- Wrap FS.mkdir('/save') in try/catch for page reload resilience
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
cc50424372
commit
7d1066a5d5
2 changed files with 6 additions and 2 deletions
|
|
@ -304,6 +304,7 @@ class Game:
|
||||||
)
|
)
|
||||||
self.grid.entities.append(stairs)
|
self.grid.entities.append(stairs)
|
||||||
self.stairs_pos = (sx, sy)
|
self.stairs_pos = (sx, sy)
|
||||||
|
self.occupied.add((sx, sy))
|
||||||
|
|
||||||
# Place enemies (more enemies on deeper levels)
|
# Place enemies (more enemies on deeper levels)
|
||||||
num_enemies = min(3 + self.depth * 2, 15)
|
num_enemies = min(3 + self.depth * 2, 15)
|
||||||
|
|
@ -357,7 +358,9 @@ class Game:
|
||||||
self.items.append({"entity": item, "kind": "treasure", "pos": pos})
|
self.items.append({"entity": item, "kind": "treasure", "pos": pos})
|
||||||
self.occupied.add(pos)
|
self.occupied.add(pos)
|
||||||
|
|
||||||
# Set up fog of war
|
# Set up fog of war (remove old layer first to prevent accumulation)
|
||||||
|
if self.fog_layer is not None:
|
||||||
|
self.grid.remove_layer(self.fog_layer)
|
||||||
self.fog_layer = mcrfpy.ColorLayer(name="fog", z_index=10)
|
self.fog_layer = mcrfpy.ColorLayer(name="fog", z_index=10)
|
||||||
self.grid.add_layer(self.fog_layer)
|
self.grid.add_layer(self.fog_layer)
|
||||||
self.fog_layer.fill(mcrfpy.Color(0, 0, 0, 255))
|
self.fog_layer.fill(mcrfpy.Color(0, 0, 0, 255))
|
||||||
|
|
@ -521,6 +524,7 @@ class Game:
|
||||||
self.depth = 1
|
self.depth = 1
|
||||||
self.score = 0
|
self.score = 0
|
||||||
self.player = None
|
self.player = None
|
||||||
|
self.fog_layer = None # Old grid is being discarded
|
||||||
# Remove overlay
|
# Remove overlay
|
||||||
if hasattr(self, 'game_over_overlay'):
|
if hasattr(self, 'game_over_overlay'):
|
||||||
# Rebuild UI from scratch
|
# Rebuild UI from scratch
|
||||||
|
|
|
||||||
|
|
@ -362,7 +362,7 @@
|
||||||
|
|
||||||
var Module = {
|
var Module = {
|
||||||
preRun: [function() {
|
preRun: [function() {
|
||||||
FS.mkdir('/save');
|
try { FS.mkdir('/save'); } catch(e) { /* already exists */ }
|
||||||
FS.mount(IDBFS, {}, '/save');
|
FS.mount(IDBFS, {}, '/save');
|
||||||
Module.addRunDependency('idbfs-restore');
|
Module.addRunDependency('idbfs-restore');
|
||||||
FS.syncfs(true, function(err) {
|
FS.syncfs(true, function(err) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue