protected override void LeaveProcedure(StateEventArg arg) { ProcedureStateMachine?.Destroy(); m_systems.TearDown(); EventRoute.Dispose(); m_contexts.game.DestroyAllEntities(); m_contexts.Reset(); Object.Destroy(m_rootNode.gameObject); #if (!ENTITAS_DISABLE_VISUAL_DEBUGGING && UNITY_EDITOR) Object.Destroy(m_systems.gameObject); var contextObserverBehaviours = Object.FindObjectsOfType <Entitas.VisualDebugging.Unity.ContextObserverBehaviour>(); var allContexts = m_contexts.allContexts; foreach (var ob in contextObserverBehaviours) { if (System.Array.IndexOf(allContexts, ob.contextObserver.context) != -1) { Object.Destroy(ob.gameObject); } } #endif m_blackboard = null; m_procedureStateMachine = null; m_systems = null; m_contexts = null; m_rootNode = null; m_eventRoute = null; m_schedulable = null; }
protected override void EnterProcedure(StateEventArg arg) { m_contexts = new Contexts(); m_eventRoute = new EntitasEventRoute(m_contexts); m_rootNode = new GameObject(GetRootNodeName()).transform; RootNodeService.RootNode = m_rootNode; m_blackboard = new Blackboard(); m_procedureStateMachine = CreateStateMachine(); m_schedulable = new Schedulable(); m_systems = new Feature("Systems"); EntitasSystemEnvironment parameters = new EntitasSystemEnvironment(m_contexts.game, EventRoute, Blackboard, ProcedureStateMachine, m_schedulable); CreateSystems(m_systems, parameters); m_systems.Initialize(); if (ProcedureStateMachine != null) { ProcedureStateMachine.EnterStateEvent += OnEnterState; RequireStateTransitionDelay("__Start"); } }