private void ReadGameLogicData()
        {
            BeginRead();

            if (NewReadData())
            {
                GameLogicData gameLogicData = (GameLogicData)reader.ReadInt32();

                switch (gameLogicData)
                {
                case GameLogicData.Move:
                    int   charIndex    = reader.ReadInt32();
                    Point gridLocation = new Point(reader.ReadInt32(), reader.ReadInt32());

                    ReceiveMove(charIndex, gridLocation);
                    break;

                case GameLogicData.Fight:
                    ReceiveFight(reader.ReadInt32(), reader.ReadInt32());
                    break;

                case GameLogicData.EndTurn:
                    myTurn       = true;
                    currentState = State.None;

                    ReceiveEndTurn();
                    break;
                }

                WriteResponse();
            }

            EndRead();
        }
        public static bool OpenGameLogicFromAsset(int instanceID, int line)
        {
            GameLogicData data = EditorUtility.InstanceIDToObject(instanceID) as GameLogicData;

            OpenWindow(data);
            return(data != null); // we did not handle the open
        }
        public void SaveGraphData()
        {
            if (m_GameLogicData == null)
            {
                return;
            }

            string assetPath = AssetDatabase.GetAssetPath(m_GameLogicData);

            List <Node>   nodes     = m_GraphView.nodes.ToList();
            GameLogicData graphData = ScriptableObject.CreateInstance <GameLogicData>();

            graphData.m_graphNodes = new List <GameLogicData.GameLogicGraphNode>();
            for (int i = 0; i < nodes.Count; ++i)
            {
                Node currentNode = nodes[i];
                Type nodeType    = currentNode.userData as Type;
                GameLogicData.GameLogicGraphNode graphNode = new GameLogicData.GameLogicGraphNode();
                if (nodeType == null)
                {
                    graphNode.m_type     = null;
                    graphNode.m_typeData = null;
                }
                else
                {
                    MethodInfo method = nodeType.GetMethod("ExtractExtraData", BindingFlags.Static | BindingFlags.Public);
                    if (method == null)
                    {
                        Debug.LogError("Failed to find method ExtractExtraData()!");
                        return;
                    }

                    graphNode.m_type     = nodeType.FullName;
                    graphNode.m_typeData = (string)method.Invoke(null, new object[] { currentNode });
                }
                graphNode.m_title    = currentNode.title;
                graphNode.m_position = currentNode.GetPosition().position;
                graphNode.m_outputs  = new List <GameLogicData.GameLogicGraphEdge>();

                foreach (Port port in currentNode.outputContainer)
                {
                    foreach (Edge edge in port.connections)
                    {
                        GameLogicData.GameLogicGraphEdge serializedEdge = new GameLogicData.GameLogicGraphEdge();
                        serializedEdge.m_sourcePort = currentNode.outputContainer.IndexOf(edge.output);
                        serializedEdge.m_targetNode = nodes.IndexOf(edge.input.node);
                        serializedEdge.m_targetPort = edge.input.node.inputContainer.IndexOf(edge.input);
                        graphNode.m_outputs.Add(serializedEdge);
                    }
                }

                graphData.m_graphNodes.Add(graphNode);
            }

            EditorUtility.CopySerialized(graphData, m_GameLogicData);
            AssetDatabase.SaveAssets();

            m_GameLogicData = AssetDatabase.LoadAssetAtPath <GameLogicData>(assetPath);
        }
 public static void OpenWindow(GameLogicData data)
 {
     if (data != null)
     {
         GameLogicGraphViewWindow view = GetWindow <GameLogicGraphViewWindow>("Game Logic", true, typeof(SceneView));
         view.ShowScript(data);
     }
 }
        public void ShowScript(GameLogicData data)
        {
            m_GameLogicData = data;

            if (!LoadGraphData())
            {
                Node node = CreateRootNode();
                m_GraphView.AddElement(node);
            }
        }
        void OnSelectionChanged()
        {
            ClearGraphData();

            GameLogicData[] data = Selection.GetFiltered <GameLogicData>(SelectionMode.Assets);
            if (data.Length != 1)
            {
                m_GameLogicData = null;
                return;
            }
            m_GameLogicData = data[0];

            if (!LoadGraphData())
            {
                Node node = CreateRootNode();
                m_GraphView.AddElement(node);
            }
        }