rendered paste body#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
}
}