12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- using System;
- namespace ET
- {
- [FriendOf(typeof(AIComponent))]
- [FriendOf(typeof(AIDispatcherComponent))]
- public static 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}");
- }
- }
- }
-
- [ObjectSystem]
- public class AIComponentAwakeSystem: AwakeSystem<AIComponent, int>
- {
- protected override void Awake(AIComponent self, int aiConfigId)
- {
- self.AIConfigId = aiConfigId;
- self.Timer = TimerComponent.Instance.NewRepeatedTimer(1000, TimerInvokeType.AITimer, self);
- }
- }
- [ObjectSystem]
- public class AIComponentDestroySystem: DestroySystem<AIComponent>
- {
- protected override void Destroy(AIComponent self)
- {
- TimerComponent.Instance?.Remove(ref self.Timer);
- self.CancellationToken?.Cancel();
- self.CancellationToken = null;
- self.Current = 0;
- }
- }
-
- public static void Check(this AIComponent self)
- {
- if (self.Parent == null)
- {
- TimerComponent.Instance.Remove(ref self.Timer);
- return;
- }
- var oneAI = AIConfigCategory.Instance.AIConfigs[self.AIConfigId];
- foreach (AIConfig aiConfig in oneAI.Values)
- {
- AIDispatcherComponent.Instance.AIHandlers.TryGetValue(aiConfig.Name, out AAIHandler aaiHandler);
- 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 ETCancellationToken();
- self.CancellationToken = cancellationToken;
- self.Current = aiConfig.Id;
- aaiHandler.Execute(self, aiConfig, cancellationToken).Coroutine();
- return;
- }
-
- }
- private static void Cancel(this AIComponent self)
- {
- self.CancellationToken?.Cancel();
- self.Current = 0;
- self.CancellationToken = null;
- }
- }
- }
|