public Bomb() { hitbox = hitbox_placed; time_explosion = 0.0f; bomb_state = Bomb_State.reset; bomb_damage = 5; bombAnim = AnimationLib.getFrameAnimationSet("bombArmed"); explosionAnim = AnimationLib.getFrameAnimationSet("rocketExplode"); knockback_magnitude = 5.0f; }
public void update(Player parent, GameTime currentTime, LevelState parentWorld) { if (bomb_state == Bomb_State.reset) { position = parent.CenterPoint - hitbox / 2; center_placed_bomb = position + hitbox / 2; time_explosion = 0.0f; parent.State = Player.playerState.Moving; bomb_state = Bomb_State.placed; } else { parent.State = Player.playerState.Moving; } }
public void daemonupdate(Player parent, GameTime currentTime, LevelState parentWorld) { time_explosion += currentTime.ElapsedGameTime.Milliseconds; bomb_timer += currentTime.ElapsedGameTime.Milliseconds; switch (bomb_state) { case Bomb_State.placed: animation_time += currentTime.ElapsedGameTime.Milliseconds; if ((parent.Index == InputDevice2.PPG_Player.Player_1 ? GameCampaign.Player_Ammunition : GameCampaign.Player2_Ammunition) >= 10) { if (bomb_timer > 1500f / time_explosion * 50.0f) { bomb_timer = 0.0f; AudioLib.playSoundEffect("bombBeep"); } if (time_explosion > 1500) { if (parent.Index == InputDevice2.PPG_Player.Player_1) { GameCampaign.Player_Ammunition -= ammo_consumption; } else { GameCampaign.Player2_Ammunition -= ammo_consumption; } hitbox = hitbox_exploded; position = new Vector2(center_placed_bomb.X - hitbox.X / 2, center_placed_bomb.Y - hitbox.Y / 2); bomb_state = Bomb_State.exploded; time_explosion = 0.0f; AudioLib.playSoundEffect("testExplosion"); animation_time = 0.0f; } } else { parent.State = Player.playerState.Moving; bomb_state = Bomb_State.none; return; } break; case Bomb_State.exploded: //where hit test is done if (time_explosion > 700) { bomb_state = Bomb_State.reset; time_explosion = 0.0f; } else { foreach (Entity en in parentWorld.EntityList) { if (en is Player) { if (hitTest(en)) { Vector2 direction = en.CenterPoint - center_placed_bomb; float bomb_knockback_power = Vector2.Distance(center_placed_bomb, en.CenterPoint) / hitbox.X; if (bomb_knockback_power < 1) { bomb_knockback_power = 1.0f; } float temp_knockback_magnitude = knockback_magnitude / bomb_knockback_power; en.knockBack(direction, temp_knockback_magnitude, bomb_damage, parent); } } else if (en is Enemy || en is ShopKeeper) { if (hitTest(en)) { Vector2 direction = en.CenterPoint - center_placed_bomb; float bomb_knockback_power = Vector2.Distance(center_placed_bomb, en.CenterPoint) / hitbox.X; if (bomb_knockback_power < 1) { bomb_knockback_power = 1.0f; } float temp_knockback_magnitude = knockback_magnitude / bomb_knockback_power; en.knockBack(direction, temp_knockback_magnitude, bomb_damage); } } } } animation_time += currentTime.ElapsedGameTime.Milliseconds; break; case Bomb_State.none: break; default: hitbox = hitbox_placed; animation_time = 0.0f; break; } }