mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-11-01 01:07:54 +00:00
90 lines
2.8 KiB
Python
90 lines
2.8 KiB
Python
|
"""StateData module: contains StateData class"""
|
||
|
|
||
|
__all__ = ['StateData']
|
||
|
|
||
|
from direct.directnotify.DirectNotifyGlobal import directNotify
|
||
|
from direct.showbase.DirectObject import DirectObject
|
||
|
|
||
|
from direct.directnotify import DirectNotifyGlobal
|
||
|
|
||
|
class StateData(DirectObject):
|
||
|
"""
|
||
|
A StateData is a base class for a single state within a Finite
|
||
|
State Machine (ClassicFSM).
|
||
|
"""
|
||
|
|
||
|
notify = directNotify.newCategory('StateData')
|
||
|
|
||
|
def __init__(self, doneEvent):
|
||
|
self.doneEvent = doneEvent
|
||
|
self.doneStatus = None
|
||
|
self.isLoaded = 0
|
||
|
self.isEntered = 0
|
||
|
|
||
|
def enter(self):
|
||
|
"""
|
||
|
Enters the StateData. This makes it active in whatever sense
|
||
|
this applies. Returns true if this is a change (i.e. it was
|
||
|
not previously entered), or false if this is the same (i.e. it
|
||
|
was already entered).
|
||
|
"""
|
||
|
if self.isEntered:
|
||
|
return 0
|
||
|
if not self.isLoaded:
|
||
|
self.notify.warning("entered StateData before it was loaded")
|
||
|
self.load()
|
||
|
self.isEntered = 1
|
||
|
StateData.notify.debug('enter()')
|
||
|
return 1
|
||
|
|
||
|
def exit(self):
|
||
|
"""
|
||
|
Exits the StateData. Returns true if this is a change
|
||
|
(i.e. it was previously entered), or false if this is the same
|
||
|
(i.e. it was already exited).
|
||
|
"""
|
||
|
if not self.isEntered:
|
||
|
return 0
|
||
|
self.isEntered = 0
|
||
|
StateData.notify.debug('exit()')
|
||
|
return 1
|
||
|
|
||
|
def load(self):
|
||
|
"""
|
||
|
Loads the StateData. This loads whatever assets are needed
|
||
|
from disk, and otherwise prepares the StateData for being
|
||
|
entered, without actually entering it. Returns true if this
|
||
|
is a change (i.e. it was not already loaded), or false if this
|
||
|
is the same (i.e. it was previously loaded).
|
||
|
"""
|
||
|
if self.isLoaded:
|
||
|
return 0
|
||
|
self.isLoaded = 1
|
||
|
StateData.notify.debug('load()')
|
||
|
return 1
|
||
|
|
||
|
def unload(self):
|
||
|
"""
|
||
|
Unloads the StateData. This frees whatever assets were loaded
|
||
|
by load(), and generally makes the memory usage for this thing
|
||
|
be as small as possible. Some StateData-derived classes can
|
||
|
load and unload repeatedly; others are useless once they have
|
||
|
been unloaded.
|
||
|
"""
|
||
|
if not self.isLoaded:
|
||
|
return 0
|
||
|
if self.isEntered:
|
||
|
self.notify.warning("unloaded StateData before it was exited")
|
||
|
self.exit()
|
||
|
self.isLoaded = 0
|
||
|
StateData.notify.debug('unload()')
|
||
|
return 1
|
||
|
|
||
|
def getDoneStatus(self):
|
||
|
"""
|
||
|
The done status of a state data may be anything. It is common
|
||
|
practice to return a Python dictionary or a string; the default
|
||
|
value is None.
|
||
|
"""
|
||
|
return self.doneStatus
|