| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- """Undocumented Module"""
- __all__ = ['ClassicStyle', 'NewStyle', 'ToonEyes']
- from . import FSM
- from direct.task import Task
- class ClassicStyle(FSM.FSM):
- def __init__(self, name):
- FSM.FSM.__init__(self, name)
- self.defaultTransitions = {
- 'Red': ['Green'],
- 'Yellow': ['Red'],
- 'Green': ['Yellow'],
- }
- def enterRed(self):
- print("enterRed(self, '%s', '%s')" % (self.oldState, self.newState))
- def exitRed(self):
- print("exitRed(self, '%s', '%s')" % (self.oldState, self.newState))
- def enterYellow(self):
- print("enterYellow(self, '%s', '%s')" % (self.oldState, self.newState))
- def exitYellow(self):
- print("exitYellow(self, '%s', '%s')" % (self.oldState, self.newState))
- def enterGreen(self):
- print("enterGreen(self, '%s', '%s')" % (self.oldState, self.newState))
- def exitGreen(self):
- print("exitGreen(self, '%s', '%s')" % (self.oldState, self.newState))
- class NewStyle(FSM.FSM):
- def enterRed(self):
- print("enterRed(self, '%s', '%s')" % (self.oldState, self.newState))
- def filterRed(self, request, args):
- print("filterRed(self, '%s', %s)" % (request, args))
- if request == 'advance':
- return 'Green'
- return self.defaultFilter(request, args)
- def exitRed(self):
- print("exitRed(self, '%s', '%s')" % (self.oldState, self.newState))
- def enterYellow(self):
- print("enterYellow(self, '%s', '%s')" % (self.oldState, self.newState))
- def filterYellow(self, request, args):
- print("filterYellow(self, '%s', %s)" % (request, args))
- if request == 'advance':
- return 'Red'
- return self.defaultFilter(request, args)
- def exitYellow(self):
- print("exitYellow(self, '%s', '%s')" % (self.oldState, self.newState))
- def enterGreen(self):
- print("enterGreen(self, '%s', '%s')" % (self.oldState, self.newState))
- def filterGreen(self, request, args):
- print("filterGreen(self, '%s', %s)" % (request, args))
- if request == 'advance':
- return 'Yellow'
- return self.defaultFilter(request, args)
- def exitGreen(self):
- print("exitGreen(self, '%s', '%s')" % (self.oldState, self.newState))
- class ToonEyes(FSM.FSM):
- def __init__(self):
- FSM.FSM.__init__(self, 'eyes')
- self.__unblinkName = "unblink"
- # Eyes are initially open.
- self.request('Open')
- def defaultFilter(self, request, args):
- # The default filter accepts any direct state request (these
- # start with a capital letter).
- if request[0].isupper():
- return request
- # Unexpected command requests are quietly ignored.
- return None
- def enterOpen(self):
- print("swap in eyes open model")
- def filterOpen(self, request, args):
- if request == 'blink':
- taskMgr.remove(self.__unblinkName)
- taskMgr.doMethodLater(0.125, self.__unblink, self.__unblinkName)
- return 'Closed'
- return self.defaultFilter(request, args)
- def __unblink(self, task):
- self.request('unblink')
- return Task.done
- def enterClosed(self):
- print("swap in eyes closed model")
- def filterClosed(self, request, args):
- if request == 'unblink':
- return 'Open'
- return self.defaultFilter(request, args)
- def enterSurprised(self):
- print("swap in eyes surprised model")
- def enterOff(self):
- taskMgr.remove(self.__unblinkName)
- ####
- #### Example of using ClassicStyle:
- ##
- ## >>> import SampleFSM
- ## >>> foo = SampleFSM.ClassicStyle('foo')
- ## >>> foo.request('Red')
- ## enterRed(self, 'Off', 'Red')
- ## ('Red',)
- ## >>> foo.request('Yellow')
- ## Traceback (most recent call last):
- ## File "<stdin>", line 1, in ?
- ## File "/home/drose/player/direct/src/fsm/FSM.py", line 168, in request
- ## result = func(request, args)
- ## File "/home/drose/player/direct/src/fsm/FSM.py", line 210, in defaultFilter
- ## self.notify.error("%s rejecting request %s from state %s." % (self.name, request, self.state))
- ## File "/home/drose/player/direct/src/directnotify/Notifier.py", line 99, in error
- ## raise exception(errorString)
- ## StandardError: foo rejecting request Yellow from state Red.
- ## >>> foo.request('Green')
- ## exitRed(self, 'Red', 'Green')
- ## enterGreen(self, 'Red', 'Green')
- ## ('Green',)
- ## >>>
- ####
- #### Example of using NewStyle:
- ##
- ## >>> import SampleFSM
- ## >>> foo = SampleFSM.NewStyle('foo')
- ## >>> foo.request('Red')
- ## enterRed(self, 'Off', 'Red')
- ## ('Red',)
- ## >>> foo.request('advance')
- ## filterRed(self, 'advance', ())
- ## exitRed(self, 'Red', 'Green')
- ## enterGreen(self, 'Red', 'Green')
- ## ('Green',)
- ## >>> foo.request('advance')
- ## filterGreen(self, 'advance', ())
- ## exitGreen(self, 'Green', 'Yellow')
- ## enterYellow(self, 'Green', 'Yellow')
- ## ('Yellow',)
- ## >>> foo.request('advance')
- ## filterYellow(self, 'advance', ())
- ## exitYellow(self, 'Yellow', 'Red')
- ## enterRed(self, 'Yellow', 'Red')
- ## ('Red',)
- ## >>> foo.request('advance')
- ## filterRed(self, 'advance', ())
- ## exitRed(self, 'Red', 'Green')
- ## enterGreen(self, 'Red', 'Green')
- ## ('Green',)
- ## >>>
- ####
- #### Example of using ToonEyes:
- ##
- ## >>> from ShowBaseGlobal import *
- ## >>> import SampleFSM
- ## >>> eyes = SampleFSM.ToonEyes()
- ## swap in eyes open model
- ## >>> eyes.request('blink')
- ## swap in eyes closed model
- ## ('Closed',)
- ## >>> run()
- ## swap in eyes open model
- ## >>> eyes.request('Surprised')
- ## swap in eyes surprised model
- ## ('Surprised',)
- ## >>> eyes.request('blink')
- ## >>>
|