@Override
    public void die(){
        if (sound.Manager.enabled) {
            sound.Event effect = new sound.Event(getPosition(), getVelocity(),sound.Library.findByName(SOUND_EFFECT));
            // make bigger asteroids explode bigger
            effect.gain = EFFECT_VOLUME * scale.magnitude2();
            effect.pitch = 0.6f;
            sound.Manager.addEvent(effect);
        }        
        velocity.timesEquals(0);
        if(ParticleSystem.isEnabled())
            ParticleSystem.addEvent((new Explosion<Fire>(Fire.class,this)).setIntensity((int)scale.magnitude2()));

        if(scale.magnitude2() > SHATTER_THRESHOLD){
            // Make a copy of this, but be sure it reset its HP
            Asteroid a = new Asteroid(this);
            a.scale = this.scale.times(0.5f);
            a.hitPoints = a.calculateHitpoints();
            a.id = null; // ID must be null or the actor set wont add it
            // Move it a random direction half the radius for each piece
            Vector3f displacement = Vector3f.newRandom(1).normalize().times(getRadius() * 0.52f);
            Asteroid b = new Asteroid(a);
            a.position.plusEquals(displacement);
            a.velocity.plusEquals(displacement.times(FRAGMENT_SPEED));
            a.setRotation(Quaternion.newRandom(100));
            a.setAngularVelocity(Quaternion.newRandom(MAX_ROTATION_SPEED));
            b.position.plusEquals(displacement.negate());
            b.velocity.plusEquals(displacement.negate().times(FRAGMENT_SPEED));
            b.setRotation(Quaternion.newRandom(100));
            b.setAngularVelocity(Quaternion.newRandom(MAX_ROTATION_SPEED));

            actors.add(a);
            actors.add(b);
        }

        delete();
    }