Ejemplo n.º 1
0
 void Start()
 {
     Debug.Assert(RoomSize != Enums.RoomSizes.None);
     Debug.Assert(RoomType != Enums.RoomTypes.None);
     //Debug.Assert(RoomOverUnder != Enums.RoomOverUnder.Neutral);
     Debug.Assert(LeftmostIndex.IsValid() == true);
 }
Ejemplo n.º 2
0
    private void LinkRoom(GridIndex[] occupiedIndizes)
    {
        // Step through all indizes and link (internally and to others)
        // On front plane, we can only link to left/right/back
        // On back plane, we can only link to above/below/front

        Enums.MoveDirections[] FrontPlaneDirections = { Enums.MoveDirections.Left, Enums.MoveDirections.Right, Enums.MoveDirections.Back };
        Enums.MoveDirections[] BackPlaneDirections  = { Enums.MoveDirections.Top, Enums.MoveDirections.Bottom, Enums.MoveDirections.Front };

        for (int i = 0; i < occupiedIndizes.Length; i++)
        {
            if (occupiedIndizes[i].IsFrontPlane())
            {
                foreach (Enums.MoveDirections Dir in FrontPlaneDirections)
                {
                    GridIndex AdjIndex = occupiedIndizes[i].GetAdjacent(Dir);
                    if (!AdjIndex.IsValid())
                    {
                        continue;
                    }
                    if (!_GridData[AdjIndex.X, AdjIndex.Y, AdjIndex.Z].Occupied)
                    {
                        continue;
                    }
                    _GridMovements.LinkTiles(occupiedIndizes[i], AdjIndex, Dir);
                }
            }
            else // Is backplane
            {
                foreach (Enums.MoveDirections Dir in BackPlaneDirections)
                {
                    GridIndex AdjIndex = occupiedIndizes[i].GetAdjacent(Dir);
                    if (!AdjIndex.IsValid())
                    {
                        continue;
                    }
                    if (!_GridData[AdjIndex.X, AdjIndex.Y, AdjIndex.Z].Occupied)
                    {
                        continue;
                    }



                    // Unless the rooms are entrance rooms...
                    // If the current room is on the surface, don't link to a bottom room
                    // If the current room is one below the surface, don't link to a top room

                    if (((occupiedIndizes[i].Y == Constants.GridSurfaceY && Dir == Enums.MoveDirections.Bottom) ||
                         (occupiedIndizes[i].Y == Constants.GridSurfaceY - 1 && Dir == Enums.MoveDirections.Top)))
                    {
                        continue;
                    }
                    _GridMovements.LinkTiles(occupiedIndizes[i], AdjIndex, Dir);
                }
            }
        }
    }
Ejemplo n.º 3
0
 public Guid GetGridTileRoomGuid(GridIndex index)
 {
     if (index == null)
     {
         throw new ArgumentNullException("index");
     }
     Debug.Assert(index.IsValid() == true);
     return(_GridData[index.X, index.Y, index.Z].RoomId);
 }
Ejemplo n.º 4
0
    void CheckLeftRightBuildingPositions(GridIndex index, Enums.RoomSizes roomSize, ref List <GridIndex> indexList)
    {
        // Left check
        GridIndex[] indizes = index.GetLeft((int)roomSize);
        if (GridIndex.IsValid(indizes) && IsGridAreaFree(indizes))
        {
            if (indexList.Contains(indizes[0]) == false)
            {
                indexList.Add(indizes[0]);
            }
        }

        // Right check
        indizes = index.GetRight((int)roomSize);
        if (GridIndex.IsValid(indizes) && IsGridAreaFree(indizes))
        {
            if (indexList.Contains(indizes[0]) == false)
            {
                indexList.Add(indizes[0]);
            }
        }
    }
Ejemplo n.º 5
0
    void CheckAboveBelowBuildingPositions(GridIndex index, ref List <GridIndex> indexList)
    {
        if (index == null)
        {
            throw new ArgumentNullException("index");
        }
        if (indexList == null)
        {
            throw new ArgumentNullException("indexList");
        }

        // Only checking the front plane for this (Z = 0)
        if (index.Y != Constants.GridSurfaceY - 1)
        {
            GridIndex IndexAbove = index.GetAbove();
            if (IndexAbove.IsValid() && (_GridData[IndexAbove.X, IndexAbove.Y, 0].Occupied == false))
            {
                if (indexList.Contains(IndexAbove) == false)
                {
                    indexList.Add(IndexAbove);
                }
            }
        }

        if (index.Y != Constants.GridSurfaceY)
        {
            GridIndex IndexBelow = index.GetBelow();
            if (IndexBelow.IsValid() && (_GridData[IndexBelow.X, IndexBelow.Y, 0].Occupied == false))
            {
                if (indexList.Contains(IndexBelow) == false)
                {
                    indexList.Add(IndexBelow);
                }
            }
        }
    }