private void LoadData()
        {
            Debug.Log($"Loading AI data from '{TestAssetPath}'...");

            AIData data = AssetDatabase.LoadAssetAtPath <AIData>(TestAssetPath);

            if (null == data)
            {
                Debug.LogError("Could not load AI data!");
                return;
            }

            foreach (AIState state in data.States)
            {
                AIEditorNode stateNode = new AIEditorNode(state.EditorPosition, state.Name, this);
                AddNode(stateNode);

                // TODO: check for overwrites
                _states[state.Id] = stateNode;
            }

            foreach (AIStateTransition stateTransition in data.StateTransitions)
            {
                AIEditorNode startNode = _states.GetOrDefault(stateTransition.StartState);
                if (null == startNode)
                {
                    Debug.Log($"No such start state {stateTransition.StartState}!");
                    continue;
                }

                AIEditorNode endNode = _states.GetOrDefault(stateTransition.EndState);
                if (null == endNode)
                {
                    Debug.Log($"No such end state {stateTransition.EndState}!");
                    continue;
                }

                AIEditorEdge stateEdge = new AIEditorEdge(this)
                {
                    StartNode = startNode,
                    EndNode   = endNode
                };
                AddEdge(stateEdge);
            }
        }
        private void LoadData()
        {
            Debug.Log($"Loading AI data from '{TestAssetPath}'...");

            AIData data = AssetDatabase.LoadAssetAtPath<AIData>(TestAssetPath);
            if(null == data) {
                Debug.LogError("Could not load AI data!");
                return;
            }

            foreach(AIState state in data.States) {
                AIEditorNode stateNode = new AIEditorNode(state.EditorPosition, state.Name, this);
                AddNode(stateNode);

                // TODO: check for overwrites
                _states[state.Id] = stateNode;
            }

            foreach(AIStateTransition stateTransition in data.StateTransitions) {
                AIEditorNode startNode = _states.GetOrDefault(stateTransition.StartState);
                if(null == startNode) {
                    Debug.Log($"No such start state {stateTransition.StartState}!");
                    continue;
                }

                AIEditorNode endNode = _states.GetOrDefault(stateTransition.EndState);
                if(null == endNode) {
                    Debug.Log($"No such end state {stateTransition.EndState}!");
                    continue;
                }

                AIEditorEdge stateEdge = new AIEditorEdge(this)
                {
                    StartNode = startNode,
                    EndNode = endNode
                };
                AddEdge(stateEdge);
            }
        }