//   ----------------------------- GET -------------------------- //
    private GameObject[] GetWallByDirection(Direction4D direction)
    {
        switch (direction)
        {
        case Direction4D.Down:
        {
            return(Map.tiles.downWallTiles);
        }

        case Direction4D.Up:
        {
            return(Map.tiles.walltiles);
        }

        case Direction4D.Left:
        {
            return(Map.tiles.leftWallTiles);
        }

        case Direction4D.Right:
        {
            return(Map.tiles.rightWallTiles);
        }
        }
        return(null);
    }
Exemplo n.º 2
0
    void Look(Direction4D dir, bool oneHanded, Weapon weapon) //1 вверх 0 вправо -1 вниз
    {
        if (dir == Direction4D.Up)                            //Если смотрит вверх
        {
            parent.animator.SetFloat("LooksUp", 1f);
            hands.SetLocalPosition(Direction4D.Up, -2);
        }
        else if (dir == Direction4D.Right) //Если смотрит вправо
        {
            parent.animator.SetFloat("LooksUp", 0f);
            hands.SetLocalPosition(Direction4D.Right, 2);
        }
        else if (dir == Direction4D.Down) //Если смотрит вниз
        {
            parent.animator.SetFloat("LooksUp", -1f);

            if (oneHanded == false)
            {
                hands.SetLocalPosition(Direction4D.Down, 2);
            }
            else
            {
                hands.SetLocalPosition(Direction4D.Right, 2);
            }
        }
    }
    public Wall CreateWall(Vector2 position, Direction4D direction)
    {
        GameObject[] tileSet = GetWallByDirection(direction);
        Wall         wall    = new Wall(direction)
        {
            gameObject = GameObject.Instantiate(tileSet[UnityEngine.Random.Range(0, tileSet.Length)], position, tileSet[0].transform.rotation) as GameObject
        };

        wall.gameObject.transform.parent = place.wallGrid.transform;

        switch (direction)
        {
        case Direction4D.Up:
            UpWalls.Add(wall);
            //  Vector2 upper = new Vector2(position.x, position.y + 1);
            break;

        case Direction4D.Down:
            DownWalls.Add(wall);
            break;

        case Direction4D.Left:
            LeftWalls.Add(wall);
            break;

        case Direction4D.Right:
            RightWalls.Add(wall);
            break;
        }

        wall.info = wall.gameObject.name + "  pos: " + wall.gameObject.transform.position;

        return(wall);
    }
 public Direction4D Mirror(Direction4D value)
 {
     if (value == d1)
         return d2;
     if (value == d2)
         return d1;
     //throw new ArgumentException(value + " is not valid.");
     return Mirror(value.Reverse());
 }
    Direction4D Increase_direction(Direction4D direction)
    {
        direction += 1;
        if ((int)direction >= 4)
        {
            direction = 0;
        }

        return(direction);
    }
Exemplo n.º 6
0
 public Texture2D Get(Direction4D direction)
 {
     switch(direction)
     {
         case Direction4D.Up: return up;
         case Direction4D.Down: return down;
         case Direction4D.Left: return left;
         case Direction4D.Right: return right;
     }
     return null;
 }
    void DestroyRect(Vector2 startPos, int height, int width, Placement place)
    {
        transform.position = startPos;

        Direction4D moveSide   = Direction4D.Right;
        Direction4D moveUpDown = Direction4D.Up;

        if (height == 0)
        {
            height = 1;
        }
        if (width == 0)
        {
            width = 1;
        }
        if (height < 0)
        {
            height     = Mathf.Abs(height);
            moveUpDown = Direction4D.Down;
        }
        if (width < 0)
        {
            width    = Mathf.Abs(width);
            moveSide = Direction4D.Left;
        }

        for (int i = 1; i <= height; i++)
        {
            for (int j = 1; j <= width; j++)
            {
                if (i == 1 || j == 1 || i == height || j == width)
                {
                    place.smartGrid.RemoveFloor(transform.position);
                }
                else
                {
                    place.smartGrid.RemoveFloor(transform.position);
                }

                if (j != width)
                {
                    MoveGenerator(moveSide);
                }
            }
            if (i != height)
            {
                MoveGenerator(moveUpDown);
                transform.position = new Vector2(startPos.x, transform.position.y);
            }
        }
    }
Exemplo n.º 8
0
 public PlayerAvatar(Texture2D4D aTextures, Vector2 initialGridPos, Block[,] grid, IEnumerable<Laserbeam> laserBeams, MainGame game, bool isSilverBot = false)
 {
     gridPos = initialGridPos;
     animPos = gridPos * 32.0f;
     animTarget = animPos;
     textures = aTextures;
     facing = Direction4D.Right;
     this.grid = grid;
     this.laserBeams = laserBeams;
     this.game = game;
     explosionTexture = game.textures.explosion;
     Arrive += PlayerAvatar_Arrive;
     this.isSilverBot = isSilverBot;
 }
    private IEnumerator GenerateNextLevel()
    {
        byte roomNumber = System.Convert.ToByte(roomsAmount + shopsAmount + secretAmount);

        int roombehind = System.Convert.ToByte(roomsAmount);  // комната сзади (last)

        byte height = 6;
        byte width  = 6;

        Direction4D randDirection = RandomDirection((float)randomGenerator.NextDouble());    //Рандомное направление

        TryCreateRoom(roomNumber, roombehind, width, height, randDirection, roomType.nextlevel);

        yield return(0);
    }
    IEnumerator GenerateRooms()
    {
        for (byte roomCount = 0; roomCount < roomsAmount + 1; roomCount++)
        {
            yield return(new WaitForSecondsRealtime(0.1f));

            if (roomCount == 0)
            {
                GameObject roomObj = new GameObject
                {
                    name = "Room" + roomCount,
                    tag  = "Room"
                };

                Room room = roomObj.AddComponent <Room>();
                Map.roomObjs.Add(room);

                room.SetupRoom(roomCount, 16, 16, transform.position, roomType.playerStart, RoomMaxWidth, RoomMaxHeight);
                CreateRoom(Map.roomObjs[roomCount]);
            }
            else
            {
                byte corridor_length = minCorridorLength;
                int  roombehind      = roomCount - 1; // комната сзади

                byte height = System.Convert.ToByte(randomGenerator.Next(RoomMinHeight, RoomMaxHeight));
                byte width  = System.Convert.ToByte(randomGenerator.Next(RoomMinWidth, RoomMaxWidth)); //Рандоманая высота и ширина

                Direction4D randDirection = RandomDirection((float)randomGenerator.NextDouble());      //Рандомное направление

                if (branchChance > (float)randomGenerator.NextDouble() && roomCount > 5)               //Дополнительное разветвление
                {
                    roombehind -= 1;
                }
                if (roomCount == roomsAmount)
                {
                    TryCreateRoom(roomCount, roombehind, width, height, randDirection, roomType.last);
                }
                else
                {
                    TryCreateRoom(roomCount, roombehind, width, height, randDirection, roomType.common);
                }
            }
        }
        yield return(0);
    }
    private IEnumerator GenerateSecret()
    {
        for (int i = 0; i < secretAmount; i++)
        {
            byte roomNumber = System.Convert.ToByte(roomsAmount + shopsAmount + i);

            int roombehind = System.Convert.ToByte(randomGenerator.Next(0, roomsAmount));  // комната сзади

            byte height = 9;
            byte width  = 9;

            Direction4D randDirection = RandomDirection((float)randomGenerator.NextDouble());    //Рандомное направление

            TryCreateRoom(roomNumber, roombehind, width, height, randDirection, roomType.secret);
        }
        yield return(0);
    }
    Direction4D DoorInvert(Direction4D door)
    {
        switch (door)
        {
        case Direction4D.Up:
            return(Direction4D.Down);

        case Direction4D.Down:
            return(Direction4D.Up);

        case Direction4D.Left:
            return(Direction4D.Right);

        case Direction4D.Right:
            return(Direction4D.Left);
        }
        return(Direction4D.Up);
    }
Exemplo n.º 13
0
    public void SetLocalPosition(Direction4D position, int sortLayer)
    {
        switch (position)
        {
        case Direction4D.Down:
            SetHandsLayer(sortLayer);
            transform.localPosition = new Vector3(lookDownHandsPos.x, lookDownHandsPos.y, 0);
            break;

        case Direction4D.Up:
            SetHandsLayer(sortLayer);
            transform.localPosition = new Vector3(defaultHandsPos.x, defaultHandsPos.y, 0);
            break;

        default:
            SetHandsLayer(sortLayer);
            transform.localPosition = new Vector3(defaultHandsPos.x, defaultHandsPos.y, 0);
            break;
        }
    }
    private IEnumerator GenerateShops()
    {
        for (int i = 0; i < shopsAmount; i++)
        {
            yield return(new WaitForSecondsRealtime(0.1f));

            byte roomNumber = System.Convert.ToByte(roomsAmount + i);

            int roombehind = System.Convert.ToByte(randomGenerator.Next(0, roomsAmount));  // комната сзади

            byte height = 14;
            byte width  = 16;

            Direction4D randDirection = RandomDirection((float)randomGenerator.NextDouble());    //Рандомное направление

            TryCreateRoom(roomNumber, roombehind, width, height, randDirection, roomType.shop);
        }

        yield return(0);
    }
    void MoveGenerator(Direction4D direction)
    {
        switch (direction)
        {
        case Direction4D.Up:
            transform.position = new Vector2(transform.position.x, transform.position.y + 1);
            break;

        case Direction4D.Down:
            transform.position = new Vector2(transform.position.x, transform.position.y - 1);
            break;

        case Direction4D.Right:
            transform.position = new Vector2(transform.position.x + 1, transform.position.y);
            break;

        case Direction4D.Left:
            transform.position = new Vector2(transform.position.x - 1, transform.position.y);
            break;
        }
    }
Exemplo n.º 16
0
    public void SetupCorridor(Direction4D direction, byte length, System.Random rand)
    {
        GameObject cor = new GameObject();

        Corridor corridor = cor.AddComponent <Corridor>();

        Vector2 startCorner = Vector2.zero;
        Vector2 endCorner   = Vector2.zero;

        int offsetW = SimpleFunctions.Min(width, prevRoom.width);
        int offsetH = SimpleFunctions.Min(height, prevRoom.height);

        int tempX = rand.Next(2, offsetW);
        int tempY = rand.Next(1, offsetH);

        switch (direction)
        {
        case Direction4D.Up:
            startCorner = new Vector2(start.x + tempX, end.y);
            endCorner   = new Vector2(startCorner.x, startCorner.y + length);
            break;

        case Direction4D.Down:
            startCorner = new Vector2(start.x + tempX, start.y);
            endCorner   = new Vector2(startCorner.x, startCorner.y - length);
            break;

        case Direction4D.Right:
            startCorner = new Vector2(end.x, start.y + tempY);
            endCorner   = new Vector2(startCorner.x + length, startCorner.y);
            break;

        case Direction4D.Left:
            startCorner = new Vector2(start.x, start.y + tempY);
            endCorner   = new Vector2(startCorner.x - length, startCorner.y);
            break;
        }

        corridor.Setup(startCorner, endCorner, this, prevRoom, direction);
    }
    void MoveRoomGenerator(Room previousRoom, Direction4D direction)
    {
        //Выставляем генератор в нужное положение
        switch (direction)
        {
        case Direction4D.Up:
            transform.position = new Vector2(previousRoom.transform.position.x, previousRoom.transform.position.y + minCorridorLength + RoomMaxHeight);
            break;

        case Direction4D.Down:
            transform.position = new Vector2(previousRoom.transform.position.x, previousRoom.transform.position.y - (minCorridorLength + RoomMaxHeight));
            break;

        case Direction4D.Right:
            transform.position = new Vector2(previousRoom.transform.position.x + minCorridorLength + RoomMaxWidth, previousRoom.transform.position.y);
            break;

        case Direction4D.Left:
            transform.position = new Vector2(previousRoom.transform.position.x - (minCorridorLength + RoomMaxWidth), previousRoom.transform.position.y);
            break;
        }
    }
Exemplo n.º 18
0
 internal void FireLaser (uint x, uint y, uint width, uint height, Direction4D direction, Block[,] grid, ContentManager Content, LaserbeamManager laserManager, ref int laserIndex)
 {
     SilverBotMirrorPosition[] mirrorPositions = new SilverBotMirrorPosition[0];
     if (silverBot != null)
         mirrorPositions = GetSilverBotPositions(new Vector2(silverBot.gridPos.X, silverBot.gridPos.Y));
     Laserbeam current = laserManager.GetBeam(laserIndex);
     current.SetStartDirection(direction);
     Vector2 currentPosition = new Vector2(x, y) + direction.ToVector2();
     while(true)
     {
         if (currentPosition.X == -1 || currentPosition.Y == -1)
             break;
         if (currentPosition.X == width)
             break;
         if (currentPosition.Y == height)
             break;
         foreach (var mirror in mirrorPositions)
         {
             if (mirror == currentPosition)
             {
                 direction = mirror.Mirror(direction.Reverse());
                 break;
             }
         }
         if(grid[(int)currentPosition.X, (int)currentPosition.Y].LaserPassesThrough())
         {
             current.Add(currentPosition);
             currentPosition += direction.ToVector2();
         }
         else
         {
             break;
         }
     }
     current.SetEndDirection(direction);
     laserIndex++;
 }
Exemplo n.º 19
0
 public void SetStartDirection(Direction4D direction)
 {
     startDirection = direction;
 }
Exemplo n.º 20
0
 public void SetEndDirection(Direction4D direction)
 {
     if( squares.Count() > 0)
     {
         squares.Last().endDirection = direction;
     }
 }
Exemplo n.º 21
0
 public void DrawPartial(Direction4D direction, LaserbeamTextures textures, SpriteBatch spriteBatch, Vector2 cameraPos)
 {
     switch (direction)
     {
         case Direction4D.Up:
             spriteBatch.Draw(textures.beamV, pos - cameraPos, new Rectangle(0, 0, 32, 16), Color.White);
             break;
         case Direction4D.Down:
             spriteBatch.Draw(textures.beamV, pos + new Vector2(0, 16.0f) - cameraPos, new Rectangle(0, 16, 32, 16), Color.White);
             break;
         case Direction4D.Left:
             spriteBatch.Draw(textures.beamH, pos - cameraPos, new Rectangle(0, 0, 16, 32), Color.White);
             break;
         case Direction4D.Right:
             spriteBatch.Draw(textures.beamH, pos + new Vector2(16.0f, 0.0f) - cameraPos, new Rectangle(16, 0, 16, 32), Color.White);
             break;
     }
 }
Exemplo n.º 22
0
        public bool GotPushed(Direction4D direction, PlayerAvatar sender)
        {
            Vector2 offset = direction.ToVector2();
            Point position = (gridPos + offset).ToPoint();

            if (isSilverBot)
            {
                if (!IsPositionFree(position))
                    return false;
                if (!IsPositionFree(position + new Point(1,0)))
                    return false;
                if (!IsPositionFree(position + new Point(0,1)))
                    return false;
                if (!IsPositionFree(position + new Point(1,1)))
                    return false;
            }
            else
            {
                if (!IsPositionFree(position))
                    return false;

                if( position.X == game.silverBot.gridPos.X || position.X == game.silverBot.gridPos.X+1 )
                {
                    if( position.Y == game.silverBot.gridPos.Y || position.Y == game.silverBot.gridPos.Y+1 )
                    {
                        //can't push things into silverbot
                        return false;
                    }
                }
            }

            gridPos += offset;
            animTarget = gridPos * 32.0f;
            isPushing = true;
            return true;
        }
Exemplo n.º 23
0
    public void Setup(Vector2 Start, Vector2 End, Room First, Room Second, Direction4D corDirection)
    {
        CorridorForRoom corForRoom = new CorridorForRoom();

        corForRoom.corridor       = this;
        corForRoom.positionByRoom = Direction4D.Down;

        if (First.roomType == roomType.secret || Second.roomType == roomType.secret)
        {
            tag  = "SecretCorridor";
            name = "SecretCorridor";
        }
        else
        {
            tag  = "Corridor";
            name = "Corridor " + First.number;
        }

        positioning = Positioning.Vertical;
        switch (corDirection)
        {
        case Direction4D.Down:
        {
            corForRoom.positionByRoom = Direction4D.Down;
            First.corridors.Add(corForRoom);
            corForRoom.positionByRoom = Direction4D.Up;
            Second.corridors.Add(corForRoom);
            break;
        }

        case Direction4D.Up:
        {
            corForRoom.positionByRoom = Direction4D.Up;
            First.corridors.Add(corForRoom);
            corForRoom.positionByRoom = Direction4D.Down;
            Second.corridors.Add(corForRoom);
            break;
        }

        case Direction4D.Right:
        {
            corForRoom.positionByRoom = Direction4D.Right;
            First.corridors.Add(corForRoom);
            corForRoom.positionByRoom = Direction4D.Left;
            Second.corridors.Add(corForRoom);
            positioning = Positioning.Horizontal;
            break;
        }

        case Direction4D.Left:
        {
            corForRoom.positionByRoom = Direction4D.Left;
            First.corridors.Add(corForRoom);
            corForRoom.positionByRoom = Direction4D.Right;
            Second.corridors.Add(corForRoom);
            positioning = Positioning.Horizontal;
            break;
        }
        }


        Rooms[0] = First;
        Rooms[1] = Second;

        start = Start;
        end   = End;

        boxCollider           = this.gameObject.AddComponent <BoxCollider2D>();
        boxCollider.isTrigger = true;

        SetHeightAndWidth();

        Map.corridors.Add(this);
    }
    private void TryCreateRoom(byte number, int prevRoomIndex, byte width, byte height, Direction4D direction, roomType type)
    {
        Room prevRoom = Map.roomObjs[prevRoomIndex].GetComponent <Room>();

        MoveRoomGenerator(prevRoom, direction);  //Сдвигаем в начало новой комнаты

        Vector2 roomstartpos = new Vector2(transform.position.x, transform.position.y);
        Vector2 roomendpos   = new Vector2(transform.position.x + RoomMaxWidth, transform.position.y + RoomMaxHeight);

        bool fixDir = Check_All_Superimpose(roomstartpos, roomendpos);

        //FixDir == true => комнаты пересекаются

        for (int k = 1; k <= 4; k++)
        {
            if (fixDir == true)
            {
                direction = Increase_direction(direction);  //Меняем направление

                prevRoom = Map.roomObjs[prevRoomIndex].GetComponent <Room>();
                MoveRoomGenerator(prevRoom, direction);  //Двигаем в начало следующей комнаты

                roomstartpos = new Vector2(transform.position.x, transform.position.y);
                roomendpos   = new Vector2(transform.position.x + RoomMaxWidth, transform.position.y + RoomMaxHeight);

                fixDir = Check_All_Superimpose(roomstartpos, roomendpos);

                if (fixDir == false)
                {
                    break;
                }

                if (k == 4) // Разветвление если не подошло 4 направления
                {
                    prevRoomIndex -= 1;
                    if (prevRoomIndex == 1)
                    {
                        Debug.Log("GGGGG");
                        return;  //Если дошло до ласт комнаты то GG
                    }
                    prevRoom = Map.roomObjs[prevRoomIndex].GetComponent <Room>();
                    k        = 1;
                }
            }
        }

        GenerateRoom(number, prevRoom, width, height, direction, type);
    }
Exemplo n.º 25
0
        public bool TryStep(Direction4D moveDirection, out Vector2 moveTo)
        {
            isPushing = false;
            moveTo = new Vector2();
            if (moveDirection == Direction4D.None)
                return false;

            facing = moveDirection;
            moveTo = moveDirection.ToVector2() + gridPos;
            if (moveTo.X < 0 || moveTo.Y < 0 ||
                moveTo.X >= grid.GetLength(0) || moveTo.Y >= grid.GetLength(1) ||
                (isSilverBot ? (moveTo.X == grid.GetLength(0) - 1 || (moveTo.Y == grid.GetLength(1) - 1)) : false))
            {
                return false;
            }
            Block moveToBlock = grid[(int)moveTo.X, (int)moveTo.Y];
            Block moveToBlock1XPlus = default(Block);
            Block moveToBlock1YPlus = default(Block);
            Block moveToBlock1XYPlus = default(Block);
            if (isSilverBot)
            {
                moveToBlock1XPlus = grid[(int)moveTo.X + 1, (int)moveTo.Y];
                moveToBlock1YPlus = grid[(int)moveTo.X, (int)moveTo.Y + 1];
                moveToBlock1XYPlus = grid[(int)moveTo.X + 1, (int)moveTo.Y + 1];
            }
            if (moveToBlock == Block.Crate)
            {
                Vector2 crateMovePlus = moveDirection.ToVector2();
                if (IsTouchingSilverBot(crateMovePlus + moveTo) || isSilverBot)
                    return false;

                Point targetPos = new Point( (int)(moveTo.X + crateMovePlus.X), (int)(moveTo.Y + crateMovePlus.Y) );
                if (targetPos.X < 0 || targetPos.Y < 0 || targetPos.X >= grid.GetLength(0) || targetPos.Y >= grid.GetLength(1))
                    return false;
                if (grid[targetPos.X, targetPos.Y].IsSolid())
                    return false;

                grid[targetPos.X, targetPos.Y] = Block.Crate;
                grid[(int)(moveTo.X), (int)moveTo.Y] = Block.Floor;
                game.AddPushAnim(Block.Crate, targetPos, this, moveDirection);

                gridPos = moveTo;
                animTarget = gridPos * 32.0f;
                game.ReloadLasers();
                isPushing = true;
                sounds.cratePush.Play();
                return true;
            }
            if (IsTouchingSilverBot(moveTo))
            {
                if (game.silverBot.GotPushed(moveDirection, this))
                {
                    isPushing = true;
                }
                else
                {
                    return false;
                }
            }
            if (isSilverBot)
                goto SkipForeach;
            SkipForeach:
            if ((!MainGame.IsSolid(moveToBlock) || moveToBlock == Block.Panel || moveToBlock == Block.Exit) &&
                (!isSilverBot || (!MainGame.IsSolid(moveToBlock1XPlus) && !MainGame.IsSolid(moveToBlock1YPlus) && !MainGame.IsSolid(moveToBlock1XYPlus))))
            {
                gridPos = moveTo;
                animTarget = gridPos * 32.0f;
                game.ReloadLasers();
                return true;
            }

            return false;
        }
Exemplo n.º 26
0
 public Laserbeam(LaserbeamTextures aTextures)
 {
     startDirection = Direction4D.Right;
     textures = aTextures;
 }
Exemplo n.º 27
0
    private void CreateWall(Room room, GameObject[] walls, Vector2 pos, Direction4D direction)
    {
        int tileindex = randomGen.Next(0, walls.Length);

        room.smartGrid.CreateWall(pos, direction);
    }
Exemplo n.º 28
0
 public LaserbeamSquare(Vector2 aCoord, Direction4D aStartDirection, Direction4D aEndDirection)
 {
     coord = aCoord;
     startDirection = aStartDirection;
     endDirection = aEndDirection;
 }
    private IEnumerator CreateAdditionalCorridors()
    {
        GetDistanceBetweenRooms();
        bool skip = true; // if true skips corridor

        foreach (Room thisRoom in Map.roomObjs)
        {
            skip = !skip;
            if (skip == false)
            {
                foreach (DistanceToTheRoom d in thisRoom.distances)
                {
                    if (d.closestDistance < 7)
                    {
                        bool alreadyHasConnectionWithThisRoom = false;
                        foreach (CorridorForRoom cor in thisRoom.corridors)
                        {
                            foreach (Room room in cor.corridor.Rooms)
                            {
                                if (room == d.room)
                                {
                                    alreadyHasConnectionWithThisRoom = true;
                                    break;
                                }
                            }
                        }

                        if (alreadyHasConnectionWithThisRoom == false)
                        {
                            List <Room> rooms = new List <Room>();
                            rooms.Add(thisRoom);
                            rooms.Add(d.room);
                            Vector2 start = d.closestCorner;
                            Vector2 end   = d.toOtherRoomClosestCorner;

                            if (d.closestCorner.x != d.toOtherRoomClosestCorner.x && d.closestCorner.y == d.toOtherRoomClosestCorner.y)   //Слева или справо
                            {
                                Direction4D direction = Direction4D.Right;

                                if (d.closestCorner.y == thisRoom.end.y)  //Если справа
                                {
                                    start = new Vector2(start.x, start.y - 1 - randomGenerator.Next(0, thisRoom.height));
                                    end   = new Vector2(end.x + 1, start.y);
                                }
                                else
                                {
                                    start     = new Vector2(start.x, start.y + 1 + randomGenerator.Next(0, thisRoom.height));
                                    end       = new Vector2(end.x - 1, start.y);
                                    direction = Direction4D.Left;
                                }

                                if (Check_All_Superimpose(start, end) == false)
                                {
                                    GameObject cor = new GameObject();
                                    cor.name = "Corridor ROOM " + thisRoom.number + " and " + d.room.number;
                                    Corridor corridor = cor.AddComponent <Corridor>();
                                    cor.transform.position = start;

                                    corridor.Setup(start, end, thisRoom, d.room, direction);
                                }
                            }
                            else if (d.closestCorner.y != d.toOtherRoomClosestCorner.y && d.closestCorner.x == d.toOtherRoomClosestCorner.x)
                            {
                                Direction4D direction = Direction4D.Up;

                                if (d.closestCorner.x == thisRoom.end.x)
                                {
                                    start = new Vector2(start.x - 1 - randomGenerator.Next(0, thisRoom.width), start.y);
                                    end   = new Vector2(start.x, end.y + 1);
                                }
                                else
                                {
                                    start     = new Vector2(start.x + 1 + randomGenerator.Next(0, thisRoom.width), start.y);
                                    end       = new Vector2(start.x, end.y - 1);
                                    direction = Direction4D.Down;
                                }

                                if (Check_All_Superimpose(start, end, rooms) == false)
                                {
                                    GameObject cor = new GameObject();
                                    cor.name = "Corridor ROOM " + thisRoom.number + " and " + d.room.number;
                                    Corridor corridor = cor.AddComponent <Corridor>();
                                    cor.transform.position = start;

                                    corridor.Setup(start, end, thisRoom, d.room, direction);
                                }
                            }
                        }
                    }
                }
            }
            yield return(new WaitForSecondsRealtime(0.1f));
        }
    }
    void GenerateRoom(byte number, Room prevRoom, byte width, byte height, Direction4D dir, roomType type)      //Дверь входящая в комнату
    {
        GameObject roomObj;

        switch (type)
        {
        case roomType.playerStart:
        {
            roomObj = new GameObject
            {
                name = "Start Room " + number,
                tag  = "Room"
            };
            break;
        }

        case roomType.common:
        {
            roomObj = new GameObject
            {
                name = "Room " + number,
                tag  = "Room"
            };
            break;
        }

        case roomType.shop:
        {
            roomObj = new GameObject
            {
                name = "Shop " + number,
                tag  = "Shop"
            };
            break;
        }

        case roomType.last:
        {
            roomObj = new GameObject
            {
                name = "Last Room",
                tag  = "Room"
            };
            break;
        }

        case roomType.secret:
        {
            roomObj = new GameObject
            {
                name = "Secret Room " + number,
                tag  = "Room"
            };
            break;
        }

        case roomType.nextlevel:
        {
            roomObj = new GameObject
            {
                name = "Next Level Room " + number,
                tag  = "Room"
            };
            break;
        }

        default:
        {
            roomObj = new GameObject
            {
                name = "Room " + number,
                tag  = "Room"
            };
            break;
        }
        }

        Room room = roomObj.AddComponent <Room>();

        Map.roomObjs.Add(room);

        room.SetupRoom(number, width, height, transform.position, prevRoom, type, RoomMaxWidth, RoomMaxHeight);  //room count - roombehind
        room.SetupCorridor(DoorInvert(dir), minCorridorLength, randomGenerator);                                 //Обычно count-1 - пред.комната
                                                                                                                 //Но иногда приходится идти на несколько комнат назад
        CreateRoom(room);
    }
Exemplo n.º 31
0
 public void Clear()
 {
     startDirection = Direction4D.Right;
     squares.Clear();
 }
Exemplo n.º 32
0
 internal void AddPushAnim(Block block, Point destination, PlayerAvatar pusher, Direction4D moveDirection)
 {
     switch(block)
     {
         case Block.Crate:
             pushAnims.Add( new PushAnim(textures.crate, pusher, moveDirection.ToVector2() * widthOfBlock, destination) );
             break;
     }
 }
 public SilverBotMirrorPosition(Vector2 position, Direction4D d1, Direction4D d2)
 {
     this.position = position;
     this.d1 = d1;
     this.d2 = d2;
 }
Exemplo n.º 34
0
 public Wall(Direction4D dir)
 {
     direction = dir;
 }