package framework.RWT;

import javax.microedition.khronos.opengles.GL10;
import java.util.ArrayList;

/**
 * スプライト管理クラス
 *
 * @author s.iwatani
 */
public class RWTSprites {
    private ArrayList<RWTSprite> sprites = new ArrayList<>();

    public RWTSprites() {}

    /**
     * スプライトの追加
     *
     * @author s,iwatani
     * @param sprite 追加したいRWTSprite
     */
    public void addSprite(RWTSprite sprite) {
        sprites.add(sprite);
    }

    /**
     * スプライトの削除
     *
     * @author s.iwatani
     * @param sprite 削除したいRWTSprite
     */
    public void removeSprite(RWTSprite sprite) {
        sprites.remove(sprite);
    }

    /**
     * 登録されたスプライトの描画
     *
     * @param gl GL10
     */
    public void draw(GL10 gl) {
        // なんかやってる
        gl.glDisable(GL10.GL_DEPTH_TEST);
        gl.glDisable(GL10.GL_DITHER);
        gl.glDisable(GL10.GL_LIGHTING);

//        gl.glEnable(GL10.GL_ALPHA_TEST);
        // アルファ値を適用するための一連
        gl.glEnable(GL10.GL_ALPHA); // GL_INVALID_ENUMが出るけどちゃんと動いてる.謎
        gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
        gl.glEnable(GL10.GL_BLEND);

        gl.glEnable(GL10.GL_TEXTURE_2D);

        // テクスチャ0番をアクティブにする(よくわからん)
        gl.glActiveTexture(GL10.GL_TEXTURE0);

        // 描画
        for (RWTSprite sprite : sprites) {
            sprite.draw(gl);
        }

        // 戻し
        gl.glEnable(GL10.GL_DEPTH_TEST);
        gl.glEnable(GL10.GL_DITHER);
        gl.glEnable(GL10.GL_LIGHTING);
        gl.glDisable(GL10.GL_ALPHA);
    }
}
