diff options
Diffstat (limited to 'internal/world/world.go')
| -rw-r--r-- | internal/world/world.go | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/internal/world/world.go b/internal/world/world.go index ee06142..0c992ad 100644 --- a/internal/world/world.go +++ b/internal/world/world.go @@ -126,9 +126,46 @@ func (w *World) RoomIndex() map[int]bool { return ids } +func (w *World) RebuildRoomIndex(dataDir string) { + w.mu.Lock() + defer w.mu.Unlock() + w.roomPathIndex = behavior.BuildRoomIndex(filepath.Join(dataDir, "rooms")) +} + +func (w *World) AddRoomPath(id int, path string) { + w.mu.Lock() + defer w.mu.Unlock() + w.roomPathIndex[id] = path +} + +func (w *World) GetRoomPath(id int) (string, bool) { + path, ok := w.roomPathIndex[id] + return path, ok +} + +func (w *World) ClearHazardCache() { + w.hazardMu.Lock() + defer w.hazardMu.Unlock() + w.hazardPathIndex = nil + w.hazardDefs = make(map[string]*HazardDef) +} + func (w *World) Tick() { w.mu.Lock() defer w.mu.Unlock() w.tickGroundItems() w.tickObjStatesLocked() } + +func (w *World) ClearRoomState(roomID int) { + w.mu.Lock() + defer w.mu.Unlock() + delete(w.groundItems, roomID) + delete(w.seeded, roomID) + prefix := fmt.Sprintf("%d:", roomID) + for k := range w.objStates { + if strings.HasPrefix(k, prefix) { + delete(w.objStates, k) + } + } +} |
