package scripting import ( "git.kirsle.net/SketchyMaze/doodle/pkg/scripting/api" "git.kirsle.net/go/render" ) /* RegisterEventHooks attaches the supervisor level event hooks into a JS VM. Names registered: - EndLevel(): for a doodad to exit the level. Panics if the OnLevelExit handler isn't defined. - FailLevel(): for a doodad to cause a level failure. - SetCheckpoint(): update the player's respawn location. */ func RegisterEventHooks(s *Supervisor, vm *VM) { api.GameplayLevelControl{ EndLevel: func() { if s.onLevelFail == nil { panic("JS FailLevel(): No OnLevelFail handler attached to script supervisor") } s.onLevelExit() }, FailLevel: func(message string) { if s.onLevelFail == nil { panic("JS FailLevel(): No OnLevelFail handler attached to script supervisor") } s.onLevelFail(message) }, SetCheckpoint: func(p render.Point) { if s.onSetCheckpoint == nil { panic("JS SetCheckpoint(): No OnSetCheckpoint handler attached to script supervisor") } s.onSetCheckpoint(p) }, }.Register(vm.vm) } // OnLevelExit registers an event hook for when a Level Exit doodad is reached. func (s *Supervisor) OnLevelExit(handler func()) { s.onLevelExit = handler } // OnLevelFail registers an event hook for level failures (doodads killing the player). func (s *Supervisor) OnLevelFail(handler func(string)) { s.onLevelFail = handler } // OnSetCheckpoint registers an event hook for setting player checkpoints. func (s *Supervisor) OnSetCheckpoint(handler func(render.Point)) { s.onSetCheckpoint = handler }