#define CORE_NONE 0 #define CORE_RUN 1 #define CORE_STOP 2 #define CORE_PAUSE 3 objectdef oCore inherits oBase { variable bool QuitFlag = FALSE variable bool PauseFlag = FALSE variable int PulsePriority = 50 member State() { if ${This.QuitFlag} { return CORE_STOP } if ${This.PauseFlag} { return CORE_PAUSE } return CORE_RUN } method Pulse() { This.CurrentState:Set[${This.State}] switch ${This.CurrentState} { case CORE_STOP break case CORE_PAUSE break case CORE_RUN This:CorePulse break } } function Run() { This:Echo["Entering core loop"] do { This:Pulse waitframe } while ${This.CurrentState} != CORE_STOP This:Echo["Leaving core loop"] } method CorePulse() { Event[CORE_EVENT_PULSE]:Execute[${This.PulsePriority}] } /* * */ method EventPause(bool Pause) { if ${Pause} { This:Debug["Received pause signal"] } else { This:Debug["Received resume signal"] } This.PauseFlag:Set[${Pause}] } method EventQuit() { This:Debug["Received quit signal"] This.QuitFlag:Set[TRUE] } /* * */ method Plugin() { LavishScript:RegisterEvent[CORE_EVENT_PULSE] LavishScript:RegisterEvent[CORE_EVENT_PAUSE] LavishScript:RegisterEvent[CORE_EVENT_STOP] Event[CORE_EVENT_PAUSE]:AttachAtom[${This.ObjectName}:EventPause] Event[CORE_EVENT_STOP]:AttachAtom[${This.ObjectName}:EventQuit] } method Shutdown() { Event[CORE_EVENT_PAUSE]:DetachAtom[${This.ObjectName}:EventPause] Event[CORE_EVENT_STOP]:DetachAtom[${This.ObjectName}:EventQuit] Event[CORE_EVENT_PULSE]:Unregister Event[CORE_EVENT_PAUSE]:Unregister Event[CORE_EVENT_STOP]:Unregister } }