private void CreateStateNode(VFSMState state) { if (state == null) { Debug.LogError("[VFSMGraphView] CreatePort : Node is null."); return; } var node = new BaseNode { title = state.StateName, GUID = state.GUID }; var port = CreatePort(node, "", Direction.Input, Port.Capacity.Multi); node.inputContainer.Add(port); var _transitions = Utility.GetField <List <VFSMState.Transition> >(state, "_transitions"); for (int i = 0; i < _transitions.Count; i++) { port = CreatePort(node, _transitions[i].EventName, Direction.Output, Port.Capacity.Single); port.portName = _transitions[i].EventName; node.outputContainer.Add(port); /* * var label = port.contentContainer.Q<Label>("type"); * port.contentContainer.Remove(label); * * var textField = new TextField { * name = string.Empty, * value = _transitions[i].EventName * }; * * textField.RegisterValueChangedCallback((e) => { * ChangeEventName((port.node as BaseNode).GUID, port.portName, e.newValue); * port.portName = e.newValue; * }); * port.contentContainer.Add(textField); * * var deleteButton = new Button(() => Debug.Log("Wanna Delete !!!")) { * text = "X" * }; * * port.contentContainer.Add(deleteButton); */ } node.SetPosition(new Rect(Vector2.zero, DEFAULT_NODE_SIZE)); node.RefreshExpandedState(); node.RefreshPorts(); AddElement(node); }
private void Awake() { for (int i = 0; i < _states.Count; i++) { _states[i].OnInitialize.Invoke(this); _stateTable.Add(_states[i].StateName, _states[i]); } if (_stateTable.ContainsKey(_firstState)) { _current = _stateTable[_firstState]; } }
private void TransferState() { if (_next == null) { return; } var next = _next; _next = null; _current?.OnLeave.Invoke(this); _current = next; _current.OnEnter.Invoke(this); }
public override void BuildContextualMenu(ContextualMenuPopulateEvent evt) { base.BuildContextualMenu(evt); if (evt.target is GraphView) { evt.menu.AppendAction("New State", (e) => { if (_states != null) { var state = new VFSMState(); CreateStateNode(state); _states.Add(state); } }); } }
public void TriggerEvent(string eventName, bool immediately = false) { if (_current == null) { Debug.LogErrorFormat("[VFSM-{0}] TriggerEvent : Current State is null.", name); return; } var nextStateName = _current[eventName]; if (_stateTable.ContainsKey(nextStateName)) { _next = _stateTable[nextStateName]; if (immediately) { TransferState(); } } else { Debug.LogErrorFormat("[VFSM-{0}] TriggerEvent : Event({1}) dosen't exist in the state({2})", name, eventName, _current.StateName); } }