All pastes #247328 Raw Edit

Miscellany

public text v1 · immutable
#247328 ·published 2006-11-13 10:08 UTC
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
	}

}