/// <summary> /// Collision handling for each sprite on the screen. /// </summary> /// <param name="sprite">Sprite to check collision with.</param> private void HandleCollision(Sprite sprite) { Rectangle itemBounds = new Rectangle(sprite.GetX(), sprite.GetY(), sprite.GetWidth(), sprite.GetHeight()); String name = sprite.GetName(); if (IntersectPixels(playerBounds, playerData, itemBounds, sprite.GetColorData())) { if (!sprite.GetTransparent()) { if (name.Equals("level1") || name.Equals("level2") || name.Equals("level3")) { if (IsAbove(playerBounds, itemBounds) && ((player.CheckJump() && sprite.GetY() == 399) || (jumping && sprite.GetY() == 499))) sprite.KillVirus(); else { if (Constants.isSwappingHand && player.HasSword() && sprite.GetY() == 399) { swordUsed=true; sprite.SlashVirus(); } else { if (!Constants.isPunching) sprite.HitVirus(); } } } ApplyEffect(name, sprite); PlaySoundEffects(name, sprite); if (!name.Equals("gym") && !name.Contains("boss")) sprite.Collide(name); else { if (Constants.isSteppingRight) { screenPaused = true; ScreenManager.AddScreen(new ExcercisesScreen(this)); this.FreezeScreen(); } } if (name.Contains("boss")) { if (playerBounds.Right >= sprite.GetX() + 150) { //Add Boss Screen screenPaused = true; spriteCounter = 0; currentSprite.Clear(); globalCounter = 600; this.FreezeScreen(); currentSprite.Remove(sprite); ScreenManager.AddScreen(new BossFightScreen(this, Int32.Parse((name.Substring(4))))); } } } } }
/// <summary> /// Plays the sound effect when colliding with a sprite. /// </summary> /// <param name="name">Sprite's name</param> /// <param name="sprite">Instance of the sprite</param> private void PlaySoundEffects(String name, Sprite sprite) { if (!sprite.GetCollided()) { switch (name) { case "tomato": case "carrot": case "strawberry": case "orange": case "pineapple": case "broccoli": case "fries": case "hamburger": case "pizza": case "donut": case "muffin": case "hotdog": sprite.PlaySoundEffect(soundEffects[1]); break; case "level1": case "level2": case "level3": if (sprite.IsSlashed()) sprite.PlaySoundEffect(soundEffects[6]); else { if (sprite.GetKilled()) sprite.PlaySoundEffect(soundEffects[8]); else { if (sprite.IsHit()) sprite.PlaySoundEffect(soundEffects[5]); else { if (Constants.isPunching && sprite.GetY() == 399) sprite.PlaySoundEffect(soundEffects[7]); else sprite.PlaySoundEffect(soundEffects[5]); } } } break; case "sheild": sprite.PlaySoundEffect(soundEffects[2]); break; case "sword": sprite.PlaySoundEffect(soundEffects[3]); break; } } }
/// <summary> /// Applies the effect of collision on sprite and player. /// </summary> /// <param name="name">Sprite name.</param> /// <param name="sprite">Instance of the sprite.</param> private void ApplyEffect(String name, Sprite sprite) { if (!sprite.GetCollided()) { switch (name) { case "tomato": player.Collided(Constants.healthy1); break; case "carrot": player.Collided(Constants.healthy2); break; case "strawberry": player.Collided(Constants.healthy3); break; case "orange": player.Collided(Constants.healthy4); break; case "pineapple": player.Collided(Constants.healthy5); break; case "broccoli": player.Collided(Constants.healthy6); break; case "fries": player.Collided(Constants.unhealthy1); break; case "hamburger": player.Collided(Constants.unhealthy2); break; case "pizza": player.Collided(Constants.unhealthy3); break; case "donut": player.Collided(Constants.unhealthy4); break; case "muffin": player.Collided(Constants.unhealthy5); break; case "hotdog": player.Collided(Constants.unhealthy6); break; case "level1": if (!sprite.GetKilled()) { if (!player.HasShield()) { if (!player.HasSword() || !Constants.isSwappingHand) { if (!Constants.isPunching) player.Collided(Constants.level1); else { if (sprite.GetY() != 399) player.Collided(Constants.level1); } } else { if (sprite.GetY() != 399) player.Collided(Constants.level1); } } else player.AcquireShield(false); } break; case "level2": if (!sprite.GetKilled()) { if (!player.HasShield()) { if (!player.HasSword() || !Constants.isSwappingHand) { if (!Constants.isPunching) player.Collided(Constants.level2); else { if (sprite.GetY() == 399) player.Collided((int)(Constants.level2 / 2)); else player.Collided(Constants.level2); } } else { if (sprite.GetY() != 399) player.Collided(Constants.level2); } } else player.AcquireShield(false); } break; case "level3": if (!sprite.GetKilled()) { if (!player.HasShield()) { if (!player.HasSword() || !Constants.isSwappingHand) { if (!Constants.isPunching) player.Collided(Constants.level3); else { if (sprite.GetY() == 399) player.Collided((int)(Constants.level3 / 4)); else player.Collided(Constants.level3); } } else { if (sprite.GetY() == 399) player.Collided((int)(Constants.level3 / 2)); else player.Collided(Constants.level3); } } else player.AcquireShield(false); } break; case "sheild": player.AcquireShield(true); break; case "sword": player.AcquireSword(true); break; } } }