コード例 #1
0
        /// <summary>
        /// 执行转换
        /// </summary>
        /// <param name="transitionID"></param>
        public void PerformTransition(TransitionID transitionID)
        {
            if (transitionID == TransitionID.NullTransition)
            {
                Debug.LogError("转换为空!");
                return;
            }
            StateID stateID = CurrentState.GetOutputState(transitionID);

            if (stateID == StateID.NullState)
            {
                Debug.LogError("转换 " + transitionID.ToString() + " 为空!");
                return;
            }
            foreach (BaseState state in states)
            {
                if (state.ID == stateID)
                {
                    _currentState.DoBeforeLeaving();
                    _currentState = state;
                    _currentID    = stateID;
                    _currentState.DoBeforeEnterState();
                }
            }
        }
コード例 #2
0
    public void Transition(TransitionID transitionID)
    {
        var     tempT = currentState.transitionPairs;
        StateID stateID;

        if (tempT.TryGetValue(transitionID, out stateID))
        {
            FSMState state;
            if (transitionPairs.TryGetValue(stateID, out state))
            {
                currentState.ExitState();
                state.EnterState();
                state.Excute();
                currentState = state;
            }
            else
            {
                Debug.Log("无法转换到下一个状态,因为State不存在!");
            }
        }
        else
        {
            Debug.Log("无法转换到下一个状态,因为StateID不存在!");
        }
    }
コード例 #3
0
    public void PerformTransition(TransitionID transition) //Asigna el estado al que lleva la transicion a current.
    {
        if (transition == TransitionID.NullTransition)
        {
            Debug.LogError("Transición nula.");
            return;
        }

        StateID state = currentState.GetOutputState(transition); //Recibe el estado al que se le asigno la transición.

        if (state == StateID.NullState)
        {
            Debug.LogError("La trancición no lleva a ningun estado.");
            return;
        }

        currentID = state;
        foreach (FSMState s in stateList)
        {
            if (s.getID == currentID)
            {
                currentState = s;

                break; //Si lo encuentra lo asigna a Current.
            }
        }
    }
コード例 #4
0
 /// <summary>
 /// 获得转换对应的状态
 /// </summary>
 /// <param name="transitionID"></param>
 /// <returns></returns>
 public StateID GetOutputState(TransitionID transitionID)
 {
     if (map.ContainsKey(transitionID))
     {
         return(map[transitionID]);
     }
     return(StateID.NullState);
 }
コード例 #5
0
        public StateTransition(TransitionID transitionID, StateID nextStateID)
        {
            this.TransitionID = transitionID;
            this.NextStateID = nextStateID;
            this.EventsRunning = false;

            RemoveAllEvents();
        }
コード例 #6
0
        public SceneTransition CreateTransition(ScenePart src, ScenePart dest, TransitionID type)
        {
            SceneTransition t = SceneTransition.Create(type);

            t.nextScene = dest;
            src.transitions.Add(t);
            dest.AddRef(src);
            group.Invalidate();
            return(t);
        }
コード例 #7
0
        public static SceneTransition Create(TransitionID id)
        {
            switch (id)
            {
            case TransitionID.Keyboard:
                return(new SceneTransitionKeyboard());

            default:
                return(new SceneTransitionAutomatic());
            }
        }
コード例 #8
0
 protected void AddTransition(TransitionID transitionID, StateID stateID)
 {
     if (transitionPairs.ContainsKey(transitionID))
     {
         Debug.Log("条件转换表中已存在该条件!");
     }
     else
     {
         transitionPairs.Add(transitionID, stateID);
     }
 }
コード例 #9
0
 public StateID GetOutputState(TransitionID transition) //Devuelve el StateID al que lleva la respectiva Transición.
 {
     if (stateDictionary.ContainsKey(transition))
     {
         return(stateDictionary[transition]);
     }
     else
     {
         return(StateID.NullState);
     }
 }
コード例 #10
0
 /// <summary>
 /// 添加转换
 /// </summary>
 /// <param name="transitionID"></param>
 /// <param name="stateID"></param>
 public void AddTransition(TransitionID transitionID, StateID stateID)
 {
     if (transitionID == TransitionID.NullTransition || stateID == StateID.NullState)
     {
         Debug.Log("无效的状态切换!");
         return;
     }
     if (stateID == ID)
     {
         Debug.Log("目标状态是自身!");
         return;
     }
     map.Add(transitionID, stateID);
 }
コード例 #11
0
 public void DeleteTransition(TransitionID transition)
 {
     if (transition == TransitionID.NullTransition)
     {
         Debug.LogError("!!!");
         return;
     }
     if (stateDictionary.ContainsKey(transition))
     {
         stateDictionary.Remove(transition);
     }
     else
     {
         Debug.LogError("La transicion no se encuentra en la lista.");
     }
 }
コード例 #12
0
 /// <summary>
 /// 删去转换
 /// </summary>
 /// <param name="transitionID"></param>
 public void DeleteTransition(TransitionID transitionID)
 {
     if (transitionID == TransitionID.NullTransition)
     {
         Debug.Log("该转换为空!");
         return;
     }
     if (map.ContainsKey(transitionID))
     {
         map.Remove(transitionID);
     }
     else
     {
         Debug.Log("不存在该转换!");
     }
     return;
 }
コード例 #13
0
    public void AddTransition(TransitionID transition, StateID state)
    {
        if (transition == TransitionID.NullTransition)
        {
            Debug.LogError("!!!");
            return;
        }

        if (state == StateID.NullState)
        {
            Debug.LogError("!!!");
            return;
        }
        if (stateDictionary.ContainsKey(transition))
        {
            Debug.LogError("El estado ya tiene esta trancisión asignada.");
        }
        else
        {
            stateDictionary.Add(transition, state);
        }
    }
コード例 #14
0
 public void SetTransition(TransitionID t)
 {
     fsm.PerformTransition(t);
 }
コード例 #15
0
        public void Load(string filename)
        {
            try
            {
                fname = filename;
                int       firstScene    = -1;
                bool      hasFirstScene = false;
                XmlReader xml           = XmlReader.Create(fname);

                while (xml.Read())
                {
                    if (xml.NodeType == XmlNodeType.Element)
                    {
                        if (xml.Name == "project" && xml.HasAttributes)
                        {
                            title  = xml.GetAttribute("title");
                            author = xml.GetAttribute("author");
                        }
                        else if (xml.Name == "storyboard" && xml.HasAttributes)
                        {
                            ScenePart.id_inc = int.Parse(xml.GetAttribute("lastId"));
                            hasFirstScene    = int.TryParse(xml.GetAttribute("firstScene"), out firstScene);
                        }
                        else if (xml.Name == "scene" && xml.HasAttributes)
                        {
                            ScenePart p = storyboard.CreateScene(
                                xml.GetAttribute("videoSrc"),
                                xml.GetAttribute("title"),
                                int.Parse(xml.GetAttribute("id"))
                                );
                            p.thumbnail.ImageLocation = xml.GetAttribute("thumbSrc");
                            p.timeout = int.Parse(xml.GetAttribute("timeout"));
                            int x = int.Parse(xml.GetAttribute("posX"));
                            int y = int.Parse(xml.GetAttribute("posY"));
                            p.thumbnail.Location = new System.Drawing.Point(x, y);
                        }
                        else if (xml.Name == "transition" && xml.HasAttributes)
                        {
                            ScenePart       src  = storyboard.GetScene(int.Parse(xml.GetAttribute("srcScene")));
                            ScenePart       dest = storyboard.GetScene(int.Parse(xml.GetAttribute("nextScene")));
                            TransitionID    type = (TransitionID)Enum.Parse(typeof(TransitionID), xml.GetAttribute("type"));
                            SceneTransition t    = storyboard.CreateTransition(src, dest, type);
                            if (type == TransitionID.Keyboard)
                            {
                                SceneTransitionKeyboard tk = (SceneTransitionKeyboard)t;
                                tk.keycode = int.Parse(xml.GetAttribute("keycode"));
                                if (!bool.TryParse(xml.GetAttribute("showOverlay"), out tk.showOverlay))
                                {
                                    tk.showOverlay = false;
                                }
                                if (xml.GetAttribute("caption") != null)
                                {
                                    tk.caption = xml.GetAttribute("caption");
                                }
                            }
                        }
                    }
                }
                xml.Close();

                if (hasFirstScene)
                {
                    storyboard.SetAsFirstScene(firstScene);
                }
            }
            catch (Exception e)
            {
#if DEBUG
                MessageBox.Show(e.StackTrace);
#else
                MessageBox.Show("Arquivo de projeto inválido.");
#endif
                if (storyboard != null)
                {
                    storyboard.Clear();
                }
            }
        }
コード例 #16
0
ファイル: State.cs プロジェクト: MitchLindsay/red-havoc
        protected void RemoveTransition(TransitionID transitionID)
        {
            if (transitionID != TransitionID.Null)
            {
                StateTransition transition = GetTransitionByID(transitionID);

                if (transition != null)
                    Transitions.Remove(transition);
            }
        }
コード例 #17
0
 public void SetNewTransition(int src, TransitionID type)
 {
     selectNextScene = true;
     selected        = scenes[src];
     transitionType  = type;
 }
コード例 #18
0
ファイル: State.cs プロジェクト: MitchLindsay/red-havoc
 public void RunEventsByTransitionID(TransitionID transitionID)
 {
     StateTransition transition = GetTransitionByID(transitionID);
     if (transition != null)
         transition.RunEvents();
 }
コード例 #19
0
ファイル: State.cs プロジェクト: MitchLindsay/red-havoc
        protected StateTransition GetTransitionByID(TransitionID transitionID)
        {
            if (transitionID != TransitionID.Null && Transitions.Count > 0)
            {
                foreach (StateTransition transition in Transitions)
                {
                    if (transition.TransitionID == transitionID)
                        return transition;
                }
            }

            return null;
        }
コード例 #20
0
ファイル: AIController.cs プロジェクト: Fideos/U3D
    //

    public void SetTransition(TransitionID t) //Le envia transiciones a PerformTransition.
    {
        fsm.PerformTransition(t);             //Asigna el estado al que lleva la trancision a current.
    }