package com.brackeen.javagamebook.tilegame.sprites;

import java.lang.reflect.Constructor;
import com.brackeen.javagamebook.graphics.*;

/**
    Klasa PowerUp dziedziczy po Sprite. Bohater może podnosić ten obiekt.
*/
public abstract class PowerUp extends Sprite {

    public PowerUp(Animation anim) {
        super(anim);
    }

    public Object clone() {
        // wykorzystanie refleksji do utworzenia obiektu właściwej podklasy
        Constructor constructor = getClass().getConstructors()[0];
        try {
            return constructor.newInstance(
                new Object[] {(Animation)anim.clone()});
        }
        catch (Exception ex) {
            // nie powinno się nigdy wykonać
            ex.printStackTrace();
            return null;
        }
    }

    /**
        Klasa Star dziedzicząca po PowerUp. Daje bohaterowi punkty.
    */
    public static class Star extends PowerUp {
        public Star(Animation anim) {
            super(anim);
        }
    }

    /**
        Klasa Music dziedzicząca po PowerUp. Zmienia muzykę w grze.
    */
    public static class Music extends PowerUp {
        public Music(Animation anim) {
            super(anim);
        }
    }

    /**
        Klasa Goal dziedzicząca po PowerUp. Przejście do następnej mapy.
    */
    public static class Goal extends PowerUp {
        public Goal(Animation anim) {
            super(anim);
        }
    }
}
