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;
     }
 }
示例#3
0
        /// <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);
        }
示例#4
0
 public ChangeStateItem(ChangeStateData data)
     : base(data)
 {
 }