コード例 #1
0
    public NodeForEdit FindRoad(NodeForEdit src, NodeForEdit.MoveDir dir)
    {
        Vector2 dpos = src.pos + src.dir[(int)dir];

        foreach (var dn in nodes)
        {
            if (dn.pos == dpos)
            {
                return(dn);
            }
        }
        return(null);
    }
コード例 #2
0
ファイル: MapEditor.cs プロジェクト: atpx0001/GameA9
    void LinkNode(NodeForEdit src, NodeForEdit.MoveDir dir)
    {
        NodeForEdit dest = map.FindRoad(src, dir);
        int         did  = (int)dir;

        if (dest != null)
        {
            src.road[did] = !src.road[did];
        }
        else
        {
            dest                     = AddNewNode(src.name);
            dest.pos                 = src.pos + src.dir[did];
            src.road[did]            = true;
            dest.road[(did + 4) % 8] = true;
        }
        SceneView.RepaintAll();
    }
コード例 #3
0
ファイル: MapEditor.cs プロジェクト: atpx0001/GameA9
    private void OnSceneGUI()
    {
        if (map.nodes == null)
        {
            map.nodes = new List <NodeForEdit>();
        }
        if (map.nodes.Count == 0)
        {
            AddNewNode("NewNode");
        }
        float size  = 5;// HandleUtility.GetHandleSize(Vector3.zero);
        float fSize = HandleUtility.GetHandleSize(Vector3.zero);

        f0.fontSize = (int)(20 * size / fSize);
        f0.fontSize = Mathf.Clamp(f0.fontSize, 5, 100);
        for (int i = 0; i < map.nodes.Count; i++)
        {
            if (map.nodes[i] == null || !map.nodes[i].hasInit)
            {
                continue;
            }
            NodeForEdit node = map.nodes[i];
            Vector3     dpos = Map2World(node.pos, size);

            if (pickedNode != node)
            {
                f0.normal.textColor = Color.white;
            }
            else
            {
                f0.normal.textColor = Color.black;
                Handles.CubeCap(0, dpos, Quaternion.identity, size * 2);
            }

            Vector3 lPos = dpos + Vector3.left * size * .9f + Vector3.up * size * .9f;
            Handles.Label(lPos, node.name + "[" + node.id + "]", f0);
            if (Handles.Button(dpos, Quaternion.identity, size, size, Handles.RectangleCap) && pickedNode != node)
            {
                pickedNode = node;
                Repaint();
            }
            foreach (var val in node.npcs)
            {
                lPos += Vector3.down * f0.fontSize * .02f * size;
                Handles.Label(lPos, val.name + "[" + val.id + "]", f0);
            }
            foreach (var val in node.items)
            {
                lPos += Vector3.down * f0.fontSize * .02f * size;
                Handles.Label(lPos, val.name + "[" + val.id + "]", f0);
            }

            if (node == pickedNode)
            {
                Handles.color = Color.cyan;
            }
            foreach (var e in Enum.GetValues(typeof(NodeForEdit.MoveDir)))
            {
                NodeForEdit.MoveDir key = (NodeForEdit.MoveDir)e;
                int did = (int)key;
                if (node.road[did])
                {
                    NodeForEdit dest = map.FindRoad(node, key);
                    if (dest == null)
                    {
                        node.road[did] = false;
                        SceneView.RepaintAll();
                        continue;
                    }
                    if (dest == pickedNode)
                    {
                        Handles.color = Color.yellow;
                    }
                    Vector3 p1 = Map2World(node.pos, size);
                    Vector3 p2 = Map2World(dest.pos, size);
                    Vector3 dp = (p2 - p1).normalized * size;
                    p1 += dp;
                    p2 -= dp;
                    if (p1.x != p2.x && p1.y != p2.y)
                    {
                        p1 += dp * .5f;
                        p2 -= dp * .5f;
                    }
                    float fx = p1.y < p2.y ? -1 : 1;
                    fx = p1.y == p2.y ? 0 : fx;
                    float fy = p1.x > p2.x ? -1 : 1;
                    fy = p1.x == p2.x ? 0 : fy;
                    Vector3 fix = new Vector3(fx, fy, 0) * size * .05f;
                    if (p1.x != p2.x && p1.y != p2.y)
                    {
                        fix *= 0.7f;
                    }
                    p1 += fix;
                    p2 += fix;
                    Handles.DrawLine(p1, p2);

                    // 画箭头部分
                    Vector3 dir = (p2 - p1).normalized;
                    dir = Quaternion.Euler(0, 0, 90) * dir;
                    p1 += dir * size;
                    dir = (p2 - p1).normalized * size * .2f;
                    p1  = p2 - dir;
                    Handles.DrawLine(p1, p2);
                }
            }
            Handles.color = Color.white;
        }
    }