Spaces:
Runtime error
Runtime error
| using Photon.Deterministic; | |
| using System; | |
| namespace Quantum | |
| { | |
| public unsafe abstract partial class BTLeaf : BTNode | |
| { | |
| public AssetRefBTService[] Services; | |
| protected BTService[] _serviceInstances; | |
| public BTService[] ServiceInstances | |
| { | |
| get | |
| { | |
| return _serviceInstances; | |
| } | |
| } | |
| public override BTNodeType NodeType | |
| { | |
| get | |
| { | |
| return BTNodeType.Leaf; | |
| } | |
| } | |
| public override unsafe void Init(Frame frame, AIBlackboardComponent* blackboard, BTAgent* agent) | |
| { | |
| base.Init(frame, blackboard, agent); | |
| for (int i = 0; i < Services.Length; i++) | |
| { | |
| BTService service = frame.FindAsset<BTService>(Services[i].Id); | |
| service.Init(frame, agent, blackboard); | |
| } | |
| } | |
| public override void OnEnterRunning(BTParams btParams) | |
| { | |
| var activeServicesList = btParams.Frame.ResolveList<AssetRefBTService>(btParams.Agent->ActiveServices); | |
| for (int i = 0; i < _serviceInstances.Length; i++) | |
| { | |
| _serviceInstances[i].OnEnter(btParams); | |
| activeServicesList.Add(Services[i]); | |
| } | |
| } | |
| public override void OnEnter(BTParams btParams) | |
| { | |
| base.OnEnter(btParams); | |
| BTManager.OnNodeEnter?.Invoke(btParams.Entity, Guid.Value); | |
| } | |
| public override void OnExit(BTParams btParams) | |
| { | |
| var activeServicesList = btParams.Frame.ResolveList<AssetRefBTService>(btParams.Agent->ActiveServices); | |
| for (Int32 i = 0; i < _serviceInstances.Length; i++) | |
| { | |
| activeServicesList.Remove(Services[i]); | |
| } | |
| BTManager.OnNodeExit?.Invoke(btParams.Entity, Guid.Value); | |
| } | |
| public override void OnReset(BTParams btParams) | |
| { | |
| base.OnReset(btParams); | |
| OnExit(btParams); | |
| } | |
| public override void Loaded(IResourceManager resourceManager, Native.Allocator allocator) | |
| { | |
| base.Loaded(resourceManager, allocator); | |
| // Cache the service assets links | |
| _serviceInstances = new BTService[Services.Length]; | |
| for (int i = 0; i < Services.Length; i++) | |
| { | |
| _serviceInstances[i] = (BTService)resourceManager.GetAsset(Services[i].Id); | |
| } | |
| } | |
| } | |
| } |