aboutsummaryrefslogtreecommitdiff
path: root/internal/game/game.go
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-06-25 20:33:47 -0400
committerhistoria <[not public]>2026-06-25 20:33:47 -0400
commit84d74ca4351a97148ad8339676f9df7946bc21fb (patch)
treea9f50ac56e8bbcdf2b307ef6f7143b67bce46c61 /internal/game/game.go
parentc55d0e4150b23f2c5c9f96bbc3d4dc2fc6dbaa36 (diff)
downloadthehouseoficarus-84d74ca4351a97148ad8339676f9df7946bc21fb.tar.gz
feat: trigger system for scripted events added.
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