package org.ntlab.radishforandroidstudio.cactusClient.models; import android.content.res.Resources; import org.ntlab.radishforandroidstudio.framework.event.BulletShotEvent; import org.ntlab.radishforandroidstudio.framework.gameMain.GameBaseModel; import org.ntlab.radishforandroidstudio.framework.listener.BulletShotListener; import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D; import org.ntlab.radishforandroidstudio.framework.model3D.Universe; import org.ntlab.radishforandroidstudio.framework.subject.BulletShotSubject; import java.util.ArrayList; import java.util.Iterator; public class OwnBullets implements GameBaseModel, BulletShotListener { private ArrayList<MyBullet> bullets = new ArrayList<>(); private String playerId; private String instanceId; private Resources resources; private Universe universe; private CactusModels cactusModels; private Position3D playerPos; private Quaternion3D playerAngle; public OwnBullets(Resources resources, Universe universe, String instanceId, String playerId) { this.resources = resources; this.universe = universe; cactusModels = CactusModels.getInstance(); setInstanceId(instanceId); setPlayerId(playerId); BulletShotSubject.getInstance().addListener(this); } public void setPosition(Position3D pos) { playerPos = pos; } public void setAngle(Quaternion3D angle) { playerAngle = angle; } public void sendDeleteBulletForServer(MyBullet myBullet) { // TODO: 弾消し情報を送信 } @Override public void update(double interval) { for (Iterator<MyBullet> bulletIterator = bullets.iterator(); bulletIterator.hasNext();) { MyBullet bullet = bulletIterator.next(); // 弾削除 if (bullet.isDelete()) { sendDeleteBulletForServer(bullet); bulletIterator.remove(); } } } public void deleteBullets(ArrayList<String> deletedBullets) { for (Iterator<MyBullet> bulletIterator = bullets.iterator(); bulletIterator.hasNext();) { MyBullet bullet = bulletIterator.next(); for(String deleteBullet : deletedBullets) { // 弾削除 if (bullet.getUuid().equals(bullets)) { universe.displace(bullet); sendDeleteBulletForServer(bullet); bulletIterator.remove(); break; } } } } @Override public void setInstanceId(String id) { instanceId = id; } public void setPlayerId(String id) { playerId = id; } /** * 弾作成のイベント受け * * @param event イベントの情報 * @return */ @Override public boolean onEvent(BulletShotEvent event) { if (playerPos == null || playerAngle == null || playerId == null || instanceId == null) { return false; } MyBullet b = event.getBullet(); b.setPlayerid(playerId); b.setInstanceId(instanceId); b.init(playerPos, playerAngle); bullets.add(b); universe.place(b); cactusModels.addModel(b); return true; } }