コード例 #1
0
 void OnJumpTileHit(JumpTileCollision tileCollision)
 {
     if (gameController != null && scoreText != null)
     {
         scoreText.text = string.Format("SCORE: {0}", tileCollision.Player.PlayerScore);
     }
 }
コード例 #2
0
 void OnCollisionEnter(Collision col)
 {
     if (col.collider.tag == Tags.JumpTile)
     {
         JumpTileCollision tileCollision = new JumpTileCollision(col, this, col.collider.GetComponent <JumpTile> ());
         Messenger <JumpTileCollision> .Broadcast(MessengerEventNames.JumpTileHit, tileCollision, MessengerMode.DONT_REQUIRE_LISTENER);
     }
     else
     {
         Messenger.Broadcast(GameController.MSG_RESET_GAME, MessengerMode.DONT_REQUIRE_LISTENER);
     }
 }
コード例 #3
0
    private void OnJumpTileHit(JumpTileCollision tileCollision)
    {
        if (player == null)
        {
            return;
        }

        switch (tileCollision.Tile.Type)
        {
        case JumpTile.TileType.REGULAR:
            player.PlayerScore += tileCollision.Tile.TileValue;
            break;

        case JumpTile.TileType.DOUBLE_SCORE:
            player.PlayerScore *= 2;
            break;
        }

        bool isBottomCollision = false;

        for (int i = 0; i < tileCollision.Collision.contacts.Length; i++)
        {
            if (tileCollision.Collision.contacts [i].point.y > tileCollision.Player.transform.position.y)
            {
                isBottomCollision = true;
                break;
            }
        }

        switch (tileCollision.Tile.Type)
        {
        case JumpTile.TileType.BRICK:
            if (!isBottomCollision)
            {
                tileCollision.Player.Rigidbody.velocity = Vector3.zero;
            }
            tileCollision.Player.CurrentMomentum = isBottomCollision ? 0f : tileCollision.Player.InitialJumpForce * 0.75f;
            break;

        case JumpTile.TileType.SPIKE:
        {
            PlayerEffect shieldEffect = null;

            if (player.PlayerEffects != null && player.PlayerEffects.Count > 0)
            {
                shieldEffect = player.PlayerEffects.Find(e => e.Type == PlayerEffect.EffectType.SHIELD);
            }

            // shield effect protects the player from the effects of the spike tile
            if (shieldEffect != null)
            {
                tileCollision.Player.CurrentMomentum = tileCollision.Player.InitialJumpForce;
                player.PlayerEffects.Remove(shieldEffect);
                tileCollision.Collision.collider.enabled = false;
            }
            else
            {
                // spike tiles instantly kill the player
                tileCollision.Player.CurrentMomentum = 0f;
                ResetGame();
            }
            tileCollision.Player.Rigidbody.velocity = Vector3.zero;
        }
        break;

        case JumpTile.TileType.ROCKET:
            tileCollision.Player.Rigidbody.velocity = Vector3.zero;
            break;

        default:
        {
            tileCollision.Player.Rigidbody.velocity = Vector3.zero;

            bool setMomentum = true;
            if (player.PlayerEffects != null && player.PlayerEffects.Count != 0)
            {
                if (player.PlayerEffects.Find(e => e.Type == PlayerEffect.EffectType.ROCKET_JUMP) != null)
                {
                    setMomentum = false;
                }
            }

            if (setMomentum)
            {
                tileCollision.Player.CurrentMomentum = tileCollision.Player.InitialJumpForce;
            }
            EnableRegularParticleEffect(tileCollision.Tile.transform.position);
        }
        break;
        }
    }