blackboards.py (1948B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\behaviors\monitors\blackboards.py 2 from behaviors.tasks import Task 3 from ccpProfile import TimedFunction 4 5 class BlackboardMessageMonitor(Task): 6 7 def CleanUp(self): 8 if not self.IsInvalid(): 9 self.UnsubscribeToBlackboard(self.attributes.messageAddress, self.OnBlackboardUpdate) 10 self.SetStatusToInvalid() 11 12 @TimedFunction('behaviors::monitors::blackboards::BlackboardMessageMonitor::OnBlackboardUpdate') 13 def OnBlackboardUpdate(self, name, message): 14 if not self.IsInvalid(): 15 self.behaviorTree.RequestReset(requestedBy=self) 16 17 @TimedFunction('behaviors::monitors::blackboards::BlackboardMessageMonitor::OnEnter') 18 def OnEnter(self): 19 self.SubscribeToBlackboard(self.attributes.messageAddress, self.OnBlackboardUpdate) 20 self.SetStatusToSuccess() 21 22 23 class BlackboardMessageMonitorBlocking(BlackboardMessageMonitor): 24 25 @TimedFunction('behaviors::monitors::blackboards::BlackboardMessageMonitorBlocking::OnEnter') 26 def OnEnter(self): 27 self.SubscribeToBlackboard(self.attributes.messageAddress, self.OnBlackboardUpdate) 28 message = self.GetLastBlackboardValue(self.attributes.messageAddress) 29 if message is not None: 30 self.SetStatusToSuccess() 31 else: 32 self.SetStatusToFailed() 33 34 35 class BlackboardFlagOnMessageUpdate(Task): 36 37 def OnEnter(self): 38 self.SubscribeToBlackboard(self.attributes.messageAddress, self.OnBlackboardUpdate) 39 self.SetStatusToSuccess() 40 41 def CleanUp(self): 42 if self.IsInvalid(): 43 return 44 self.UnsubscribeToBlackboard(self.attributes.messageAddress, self.OnBlackboardUpdate) 45 self.SetStatusToInvalid() 46 47 def OnBlackboardUpdate(self, name, message): 48 if self.IsInvalid(): 49 return 50 self.SendBlackboardValue(self.attributes.flagAddress, True)