aboutsummaryrefslogtreecommitdiff
path: root/internal/world/trigger.go
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-07-08 19:59:14 -0400
committerhistoria <[not public]>2026-07-08 19:59:14 -0400
commit09d325dcf5e779eab5550d3fd3377bde50101428 (patch)
treea433be903aabbf1d2eadce2aacdac12a9eb8dde0 /internal/world/trigger.go
parent9184377301c2604e003f36426788c032fb0ca524 (diff)
downloadthehouseoficarus-09d325dcf5e779eab5550d3fd3377bde50101428.tar.gz
feat: unify on use, on look, and on kill. all support same conditions/actions now.
Diffstat (limited to 'internal/world/trigger.go')
-rw-r--r--internal/world/trigger.go65
1 files changed, 12 insertions, 53 deletions
diff --git a/internal/world/trigger.go b/internal/world/trigger.go
index e31a5f9..e7f3b75 100644
--- a/internal/world/trigger.go
+++ b/internal/world/trigger.go
@@ -1,61 +1,20 @@
package world
-import (
- "gopkg.in/yaml.v3"
-)
+import "thehouseoficarus/internal/behavior"
+
+// SpawnMobConfig is an alias for the behavior.SpawnMobConfig so callers that
+// historically referenced world.SpawnMobConfig continue to compile.
+type SpawnMobConfig = behavior.SpawnMobConfig
type TriggerDef struct {
- ID string `yaml:"id"`
- OnPlayerFlag string `yaml:"on_player_flag"`
- OnGlobalFlag string `yaml:"on_global_flag"`
- Value any `yaml:"value"`
- Room int `yaml:"room"`
- Steps []TriggerStep `yaml:"steps"`
+ ID string `yaml:"id"`
+ OnPlayerFlag string `yaml:"on_player_flag"`
+ OnGlobalFlag string `yaml:"on_global_flag"`
+ Value any `yaml:"value"`
+ Room int `yaml:"room"`
+ Steps []behavior.StepAction `yaml:"steps"`
}
func (t *TriggerDef) IsPlayerFlagTrigger() bool { return t.OnPlayerFlag != "" }
-func (t *TriggerDef) IsGlobalFlagTrigger() bool { return t.OnGlobalFlag != "" }
-
-type TriggerStep struct {
- Delay int `yaml:"delay"`
- Message string `yaml:"message"`
- Broadcast string `yaml:"broadcast"`
- BroadcastGlobal string `yaml:"broadcast_global"`
- SetGlobalFlags map[string]any `yaml:"set_global_flags"`
- SetPlayerFlags map[string]any `yaml:"set_player_flags"`
- SpawnMob *SpawnMobConfig `yaml:"spawn_mob"`
- GiveItem string `yaml:"give_item"`
- TakeItem string `yaml:"take_item"`
- Teleport int `yaml:"teleport"`
- Heal int `yaml:"heal"`
- DespawnMob string `yaml:"despawn_mob"`
-}
-
-type SpawnMobConfig struct {
- ID string `yaml:"id"`
- OwnerOnly bool `yaml:"owner_only"`
- DespawnOnLeave bool `yaml:"despawn_on_leave"`
- DespawnRooms []int `yaml:"despawn_rooms"`
- DespawnTicks float64 `yaml:"despawn_ticks"`
-}
-
-func (s *SpawnMobConfig) UnmarshalYAML(value *yaml.Node) error {
- if value.Kind == yaml.ScalarNode {
- var id string
- if err := value.Decode(&id); err != nil {
- return err
- }
- s.ID = id
- return nil
- }
- type raw SpawnMobConfig
- return value.Decode((*raw)(s))
-}
-
-func (t TriggerStep) IsTimed() bool {
- return t.Delay > 0 || len(t.SetGlobalFlags) > 0 || len(t.SetPlayerFlags) > 0 ||
- t.Message != "" || t.Broadcast != "" || t.BroadcastGlobal != "" ||
- t.SpawnMob != nil || t.GiveItem != "" || t.TakeItem != "" ||
- t.Teleport != 0 || t.Heal != 0 || t.DespawnMob != ""
-}
+func (t *TriggerDef) IsGlobalFlagTrigger() bool { return t.OnGlobalFlag != "" } \ No newline at end of file