Newer
Older
Cactus-CleanArchitecture / app / src / main / java / org / ntlab / radishforandroidstudio / framework / gameMain / GameBaseModelManager.java
iwatani on 15 Nov 2018 1 KB clear忘れ
package org.ntlab.radishforandroidstudio.framework.gameMain;

import org.ntlab.radishforandroidstudio.framework.model3D.Universe;

import java.util.ArrayList;
import java.util.Iterator;

public abstract class GameBaseModelManager implements GameBaseModel {
    protected ArrayList<GameBaseModel> models = new ArrayList<>();
    protected ArrayList<GameBaseModel> nextAddModels = new ArrayList<>();
    protected ArrayList<GameBaseModel> nextRemoveModels = new ArrayList<>();
    public void setFragment(RealTime3DFragment fragment) {
        this.fragment = fragment;
    }

    public void setUniverse(Universe universe) {
        this.universe = universe;
    }

    protected RealTime3DFragment fragment = null;
    protected Universe universe = null;

    protected GameBaseModelManager() {
    }

    /**
     * GameBaseModelを追加
     * instanceIDのセットなどは実行されないことを注意
     *
     * @param model 追加したいGameBaseModel
     */
    public void addModel(GameBaseModel model) {
        nextAddModels.add(model);
    }

    public void removeModel(GameBaseModel model) { nextRemoveModels.add(model); }

    /**
     * モデルの状態を更新する
     *
     * @author s.iwatani
     * @param interval 前回の更新からの時間差
     */
    @Override
    public void update(double interval) {
        for (GameBaseModel model: models) {
            model.update(interval);
        }

        for (GameBaseModel model : nextAddModels) {
            models.add(model);
        }
        nextAddModels.clear();

        // モデルの消去
        Iterator<GameBaseModel> it = nextRemoveModels.iterator();
        while(it.hasNext()) {
            GameBaseModel model = it.next();
            for(GameBaseModel removeModel : nextRemoveModels) {
                if (model.equals(removeModel)) {
                    it.remove();
                    break;
                }
            }
        }
        nextRemoveModels.clear();
    }
}