Пример #1
0
    public void ConstructGateIfNotExists(RoomInfo roomFrom, RoomInfo roomTo)
    {
        if (roomFrom.Gates.Exists(x => rooms[x.RoomTo.x, x.RoomTo.y] != null && rooms[x.RoomTo.x, x.RoomTo.y].Equals(roomTo)) &&
            roomTo.Gates.Exists(x => rooms[x.RoomTo.x, x.RoomTo.y] != null && rooms[x.RoomTo.x, x.RoomTo.y].Equals(roomFrom)))
        {
            return;
        }

        Vector2Int localPosFrom = new Vector2Int();
        Vector2Int localPosTo   = new Vector2Int();

        RoomInfo roomFromCopy = new RoomInfo(roomFrom.Position)
        {
            Size = roomFrom.Size
        };

        roomFromCopy.GenerateGates(rooms);

        RoomInfo roomToCopy = new RoomInfo(roomTo.Position)
        {
            Size = roomTo.Size
        };

        roomToCopy.GenerateGates(rooms);

        foreach (GateInfo gate in roomFromCopy.Gates)
        {
            if (rooms[gate.RoomTo.x, gate.RoomTo.y] != null && rooms[gate.RoomTo.x, gate.RoomTo.y].Position == roomTo.Position)
            {
                localPosFrom = gate.LocalPosition;
            }
        }

        foreach (GateInfo gate in roomToCopy.Gates)
        {
            if (rooms[gate.RoomTo.x, gate.RoomTo.y] != null && rooms[gate.RoomTo.x, gate.RoomTo.y].Position == roomFrom.Position)
            {
                localPosTo = gate.LocalPosition;
            }
        }

        roomFrom.AddGate(localPosFrom, rooms);
        roomTo.AddGate(localPosTo, rooms);
    }