Esempio n. 1
0
        public void RandomBrick_Passing()
        {
            BaseBrick brick = BrickFactory.RandomBrick;

            Assert.NotNull(brick);
            Assert.True(brick.GetType().IsSubclassOf(typeof(BaseBrick)));
        }
Esempio n. 2
0
    public void GenerateDefaultLevelGrid()
    {
        CreateLevelScript();

        Grid2D grid = new Grid2D(worldSize, gridSpace);

        levelLogic = new LevelLogic(grid, gameGraphics);

        for (int x = 0; x < grid.gridSizeX; x++)
        {
            for (int y = 0; y < grid.gridSizeY; y++)
            {
                Node2D    currentNode = grid.Grid[x, y];
                BaseBrick brick       = GenerateRandomBaseBrick(currentNode.ID);
                if (brick != null)
                {
                    brick.transform.SetParent(brickGridParent);
                    brick.SwitchPositions(currentNode.worldPosition);

                    AddBrickToLevelController(brick);
                }
            }
        }
        Debug.Log("Bricks added to level controller");
        AddPathToLevelController();
    }
Esempio n. 3
0
    private void GenerateAdjacentBricks(BaseBrick currentBrick)
    {
        if (currentAdjacentBricks == null)
        {
            currentAdjacentBricks = new List <BaseBrick>();
        }
        else
        {
            currentAdjacentBricks.Clear();
        }

        if (currentBrick != null)
        {
            BaseBrick brickLeft = _levelManager.GetBrickInDirectionFrom(currentBrick, Direction.LEFT, currentBrick.transform.position);
            if (brickLeft != null && brickLeft.currentType != BrickType.UNBREAKABLE)
            {
                currentAdjacentBricks.Add(brickLeft);
            }
            BaseBrick brickRight = _levelManager.GetBrickInDirectionFrom(currentBrick, Direction.RIGHT, currentBrick.transform.position);
            if (brickRight != null && brickRight.currentType != BrickType.UNBREAKABLE)
            {
                currentAdjacentBricks.Add(brickRight);
            }
            BaseBrick brickUp = _levelManager.GetBrickInDirectionFrom(currentBrick, Direction.UP, currentBrick.transform.position);
            if (brickUp != null && brickUp.currentType != BrickType.UNBREAKABLE)
            {
                currentAdjacentBricks.Add(brickUp);
            }
            BaseBrick brickDown = _levelManager.GetBrickInDirectionFrom(currentBrick, Direction.DOWN, currentBrick.transform.position);
            if (brickDown != null && brickDown.currentType != BrickType.UNBREAKABLE)
            {
                currentAdjacentBricks.Add(brickDown);
            }
        }
    }
Esempio n. 4
0
        public void CreateBricksAndTestApperance_Passing(string brickName, Type type, bool[,] result)
        {
            BaseBrick brick = BrickFactory.CreateBrick(brickName);

            Assert.NotNull(brick);
            Assert.Equal(type.Name, brick.GetType().Name);
            Assert.Equal(brick.Apperance, result);
        }
Esempio n. 5
0
        public void CreateBrick_Failing()
        {
            BaseBrick brick = null;

            NullReferenceException ex = Assert.Throws <NullReferenceException>(() => brick = BrickFactory.CreateBrick(string.Empty));

            Assert.Null(brick);
            Assert.Equal($"{nameof(BrickFactory)}.{nameof(BrickFactory.CreateBrick)}", ex.Message);
        }
Esempio n. 6
0
 private void AddBrickToLevelController(BaseBrick brick)
 {
     if (brick != null && levelController != null)
     {
         if (levelController.levelBricks != null)
         {
             levelController.levelBricks.Add(brick);
         }
     }
 }
Esempio n. 7
0
 public BaseBrick GetBrickInDirectionFrom(BaseBrick currentBrick, Direction direction, Vector2 fromPosition)
 {
     if (currentLevel != null)
     {
         return(currentLevel.GetBrickInDirectionFrom(currentBrick, direction, fromPosition));
     }
     else
     {
         Debug.LogError("Current level is null, cannot find brick in direction: " + direction.ToString());
         return(null);
     }
 }
 private void Dash(BaseBrick nextBrickCell) {
     if(nextBrickCell != null) {
         dashing = true;
         _player.currentBrickCell = nextBrickCell;
         _player.PlaySFX(_settings.dashSFX);
         tweenSequence.Append(_player.transform.DOMove(nextBrickCell.transform.position, _settings.dashSpeed).OnComplete(delegate () {
             dashing = false;
         }));
     } else {
         Debug.LogError("Next brick cell is null, moving back to previous state");
         _player.ChangeState(PlayerStates.Moving);
     }
 }
Esempio n. 9
0
 public void Brick(Graphics dev, Point start, Point offset, BaseBrick brick, Color color)
 {
     for (int y = 0; y < brick.Apperance.GetLength(0); y++)
     {
         for (int x = 0; x < brick.Apperance.GetLength(1); x++)
         {
             if (brick.Apperance[y, x])
             {
                 this.Block(dev, color, new Point(start.X + this.BrickSize * (offset.X + x), start.Y - this.BrickSize * (offset.Y - y)));
             }
         }
     }
 }
Esempio n. 10
0
    public void ModifyDashSequence(BaseBrick brick, int brickLimit, out BaseBrick lastBrick)
    {
        lastBrick = brick;
        if (dashSequence != null)
        {
            //checking if sequence already has the brick in sequence or not. If not then we will add it to sequence
            if (!dashSequence.ContainsKey(brick.ID) && brick != null)
            {
                brick.ToggleSelectState(true);
                dashSequence.Add(brick.ID, brick);
                Debug.Log("Added to seq brick ID : " + brick.ID);
            }
            else
            {
                //if brick is already present then we want to remove it from the sequence if user selected the brick again
                List <string> toRemove = new List <string>();
                //finding all the bricks from the end of the sequence to the point user has touched
                foreach (KeyValuePair <string, BaseBrick> pair in dashSequence.Reverse())
                {
                    if (pair.Key != brick.ID)
                    {
                        toRemove.Add(pair.Key);
                    }

                    if (pair.Key == brick.ID)
                    {
                        toRemove.Add(pair.Key);
                        break;
                    }
                }
                //removing it from the sequence
                foreach (string key in toRemove)
                {
                    dashSequence[key].ToggleSelectState(false);
                    dashSequence.Remove(key);
                    Debug.Log("Brick removed with ID : " + key);
                }

                //last brick is needed to find the next adjacent bricks to avoid adjacent movements
                if (dashSequence.Count > 0)
                {
                    lastBrick = dashSequence[dashSequence.Keys.Last()];
                }
                else
                {
                    //if all the items were removed then we want the current cell player is in to be returned
                    lastBrick = currentBrickCell;
                }
            }
        }
    }
Esempio n. 11
0
    /// <summary>
    /// Removes bricks which are not supposed to be blown
    /// </summary>
    /// <param name="bricksInView">List of brick colliders</param>
    /// <returns></returns>
    private List <BaseBrick> FetchModifiedBrickList(Collider2D[] bricksInView)
    {
        List <BaseBrick> bricks = new List <BaseBrick>();

        for (int i = 0; i < bricksInView.Length; i++)
        {
            BaseBrick brick = bricksInView[i].GetComponent <BaseBrick>();
            if (brick != null && brick.currentType != BrickType.END && brick.currentType != BrickType.PATH)
            {
                bricks.Add(brick);
            }
        }
        return(bricks);
    }
Esempio n. 12
0
        public void CreateConstructorAndRotateLeft_Passing(BaseBrick brick, bool[,] result)
        {
            Assert.NotNull(brick);

            bool[,] temp = result;

            for (int i = 0; i < 3; i++)
            {
                temp = this.Rotate(this.Rotate(this.Rotate(temp)));

                brick.Rotate(Rotation.Left);
                Assert.Equal(brick.Apperance, temp);
            }
        }
Esempio n. 13
0
        public void CreateBricksAndTestApperance_Passing(BaseBrick brick, Type type, Point point, Color color)
        {
            FieldBrick fieldBrick = new FieldBrick(brick)
            {
                Position = point,
                Color    = color
            };

            Assert.NotNull(fieldBrick);
            Assert.Equal(type.Name, fieldBrick.Brick.GetType().Name);

            Assert.True(fieldBrick.Position == point);
            Assert.True(fieldBrick.Color == color);
        }
Esempio n. 14
0
 private bool CheckIfAdjacentBrick(string brickID, out BaseBrick brick)
 {
     brick = null;
     if (currentAdjacentBricks != null)
     {
         int index = currentAdjacentBricks.FindIndex(x => x.ID == brickID);
         if (index >= 0)
         {
             brick = currentAdjacentBricks[index];
             return(true);
         }
     }
     return(false);
 }
Esempio n. 15
0
 public BaseBrick GetBrickInDirectionFrom(BaseBrick currentBrick, Direction direction, Vector2 position)
 {
     RaycastHit2D[] hits = Physics2D.RaycastAll(position, UserInput.ConvertDirection(direction), 5f, brickLayerMask); //layerMask of Brick is 9
     foreach (RaycastHit2D hit in hits)
     {
         if (hit.collider != null)
         {
             BaseBrick brick = hit.collider.GetComponent <BaseBrick>();
             if (brick != null && currentBrick.ID != brick.ID)
             {
                 return(brick);
             }
         }
     }
     Debug.LogError("Could not find brick in the direction : " + direction.ToString());
     return(null);
 }
Esempio n. 16
0
 private void ReplaceInLevel(BaseBrick oldB, BaseBrick newB)
 {
     if (levelController != null && levelController.levelBricks != null)
     {
         int index = levelController.levelBricks.FindIndex(x => x.ID == oldB.ID);
         if (index >= 0)
         {
             GameObject aboutToBeDeleted = levelController.levelBricks[index].gameObject;
             levelController.levelBricks[index] = newB;
             Debug.Log("Changed original : " + oldB.currentType.ToString() + " to : " + newB.currentType.ToString());
             DestroyImmediate(aboutToBeDeleted);
         }
         else
         {
             Debug.LogError("Could not find brick in level");
         }
     }
 }
Esempio n. 17
0
    public override void Update()
    {
        if (!EventSystem.current.IsPointerOverGameObject())
        {
            if (Input.GetMouseButtonDown(0))
            {
                RaycastHit2D[] hits = Physics2D.RaycastAll(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.down, 2f);
                foreach (RaycastHit2D hit in hits)
                {
                    if (hit.collider != null && hit.collider.CompareTag("Player"))
                    {
                        canDash = true;
                        GenerateAdjacentBricks(currentBrickInTouch = _player.currentBrickCell);
                        Debug.Log("Player Found, Staring to dash");
                    }
                }
                _player.ResetDash();
            }
            if (Input.GetMouseButton(0) && canDash)
            {
                Vector2    direction = Camera.main.ScreenToWorldPoint(Input.mousePosition) - _player.transform.position;
                float      angle     = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
                Quaternion rotation  = Quaternion.AngleAxis(angle, Vector3.forward);
                _player.transform.rotation = Quaternion.Slerp(_player.transform.rotation, rotation, 15 * Time.unscaledDeltaTime);

                RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.down, 2f, brickLayerMask);
                if (hit.collider != null)
                {
                    BaseBrick brick = hit.collider.GetComponent <BaseBrick>();
                    if (brick != null && CheckIfAdjacentBrick(brick.ID, out BaseBrick adj))
                    {
                        _player.ModifyDashSequence(adj, _settings.bricksToMove, out currentBrickInTouch);
                        GenerateAdjacentBricks(currentBrickInTouch);
                    }
                }
            }
            if (Input.GetMouseButtonUp(0))
            {
                currentBrickInTouch = null;
                canDash             = false;
                _player.ChangeState(PlayerStates.Dash);
            }
        }
    }
Esempio n. 18
0
 private void CheckBombsAroundPlayer()
 {
     Collider2D[] itemsInRange = Physics2D.OverlapCircleAll(_player.transform.position, _settings.radius, _settings.layersToShowOnRadar);
     if (itemsInRange != null)
     {
         foreach (Collider2D collider in itemsInRange)
         {
             if (!colliders.Contains(collider))
             {
                 BaseBrick brick = collider.GetComponent <BaseBrick>();
                 if (brick != null && brick.currentType == BrickType.BOMB)
                 {
                     GameObject.Instantiate(_settings.radarEnemyPrefab, collider.transform.position, Quaternion.identity);
                     colliders.Add(collider);
                 }
             }
         }
     }
 }
Esempio n. 19
0
    private void SwitchBrickToType(BaseBrick brick, BrickType type)
    {
        GameObject obj = levelLogic.GetBrickBasedOnType(type);

        BrickData newData = new BrickData {
            gridNodeID = brick.GetComponent <BaseBrick>().ID,
            type       = type
        };
        BaseBrick newB = obj.GetComponent <BaseBrick>();

        newB.Initialize(newData);
        newB.SwitchPositions(brick.transform.position);
        obj.transform.SetParent(brickGridParent);
        ReplaceInLevel(brick, newB);

        if (type == BrickType.PATH)
        {
            brick.SwitchToPath();
        }
    }
Esempio n. 20
0
 private void OnTriggerEnter2D(Collider2D collision)
 {
     if (collision.CompareTag("Player") && currentType != BrickType.PATH)
     {
         Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position, Range, brickLayerMask);
         if (colliders != null && colliders.Length > 0)
         {
             for (int i = 0; i < colliders.Length; i++)
             {
                 BaseBrick brick = colliders[i].GetComponent <BaseBrick>();
                 if (brick != null && brick.currentType != BrickType.END && brick.currentType != BrickType.PATH)
                 {
                     brick.DestroyBrick();
                 }
             }
         }
         DestroyBrick();
         _signalBus.Fire <BrickDestroyedSignal>(new BrickDestroyedSignal {
             data = brickData
         });
     }
 }
Esempio n. 21
0
 public void ResetPlayerPosition(BaseBrick brickCell)
 {
     if (gameObject != null)
     {
         if (!gameObject.activeSelf)
         {
             gameObject.SetActive(true);
         }
         brickCell.SwitchToPath();
         currentBrickCell   = brickCell;
         transform.position = brickCell.transform.position;
         if (dashSequence == null)
         {
             dashSequence = new Dictionary <string, BaseBrick>();
         }
         else
         {
             dashSequence.Clear();
         }
         ChangeState(PlayerStates.WaitingToStart);
     }
 }
Esempio n. 22
0
    /// <summary>
    /// Shuffles the current level items
    /// </summary>
    public void ShuffleLevel()
    {
        if (levelBricks != null)
        {
            //making a copy to shuffle items
            List <BaseBrick> levelCopy = new List <BaseBrick>(levelBricks);
            //levelCopy.RemoveAll(x => safePathIDs.Any(y => y == x.IDOnGrid));
            List <BaseBrick> shuffle = new List <BaseBrick>();
            while (levelCopy.Count != 0)
            {
                int index = Random.Range(0, levelCopy.Count);
                shuffle.Add(levelCopy[index]);
                levelCopy.RemoveAt(index);
            } //shuffling the bricks

            shuffle.RemoveAll(x => safePathIDs.Any(y => y == x.ID));

            //reassigning the shuffled bricks to thier positions
            foreach (BaseBrick brick in levelBricks)
            {
                if (!safePathIDs.Contains(brick.ID))
                {
                    int     sIndex  = levelBricks.FindIndex(x => x.ID == shuffle[0].ID);
                    Vector2 tempPos = levelBricks[sIndex].transform.position;
                    levelBricks[sIndex].SwitchPositions(brick.transform.position);
                    brick.SwitchPositions(tempPos);
                }
                brick.ResetBrick();
            }
        }
        //resetting start brick
        BaseBrick b = GetStartBrick();

        if (b != null)
        {
            b.ResetBrick();
        }
    }
Esempio n. 23
0
    private BaseBrick GenerateRandomBaseBrick(string id)
    {
        BrickType  type = levelLogic.GetRandomBrickType(bombChance);
        GameObject obj  = levelLogic.GetBrickBasedOnType(type);

        if (obj != null)
        {
            BrickData data = new BrickData {
                gridNodeID = id,
                type       = type,
            };
            BaseBrick baseBrick = obj.GetComponent <BaseBrick>();
            if (baseBrick != null)
            {
                baseBrick.Initialize(data);
                return(baseBrick);
            }
            else
            {
                Debug.LogError("Base Class not found in the brick prefab, is it being inherited from base brick?");
            }
        }
        return(null);
    }
Esempio n. 24
0
        public static CAnimationObject MakeObject(IDObject _type, Vector2 _pos)
        {
            CAnimationObject _object = null;

            switch (_type)
            {
            //case IDObject.SMALL_MARIO:
            //    _object = new Mario(_pos);
            //    break;
            case IDObject.ENEMY_GOOMBA_OW:
                _object = new Goomba(_pos, IDDir.LEFT);
                break;

            case IDObject.ENEMY_KOOPA_OW:
                _object = new Koopa(_pos);
                break;

            case IDObject.MISC_BASE_BRICK:
                _object = new BaseBrick(_pos);
                break;

            case IDObject.MISC_BIG_GRASS:
                _object = new BigGrass(_pos);
                break;

            case IDObject.MISC_BIG_MOUNTAIN:
                _object = new BigMountain(_pos);
                break;

            case IDObject.MISC_CASTLE:
                _object = new Castle(_pos);
                break;

            case IDObject.ENEMY_BOSS:
                _object = new Boss(_pos);
                break;

            //case IDObject.MISC_GATE_PIPE:
            //_object = new GatePipe(_pos, IDStatus.GATE_PIPE_DOWN);
            //break;
            case IDObject.MISC_HARD_BRICK:
                _object = new HardBrick(_pos);
                break;

            case IDObject.MISC_IRON_BRICK:
                _object = new HardBrick(_pos);
                break;

            case IDObject.MISC_STOCK_PIPE:
                _object = new StockPipe(_pos);
                break;

            case IDObject.MISC_MEDIUM_GRASS:
                _object = new MediumGrass(_pos);
                break;

            case IDObject.MISC_MEDIUM_MOUNTAIN:
                _object = new MediumMountain(_pos);
                break;

            case IDObject.MISC_PIECE:
                _object = new Piece(_pos);
                break;

            case IDObject.MISC_QUESTION_BRICK:
                _object = new QuestionBrick(_pos, IDObject.ITEM_COIN_ACTIVATED);
                break;

            case IDObject.MISC_SMALL_GRASS:
                _object = new SmallGrass(_pos);
                break;

            case IDObject.MISC_SOFT_BRICK:
                _object = new SoftBrick(_pos);
                break;

            case IDObject.MISC_GOAL_POLE:
                _object = new GoalPole(_pos);
                break;

            case IDObject.MISC_GATE_PIPE:
                _object = new GatePipe(_pos);
                break;

            case IDObject.MISC_FLAG:
                _object = new Flag(_pos);
                break;

            //case IDObject.BRICK_COIN:
            //    _object = new QuestionBrick(_pos, IDObject.ITEM_COIN_ACTIVATED);
            //    break;
            case IDObject.ITEM_STARMAN:
                _object = new ItemStarman(_pos);
                break;

            //case IDObject.MISC_UP_PIPE:
            //    _object = new UpPipe(_pos);
            //    break;
            case IDObject.ITEM_1UP_MUSHROOM:
                _object = new Item1UpMushroom(_pos);
                break;

            case IDObject.MISC_SMALL_CLOUND:
                _object = new SmallClound(_pos);
                break;

            case IDObject.MISC_MEDIUM_CLOUND:
                _object = new MediumClound(_pos);
                break;

            case IDObject.MISC_BIG_CLOUND:
                _object = new BigClound(_pos);
                break;

            case IDObject.ITEM_COIN_ACTIVATED:
                _object = new ItemCoin(_pos, IDObject.ITEM_COIN_ACTIVATED);
                break;

            case IDObject.ITEM_COIN_NORMAL:
                _object = new ItemCoin(_pos, IDObject.ITEM_COIN_NORMAL);
                break;

            case IDObject.ITEM_FIRE_FLOWER:
                _object = new ItemFireFlower(_pos);
                break;

            case IDObject.ITEM_SUPER_MUSHROOM:
                _object = new ItemSuperMushroom(_pos);
                break;

            case IDObject.ITEM_GROW_UP:
                _object = new ItemGrowUp(_pos);
                break;

            //case IDObject.BRICK_COIN:
            //    _object = new QuestionBrick(_pos, IDObject.ITEM_COIN_ACTIVATED);
            //    break;
            //case IDObject.BRICK_FLOWER:
            //    _object = new QuestionBrick(_pos, IDObject.ITEM_FIRE_FLOWER);
            //    break;
            //case IDObject.BRICK_SUPPERMUSHROOM:
            //    _object = new QuestionBrick(_pos, IDObject.ITEM_SUPER_MUSHROOM);
            //    break;
            //case IDObject.BRICK_1UPMUSHROOM:
            //    _object = new QuestionBrick(_pos, IDObject.BRICK_1UPMUSHROOM);
            //    break;
            //case IDObject.BRICK_STAR:
            //    _object = new QuestionBrick(_pos, IDObject.ITEM_STARMAN);
            //    break;
            default:
                break;
            }

            return(_object);
        }
Esempio n. 25
0
 public void CreateBricksAndTestApperance_Passing(BaseBrick brick, bool[,] result)
 {
     Assert.NotNull(brick);
     Assert.Equal(brick.Apperance, result);
 }
Esempio n. 26
0
 public FieldBrick(BaseBrick brick)
 {
     this.Brick = brick;
 }