diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/BulletsManager.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/BulletsManager.java index f619b03..28e3d06 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/BulletsManager.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/BulletsManager.java @@ -44,6 +44,7 @@ this.resources = fragment; } + @Override public void setInstanceId(String id) { this.instanceId = id; } @@ -61,7 +62,7 @@ @Override public void update(double interval) { nextConnectRenaimdTime -= interval; - if (nextConnectRenaimdTime <= 0) { + if (nextConnectRenaimdTime <= 0 && instanceId != null) { nextConnectRenaimdTime = CONNECT_INTERVAL; con = new BulletGetConnection(instanceId); con.setCallBack(this); diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/MyBullet.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/MyBullet.java index 7994941..ba20819 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/MyBullet.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/MyBullet.java @@ -28,11 +28,11 @@ private String instanceId; private String playerId; private String uuid; - private BulletGetConnection bulletGetConnection; private DummyBullet bullet; final private int INIT_UPDATE_INTERVAL = 100; private int updateInterval = INIT_UPDATE_INTERVAL; private boolean isCreatedOnServer = false; + private boolean isWaitCreatingOnServer = false; private boolean isDelete = false; public MyBullet(Object3D body, Animation3D animation) { @@ -104,16 +104,19 @@ final public void update(double interval) { progress(interval); // サーバに弾を作成 - if (!isCreatedOnServer && !instanceId.equals("") && !playerId.equals("")) { + if (!isCreatedOnServer && !instanceId.equals("") && !playerId.equals("") && !isWaitCreatingOnServer) { JSON json = new JSON(); Quaternion3D q = ((Solid3D)(getBody())).getQuaternion(); BulletCreateConnection con = new BulletCreateConnection(instanceId, playerId); + con.setCallBack(this); con.addFormParam("bulletID", getUuid()); con.addFormParam("position", json.encode(getPosition())); con.addFormParam("angle", "{ \"x\":" + q.getX() + ", \"y\":" + q.getY() + ", \"z\":" + q.getZ() + ", \"w\":" + q.getW() + "}"); con.doPost(); + isWaitCreatingOnServer = true; + System.out.println("create shot uuid:" + getUuid()); } - else if (isCreatedOnServer) { + else if (isCreatedOnServer && !isWaitCreatingOnServer) { // サーバの弾の情報を更新 updateInterval -= interval; if (updateInterval <= 0 && isCreatedOnServer) { @@ -121,6 +124,7 @@ Quaternion3D q = ((Solid3D)(getBody())).getQuaternion(); updateInterval = INIT_UPDATE_INTERVAL; BulletUpdateConnection con = new BulletUpdateConnection(instanceId, playerId, getUuid()); + con.setCallBack(this); con.addFormParam("position", json.encode(getPosition())); con.addFormParam("angle", "{ \"x\":" + q.getX() + ", \"y\":" + q.getY() + ", \"z\":" + q.getZ() + ", \"w\":" + q.getW() + "}"); con.doPut(); @@ -151,6 +155,7 @@ @Override public void onResponse(String response) { + isWaitCreatingOnServer = false; isCreatedOnServer = true; } } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnBullets.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnBullets.java index 2545ed0..27d1125 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnBullets.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnBullets.java @@ -11,6 +11,7 @@ import org.ntlab.radishforandroidstudio.framework.subject.BulletShotSubject; import java.util.ArrayList; +import java.util.Iterator; public class OwnBullets implements GameBaseModel, BulletShotListener { private ArrayList bullets = new ArrayList<>(); @@ -47,32 +48,29 @@ @Override public void update(double interval) { - System.out.println("num of bullets:" + bullets.size()); -// for (Iterator bulletIterator = bullets.iterator(); bulletIterator.hasNext();) { -// MyBullet bullet = bulletIterator.next(); -// bullet.update(interval); -// -// // 弾削除 -// if (bullet.isDelete()) { -// sendDeleteBulletForServer(bullet); -// bulletIterator.remove(); -// } -// } + for (Iterator bulletIterator = bullets.iterator(); bulletIterator.hasNext();) { + MyBullet bullet = bulletIterator.next(); + // 弾削除 + if (bullet.isDelete()) { + sendDeleteBulletForServer(bullet); + bulletIterator.remove(); + } + } } public void deleteBullets(ArrayList deletedBullets) { -// for (Iterator 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; -// } -// } -// } + for (Iterator 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 diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnPlayer.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnPlayer.java index ef0bc3f..321a9b6 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnPlayer.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnPlayer.java @@ -39,7 +39,6 @@ private int connectInterval = 300; private String playerId; private OwnBullets bullets; - boolean b = false; public OwnPlayer(Player player, Resources resources, Universe universe, Camera3D camera, String playerId, String instanceId) { this.player = player; @@ -88,6 +87,12 @@ camera.setViewLine(new Vector3d(5.0 * charaVector3d.getX(), charaVector3d.getY() - 2.5, 5.0 * charaVector3d.getZ() + touchX));//視線 } + /** + * パッドを動かしたときのイベント処理 + * + * @param event イベントの情報 + * @return + */ @Override public boolean onEvent(PadEvent event) { Vector3d charaVector3d = actor.getDirection(); diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/PlayerFragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/PlayerFragment.java index d9ef3c0..f8b7615 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/PlayerFragment.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/PlayerFragment.java @@ -101,10 +101,12 @@ otherPlayerCharactersModel.setPlayerId(playerId); bulletsManager = new BulletsManager(this.getResources(), universe); bulletsManager.setPlayerId(playerId); + modelManager.addModel(otherPlayerCharactersModel); modelManager.addModel(bulletsManager); modelManager.addModel(player); modelManager.setInstanceId(instanceId); + initGameWindowView(); return parentView; }