| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- using System;
- namespace ET
- {
- [EntitySystemOf(typeof(AIComponent))]
- [FriendOf(typeof(AIComponent))]
- [FriendOf(typeof(AIDispatcherComponent))]
- public static partial class AIComponentSystem
- {
- [Invoke(TimerInvokeType.AITimer)]
- public class AITimer: ATimer<AIComponent>
- {
- protected override void Run(AIComponent self)
- {
- try
- {
- self.Check();
- }
- catch (Exception e)
- {
- Log.Error($"move timer error: {self.Id}\n{e}");
- }
- }
- }
-
- [EntitySystem]
- private static void Awake(this AIComponent self, int aiConfigId)
- {
- self.AIConfigId = aiConfigId;
- self.Timer = self.Root().GetComponent<TimerComponent>().NewRepeatedTimer(1000, TimerInvokeType.AITimer, self);
- }
- [EntitySystem]
- private static void Destroy(this AIComponent self)
- {
- self.Root().GetComponent<TimerComponent>()?.Remove(ref self.Timer);
- self.CancellationToken?.Cancel();
- self.CancellationToken = null;
- self.Current = 0;
- }
- private static void Check(this AIComponent self)
- {
- Fiber fiber = self.Fiber();
- if (self.Parent == null)
- {
- fiber.Root.GetComponent<TimerComponent>().Remove(ref self.Timer);
- return;
- }
- var oneAI = AIConfigCategory.Instance.AIConfigs[self.AIConfigId];
- foreach (AIConfig aiConfig in oneAI.Values)
- {
- AAIHandler aaiHandler = AIDispatcherComponent.Instance.Get(aiConfig.Name);
- if (aaiHandler == null)
- {
- Log.Error($"not found aihandler: {aiConfig.Name}");
- continue;
- }
- int ret = aaiHandler.Check(self, aiConfig);
- if (ret != 0)
- {
- continue;
- }
- if (self.Current == aiConfig.Id)
- {
- break;
- }
- self.Cancel(); // 取消之前的行为
- ETCancellationToken cancellationToken = new();
- self.CancellationToken = cancellationToken;
- self.Current = aiConfig.Id;
- aaiHandler.Execute(self, aiConfig).WithContext(cancellationToken);
- return;
- }
-
- }
- private static void Cancel(this AIComponent self)
- {
- self.CancellationToken?.Cancel();
- self.Current = 0;
- self.CancellationToken = null;
- }
- }
- }
|