Beispiel #1
0
        private void createCube(int x, int y, int z)
        {
            var json = new NodeJson(NodeDataManager.NextName(NodeType.CUBE), new Vector3(x, y, z), Vector3.one * 5, "", NodeType.CUBE);

            NodeDataManager.AddNode(json);
            NodeFactory.CreateNode(json);
        }
    public void Export(BaseNode rootNode, string configName)
    {
        string configPath     = BTUtils.GetGenPath() + configName + ".json";
        string fullConfigPath = BTUtils.GetGenPath() + configName + "_full.json";
        string nodeMapPath    = BTUtils.GetGenPath() + configName + "_node_map.json";

        Dictionary <string, BaseNodeData> baseNodeDataDict = new Dictionary <string, BaseNodeData>();
        Dictionary <string, MergePyData>  dataDict         = new Dictionary <string, MergePyData>();

        BTUtils.DumpTree(rootNode, (BaseNode node) =>
        {
            BaseNodeData nodeData = NodeDataManager.Get(node);
            if (nodeData != null)
            {
                nodeData.Serialize(node);
                dataDict[node.name]         = new MergePyData(node);
                baseNodeDataDict[node.name] = nodeData;
            }
        });

        BTUtils.SaveJsonToFile <Dictionary <string, MergePyData> >(dataDict, configPath);

        BaseNodeData rootNodeData = NodeDataManager.Get(rootNode);

        BTUtils.SaveJsonToFile <BaseNodeData>(rootNodeData, fullConfigPath);

        BTUtils.SaveJsonToFile <Dictionary <string, BaseNodeData> >(baseNodeDataDict, nodeMapPath);
    }
Beispiel #3
0
 public void Init()
 {
     NodeDataManager.Load("", new NodeJsonHolder());
     this.cutter       = GameObject.CreatePrimitive(PrimitiveType.Cube);
     this.nodesCreated = new List <NodeJson>();
     NodeHoleCutter.ResetIgnores();
 }
Beispiel #4
0
    public static ConnectionPoint CreateConnectionPoint(BaseNode node, ConnectionPointType type)
    {
        ConnectionPoint connectionPoint = new ConnectionPoint(node, type);

        //new Data
        NodeDataManager.CreateConnectionPointData(connectionPoint);
        connectionPoint_list.Add(connectionPoint);
        return(connectionPoint);
    }
Beispiel #5
0
    public static Connection CreateConnection(ConnectionPoint outPoint, ConnectionPoint inPoint)
    {
        Connection connection = new Connection(outPoint, inPoint, OnClickRemoveConnection);

        //new Data
        NodeDataManager.CreateConnectionData(connection);
        connection_list.Add(connection);
        return(connection);
    }
Beispiel #6
0
    public virtual void Serialize(BaseNode node)
    {
        base.SetId(node);

        this.name       = node.name;
        this.x          = (int)node.rect.x;
        this.y          = (int)node.rect.y;
        this.outPoint   = NodeDataManager.Get(node.outPoint);
        this.inPoint    = NodeDataManager.Get(node.inPoint);
        this.properties = node.properties;
    }
Beispiel #7
0
 public static void RemoveTree(BaseNode node)
 {
     NodeDataManager.Remove(node);
     if (node.childs.Count > 0)
     {
         for (int i = 0; i < node.childs.Count; i++)
         {
             DumpTree(node.childs[i]);
         }
     }
 }
Beispiel #8
0
 public static void SaveCurrentConnection()
 {
     if (selectedConnection != null)
     {
         ConnectionData data = NodeDataManager.Get(selectedConnection);
         if (data != null)
         {
             data.Serialize(selectedConnection);
         }
     }
 }
Beispiel #9
0
    private void RemoveTreeConnection()
    {
        //out's child remove in
        this.outPoint.node.childs.Remove(this.inPoint.node);

        //out's child remove in
        BaseNodeData outNodeData = NodeDataManager.Get(this.outPoint.node);
        BaseNodeData inNodeData  = NodeDataManager.Get(this.inPoint.node);

        NodeDataManager.Remove(this, outNodeData);
    }
Beispiel #10
0
 public static void SaveCurrentNode()
 {
     if (selectedNode != null)
     {
         BaseNodeData nodeData = NodeDataManager.Get(selectedNode);
         if (nodeData != null)
         {
             nodeData.Serialize(selectedNode);
         }
     }
 }
Beispiel #11
0
        public void Cuts2HoleInNonUniformRoom()
        {
            Init();
            var cube1 = new NodeJson(NodeDataManager.NextName(NodeType.CUBE), new Vector3(0, 0, 0), new Vector3(4, 3, 5), "", NodeType.CUBE);

            NodeDataManager.AddNode(cube1);
            NodeFactory.CreateNode(cube1);
            var cube2 = new NodeJson(NodeDataManager.NextName(NodeType.CUBE), new Vector3(6, 0, 0), new Vector3(6, 5, 4), "", NodeType.CUBE);

            NodeDataManager.AddNode(cube2);
            NodeFactory.CreateNode(cube2);

            runCutHoleTest(
                new Vector3(2.5f, -0.5f, 1f),
                new Vector3(2, 0.5f, 0.8f),
                (hole) => {
                if (hole.behaviour.name.Contains("right"))
                {
                    Assert.AreApproximatelyEqual(-1f, hole.position.x, "hole has wrong X pos");
                    Assert.AreApproximatelyEqual(-0.5f, hole.position.y, "hole has wrong Y pos");
                    Assert.AreApproximatelyEqual(0.8f, hole.scale.x, "hole has wrong X sca");
                    Assert.AreApproximatelyEqual(0.5f, hole.scale.y, "hole has wrong Y sca");
                }
                if (hole.behaviour.name.Contains("left"))
                {
                    Assert.AreApproximatelyEqual(1f, hole.position.x, "hole has wrong X pos");
                    Assert.AreApproximatelyEqual(-0.5f, hole.position.y, "hole has wrong Y pos");
                    Assert.AreApproximatelyEqual(0.8f, hole.scale.x, "hole has wrong X sca");
                    Assert.AreApproximatelyEqual(0.5f, hole.scale.y, "hole has wrong Y sca");
                }
            });
            this.nodesCreated.Clear();
            runCutHoleTest(
                new Vector3(2.5f, 0.75f, -0.5f),
                new Vector3(2, 0.5f, 0.8f),
                (hole) => {
                if (hole.behaviour.name.Contains("right"))
                {
                    Assert.AreApproximatelyEqual(0.1f, hole.position.x, "hole has wrong X pos");
                    Assert.AreApproximatelyEqual(0.125f / 3f, hole.position.y, "hole has wrong Y pos");
                    Assert.AreApproximatelyEqual(0.16f, hole.scale.x, "hole has wrong X sca");
                    Assert.AreApproximatelyEqual(0.5f / 3f, hole.scale.y, "hole has wrong Y sca");
                }
                if (hole.behaviour.name.Contains("left"))
                {
                    Assert.AreApproximatelyEqual(-0.125f, hole.position.x, "hole has wrong X pos");
                    Assert.AreApproximatelyEqual(-0.075f, hole.position.y, "hole has wrong Y pos");
                    Assert.AreApproximatelyEqual(0.2f, hole.scale.x, "hole has wrong X sca");
                    Assert.AreApproximatelyEqual(0.1f, hole.scale.y, "hole has wrong Y sca");
                }
            });
            CleanUp();
        }
Beispiel #12
0
    private void BuildTreeConnection()
    {
        //out's child is in
        this.outPoint.node.childs.Add(this.inPoint.node);

        //out's child is in
        BaseNodeData outNodeData = NodeDataManager.Get(this.outPoint.node);
        BaseNodeData inNodeData  = NodeDataManager.Get(this.inPoint.node);

        ConnectionData connectionData = NodeDataManager.CreateConnectionData(this);

        connectionData.targetNodeId = inNodeData.id;

        outNodeData.connectionList.Add(connectionData);
    }
    public static void ShowWindow()
    {
        if (_window == null)
        {
            _window = EditorWindow.GetWindow <BTEditorWindow>();
        }

        Reset();
        Vector2 initPosition = new Vector2(10, _window.position.height / 2 - 25);

        //BaseNode root = BTEditorManager.AddRootNode(initPosition);

        NodeDataManager.Reset();
        BTEditorManager.Reset();
    }
Beispiel #14
0
    public virtual void DeSerialize(ref BaseNode node)
    {
        BaseNodeData oldData = NodeDataManager.Get(node);

        //this可能不是node对应的那份数据
        oldData.Sync(this);

        node.id     = this.id;
        node.name   = this.name;
        node.rect.x = this.x;
        node.rect.y = this.y;
        //node.outPoint = BTEditorManager.GetObject<ConnectionPoint>(this.outPoint);
        //node.inPoint = BTEditorManager.GetObject<ConnectionPoint>(this.inPoint);
        node.properties = this.properties;
    }
Beispiel #15
0
    public virtual void Serialize(Connection connection)
    {
        base.SetId(connection);

        //Debug.Log(">connection data " + this.id);
        this.connectId = connection.connectId;
        this.slotList.Clear();
        foreach (SlotData slot in connection.slotList)
        {
            this.slotList.Add(slot);
        }

        this.outPoint = NodeDataManager.Get(connection.outPoint);
        this.inPoint  = NodeDataManager.Get(connection.inPoint);
    }
Beispiel #16
0
        public void CutHoleWhenParentHaveScale()
        {
            Init();
            // create cube inside of empty with scale, but cube is still 5*5*5 to world
            var empty1Json = new NodeJson("empty1Json", new Vector3(0, 0, 0), new Vector3(5, 2, 1), "", NodeType.EMPTY);

            NodeDataManager.AddNode(empty1Json);
            var empty2Json = new NodeJson("empty2Json", new Vector3(0, 0, 0), new Vector3(1, 2, 2), "", NodeType.EMPTY)
            {
                parentName = "empty1Json"
            };

            NodeDataManager.AddNode(empty2Json);
            var cubeJson = new NodeJson("cubeJson", new Vector3(0, 0, 0), new Vector3(1, 1.2f, 2.4f), "", NodeType.CUBE)
            {
                parentName = "empty2Json"
            };

            NodeDataManager.AddNode(cubeJson);
            NodeFactory.CreateNodes(NodeDataManager.NodeJsons);

            var cutterPos = new Vector3(3, 0.5f, -1);
            var cutterSca = new Vector3(2, 2, 2);

            this.cutter.transform.position   = cutterPos;
            this.cutter.transform.localScale = cutterSca;
            Debug.Log(string.Format("testing cutter with pos:{0} sca:{1}", cutterPos, cutterSca));

            NodeDataManager.onAddNode += this.onAddNode;
            NodeHoleCutter.CutHoles(this.cutter);

            var holeCount = 1;

            Assert.AreEqual(holeCount, this.nodesCreated.Count, string.Format("There are not {0} holes", holeCount));
            foreach (var hole in this.nodesCreated)
            {
                Assert.AreEqual(NodeType.HOLE, hole.nodeType);

                Assert.AreApproximatelyEqual(0.2f, hole.position.x, "hole has wrong X pos");
                Assert.AreApproximatelyEqual(0.125f, hole.position.y, "hole has wrong Y pos");
                Assert.AreApproximatelyEqual(0.4f, hole.scale.x, "hole has wrong X sca");
                Assert.AreApproximatelyEqual(0.5f, hole.scale.y, "hole has wrong Y sca");
            }

            NodeDataManager.onAddNode -= this.onAddNode;
            CleanUp();
        }
    private void DrawSlots()
    {
        var connection = BTEditorManager.selectedConnection;

        GUILayout.Space(20);
        GUILayout.BeginHorizontal();
        GUILayout.Label("Name", GUILayout.MaxWidth(80));
        connection.connectId = EditorGUILayout.TextArea(connection.connectId, GUILayout.MaxHeight(25));
        GUILayout.EndHorizontal();

        GUILayout.Label("Slots");
        for (int i = 0; i < connection.slotList.Count; i++)
        {
            GUILayout.BeginHorizontal("");
            connection.slotList[i].out_slot = EditorGUILayout.TextArea(connection.slotList[i].out_slot, GUILayout.MaxHeight(25));
            connection.slotList[i].in_slot  = EditorGUILayout.TextArea(connection.slotList[i].in_slot, GUILayout.MaxHeight(25));

            if (GUILayout.Button("-", GUILayout.MaxWidth(50)))
            {
                _slots_remove_list.Add(connection.slotList[i]);
            }
            GUILayout.EndHorizontal();
        }

        for (int i = 0; i < _slots_remove_list.Count; i++)
        {
            SlotData remove_key = _slots_remove_list[i];
            connection.slotList.Remove(remove_key);
            GUI.changed = true;
        }

        _slots_remove_list.Clear();
        if (GUILayout.Button("+", GUILayout.MaxWidth(50)))
        {
            var      connectionData = NodeDataManager.Get(connection);
            SlotData slotData       = new SlotData();
            slotData.SetupConnect(connectionData);
            connection.slotList.Add(slotData);
            GUI.changed = true;
        }
    }
Beispiel #18
0
    public MergePyData(BaseNode node)
    {
        this.connections = new List <Dictionary <string, string> >();

        if (node.type == NodeType.ExcelNode)
        {
            ExcelNodeData data = (ExcelNodeData)NodeDataManager.Get(node);
            if (data != null)
            {
                this.name            = data.name;
                this.file            = data.file;
                this.is_collect_info = false;
                if (data.properties.ContainsKey("is_collect_info") && data.properties["is_collect_info"][0] == "True")
                {
                    this.is_collect_info = true;
                }

                if (data.connectionList != null)
                {
                    foreach (ConnectionData connection in data.connectionList)
                    {
                        foreach (SlotData slotData in connection.slotList)
                        {
                            Dictionary <string, string> slotDic = new Dictionary <string, string>()
                            {
                                { "in_slot", slotData.in_slot },
                                { "node", slotData.node },
                                { "out_slot", slotData.out_slot }
                            };

                            connections.Add(slotDic);
                        }
                    }
                }
            }
        }
    }
Beispiel #19
0
    private static BaseNode __addNode(NodeType node_type, Vector2 mousePosition)
    {
        BaseNode node = null;

        switch (node_type)
        {
        case NodeType.BehaviourNode:
            node = new BehaviourNode();
            node.Init(mousePosition, OnClickNode);
            NodeDataManager.CreateNodeData <BaseNodeData>(node);
            nodes_list.Add(node);
            break;

        case NodeType.ExcelNode:
            node = new ExcelNode();
            node.Init(mousePosition, OnClickNode);
            NodeDataManager.CreateNodeData <ExcelNodeData>(node);
            nodes_list.Add(node);
            break;

        case NodeType.ActionNode:
            node = new ActionNode();
            node.Init(mousePosition, OnClickNode);
            NodeDataManager.CreateNodeData <BaseNodeData>(node);
            nodes_list.Add(node);
            break;

        case NodeType.ConditionNode:
            node = new ConditionNode();
            node.Init(mousePosition, OnClickNode);
            NodeDataManager.CreateNodeData <BaseNodeData>(node);
            nodes_list.Add(node);
            break;

        case NodeType.WaitNode:
            node = new WaitNode();
            node.Init(mousePosition, OnClickNode);
            NodeDataManager.CreateNodeData <BaseNodeData>(node);
            nodes_list.Add(node);
            break;

        case NodeType.SequenceNode:
            node = new SequenceNode();
            node.Init(mousePosition, OnClickNode);
            NodeDataManager.CreateNodeData <BaseNodeData>(node);
            nodes_list.Add(node);
            break;

        case NodeType.SelectorNode:
            node = new SelectorNode();
            node.Init(mousePosition, OnClickNode);
            NodeDataManager.CreateNodeData <BaseNodeData>(node);
            nodes_list.Add(node);
            break;

        case NodeType.LoopNode:
            node = new LoopNode();
            node.Init(mousePosition, OnClickNode);
            NodeDataManager.CreateNodeData <BaseNodeData>(node);
            nodes_list.Add(node);
            break;
        }

        if (node != null && nodes_list.Count == 1)
        {
            rootNode = node;
        }
        return(node);
    }
Beispiel #20
0
 public void CleanUp()
 {
     Object.DestroyImmediate(this.cutter);
     NodeDataManager.Unload();
     this.nodesCreated = null;
 }