NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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()