Пример #1
0
    public override void SaveBlueprint()
    {
        blueprints = new FancyModelRoomBlueprints();
        RoomEdge edge0 = new RoomEdge();

        edge0.direction = Direction.NORTH;
        edge0.length    = 5;
        blueprints.edges.Add(edge0);
        RoomEdge edge1 = new RoomEdge();

        edge0.direction = Direction.WEST;
        edge0.length    = 4;
        blueprints.edges.Add(edge1);
        RoomEdge edge2 = new RoomEdge();

        edge0.direction = Direction.EAST;
        edge0.length    = 5;
        blueprints.edges.Add(edge2);
        RoomEdge edge3 = new RoomEdge();

        edge0.direction = Direction.SOUTH;
        edge0.length    = 4;
        blueprints.edges.Add(edge3);
        string blueprint_json = JsonUtility.ToJson(blueprints);

        Parser.SaveResourceTextfile(blueprint_json, Parser.ROOM_GENERATOR_PATH, FULL_FILENAME);
        Debug.Log("Saved blueprints to " + Parser.ROOM_GENERATOR_PATH + FULL_FILENAME + ".json");
    }
Пример #2
0
        private void CreateRoomEdge(Room from, Room to)
        {
            var edge = new RoomEdge {
                Room = from, AdjacentRoom = to, RoomId = from.Id, AdjacentRoomId = to.Id
            };

            _context.RoomEdges.Add(edge);
        }
    //메인 방들을 연결한 최소 신장 트리를 구하고 보스방과 플레이어방을 선택.
    List<RoomEdge> GetMST(List<Room> mainRoomList)
    {
        List<RoomVertex> roomVertexList = new List<RoomVertex>();
        List<RoomEdge> roomEdgeList = new List<RoomEdge>();

        //정점을 만듬
        for (int i = 0; i < mainRoomList.Count; ++i)
        {
            var vertex = new RoomVertex(mainRoomList[i]);
            roomVertexList.Add(vertex);
        }

        //모든 정점을 간선으로 연결
        for (int i = 0; i < roomVertexList.Count - 1; ++i)
        {
            for (int j = i + 1; j < roomVertexList.Count; ++j)
            {
                RoomVertex vertexA = roomVertexList[i];
                RoomVertex vertexB = roomVertexList[j];

                float weight = (mainRoomList[i].CachedTransform.position - mainRoomList[j].CachedTransform.position).sqrMagnitude;
                RoomEdge edge = new RoomEdge(vertexA, vertexB, (int)weight);

                roomEdgeList.Add(edge);
            }
        }

        //그래프로 만든뒤 MST를 구한다.
        RoomGraph graph = new RoomGraph(roomVertexList, roomEdgeList);
        var mst =  graph.GetMST();

        //플레이어 방과 보스방을고름
        SelectPlayerRoomAndBossRoom(mst, roomVertexList);

        return mst;
    }