hauling.py (1938B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\behaviors\actions\hauling.py 2 from collections import deque 3 from behaviors.tasks import Task 4 from ccpProfile import TimedFunction 5 6 class GetHaulerPickUpDestination(Task): 7 8 @TimedFunction('behaviors::actions::utility::GetHaulerPickUpDestination::OnEnter') 9 def OnEnter(self): 10 self.SetStatusToFailed() 11 chosenBallId, ballsStillPendingPickUp = self._ChooseBallIdForPickUp() 12 if chosenBallId is not None: 13 self.SendBlackboardValue(self.attributes.chosenBallAddress, chosenBallId) 14 self.SetStatusToSuccess() 15 self.SendBlackboardValue(self.attributes.availableBallsAddress, ballsStillPendingPickUp) 16 17 def _ChooseBallIdForPickUp(self): 18 availableBallIds = self._GetAvailableBallIds() 19 if len(availableBallIds) == 0: 20 chosenBallId = None 21 else: 22 chosenBallId = availableBallIds.pop() 23 return (chosenBallId, availableBallIds) 24 25 def _GetAvailableBallIds(self): 26 availableBallIds = self.GetLastBlackboardValue(self.attributes.availableBallsAddress) 27 if availableBallIds is None: 28 return deque() 29 return availableBallIds 30 31 32 class AddMeToHaulerPickUpDestination(Task): 33 34 @TimedFunction('behaviors::actions::utility::AddMeToHaulerPickUpDestination::OnEnter') 35 def OnEnter(self): 36 self.SetStatusToSuccess() 37 availableBallIds = self._GetAvailableBallIds() 38 if self.context.myItemId in availableBallIds: 39 return 40 availableBallIds.appendleft(self.context.myItemId) 41 self.SendBlackboardValue(self.attributes.availableBallsAddress, availableBallIds) 42 43 def _GetAvailableBallIds(self): 44 availableBallIds = self.GetLastBlackboardValue(self.attributes.availableBallsAddress) 45 if availableBallIds is None: 46 return deque() 47 return availableBallIds