Example #1
0
        private void AddTransition(StateNode endState, Transition transition)
        {
            if (!connectedStates.Contains(endState.state))
            {
                connectedStates.Add(endState.state);
                TransitionDataHolder t = ScriptableObject.CreateInstance <TransitionDataHolder>();
                t.Init(RemoveTransition, RemoveTransitionFromInspector);
                t.TransitionsForState = new List <Transition>();
                t.TransitionsForState.Add(transition);

                // If the other state transitions to this one, it needs to be two ways
                if (endState.connectedStates.Contains(state))
                {
                    t.TwoWayTransition = true;
                    endState.stateTransitionInfo[state].TwoWayTransition = true;
                    t.OtherWayTransition = endState.stateTransitionInfo[state];
                    endState.stateTransitionInfo[state].OtherWayTransition = t;
                    endState.UpdateTriangleRotation(state);
                }

                stateTransitionInfo.Add(endState.state, t);
            }
            else
            {
                stateTransitionInfo[endState.state].TransitionsForState.Add(transition);
            }

            UpdateTriangleRotation(endState.state);
        }
Example #2
0
        private void ProcessTransitionContextMenu(TransitionDataHolder transition)
        {
            GenericMenu genericMenu = new GenericMenu();

            genericMenu.AddItem(new GUIContent("Remove Transition"), false, () => RemoveTransition(transition));
            genericMenu.ShowAsContext();
        }
Example #3
0
        /// <summary>
        /// Removed a connection from this node
        /// </summary>
        /// <param name="transitionToRemove"></param>
        public void RemoveTransition(TransitionDataHolder transition)
        {
            if (transition.OtherWayTransition != null)
            {
                transition.OtherWayTransition.TwoWayTransition   = false;
                transition.OtherWayTransition.OtherWayTransition = null;
                transition.OtherWayTransition.UpdateTrianglePosition(transition.TransitionsForState[0].NextState.Rectangle.center, state.Rectangle.center, transitionClickableSize, twoWayTransitionOffset);
            }

            stateTransitionInfo.Remove(transition.TransitionsForState[0].NextState);
            connectedStates.Remove(transition.TransitionsForState[0].NextState);

            for (int i = 0; i < transition.TransitionsForState.Count; i++)
            {
                state.Transitions.Remove(transition.TransitionsForState[i]);
                UnityEngine.Object.DestroyImmediate(transition.TransitionsForState[i], true);
            }
            UnityEngine.Object.DestroyImmediate(transition, true);
        }
Example #4
0
        public override void OnInspectorGUI()
        {
            TransitionDataHolder transitionData = (TransitionDataHolder)target;

            GUILayout.Label("Transition to: " + transitionData.TransitionsForState[0].NextState.StateName);

            for (int i = 0; i < transitionData.TransitionsForState.Count; i++)
            {
                // Get the decisions array
                SerializedObject   obj       = new UnityEditor.SerializedObject(transitionData.TransitionsForState[i]);
                SerializedProperty decisions = obj.FindProperty("decisions");

                // Display array and edit it
                EditorGUILayout.PropertyField(decisions, true);
                obj.ApplyModifiedProperties();

                // Create button to remove transitions
                if (GUILayout.Button("Remove this transition"))
                {
                    // If there is more than one transition, remove only the single transition
                    // If there is only one transition, remove the transition and destroy the state connection
                    if (transitionData.TransitionsForState.Count > 1)
                    {
                        if (transitionData.RemoveIndividualAction != null)
                        {
                            transitionData.RemoveIndividualAction(transitionData.TransitionsForState[i], transitionData);
                        }
                    }
                    else
                    {
                        if (transitionData.RemoveAction != null)
                        {
                            transitionData.RemoveAction(transitionData);
                        }
                    }
                }
            }
        }
 /// <summary>
 /// If a transition is clicked
 /// </summary>
 /// <param name="transitions"></param>
 private void OnTransitionClicked(TransitionDataHolder transitions)
 {
     Selection.activeObject   = transitions;
     subComponentEventOccured = true;
 }
Example #6
0
 /// <summary>
 /// Used to remove transition to a state from the transition data holder inspector
 /// </summary>
 /// <param name="transition"></param>
 private void RemoveTransitionFromInspector(Transition transition, TransitionDataHolder transitionData)
 {
     state.Transitions.Remove(transition);
     transitionData.TransitionsForState.Remove(transition);
 }