Example #1
0
 private void OnBrickDestruction(BrickBehaviour brick)
 {
     AudioManager.instance.PlayBrickSound();
     if (BrickManager.instance.remainingBricks.Count <= 0)
     {
         score += 10 * brick.hits;
         finalScoreText.text = score.ToString();
         if (score > highScore)
         {
             AudioManager.instance.PlayHighScoreSound();
             PlayerPrefs.SetInt(highScoreKey, score);
             //PlayerPrefs.Save();
         }
         BallManager.instance.ResetBalls();
         winScreen.SetActive(true);
     }
     else
     {
         score += 10 * brick.scoreMulti;
         if (score > highScore)
         {
             PlayerPrefs.SetInt(highScoreKey, score);
             PlayerPrefs.Save();
         }
         scoreText.text = score.ToString();
     }
     bricksText.text = BrickManager.instance.remainingBricks.Count.ToString();
 }
Example #2
0
    /// <summary>
    /// To call when a brick, non falling, is touched by a ball :
    /// Change its state or set it as falling
    /// </summary>
    /// <param name="brickTouched"></param>
    public void NonFallingBrickTouchedByBall(BrickBehaviour brickTouched)
    {
        if (PlayerStatistics.GameEnded)
        {
            return;
        }

        switch (brickTouched.m_ThisBrickType)
        {
        case BrickType.Strong:
            brickTouched.SetStateThisBrick(BrickType.Normal, this);
            break;

        case BrickType.SuperStrong:
            brickTouched.SetStateThisBrick(BrickType.Strong, this);
            break;

        default:
            PlayerStatistics.PlayerNbPoints += 50;
            brickTouched.GetComponent <Rigidbody>().isKinematic = false;
            brickTouched.m_IsBrickFalling = true;
            brickTouched.gameObject.layer = LayerMask.NameToLayer("FallingBrick");
            break;
        }
    }
 private void OnBrickDestroyed(BrickBehaviour destroyedBrick)
 {
     bricksDestroyed--;
     if (bricksDestroyed < 1)
     {
         DestroyCurrentLevel();
         //Create new level
         currentLevel = new Level(1, UnityEngine.Random.Range(3, 5), UnityEngine.Random.Range(1, 4) * 3);
         CreateNewLevel(currentLevel);
     }
 }
    private void CreateBrickObjects(Level level)
    {
        currentLevelBrickBehaviours = new List <BrickBehaviour>(currentLevelTotalBricks.Count);

        foreach (var brick in currentLevelTotalBricks)
        {
            BrickBehaviour brickBehaviour = GameObject.Instantiate(brickPrefab, Vector3.zero, Quaternion.identity).GetComponent <BrickBehaviour>();
            brickBehaviour.BrickModel        = brick;
            brickBehaviour.OnBrickDestroyed += OnBrickDestroyed;
            currentLevelBrickBehaviours.Add(brickBehaviour);
        }
    }
Example #5
0
    public void GenerateBricks()
    {
        ClearRemainingBricks();
        this.remainingBricks    = new List <BrickBehaviour>();
        int[,] currentLevelData = this.level;
        float currentSpawnX = initialBrickSpawnPositionX;
        float currentSpawnY = initialBrickSpawnPositionY;
        float zShift        = 0f;

        for (int row = 0; row < this.rows; row++)
        {
            for (int col = 0; col < this.columns; col++)
            {
                int brickType = currentLevelData[row, col];

                if (brickType > 0)
                {
                    BrickBehaviour newBrick = Instantiate(brickPrefab, new Vector3(currentSpawnX, currentSpawnY, 0.0f - zShift), Quaternion.identity) as BrickBehaviour;
                    newBrick.Init(bricksContainer.transform, this.sprites[brickType - 1], brickType);

                    this.remainingBricks.Add(newBrick);
                    zShift += 0.0001f;
                }

                currentSpawnX += brickWidth + spacing;
                if (col + 1 == this.columns)
                {
                    currentSpawnX = initialBrickSpawnPositionX;
                }
            }

            currentSpawnY -= brickHeight + spacing;
        }

        this.initialBricksCount = this.remainingBricks.Count;
        bricksText.text         = this.remainingBricks.Count.ToString();
    }
Example #6
0
    /// <summary>
    /// To call when a falling brick is hitten, apply the rules of the given brick :
    /// change its state or destroy it, applying its bonus
    /// </summary>
    /// <param name="brickTouched"></param>
    public void OnBrickFallingTouched(BrickBehaviour brickTouched, bool touchedByBall)
    {
        if (PlayerStatistics.GameEnded)
        {
            return;
        }

        switch (brickTouched.m_ThisBrickType)
        {
        case BrickType.Normal:
            brickTouched.DestroyThisBrick();
            NbRemainingBricks--;

            if (touchedByBall)
            {
                PlayerStatistics.PlayerNbPoints += 350;
            }
            break;

        case BrickType.PowerUp_Life:
            brickTouched.DestroyThisBrick();
            NbRemainingBricks--;

            if (touchedByBall)
            {
                PlayerStatistics.PlayerNbPoints += 300;
                PlayerStatistics.PlayerNbLifes  += 2;
            }
            break;

        case BrickType.PowerUp_Speed:
            brickTouched.DestroyThisBrick();
            NbRemainingBricks--;

            if (touchedByBall)
            {
                PlayerStatistics.BallsSpeed     += 0.25f;
                PlayerStatistics.PlayerNbPoints += 300;
            }
            break;

        case BrickType.PowerUp_Ball:
            brickTouched.DestroyThisBrick();
            NbRemainingBricks--;

            if (touchedByBall)
            {
                CreateBallAtRacket();
                PlayerStatistics.PlayerNbPoints += 300;
            }
            break;

        case BrickType.Strong:
            if (touchedByBall)
            {
                brickTouched.SetStateThisBrick(BrickType.Normal, this);
                PlayerStatistics.PlayerNbPoints += 500;
            }
            else
            {
                // destroy it because touched by the ground
                brickTouched.DestroyThisBrick();
                NbRemainingBricks--;
            }
            break;

        case BrickType.SuperStrong:
            if (touchedByBall)
            {
                brickTouched.SetStateThisBrick(BrickType.Strong, this);
                PlayerStatistics.PlayerNbPoints += 1000;
            }
            else
            {
                // destroy it because touched by the ground
                brickTouched.DestroyThisBrick();
                NbRemainingBricks--;
            }
            break;
        }

        if (NbRemainingBricks == 0)
        {
            PlayerStatistics.GameEnded       = true;
            PlayerStatistics.PlayerNbPoints += PlayerStatistics.PlayerNbLifes * 1000;

            // keep the highest score
            if (PlayerPrefs.HasKey("Highscore"))
            {
                if (PlayerPrefs.GetInt("Highscore") < PlayerStatistics.PlayerNbPoints)
                {
                    PlayerPrefs.SetInt("Highscore", PlayerStatistics.PlayerNbPoints);
                }
            }
            else
            {
                PlayerPrefs.SetInt("Highscore", PlayerStatistics.PlayerNbPoints);
            }

            EventManager.raise(EventType.PLAYER_WON);
        }
    }
Example #7
0
    void Explode(Vector3 direction)
    {
        bool hitObstacle = false;

        Ray.origin    = new Vector3(transform.position.x, 0.5f, transform.position.z);
        Ray.direction = direction;

        for (int i = 0; i <= firePower && !hitObstacle; i++)
        {
            if (Physics.Raycast(Ray, out RayHit, i, hitLayer))
            {
                Debug.Log("Explosion hit " + RayHit.collider.name);
                if (RayHit.collider.tag == "HardBrick")
                {
                    //No matter it pierce or not, it will never pass through
                    hitObstacle = true;
                }
                else if (RayHit.collider.tag == "Brick")
                {
                    //It pass through when it pierce
                    if (!pierceBomb)
                    {
                        hitObstacle = true;
                    }
                    //Debug.Log("Explosion hit " + RayHit.collider.name);
                    BrickBehaviour brick = RayHit.collider.gameObject.GetComponent <BrickBehaviour>();
                    if (brick)
                    {
                        brick.Destroy();
                    }
                }

                /*else if (RayHit.collider.tag == "Item")
                 * {
                 *  //It pass through no matter what
                 *  Debug.Log("Explosion hit " + RayHit.collider.name);
                 *  RayHit.collider.gameObject.layer = LayerMask.NameToLayer("Default");
                 *  ItemBehaviour item = RayHit.collider.gameObject.GetComponent<ItemBehaviour>();
                 *  if (item)
                 *  {
                 *      item.DestroySelf();
                 *  }
                 * }*/
                if (!pierceBomb)
                {
                    if (explosionPrefab && !RayHit.collider && !hitObstacle)
                    {
                        //Debug.Log("Did not hit = " + direction + " i = " + i);
                        Instantiate(explosionPrefab, transform.position + direction * i, transform.rotation);
                    }
                }
                else
                {
                    if (pierceExplosionPrefab && !hitObstacle)
                    {
                        Instantiate(pierceExplosionPrefab, transform.position + direction * i, transform.rotation);
                    }
                }
            }
            else
            {
                if (!pierceBomb)
                {
                    if (explosionPrefab)
                    {
                        //Debug.Log("direction = " + direction + " i = " + i);
                        Instantiate(explosionPrefab, transform.position + direction * i, transform.rotation);
                    }
                }
                else
                {
                    if (pierceExplosionPrefab)
                    {
                        Instantiate(pierceExplosionPrefab, transform.position + direction * i, transform.rotation);
                    }
                }
            }
        }
    }
Example #8
0
    void OnCollisionEnter(Collision collision)
    {
        GameObject otherObject         = collision.collider.gameObject;
        bool       isVerticalCollision = Mathf.Abs(transform.position.x - otherObject.transform.position.x) < Mathf.Abs(transform.position.y - otherObject.transform.position.y);

        if (otherObject.tag != "Bat" || otherObject.transform.position.y < transform.position.y)
        {
            if (isVerticalCollision)
            {
                if (transform.position.y < otherObject.transform.position.y)
                {
                    direction = new Vector3(direction.x, Mathf.Abs(direction.y) * -1, direction.z).normalized;
                }
                else
                {
                    direction = new Vector3(direction.x, Mathf.Abs(direction.y), direction.z).normalized;
                }
            }
            else
            {
                if (transform.position.x < otherObject.transform.position.x)
                {
                    direction = new Vector3(Mathf.Abs(direction.x) * -1, direction.y, direction.z).normalized;
                }
                else
                {
                    direction = new Vector3(Mathf.Abs(direction.x), direction.y, direction.z).normalized;
                }
            }

            if (otherObject.tag == "Bat")
            {
                direction += (transform.position - otherObject.transform.position).normalized;
                direction.Normalize();
                direction += new Vector3(0, .8f, 0);
                direction.Normalize();
                speed += acceleration;
            }

            if (otherObject.tag == "Brick")
            {
                BrickBehaviour brick = otherObject.GetComponent <BrickBehaviour> ();
                if (brick.brickType == '<')
                {
                    bat.Shrink();
                }
                else if (brick.brickType == '>')
                {
                    bat.Grow();
                }
                else if (brick.brickType == 'x')
                {
                    bat.DeleteOtherBat();
                }
                else if (brick.brickType == 'o')
                {
                    gameInstance.score += gameInstance.optionScore;
                }
                else if ("RBGY".IndexOf(brick.brickType.ToString()) > -1)
                {
                    if (brick.brickType == 'R')
                    {
                        gameInstance.UpdateBonus(BonusPanelBehaviour.ButtonColor.red);
                    }
                    else if (brick.brickType == 'G')
                    {
                        gameInstance.UpdateBonus(BonusPanelBehaviour.ButtonColor.green);
                    }
                    else if (brick.brickType == 'B')
                    {
                        gameInstance.UpdateBonus(BonusPanelBehaviour.ButtonColor.blue);
                    }
                    else if (brick.brickType == 'Y')
                    {
                        gameInstance.UpdateBonus(BonusPanelBehaviour.ButtonColor.yellow);
                    }
                }
                gameInstance.score += brick.score;
                GameObject.Destroy(otherObject);
            }
        }
    }