using BehaviorDesigner.Runtime; namespace MoleMole { public class AvatarAIPlugin : BaseActorPlugin { protected BehaviorTree _aiTree; protected AvatarActor _owner; private LevelActor _levelActor; public AvatarAIPlugin(AvatarActor owner) { _owner = owner; _aiTree = _owner.avatar.GetComponent(); _levelActor = Singleton.Instance.levelActor; } public override void OnAdded() { if (_levelActor.levelState == LevelActor.LevelState.LevelRunning) { Preparation(); } else { Singleton.Instance.RegisterEventListener(_owner.runtimeID); } Singleton.Instance.RegisterEventListener(_owner.runtimeID); } private void Preparation() { } public override bool ListenEvent(BaseEvent evt) { if (evt is EvtStageReady) { return ListenStageReady((EvtStageReady)evt); } if (!_owner.avatar.IsAIActive()) { return false; } if (evt is EvtAttackStart) { return ListenAttackStart((EvtAttackStart)evt); } return false; } private bool ListenStageReady(EvtStageReady evt) { if (evt.isBorn) { Preparation(); Singleton.Instance.RemoveEventListener(_owner.runtimeID); } return false; } private bool ListenAttackStart(EvtAttackStart evt) { if (_owner.avatar.AttackTarget != null && _owner.avatar.AttackTarget.GetRuntimeID() == evt.targetID) { _aiTree.SendEvent("AITargetAttackStart_0"); } return false; } } }