| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- using System;
- using UnityEngine;
- namespace ET
- {
- [ObjectSystem]
- public class AIComponentAwakeSystem: AwakeSystem<AIComponent, int>
- {
- public override void Awake(AIComponent self, int aiConfigId)
- {
- self.AIConfigId = aiConfigId;
- self.Timer = TimerComponent.Instance.NewRepeatedTimer(1000, self.Check);
- }
- }
- [ObjectSystem]
- public class AIComponentDestroySystem: DestroySystem<AIComponent>
- {
- public override void Destroy(AIComponent self)
- {
- TimerComponent.Instance.Remove(ref self.Timer);
- self.CancellationToken?.Cancel();
- self.CancellationToken = null;
- self.Current = 0;
- }
- }
- public static class AIComponentSystem
- {
- 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;
- }
- }
- }
|