/// <summary>Execute the graph in the given blackboard.</summary> public override AIGraphResult Run(AIBlackboard blackboard) { // Save blackboard while executing. _blackboard = blackboard; // Get current state from blackboard. object state; if (!_blackboard.variables.TryGetValue("CurrentState" + GetInstanceID(), out state)) { return(null); } // Execute state. FSMStateNode currentState = state as FSMStateNode; currentState.Run(); // Get transition if any. FSMStateNode newState = currentState.GetTransition(); if (newState != null) { currentState.Exit(); _blackboard.variables["CurrentState" + GetInstanceID()] = newState; newState.Enter(); } // Nullify references to the blackboard. _blackboard = null; return(null); }
/// <summary>Init the graph in the given blackboard.</summary> public override void Init(AIBlackboard blackboard) { // Save blackboard while executing. _blackboard = blackboard; _blackboard.variables["CurrentState" + GetInstanceID()] = _entryState; // Trigger enter on root. _entryState.Enter(); }