class Main(threading.Thread): mStateMachine = None mSystemIO = None mDoState = 1 mCapture = None mCameraPort = 0 mUIQueue = [] #Global Variables For Access Between States mBigTime = 0 def __init__(self, group=None, target=None, name=None, args=(), kwargs=None, daemon=None, pMainWindow=None, pSystemIO=None): threading.Thread.__init__(self) self.mStateMachine = StateMachine(pMainWindow, self, pSystemIO) self.mDoState = 1 self.mSystemIO = pSystemIO #Run state machine in main loop def run(self): while (1): if (len(self.mUIQueue) != 0 and self.mUIQueue.pop().text() == "Start"): self.mSystemIO.OpenPorts() while (self.mDoState): if (self.mStateMachine.Update() == 0): self.mDoState = 0
class MinersWife(BaseGameEntity): m_Location = None # an instance of the state machine class m_pStateMachine = None def __init__(self, EntityNames): # super(EntityNames) self.m_Location = location_type.shack self.m_pStateMachine = StateMachine(self) self.m_pStateMachine.SetCurrentState(DoHouseWork.getInstance()) self.m_pStateMachine.SetGlobalState(WifesGlobalState.getInstance()) def GetFSM(self): return self.m_pStateMachine def RevertToPreviousState(self): None def Update(self): self.m_pStateMachine.Update() def Location(self): return self.m_Location def ChangeLocation(self, location_type): self.m_Location = location_type
class Miner(BaseGameEntity): ComFortLevel = 5 MaxNuggets = 3 ThirstLevel = 5 TirednessThreshold = 5 m_Location = None m_iGoldCarried = None m_iMoneyInBank = None m_iThirst = None m_iFatigue = None ThirstLevel = 5 TirednessThreshold = 5 MaxNuggets = 3 ComfortLevel = 5 # an instance of the state machine class m_pStateMachine = None def __init__(self, EntityNames): # super(EntityNames) self.m_Location = location_type.shack self.m_iGoldCarried = 0 self.m_iMoneyInBank = 0 self.m_iThirst = 0 self.m_iFatigue = 0 self.m_pStateMachine = StateMachine(self) self.m_pStateMachine.SetCurrentState( GoHomeAndSleepTilRested.getInstance()) def GetFSM(self): # global m_pStateMachine return self.m_pStateMachine def RevertToPreviousState(self): None def HandleMessage(self, Telegram): return self.m_pStateMachine.HandleMessage(Telegram) def Update(self): # global m_iThirst, m_pStateMachine self.m_iThirst += 1 self.m_pStateMachine.Update() def HandleMessage(self, Telegram): return self.m_pStateMachine.HandleMessage(Telegram) def AddToGoldCarried(self, val): self.m_iGoldCarried += val if self.m_iGoldCarried < 0: self.m_iGoldCarried = 0 def AddToWealth(self, val): self.m_iMoneyInBank += val if self.m_iMoneyInBank < 0: self.m_iMoneyInBank = 0 def Thirsty(self): self.ThirstLevel = 5 if self.m_iThirst >= self.ThirstLevel: return True else: return False def Fatigued(self): if self.m_iFatigue > 5: return True else: return False def Location(self): return self.m_Location def ChangeLocation(self, location_type): self.m_Location = location_type def IncreaseFatigue(self): self.m_iFatigue += 1 def DecreaseFatigue(self): self.m_iFatigue -= 1 def PocketsFull(self): self.MaxNuggets = 3 if self.m_iGoldCarried >= self.MaxNuggets: return True else: return False def GoldCarried(self): return self.m_iGoldCarried def SetGoldCarried(self, val): self.m_iGoldCarried = val def Wealth(self): return self.m_iMoneyInBank def BuyAndDrinkAWhiskey(self): self.m_iThirst = 0 self.m_iMoneyInBank -= 2