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;
            }
        }