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

guard.py (1821B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\behaviors\actions\guard.py
      2 from behaviors.groups.mixin import GroupTaskMixin
      3 from behaviors.tasks import Task
      4 from behaviors.utility.components import get_proximity_sensor, create_proximity_sensor
      5 from npcs.server.tags import entity_group_tag, try_add_behavior_context_tags
      6 
      7 class PlaceProximitySensor(Task):
      8 
      9     def OnEnter(self):
     10         item_id = self.GetLastBlackboardValue(self.attributes.itemIdAddress)
     11         self._UpdateSensor(item_id)
     12         self.SetStatusToSuccess()
     13 
     14     def _UpdateSensor(self, item_id):
     15         try:
     16             self._ReplaceSensor(item_id)
     17         except KeyError:
     18             self._InstallSensor(item_id)
     19 
     20     def _InstallSensor(self, item_id):
     21         aggression_range = self.GetLastBlackboardValue(self.attributes.rangeAddress)
     22         proximitySensor = create_proximity_sensor(self, item_id, aggression_range)
     23         self.SetTags(proximitySensor)
     24         sensor_ball_id = proximitySensor.RegisterSensor(self.context.ballpark)
     25         return sensor_ball_id
     26 
     27     def SetTags(self, proximitySensor):
     28         try_add_behavior_context_tags(proximitySensor, self.context)
     29         tags = getattr(self.attributes, 'tags', None)
     30         if tags:
     31             for tag in tags:
     32                 proximitySensor.AddTag(tag)
     33 
     34     def _ReplaceSensor(self, item_id):
     35         proximitySensor = get_proximity_sensor(self, item_id)
     36         if proximitySensor.GetDistanceTo(item_id) > self.attributes.sensorReplacementRange:
     37             proximitySensor.ReplaceSensor()
     38 
     39 
     40 class PlaceProximitySensorForGroup(PlaceProximitySensor, GroupTaskMixin):
     41 
     42     def OnEnter(self):
     43         item_ids = self.GetMemberIdList()
     44         for item_id in item_ids:
     45             self._UpdateSensor(item_id)
     46 
     47         self.SetStatusToSuccess()