private void FindTransitionPoint() { if (!string.IsNullOrEmpty(transitionPoint) && !SceneManager.GetActiveScene().name.Contains("Dungeon")) { TransitionTrigger transitionTrigger = GameObject.Find(transitionPoint).GetComponent <TransitionTrigger>(); if (transitionTrigger.exit != null) { transform.position = transitionTrigger.exit.transform.position; } else { transform.position = transitionTrigger.transform.position; } } transitionPoint = null; }
/** @brief Add a transition between two states. * * @param originStateName The name of the State to transitate from. * @param targetStateName The name of the State to transitate to. * @param trigget Trigger that determinates when to transitate. * @param layerId The layer in which the states has to be found. * @param priotity The prority to be actived. * @return A reference to the transition created. */ public bool AddTransition(string originStateName, string targetStateName, TransitionTrigger trigger, int layerId = 0, int priority = 0) { Layer layerAux = FindLayer(layerId); if (layerAux == null) { Debug.LogWarningFormat("The transition {0}-{1} has not been added, no exists state {2} in layer {3}.", originStateName, targetStateName, originStateName, layerId); return(false); } Transition newTransition = layerAux.AddTransition(originStateName, targetStateName, trigger, priority); if (newTransition == null) { Debug.LogWarningFormat("The transition {0}-{1} has not been added to the state {2} in layer {3}.", originStateName, targetStateName, originStateName, layerId); } return(true); }
public void TransitionEvents() { StateMachine stateMachine = new StateMachine(); SimpleState s0 = new SimpleState(), s1 = new SimpleState(); stateMachine.AddState(s0); stateMachine.AddState(s1); stateMachine.AddEntryTransition(0, null); stateMachine.AddExitTransition(1, null); TransitionTrigger trigger = new TransitionTrigger(); stateMachine.AddTransition(0, 1, trigger); List <string> result = new List <string>(); s0.StateLeave += () => result.Add("leave: 0"); s1.StateEnter += () => result.Add("enter: 1"); trigger.BeforeTransition += () => { result.Add("before transition"); Assert.AreEqual("0.-1", stateMachine.GenerateActiveStateDescriptor()); }; trigger.AfterTransition += () => { result.Add("after transition"); Assert.AreEqual("-1", stateMachine.GenerateActiveStateDescriptor()); }; stateMachine.Run(); trigger.Fire(); Assert.AreEqual(4, result.Count); Assert.AreEqual("before transition", result[0]); Assert.AreEqual("leave: 0", result[1]); Assert.AreEqual("enter: 1", result[2]); Assert.AreEqual("after transition", result[3]); trigger.BeforeTransition += () => trigger.StopTransition(); result.Clear(); stateMachine.Reset(); stateMachine.Run(); trigger.Fire(); Assert.AreEqual(1, result.Count); Assert.AreEqual("before transition", result[0]); }
public void MultiEdges() { StateMachine stateMachine = new StateMachine(); SimpleState s0 = new SimpleState(), s1 = new SimpleState(); stateMachine.AddState(s0); stateMachine.AddState(s1); stateMachine.AddEntryTransition(0, null); stateMachine.AddExitTransition(1, null); TransitionTrigger trigger0 = new TransitionTrigger(); TransitionTrigger trigger1 = new TransitionTrigger(); stateMachine.AddTransition(0, 1, trigger0); stateMachine.AddTransition(0, 1, trigger1); stateMachine.Run(); trigger0.Fire(); Assert.AreEqual("-1", stateMachine.GenerateActiveStateDescriptor()); stateMachine.Reset(); stateMachine.Run(); trigger1.Fire(); Assert.AreEqual("-1", stateMachine.GenerateActiveStateDescriptor()); }
/** @brief Add a transition to the state. * * @param targetState The State to transitate to. * @param trigget Trigger that determinates when to transitate. * @param priotity The prority to be actived. * @return A reference to the transition created. */ public Transition AddTransition(State targetState, TransitionTrigger trigger, int priority = 0) { // Check if the target state belong to the same layer than this. if (!targetState.Layer.Equals(this.Layer)) { Debug.LogWarningFormat("The state {0} does not belong to the layer {1}.", targetState.Name, this.Layer.Id); return(null); } Transition newTransition = new Transition(targetState, trigger, priority); // Check if this transition alreary exists. if (_transitions.Contains(newTransition)) { Debug.LogWarningFormat("This transition {0}-{1} does already exist.", this.Name, newTransition.TargetState.Name); return(null); } // Adding the transtion. _transitions.Add(newTransition); // Sorting transtions by prority. _transitions.Sort(); return(newTransition); }
protected bool AddTransition(string originStateName, string targetStateName, TransitionTrigger trigger, int layerId = 0, int priority = 0) { return(_agent.AddTransition(originStateName, targetStateName, trigger, layerId, priority)); }
// Start is called before the first frame update void Start() { myText = GetComponent <Text>(); sc_TT = GameObject.Find("TransitionTrigger").GetComponent <TransitionTrigger>(); }
/** @brief Add a transition between two states. * * @param originStateName The name of the State to transitate from. * @param targetStateName The name of the State to transitate to. * @param trigget Trigger that determinates when to transitate. * @param priotity The prority to be actived. * @return A reference to the transition created. */ public Transition AddTransition(string originStateName, string targetStateName, TransitionTrigger trigger, int priority = 0) { // Check if the states exist. State originState = FindState(originStateName); if (originState == null) { Debug.LogWarningFormat("The state {0} does not exist in layer {1}.", originStateName, _id); return(null); } State targetState = FindState(targetStateName); if (targetState == null) { Debug.LogWarningFormat("The state {0} does not exist in layer {1}.", targetStateName, _id); return(null); } return(originState.AddTransition(targetState, trigger, priority)); }
public TransitionItem(TransitionTrigger awaitTrigger, TransitionResult getResult) { _awaitTrigger = awaitTrigger; _getResult = getResult; }
/** \brief Creates a Trasition object. * * @param targetState The state which this transition transitates to. * @param trigger Trigger that determinates when to transitate. * @param priotity The prority to be actived. */ public Transition(State targetState, TransitionTrigger trigger, int priority = 0) { _targetState = targetState; _trigger = trigger; _priority = priority; }
public void AddStateMachine(StateMachineModel model) { var addedTriggers = new List <string>(); var addedStates = new List <string>(); var stateMachineDefinition = new SMDefinition { Name = model.Name, Agenda = model.Agenda, Version = model.Version, Definition = model.Definition.ToString(Formatting.None), }; _context.SMDefinition.Add(stateMachineDefinition); _context.SaveChanges(); var initialStateName = (string)model.Definition["initial"]; var allObjects = model.Definition.DescendantsAndSelf().OfType <JObject>(); var stateTokens = allObjects.Where(x => x.ContainsKey("kind")); var transitionTokens = allObjects.Where(x => x.ContainsKey("target")); var stateTypeId = _context.ElementType.FirstOrDefault(x => x.Name.Equals("state")).Id; var transitionTypeId = _context.ElementType.FirstOrDefault(x => x.Name.Equals("transition")).Id; foreach (var transition in transitionTokens) { if (!addedTriggers.Contains((string)transition["event"])) { var newTrigger = new TransitionTrigger { Name = (string)transition["event"] }; addedTriggers.Add(newTrigger.Name); _context.TransitionTrigger.Add(newTrigger); } } foreach (var state in stateTokens) { if (!addedStates.Contains((string)state["id"])) { var newState = new Element { SMDefinitionId = stateMachineDefinition.Id, ElementTypeId = stateTypeId, Name = (string)state["id"] }; addedStates.Add(newState.Name); _context.Element.Add(newState); } } _context.SaveChanges(); foreach (var state in stateTokens) { var childTransitionTokens = state["states"] == null ? state.DescendantsAndSelf().OfType <JObject>().Where(x => x.ContainsKey("target")) : state.SelectToken("transitions").Children().OfType <JObject>().Where(x => x.ContainsKey("target")); foreach (var childTransition in childTransitionTokens) { var newTransition = new Element { ElementTypeId = transitionTypeId, SMDefinitionId = stateMachineDefinition.Id, OldStateId = _context.Element.FirstOrDefault(x => x.ElementTypeId == stateTypeId && x.Name.Equals((string)state["id"])).Id, NewStateId = _context.Element.FirstOrDefault(x => x.ElementTypeId == stateTypeId && x.Name.Equals((string)childTransition["target"])).Id, TransitionTriggerId = _context.TransitionTrigger.FirstOrDefault(x => x.Name.Equals((string)childTransition["event"])).Id }; _context.Element.Add(newTransition); } } stateMachineDefinition.InitialStateId = _context.Element.FirstOrDefault(x => x.ElementTypeId == stateTypeId && x.Name.Equals(initialStateName)).Id; _context.SaveChanges(); }