diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/BulletCreateConnection.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/BulletCreateConnection.java new file mode 100644 index 0000000..ace9dbd --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/BulletCreateConnection.java @@ -0,0 +1,9 @@ +package org.ntlab.radishforandroidstudio.cactusClient.connections; + +import org.ntlab.radishforandroidstudio.framework.network.HttpAsyncConnection; + +public class BulletCreateConnection extends HttpAsyncConnection { + public BulletCreateConnection(String instanceId, String playerId) { + super("http://nitta-lab-www.is.konan-u.ac.jp:8080/CactusServer/rest/instances/" + instanceId + "/bullet/" + playerId); + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/BulletGetConnection.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/BulletGetConnection.java new file mode 100644 index 0000000..377955f --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/BulletGetConnection.java @@ -0,0 +1,9 @@ +package org.ntlab.radishforandroidstudio.cactusClient.connections; + +import org.ntlab.radishforandroidstudio.framework.network.HttpAsyncConnection; + +public class BulletGetConnection extends HttpAsyncConnection { + public BulletGetConnection(String instanceId) { + super("http://nitta-lab-www.is.konan-u.ac.jp:8080/CactusServer/rest/instances/" + instanceId + "/bullet"); + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/BulletUpdateConnection.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/BulletUpdateConnection.java new file mode 100644 index 0000000..7e88758 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/BulletUpdateConnection.java @@ -0,0 +1,9 @@ +package org.ntlab.radishforandroidstudio.cactusClient.connections; + +import org.ntlab.radishforandroidstudio.framework.network.HttpAsyncConnection; + +public class BulletUpdateConnection extends HttpAsyncConnection { + public BulletUpdateConnection(String instanceId, String playerId, String bulletId) { + super("http://nitta-lab-www.is.konan-u.ac.jp:8080/CactusServer/rest/instances/" + instanceId + "/bullet/" + playerId + "/" + bulletId); + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Bullet.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Bullet.java new file mode 100644 index 0000000..5760aad --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Bullet.java @@ -0,0 +1,127 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models; + +import android.telecom.Call; + +import org.ntlab.radishforandroidstudio.cactusClient.connections.BulletCreateConnection; +import org.ntlab.radishforandroidstudio.cactusClient.connections.BulletGetConnection; +import org.ntlab.radishforandroidstudio.cactusClient.connections.BulletUpdateConnection; +import org.ntlab.radishforandroidstudio.framework.animation.Animation3D; +import org.ntlab.radishforandroidstudio.framework.gameMain.Actor; +import org.ntlab.radishforandroidstudio.framework.gameMain.GameBaseModel; +import org.ntlab.radishforandroidstudio.framework.model3D.CollisionResult; +import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Placeable; +import org.ntlab.radishforandroidstudio.framework.network.CallBack; +import org.ntlab.radishforandroidstudio.framework.physics.Force3D; +import org.ntlab.radishforandroidstudio.framework.physics.Solid3D; + +import java.util.ArrayList; +import java.util.UUID; + +public class Bullet extends Actor implements GameBaseModel, CallBack { + private String instanceId; + private String playerId; + private String uuid; + private BulletGetConnection bulletGetConnection; + private BulletUpdateConnection bulletUpdateConnection; + private DummyBullet bullet; + final private int INIT_UPDATE_INTERVAL = 100; + private int updateInterval = INIT_UPDATE_INTERVAL; + private boolean isCreatedOnServer = false; + + public Bullet(Object3D body, Animation3D animation) { + super(new Solid3D(body), animation); + mode = modeOnGround; + } + + public Bullet(Solid3D body, Animation3D animation) { + super(body, animation); + mode = modeOnGround; + } + + public void initUuid() { + if (uuid.equals("")) { + uuid = UUID.randomUUID().toString(); + } + } + + public String getUuid() { + return uuid; + } + + @Override + public void onEndFall() { + + } + + @Override + public void onIntersect(CollisionResult normal, long interval) { + + } + + @Override + public void onEndAnimation() { + + } + + @Override + public void addCollidable(ArrayList pList) { + + } + + @Override + public void onCollisionEnter(Placeable p) { + + } + + @Override + public void onCollisionStay(Placeable p) { + + } + + @Override + public void onCollisionExit(Placeable p) { + + } + + @Override + public Force3D getGravity() { + return Force3D.ZERO; + } + + + @Override + public void update(double interval) { + // サーバに弾を作成 + if (!isCreatedOnServer) { + BulletCreateConnection con = new BulletCreateConnection(instanceId, playerId); + // set parameter + + con.doPost(); + } + + // サーバの弾の情報を更新 + updateInterval -= interval; + if (updateInterval <= 0 && isCreatedOnServer) { + updateInterval = INIT_UPDATE_INTERVAL; + bulletUpdateConnection = new BulletUpdateConnection(instanceId, playerId, uuid); + // set parameter + + bulletUpdateConnection.doPut(); + } + } + + @Override + public void setInstanceId(String id) { + instanceId = id; + } + + public void setPlayerid(String id) { + playerId = id; + } + + @Override + public void onResponse(String response) { + isCreatedOnServer = true; + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/DummyBullet.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/DummyBullet.java new file mode 100644 index 0000000..c900e77 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/DummyBullet.java @@ -0,0 +1,4 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models; + +public class DummyBullet { +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherBulletsManager.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherBulletsManager.java new file mode 100644 index 0000000..eb18cee --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherBulletsManager.java @@ -0,0 +1,116 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models; + +import net.arnx.jsonic.JSON; +import net.arnx.jsonic.TypeReference; + +import org.ntlab.radishforandroidstudio.cactusClient.connections.BulletGetConnection; +import org.ntlab.radishforandroidstudio.framework.gameMain.GameBaseModel; +import org.ntlab.radishforandroidstudio.framework.gameMain.RealTime3DFragment; +import org.ntlab.radishforandroidstudio.framework.model3D.ModelFactory; +import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Property3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Universe; +import org.ntlab.radishforandroidstudio.framework.network.CallBack; +import org.ntlab.radishforandroidstudio.java3d.Appearance; +import org.ntlab.radishforandroidstudio.java3d.Material; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +public class OtherBulletsManager implements GameBaseModel, CallBack { + private Universe universe; + private RealTime3DFragment fragment; + private BulletGetConnection con; + private int nextConnectRenaimdTime = 0; + private int connectInterval = 100; + private Map visibleBullets = new HashMap<>(); + private String instanceId; + private String playerId; + + public OtherBulletsManager(RealTime3DFragment fragment, Universe universe) { + this.universe = universe; + this.fragment = fragment; + } + + public void setInstanceId(String id) { + this.instanceId = id; + } + + public void setPlayerId(String id) { + playerId = id; + } + + /** + * 玉の状態を更新する + * + * @author s.iwatani + * @param interval 前回の更新からの時間差 + */ + @Override + public void update(double interval) { + nextConnectRenaimdTime -= interval; + if (nextConnectRenaimdTime <= 0) { + nextConnectRenaimdTime = connectInterval; + con = new BulletGetConnection(instanceId); + con.setCallBack(this); + con.doGet(); + } + } + + @Override + public void onResponse(String response) { + Map lastVisibleBullets = new HashMap<>(visibleBullets); + visibleBullets.clear(); + JSON json = new JSON(); + ArrayList> m = json.decode(response, new TypeReference>>(){}); + for(Map eachPlayerBullets : m) { + for (Map.Entry entry : eachPlayerBullets.entrySet()) { + visibleBullets.put(entry.getKey(), 1); + ArrayList properties = new ArrayList<>(); + DummyBullet player = entry.getValue(); + + // 自分自身は無視する + if (entry.getKey().equals(playerId)) continue; + + // 情報の取得 +// Map position = (Map)player.get("position"); +// Map angle = (Map)player.get("angle"); +// Position3D positionProp = new Position3D(((BigDecimal)position.get("x")).doubleValue(), ((BigDecimal)position.get("y")).doubleValue(), ((BigDecimal)position.get("z")).doubleValue()); +// Quaternion3D quaProp = new Quaternion3D(((BigDecimal)angle.get("x")).doubleValue(), ((BigDecimal)angle.get("y")).doubleValue(), ((BigDecimal)angle.get("z")).doubleValue(), ((BigDecimal)angle.get("w")).doubleValue()); + +// properties.add(player.getPosition()); +// properties.add(player.getAngle()); + + if (!universe.doHaveObj(entry.getKey())) { + Appearance ap1 = new Appearance(); + Material mat = new Material(); + mat.setDiffuseColor(0.0f, 0.3f, 1.0f); + mat.setAmbientColor(0.0f, 0.0f, 0.0f); + mat.setEmissiveColor(0.0f, 0.0f, 0.0f); + mat.setSpecularColor(0.0f, 0.0f, 0.0f); + mat.setShininess(5.0f); + ap1.setMaterial(mat); + + Object3D pochaBody = null; + try { + pochaBody = ModelFactory.loadModel(fragment.getResources(), "pocha.stl", ap1).createObject(); + pochaBody.scale(5.0); + } catch (Exception e) { + e.printStackTrace(); + } + OtherPlayerBullet bullet = new OtherPlayerBullet(pochaBody); + universe.place(entry.getKey(), bullet); + universe.place(bullet); + } + universe.apply(entry.getKey(), properties); + } + } + // 見えなくなったキャラクターの削除 + for (String key : lastVisibleBullets.keySet()) { + if (visibleBullets.get(key) == null) { + universe.displace(key); + } + } + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerBullet.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerBullet.java new file mode 100644 index 0000000..77546d5 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerBullet.java @@ -0,0 +1,9 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models; + +import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; + +public class OtherPlayerBullet extends Object3D { + public OtherPlayerBullet(Object3D obj) { + super(obj); + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerCharacter.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerCharacter.java index 9357fc3..a36c44a 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerCharacter.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerCharacter.java @@ -6,8 +6,6 @@ import java.util.ArrayList; public class OtherPlayerCharacter extends Object3D { - private Universe universe = null; - public OtherPlayerCharacter(Object3D body) { super(body); } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerCharactersModel.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerCharactersModel.java index 186d4d7..d80b25b 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerCharactersModel.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerCharactersModel.java @@ -27,7 +27,6 @@ public class OtherPlayerCharactersModel implements GameBaseModel, CallBack { private Universe universe; private RealTime3DFragment fragment; - private ArrayList otherCharacters = new ArrayList<>(); private PlayersConnection con; private int nextConnectRenaimdTime = 0; private int connectInterval = 300;