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(); } }