Esempio n. 1
0
 private void AutoAddInvisibounds()
 {
     for (int i = 0; i < MyRoomData.Openings.Count; i++)
     {
         // No room here?? Protect me with an InvisiBounds!
         RoomOpening rod = MyRoomData.Openings[i];
         if (!rod.IsRoomTo)
         {
             BoxCollider2D col = new GameObject().AddComponent <BoxCollider2D>();
             col.transform.SetParent(this.transform);
             col.transform.localScale       = Vector3.one;
             col.transform.localEulerAngles = Vector3.zero;
             col.gameObject.layer           = LayerMask.NameToLayer("Ground"); // so our feet stop on it, yanno.
             col.name = "Invisibounds" + rod.side;
             // Determine the collider's rect, ok? Promise?
             float thickness = 10f;
             Rect  rect      = new Rect {
                 size   = GetInvisiboundSize(rod, thickness),
                 center = rod.posCenter + MathUtils.GetDir(rod.side) * thickness * 0.5f,
             };
             // Make it happen!
             col.transform.localPosition = rect.center;
             col.size = rect.size;
         }
     }
 }
Esempio n. 2
0
 private Vector2 GetInvisiboundSize(RoomOpening lo, float thickness)
 {
     if (lo.side == Sides.L || lo.side == Sides.R)
     {
         return(new Vector2(thickness, lo.length));
     }
     return(new Vector2(lo.length, thickness));
 }
        private Vector2 GetOpeningSpriteSize(RoomOpening lo)
        {
            float thickness = 1f;

            if (lo.side == Sides.L || lo.side == Sides.R)
            {
                return(new Vector2(thickness, lo.length));
            }
            return(new Vector2(lo.length, thickness));
        }
        private void AddOpeningsSprite(RoomOpening ro)
        {
            string         _name     = "Opening" + ro.side;
            Vector2        _pos      = ro.posCenter;
            Vector2        _size     = GetOpeningSpriteSize(ro);
            Sprite         _sprite   = ResourcesHandler.Instance.s_whiteSquare;
            SpriteRenderer newSprite = AddSpriteRenderer(_name, _sprite, go_openings, _pos, _size, 120, GetOpeningColor(ro));

            srs_openings.Add(newSprite);
        }
Esempio n. 5
0
    ///** Creates and returns a rect that's JUST made up of these rooms. */
    //public Rect GetBoundsOfRooms (string[] _roomKeys) {
    //    Rect returnRect = new Rect (0,0, 0,0);
    //    for (int i=0; i<_roomKeys.Length; i++) {
    //        RoomData rd = GetRoomData (_roomKeys [i]);
    //        if (rd == null) { Debug.LogError ("Oops! This room doesn't exist in this world! " + _roomKeys[i] + ", world " + worldIndex); continue; }
    //        returnRect = MathUtils.GetCompoundRect (returnRect, rd.BoundsGlobalBL);
    //    }
    //    return returnRect;
    //}


    public RoomData GetRoomNeighbor(RoomData originLD, RoomOpening opening)
    {
        // Get the neighbor, ignoring ITS openings.
        RoomData neighbor = GetRoomAtSide(originLD, opening.posCenter, opening.side);

        if (neighbor == null)
        {
            return(null);
        }                                      // NOTHing there? Return null!
        // Ok, if this neighbor HAS a corresponding opening, return it!!
        Rect opRect = opening.GetCollRectGlobal(originLD.PosGlobal);

        for (int i = 0; i < neighbor.Openings.Count; i++)
        {
            Rect otherOpRect = neighbor.Openings[i].GetCollRectGlobal(neighbor.PosGlobal);
            if (opRect.Overlaps(otherOpRect))
            {
                return(neighbor);
            }
        }
        // Ah, NO corresponding opening. Return null.
        return(null);
    }
Esempio n. 6
0
    private void AddRoomOpening(int side, Vector2 startPos, Vector2 endPos)
    {
        RoomOpening newObj = new RoomOpening(this, side, startPos, endPos);

        Openings.Add(newObj);
    }
Esempio n. 7
0
    private List <Room> GenerateLevel()
    {
        // Initialize with starting room.
        List <Room> rooms = new List <Room>(), roomTypes = new List <Room>(roomPrefabs);
        Room        lastRoom    = InstantiateRoom(RandomRoomPrefab(), Vector3.zero, Quaternion.identity);
        RoomOpening lastOpening = lastRoom.RandomOpening();

        rooms.Add(lastRoom);

        // Loop to generate rest of the level.
        while (lastOpening != null && rooms.Count < roomAmount)
        {
            // Check if we have more rooms to check.
            if (roomTypes.Count > 0)
            {
                // Next room type.
                Room roomPrefab = roomTypes[Random.Range(0, roomTypes.Count)];
                roomTypes.Remove(roomPrefab);

                // Instantiate
                Room        nextRoom    = InstantiateRoom(roomPrefab, Vector3.zero, Quaternion.identity);
                RoomOpening nextOpening = nextRoom.RandomOpening();

                // Position and Orientation.
                Vector3    target   = -lastOpening.transform.forward;
                Quaternion rotation = Quaternion.FromToRotation(nextOpening.transform.forward, target);
                nextRoom.transform.rotation = rotation;
                Vector3 position = lastOpening.transform.position + (nextRoom.transform.position - nextOpening.transform.position);
                nextRoom.transform.position = position;

                // Check
                bool valid = true;
                foreach (Room room in rooms)
                {
                    if (!room.Equals(lastRoom) && room.CollisionCheck(nextRoom))
                    {
                        valid = false;
                    }
                }

                // Loop
                if (valid)
                {
                    rooms.Add(nextRoom);
                    nextRoom.RemoveOpening(nextOpening);
                    lastRoom    = nextRoom;
                    lastOpening = nextRoom.RandomOpening();
                    roomTypes   = new List <Room>(roomPrefabs);
                }
                else
                {
                    Destroy(nextRoom.gameObject);
                    lastOpening = lastRoom.RandomOpening();
                }
            }
            else
            {
                // Pick a new opening.
                lastRoom.RemoveOpening(lastOpening);
                lastOpening = lastRoom.RandomOpening();
                roomTypes   = new List <Room>(roomPrefabs);
            }
        }
        return(rooms);
    }
 public Color GetOpeningColor(RoomOpening ro)
 {
     return(ro.IsRoomTo ? Color.clear : new Color(1, 0.3f, 0.7f, 0.94f));//new Color(0.4f,1,0, 0.3f)
 }
Esempio n. 9
0
 public void RemoveOpening(RoomOpening roomOpening)
 {
     SideOpenings.Remove(roomOpening);
 }