示例#1
0
        public static BTFsm CreateFromOtherTemplate(BTFsm targetFsm, BTTemplate source)
        {
            for (int i = 0; i < source.totalEvent.Count; i++)
            {
                BTEvent.Create(targetFsm, source.totalEvent[i]);
            }

            for (int i = 0; i < source.totalState.Count; i++)
            {
                BTState.Create(targetFsm, source.totalState[i]);
            }
            for (int i = 0; i < source.totalState.Count; i++)
            {
                var state = targetFsm.totalState[i];
                state.ReFindEvent();
            }

            for (int i = 0; i < source.totalVariable.Count; i++)
            {
                BTVariable.Create(targetFsm, source.totalVariable[i]);
            }

            targetFsm.startEvent = targetFsm.FindGlobalEvent(source.startEvent.Name);

            return(targetFsm);
        }
示例#2
0
        public static BTFsm CreateFromOtherTemplate(BTFsm targetFsm, BTTemplate source)
        {
            for (int i = 0; i < source.totalEvent.Count; i++)
            {
                BTEvent.Create(targetFsm, source.totalEvent[i]);
            }

            for (int i = 0; i < source.totalState.Count; i++)
            {
                BTState.Create(targetFsm, source.totalState[i]);
            }
            for (int i = 0; i < source.totalState.Count; i++)
            {
                var state = targetFsm.totalState[i];
                for (int j = 0; j < state.totalEvent.Count; j++)
                {
                    if (state.totalEvent[j].TargetState != null)
                    {
                        state.totalEvent[j].TargetState = targetFsm.FindState(state.totalEvent[j].TargetState.Name);
                    }
                }
            }

            for (int i = 0; i < source.totalVariable.Count; i++)
            {
                BTVariable.Create(targetFsm, source.totalVariable[i]);
            }

            targetFsm.startEvent = targetFsm.FindGlobalEvent(source.startEvent.Name);

            return(targetFsm);
        }
示例#3
0
 public BTTemplate(BTFsm source)
 {
     totalEvent = source.totalEvent;
     totalState = source.totalState;
     startEvent = source.startEvent;
     this.name  = source.name;
 }
示例#4
0
 public BTEvent CreateEvent(string name)
 {
     startEvent          = BTEvent.Create(this);
     startEvent.Name     = name;
     startEvent.isGlobal = true;
     return(startEvent);
 }
示例#5
0
        // Use this for initialization
        void Start()
        {
            var btFsm   = gameObject.AddComponent <BTFsm>();
            var btEvent = btFsm.CreateStartEvent();
            var btState = BTState.Create <BTState>(btFsm);

            btState.Name        = "Dynamic1State";
            btEvent.TargetState = btState;
            btState.Bounds      = new Rect(250, 200, 100, 100);



            var btState1 = BTState.Create <BTState> (btFsm);

            btState1.Name   = "Dynamic2State";
            btState1.Bounds = new Rect(400, 200, 100, 100);

            var privateEvent = BTEvent.Create(btState);

            privateEvent.Name        = "Finish";
            privateEvent.TargetState = btState1;

            var privateEvent2 = BTEvent.Create(btState1);

            privateEvent2.Name        = "Finish";
            privateEvent2.TargetState = btState;

            var waitAction = BTAction.CreateAction <WaitingAction>(btState);

            waitAction.time = 1;
            var waitAction1 = BTAction.CreateAction <WaitingAction>(btState1);

            waitAction1.time = 1;
        }
示例#6
0
        public static BTEvent Create(BTState Owner)
        {
            var btEvent = new BTEvent();

            btEvent.Owner = Owner.Owner;
            Owner.totalEvent.Add(btEvent);
            return(btEvent);
        }
示例#7
0
        public static BTEvent Create(BTFsm Owner, BTEvent source)
        {
            var btEvent = new BTEvent();

            btEvent.Owner    = Owner;
            btEvent.isGlobal = source.isGlobal;
            btEvent.Name     = source.Name;
            Owner.totalEvent.Add(btEvent);
            return(btEvent);
        }
示例#8
0
 public void FindEvent(BTEvent targetEvent)
 {
     if (targetEvent.isGlobal)
     {
         GlobalEvent = Owner.FindGlobalEvent(targetEvent.Name);
         if (GlobalEvent != null)
         {
             GlobalEvent.TargetState = this;
         }
     }
 }
示例#9
0
 public void FireEvent(BTEvent nextEvent)
 {
     if (nextEvent != null)
     {
         if (nextState == null)
         {
             nextState = nextEvent.TargetState;
         }
         if (OnFireEvent != null)
         {
             OnFireEvent(currState, nextEvent);
         }
     }
 }
示例#10
0
 void FireGlobalEvent(BTEvent nextEvent)
 {
     if (currState != null)
     {
         currState.OnExit();
     }
     startEvent = nextEvent;
     currState  = startEvent.TargetState;
     startEvent.OnEnter();
     startEvent.OnExit();
     startEvent.Finish();
     startEvent = null;
     currState.OnEnter();
     //currState.OnEnter();
     //nextState = null;
 }