blackboards.py (8157B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\behaviors\conditions\blackboards.py 2 from behaviors import status 3 from behaviors.blackboards import BlackboardDeletedError 4 from behaviors.blackboards.scopes import GetBlackboardIdFromScopeAndContext 5 from behaviors.tasks import Task 6 from carbon.common.lib.const import SEC 7 from ccpProfile import TimedFunction 8 9 class IsBlackboardValueNone(Task): 10 11 @TimedFunction('behaviors::condition::blackboards::IsBlackboardValueNone::OnEnter') 12 def OnEnter(self): 13 blackboardValue = self.GetLastBlackboardValue(self.attributes.valueAddress) 14 if blackboardValue is None: 15 self.status = status.TaskSuccessStatus 16 else: 17 self.status = status.TaskFailureStatus 18 19 20 class IsBlackboardValueNotNone(Task): 21 22 @TimedFunction('behaviors::condition::blackboards::IsBlackboardValueNotNone::OnEnter') 23 def OnEnter(self): 24 blackboardValue = self.GetLastBlackboardValue(self.attributes.valueAddress) 25 if blackboardValue is None: 26 self.status = status.TaskFailureStatus 27 else: 28 self.status = status.TaskSuccessStatus 29 30 31 class IsBlackboardValue3dVector(Task): 32 33 @TimedFunction('behaviors::condition::blackboards::IsBlackboardValueNotNone::OnEnter') 34 def OnEnter(self): 35 blackboardValue = self.GetLastBlackboardValue(self.attributes.valueAddress) 36 if type(blackboardValue) not in (list, tuple) or len(blackboardValue) != 3: 37 self.status = status.TaskFailureStatus 38 else: 39 self.status = status.TaskSuccessStatus 40 41 42 class IsBlackboardValueTrue(Task): 43 44 @TimedFunction('behaviors::condition::blackboards::IsBlackboardValueTrue::OnEnter') 45 def OnEnter(self): 46 blackboardValue = self.GetLastBlackboardValue(self.attributes.valueAddress) 47 if blackboardValue is True: 48 self.status = status.TaskSuccessStatus 49 else: 50 self.status = status.TaskFailureStatus 51 52 53 class IsBlackboardValueFalse(Task): 54 55 @TimedFunction('behaviors::condition::blackboards::IsBlackboardValueTrue::OnEnter') 56 def OnEnter(self): 57 blackboardValue = self.GetLastBlackboardValue(self.attributes.valueAddress) 58 if blackboardValue is False: 59 self.SetStatusToSuccess() 60 else: 61 self.SetStatusToFailed() 62 63 64 class IsBlackboardStringEqualToValue(Task): 65 66 @TimedFunction('behaviors::condition::blackboards::IsBlackboardStringEqualToValue::OnEnter') 67 def OnEnter(self): 68 blackboard_value = self.GetLastBlackboardValue(self.attributes.valueAddress) 69 if blackboard_value == self.attributes.expectedValue: 70 self.SetStatusToSuccess() 71 else: 72 self.SetStatusToFailed() 73 74 75 class BlackboardMessagesEqualCondition(Task): 76 77 @TimedFunction('behaviors::condition::blackboards::BlackboardMessagesEqualCondition::OnEnter') 78 def OnEnter(self): 79 firstValue = self.GetLastBlackboardValue(self.attributes.firstMessageAddress) 80 secondValue = self.GetLastBlackboardValue(self.attributes.secondMessageAddress) 81 if firstValue == secondValue: 82 self.status = status.TaskSuccessStatus 83 else: 84 self.status = status.TaskFailureStatus 85 86 87 class BlackboardValueUpdatedRecentlyCondition(Task): 88 89 @TimedFunction('behaviors::condition::blackboards::BlackboardValueUpdatedRecentlyCondition::OnEnter') 90 def OnEnter(self): 91 messages = self.GetLastBlackboardValueWithMaxAge(self.attributes.address, maxAge=self.attributes.timeInSeconds * SEC) 92 if messages: 93 self.SetStatusToSuccess() 94 else: 95 self.SetStatusToFailed() 96 97 98 class IsBlackboardValueInCollectionCondition(Task): 99 100 @TimedFunction('behaviors::condition::blackboards::IsBlackboardValueInCollectionCondition::OnEnter') 101 def OnEnter(self): 102 value = self.GetLastBlackboardValue(self.attributes.valueAddress) 103 collection = self.GetLastBlackboardValue(self.attributes.collectionAddress) 104 if collection and value in collection: 105 self.SetStatusToSuccess() 106 else: 107 self.SetStatusToFailed() 108 109 110 class BlackboardMessageAndMyItemIdEqualCondition(Task): 111 112 @TimedFunction('behaviors::conditions::blackboards::BlackboardMessageEqualsContextCondition::OnEnter') 113 def OnEnter(self): 114 blackboardValue = self.GetLastBlackboardValue(self.attributes.messageAddress) 115 result = self.IsEqual(blackboardValue) 116 if getattr(self.attributes, 'isInverted', False): 117 result = not result 118 if result: 119 self.SetStatusToSuccess() 120 else: 121 self.SetStatusToFailed() 122 123 def IsEqual(self, blackboardValue): 124 return blackboardValue == self.context.myItemId 125 126 127 class BlackboardMessageAndMyEntityGroupIdEqualCondition(BlackboardMessageAndMyItemIdEqualCondition): 128 129 def IsEqual(self, blackboardValue): 130 return blackboardValue == self.context.myEntityGroupId 131 132 133 class IsBlackboardIntegerEqualToValue(Task): 134 135 @TimedFunction('behaviors::conditions::blackboards::IsBlackboardIntegerEqualToValue::OnEnter') 136 def OnEnter(self): 137 blackboardValue = self.GetLastBlackboardValue(self.attributes.valueAddress) 138 if blackboardValue == self.attributes.value: 139 self.SetStatusToSuccess() 140 else: 141 self.SetStatusToFailed() 142 143 144 class IsBlackboardValueRatioLessThan(Task): 145 146 @TimedFunction('behaviors::conditions::blackboards::IsBlackboardValueRatioLessThan::OnEnter') 147 def OnEnter(self): 148 firstValue = self.GetLastBlackboardValue(self.attributes.firstValueAddress) 149 secondValue = self.GetLastBlackboardValue(self.attributes.secondValueAddress) 150 if firstValue is None or secondValue is None: 151 self.SetStatusToFailed() 152 return 153 ratioToCompare = self.GetLastBlackboardValue(self.attributes.ratioAddress) 154 ratio = firstValue / float(secondValue) 155 self.SetStatusToSuccessIfTrueElseToFailed(ratio < ratioToCompare) 156 157 158 class BlackboardValueEqualsBlackboardValueInDictionaryCondition(Task): 159 160 @TimedFunction('behaviors::conditions::blackboards::BlackboardValueEqualsBlackboardValueInDictionaryCondition::OnEnter') 161 def OnEnter(self): 162 self.SetStatusToFailed() 163 expected_value = self.GetLastBlackboardValue(self.attributes.valueAddress) 164 blackboard_key = self.GetLastBlackboardValue(self.attributes.keyAddress) 165 if expected_value is None or blackboard_key is None: 166 return 167 blackboard_dictionary = self.GetLastBlackboardValue(self.attributes.dictionaryAddress) 168 if blackboard_dictionary is None: 169 return 170 if blackboard_key not in blackboard_dictionary: 171 return 172 if blackboard_dictionary[blackboard_key] != expected_value: 173 return 174 self.SetStatusToSuccess() 175 176 177 class IsBlackboardCollectionEmpty(Task): 178 179 @TimedFunction('behaviors::conditions::blackboards::IsBlackboardCollectionEmpty::OnEnter') 180 def OnEnter(self): 181 collection = self.GetLastBlackboardValue(self.attributes.collectionAddress) 182 self.SetStatusToSuccessIfTrueElseToFailed(collection is None or len(collection) == 0) 183 184 185 class IsBlackboardValueLessThenBlackboardValue(Task): 186 187 @TimedFunction('behaviors::conditions::blackboards::IsBlackboardValueLessThenBlackboardValue::OnEnter') 188 def OnEnter(self): 189 blackboard_value_to_check = self.GetLastBlackboardValue(self.attributes.valueToCheckAddress) 190 blackboard_value_to_compare = self.GetLastBlackboardValue(self.attributes.valueToCompareAddress) 191 self.SetStatusToSuccessIfTrueElseToFailed(blackboard_value_to_check < blackboard_value_to_compare) 192 193 194 class IsBlackboardDeleted(Task): 195 196 @TimedFunction('behaviors::conditions::blackboards::IsBlackboardDeleted::OnEnter') 197 def OnEnter(self): 198 self.SetStatusToFailed() 199 blackboardId = GetBlackboardIdFromScopeAndContext(self.attributes.scopeType, self.context) 200 try: 201 self.context.blackboardManager.GetBlackboard(blackboardId) 202 except BlackboardDeletedError: 203 self.SetStatusToSuccess()