public override void ResetNode() { if (m_listener_context != null) { Entity owner = m_context.GetData <Entity>(BTContextKey.OwnerEntity); for (int i = 0; i < m_signal_datas.Count; ++i) { owner.RemoveListener(m_signal_datas[i].m_signal_id, m_listener_context.ID); } SignalListenerContext.Recycle(m_listener_context); m_listener_context = null; m_context.GetLogicWorld().UnregisterBehaviorTree(this); m_register_id = 0; } ClearRunningTrace(); base.ResetNode(); if (m_context != null) { BTContext context = m_context; SetContext(null); RecyclableObject.Recycle(context); } m_current_running_entry_index = -1; if (m_task != null) { m_task.Cancel(); LogicTask.Recycle(m_task); m_task = null; } }
public override FixPoint GetVariable(ExpressionVariable variable, int index) { int vid = variable[index]; if (vid == ExpressionVariable.VID_Target) { if (m_behavior_tree == null) { return(FixPoint.Zero); } BTContext context = m_behavior_tree.Context; if (context == null) { return(FixPoint.Zero); } int current_target_id = (int)(context.GetData(BTContextKey.CurrentTargetID)); if (current_target_id <= 0) { return(FixPoint.Zero); } Entity current_target = GetLogicWorld().GetEntityManager().GetObject(current_target_id); if (current_target == null) { return(FixPoint.Zero); } return(current_target.GetVariable(variable, index + 1)); } return(base.GetVariable(variable, index)); }
public override void InitializeComponent() { ObjectProtoData proto_data = ParentObject.GetCreationContext().m_proto_data; if (proto_data != null) { var variables = proto_data.m_component_variables; if (variables != null) { string value; if (variables.TryGetValue("ai_tree_id", out value)) { m_bahavior_tree_id = int.Parse(value); } } } m_behavior_tree = BehaviorTreeFactory.Instance.CreateBehaviorTree(m_bahavior_tree_id); if (m_behavior_tree != null) { m_behavior_tree.Construct(GetLogicWorld()); BTContext context = m_behavior_tree.Context; context.SetData <IExpressionVariableProvider>(BTContextKey.ExpressionVariableProvider, this); context.SetData <Entity>(BTContextKey.OwnerEntity, GetOwnerEntity()); context.SetData <AIComponent>(BTContextKey.OwnerAIComponent, this); m_behavior_tree.Active(); } }
public void SetContext(BTContext context) { m_context = context; if (m_children != null) { for (int i = 0; i < m_children.Count; ++i) { m_children[i].SetContext(context); } } }
public override void InitializeComponent() { m_behavior_tree = BehaviorTreeFactory.Instance.CreateBehaviorTree(m_bahavior_tree_id); if (m_behavior_tree != null) { m_behavior_tree.Construct(GetLogicWorld()); BTContext context = m_behavior_tree.Context; context.SetData <IExpressionVariableProvider>(BTContextKey.ExpressionVariableProvider, this); context.SetData <Entity>(BTContextKey.OwnerEntity, GetOwnerEntity()); context.SetData <SkillComponent>(BTContextKey.OwnerSkillComponent, this); m_behavior_tree.Active(); } }
public void Construct(LogicWorld logic_world) { if (m_context == null) { BTContext context = RecyclableObject.Create <BTContext>(); context.Construct(logic_world, this); SetContext(context); } if (m_task == null) { m_task = LogicTask.Create <BehaviorTreeTask>(); m_task.Construct(this); } }