public override void _PhysicsProcess(float delta)
    {
        KinematicCollision2D collision = MoveAndCollide(Direction * Speed * delta, false);

        if (collision != null)
        {
            Object collider = collision.Collider;

            if (collider is HittablePart)
            {
                HittablePart part = (HittablePart)collider;
                if (part.OnHit(this))
                {
                    DidHit(part, collision);
                    return;
                }
            }

            if (collider is Box)
            {
                Box box = (Box)collider;
                box.DoDamage(5);
            }

            DisintegrateBullet(collision);
        }
    }
Пример #2
0
    private void Explode()
    {
        MoonHunter.Instance.AddExplosion(GlobalPosition);
        SoundManager.Instance.Explosion5AudioPlayer.Play();
        Godot.Collections.Array array = damageArea.GetOverlappingBodies();
        for (int i = 0; i < array.Count; i++)
        {
            if (array[i] is HittablePart)
            {
                HittablePart part = (HittablePart)array[i];
                part.DoDamage(Damage);
            }
        }

        MoonHunter.Instance.MineExploded();
        QueueFree();
    }
Пример #3
0
    private void DoDamage()
    {
        Godot.Collections.Array array = GetOverlappingBodies();
        for (int i = 0; i < array.Count; i++)
        {
            if (array[i] is HittablePart)
            {
                HittablePart part = (HittablePart)array[i];
                part.DoDamage(Damage);
            }

            if (array[i] is Box)
            {
                Box box = array[i] as Box;
                box.DoDamage(Damage);
            }
        }
    }
 public void DidHit(HittablePart part, KinematicCollision2D collision)
 {
     SoundManager.Instance.HitEnemiesAudioPlayer.Play();
     QueueFree();
 }