aboutsummaryrefslogtreecommitdiff
path: root/internal/game/game.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/game/game.go')
-rw-r--r--internal/game/game.go18
1 files changed, 18 insertions, 0 deletions
diff --git a/internal/game/game.go b/internal/game/game.go
index 320304f..acd2924 100644
--- a/internal/game/game.go
+++ b/internal/game/game.go
@@ -52,6 +52,7 @@ type Game struct {
Hub *net.Hub
Flags *FlagStore
Combat *combat.Tracker
+ TriggerStore *world.TriggerStore
queue *CommandQueue
safespot *SafespotManager
ValidationConfig config.ValidationConfig
@@ -84,6 +85,7 @@ func New(dataDir string, colorConfig *config.ColorsConfig, valConfig config.Vali
},
Flags: NewFlagStore(),
Combat: combat.NewTracker(),
+ TriggerStore: world.NewTriggerStore(),
queue: NewCommandQueue(),
safespot: NewSafespotManager(),
ValidationConfig: valConfig,
@@ -97,6 +99,7 @@ func New(dataDir string, colorConfig *config.ColorsConfig, valConfig config.Vali
g.LoadMods()
g.LoadTechs()
g.buildCraftIndex()
+ g.seedRoomTriggers()
g.ValidateAndLog()
return g
}
@@ -116,6 +119,9 @@ func (g *Game) SetHub(hub *net.Hub) {
}
}
})
+ g.Flags.OnChange(func(name string, value any) {
+ g.TriggerStore.FireWorld(name, value)
+ })
}
func (g *Game) HandleSession(sess *net.Session, input string) {
@@ -334,6 +340,18 @@ func (g *Game) buildCraftIndex() {
g.CraftIndex.Build(items)
}
+func (g *Game) seedRoomTriggers() {
+ g.TriggerStore.LoadGlobal(g.DataDir)
+ roomIndex := g.World.RoomIndex()
+ for id := range roomIndex {
+ room, err := g.World.LoadRoom(id)
+ if err != nil || len(room.Triggers) == 0 {
+ continue
+ }
+ g.TriggerStore.SeedRoomTriggers(id, room.Triggers)
+ }
+}
+
type pendingDepletion struct {
instanceKey string
objDefID string