Ejemplo n.º 1
0
    // Returns an int that details how much we have to rotate by if we have a match. If the min int is returned, no match.
    private int FindRoomRotations(GenBlockSpacialProperties room, GenBlockSpacialProperties prefab)
    {
        // Check each pattern
        for (int i = 0; i < mGenerationManager.mRoomRotations.Count; i++)
        {
            for (int j = 0; j < mGenerationManager.mRoomRotations[i].Count; j++)
            {
                // We have found our room, now we need to find our rotation
                if (mGenerationManager.mRoomRotations[i][j] == room)
                {
                    // Check for a match
                    for (int k = 0; k < mGenerationManager.mRoomRotations[i].Count; k++)
                    {
                        if (mGenerationManager.mRoomRotations[i][k] == prefab)
                        {
                            // Because our rotations are set up to from "forward" in a clockwise motion, our rotation angle is the difference between our two rooms multiplied by 90.
                            return((j - k) * 90);
                        }
                    }
                }
            }
        }

        // No match
        return(int.MinValue);
    }
Ejemplo n.º 2
0
    public List <RoomAndRotation> GetAvailableRooms()
    {
        // Set up our room list
        List <RoomAndRotation> rooms = new List <RoomAndRotation>();

        // Loop through to find candidate rooms
        for (int i = 0; i < mGenerationManager.mEnvironmentDatabase.mRooms.Count; i++)
        {
            Room room = mGenerationManager.mEnvironmentDatabase.mRooms[i].GetComponent <Room>();

            if (room.mSpacialProperties == mSpacialData.mUsedPaths)
            {
                // If a room matches our spacial data perfectly, add it to the list
                rooms.Add(new RoomAndRotation(room.gameObject, 0));
            }
            else
            {
                // Strip up and down properties
                // TODO - This could probably be moved in to the rotation calculation itself to help cut down on code clutter.
                GenBlockSpacialProperties ourRoom   = mSpacialData.mUsedPaths;
                GenBlockSpacialProperties candidate = room.mSpacialProperties;
                if ((ourRoom & GenBlockSpacialProperties.UP) != 0 && (candidate & GenBlockSpacialProperties.UP) != 0)
                {
                    ourRoom   &= ~GenBlockSpacialProperties.UP;
                    candidate &= ~GenBlockSpacialProperties.UP;
                }

                if ((ourRoom & GenBlockSpacialProperties.DOWN) != 0 && (candidate & GenBlockSpacialProperties.DOWN) != 0)
                {
                    ourRoom   &= ~GenBlockSpacialProperties.DOWN;
                    candidate &= ~GenBlockSpacialProperties.DOWN;
                }

                int degrees = FindRoomRotations(ourRoom, candidate);
                if (degrees > int.MinValue)
                {
                    rooms.Add(new RoomAndRotation(room.gameObject, degrees));
                }
            }
        }

        return(rooms);
    }
Ejemplo n.º 3
0
    private GenBlockSpacialProperties GetOppositeDirection(GenBlockSpacialProperties direction)
    {
        switch (direction)
        {
        case (GenBlockSpacialProperties.FORWARD):
        {
            return(GenBlockSpacialProperties.BACK);
        }

        case (GenBlockSpacialProperties.BACK):
        {
            return(GenBlockSpacialProperties.FORWARD);
        }

        case (GenBlockSpacialProperties.LEFT):
        {
            return(GenBlockSpacialProperties.RIGHT);
        }

        case (GenBlockSpacialProperties.RIGHT):
        {
            return(GenBlockSpacialProperties.LEFT);
        }

        case (GenBlockSpacialProperties.UP):
        {
            return(GenBlockSpacialProperties.DOWN);
        }

        case (GenBlockSpacialProperties.DOWN):
        {
            return(GenBlockSpacialProperties.UP);
        }
        }

        return(0);
    }