private ChangeStateData GetChangeState(string stateName) { if (!HasState(stateName)) { Debug.LogError(string.Format("Invalid state name '{0}'", stateName)); } foreach (var b in _Behaviors) { if (b.BehaviorType == Framework.AI.BehaviorType.ChangeState) { ChangeStateData cs = (ChangeStateData)b; if (cs.DestinationState == stateName) { return(cs); } } } ChangeStateData state = new ChangeStateData(); state.DestinationState = stateName; state.Comment = "Change state to " + stateName; state.Name = "GoTo" + stateName; AddToList(state); return(state); }
internal void ChangeStateNameTo(string oldStateName, string newStateName) { foreach (var behavior in _Behaviors) { if (behavior.BehaviorType == Framework.AI.BehaviorType.ChangeState) { ChangeStateData cs = (ChangeStateData)behavior; if (cs.DestinationState == oldStateName) { cs.DestinationState = newStateName; cs.Name = "GoTo" + newStateName; break; } } } if (_BehaviorTree.DefaultState == oldStateName) { _BehaviorTree.DefaultState = newStateName; } }
/// <summary> /// Detect Behavior data from Given XmlElement and load it /// </summary> /// <param name="behavior">XmlElement contains Behavior data</param> /// <returns>Loaded Behavior</returns> public static BehaviorData CreateBehaviorFrom(XmlElement behavior) { BehaviorData result = null; Skill.Framework.AI.BehaviorType behaviorType = Skill.Framework.AI.BehaviorType.Action; bool isCorrect = false; try { behaviorType = behavior.GetAttributeValueAsEnum <Skill.Framework.AI.BehaviorType>("BehaviorType", Skill.Framework.AI.BehaviorType.Condition); isCorrect = true; } catch (Exception) { isCorrect = false; } if (isCorrect) { switch (behaviorType) { case Skill.Framework.AI.BehaviorType.Action: result = new ActionData(); break; case Skill.Framework.AI.BehaviorType.Condition: result = new ConditionData(); break; case Skill.Framework.AI.BehaviorType.Decorator: Skill.Framework.AI.DecoratorType decoratorType = behavior.GetAttributeValueAsEnum <Skill.Framework.AI.DecoratorType>("DecoratorType", Skill.Framework.AI.DecoratorType.Default); switch (decoratorType) { case Skill.Framework.AI.DecoratorType.Default: result = new DecoratorData(); break; case Skill.Framework.AI.DecoratorType.AccessLimit: result = new AccessLimitDecoratorData(); break; default: break; } break; case Skill.Framework.AI.BehaviorType.Composite: Skill.Framework.AI.CompositeType selectorType = behavior.GetAttributeValueAsEnum <Skill.Framework.AI.CompositeType>("CompositeType", Skill.Framework.AI.CompositeType.Sequence); switch (selectorType) { case Skill.Framework.AI.CompositeType.Sequence: result = new SequenceSelectorData(); break; case Skill.Framework.AI.CompositeType.Concurrent: result = new ConcurrentSelectorData(); break; case Skill.Framework.AI.CompositeType.Random: result = new RandomSelectorData(); break; case Skill.Framework.AI.CompositeType.Priority: result = new PrioritySelectorData(); break; case Skill.Framework.AI.CompositeType.Loop: result = new LoopSelectorData(); break; case Skill.Framework.AI.CompositeType.State: result = new BehaviorTreeStateData(); break; } break; case Skill.Framework.AI.BehaviorType.ChangeState: result = new ChangeStateData(); break; } } return(result); }
public ChangeStateItem(ChangeStateData data) : base(data) { }