/*
 * Copyright (C) 2013 Darth Affe <http://wyrez.org> and contributors
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package org.wyrez.shootingstars.controls;

import com.jme3.effect.ParticleEmitter;
import com.jme3.effect.shapes.EmitterShape;
import com.jme3.math.ColorRGBA;
import com.jme3.scene.Spatial;
import com.jme3.scene.control.Control;
import org.wyrez.shootingstars.factories.Particles;
import org.wyrez.shootingstars.helper.UserDataKeys;

/**
 *
 * @author Snowsun
 */
public class StarDeathControl extends BaseControl {

    private static final float FX_TIME = 3f;
    /**/
    private ParticleEmitter effect;
    private boolean isDead;
    private float deathTimer = FX_TIME;

    public StarDeathControl() {
    }

    @Override
    public void setSpatial(Spatial spatial) {
        super.setSpatial(spatial);
        spatial.setUserData(UserDataKeys.HITTED, false);
    }

    @Override
    protected void controlUpdate(float tpf) {
        if (isDead) {
            if (deathTimer <= 0f) {
                spatial.removeFromParent();
                effect.killAllParticles();
                effect.removeFromParent();
            } else {
                deathTimer -= tpf;
            }
        } else {
            if (spatial.getUserData(UserDataKeys.HITTED)) {
                effect = Particles.SPARKLE.create();
                StarPointControl points = spatial.getControl(StarPointControl.class);
                if (points != null) {
                    effect.setStartColor(points.getColor());
                    effect.setEndColor(new ColorRGBA(points.getColor().r,
                            points.getColor().g, points.getColor().b, 0f));
                }
                effect.setStartSize((Float) spatial.getUserData(UserDataKeys.SIZE)*0.5f);
                effect.setEndSize(0f);
                effect.setHighLife(FX_TIME);
                effect.setLowLife(0f);
                effect.setLocalTranslation(spatial.getLocalTranslation());
                effect.setParticlesPerSec(0f);
                effect.setRandomAngle(true);

                spatial.getParent().attachChild(effect);
                spatial.setCullHint(Spatial.CullHint.Always);
                
                effect.emitAllParticles();
                isDead = true;
            }
        }
    }

    public Control cloneForSpatial(Spatial spatial) {
        StarDeathControl control = new StarDeathControl();
        spatial.addControl(control);
        return control;
    }
}
