diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/CharactersConnection.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/CharactersConnection.java index 04fb867..004a465 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/CharactersConnection.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/CharactersConnection.java @@ -4,7 +4,7 @@ public class CharactersConnection extends HttpAsyncConnection { public CharactersConnection(String instanceId) { - super("http://nitta-lab-www2.is.konan-u.ac.jp:8080/CactusServer/rest/instances/" + instanceId + "/characters"); + super("http://nitta-lab-www.is.konan-u.ac.jp:8080/CactusServer/rest/instances/" + instanceId + "/characters"); } } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/CactusModels.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/CactusModels.java index 818b9ad..0b27dfa 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/CactusModels.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/CactusModels.java @@ -1,6 +1,7 @@ package org.ntlab.radishforandroidstudio.cactusClient.models; import org.ntlab.radishforandroidstudio.framework.gameMain.RealTime3DFragment; +import org.ntlab.radishforandroidstudio.framework.model3D.Universe; import java.util.ArrayList; @@ -12,13 +13,13 @@ public class CactusModels implements CactusModel { private ArrayList models = new ArrayList<>(); private RealTime3DFragment fragment = null; + private Universe universe = null; public CactusModels() { - models.add(new OtherPlayerCharactersModel()); } - public CactusModels(RealTime3DFragment fragment) { - models.add(new OtherPlayerCharactersModel()); + public CactusModels(RealTime3DFragment fragment, Universe universe) { + models.add(new OtherPlayerCharactersModel(fragment, universe)); this.fragment = fragment; } 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 new file mode 100644 index 0000000..9357fc3 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerCharacter.java @@ -0,0 +1,14 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models; + +import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Universe; + +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/OtherPlayerCharacterModel.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerCharacterModel.java deleted file mode 100644 index 7ebb4d0..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerCharacterModel.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.models; - -/** - * 自キャラ以外の操作キャラを管理するモデル - * - * @author s.iwatani - */ -public class OtherPlayerCharacterModel implements CactusModel { - /** - * モデルの状態を更新する - * - * @author s.iwatani - * @param interval 前回の更新からの時間差 - */ - @Override - public void update(double interval) { - // TODO: APIを叩いてキャラクタの状態を取得し、いろいろ処理 - } -} 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 ff4b005..dc5ab96 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 @@ -5,11 +5,19 @@ import org.ntlab.radishforandroidstudio.cactusClient.connections.CharactersConnection; import org.ntlab.radishforandroidstudio.cactusClient.types.pojo.PlayerPojo; import org.ntlab.radishforandroidstudio.cactusClient.types.pojo.PlayersPojo; +import org.ntlab.radishforandroidstudio.framework.animation.Animation3D; import org.ntlab.radishforandroidstudio.framework.gameMain.Actor; +import org.ntlab.radishforandroidstudio.framework.gameMain.OvergroundActor; +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.Position3D; import org.ntlab.radishforandroidstudio.framework.model3D.Property3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D; +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.math.BigDecimal; import java.util.ArrayList; @@ -22,13 +30,16 @@ * @author s.iwatani */ public class OtherPlayerCharactersModel implements CactusModel, CallBack { - // TODO: 型が確定したら変更 + private Universe universe = null; + private RealTime3DFragment fragment = null; private ArrayList otherCharacters = new ArrayList<>(); private CharactersConnection con = null; private int nextConnectRenaimdTime = 0; - private int connectInterval = 1000; + private int connectInterval = 300; - public OtherPlayerCharactersModel() { + public OtherPlayerCharactersModel(RealTime3DFragment fragment, Universe universe) { + this.fragment = fragment; + this.universe = universe; con = new CharactersConnection("a"); con.setCallBack(this); } @@ -43,21 +54,52 @@ public void update(double interval) { nextConnectRenaimdTime -= interval; if (nextConnectRenaimdTime <= 0) { - nextConnectRenaimdTime += connectInterval; + nextConnectRenaimdTime = connectInterval; // con.doAnything(); - con.doGet(); +// con.doGet(); + con.test(); } } @Override public void onResponse(String response) { JSON json = new JSON(); - ArrayList m = json.decode(response); - for (Map player : m) { - System.out.println(player.get("name")); + Map m = json.decode(response); + for (Map.Entry entry: m.entrySet()) { + ArrayList properties = new ArrayList<>(); + Map player = entry.getValue(); + + // 情報の取得 Map position = (Map)player.get("position"); Position3D positionProp = new Position3D(((BigDecimal)position.get("x")).doubleValue(), ((BigDecimal)position.get("y")).doubleValue(), ((BigDecimal)position.get("z")).doubleValue()); + Quaternion3D quaProp = new Quaternion3D(((BigDecimal)position.get("vx")).doubleValue(), ((BigDecimal)position.get("vy")).doubleValue(), ((BigDecimal)position.get("vz")).doubleValue(), ((BigDecimal)position.get("a")).doubleValue()); + properties.add(positionProp); + properties.add(quaProp); + if (!universe.doHaveObj(entry.getKey())) { + OvergroundActor pocha; + 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; + Animation3D pochaAnimation = null; + try { + pochaBody = ModelFactory.loadModel(fragment.getResources(), "pocha.stl", ap1).createObject(); + pochaBody.scale(10.0); + } catch (Exception e) { + e.printStackTrace(); + } + OtherPlayerCharacter chara = new OtherPlayerCharacter(pochaBody); + universe.place(entry.getKey(), chara); + universe.place(chara); + } + universe.apply(entry.getKey(), properties); } } } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/RealTime3DFragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/RealTime3DFragment.java index ebe9c20..77ff09d 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/RealTime3DFragment.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/RealTime3DFragment.java @@ -30,7 +30,7 @@ universe = new Universe(); camera = new Camera3D(universe); - models = new CactusModels(this); + models = new CactusModels(this, universe); } @Nullable diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/model3D/Universe.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/model3D/Universe.java index d6db575..7d43f72 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/model3D/Universe.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/model3D/Universe.java @@ -63,6 +63,10 @@ } } + public boolean doHaveObj(Object key) { + return objMap.get(key) != null; + } + public void apply(HashMap> properties) { for (Map.Entry> entry : properties.entrySet()) { Object3D target = objMap.get(entry.getKey()); @@ -115,7 +119,7 @@ root.addChild(node); } - public void place(Object3D obj, Object id) { + public void place(Object id, Object3D obj) { objMap.put(id, obj); } @@ -167,7 +171,7 @@ root.removeChild(node); } - public void displace(Object id) { objMap.remove(id); } + public void displace(Object id) { displace(objMap.get(id)); objMap.remove(id); } public ArrayList getLights() { return lights; diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/network/HttpAsyncConnection.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/network/HttpAsyncConnection.java index bb20b75..41db82f 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/network/HttpAsyncConnection.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/network/HttpAsyncConnection.java @@ -140,7 +140,6 @@ public void notConnection(){}; /** - * param set * @param key * @param value */ @@ -163,23 +162,23 @@ } public void test() { - callBack.onResponse("[\n" + - " {\n" + + callBack.onResponse("{\n" + + " \"id1\" : {\n" + " \"accountURI\": \"http://hogehoge.com\",\n" + " \"areaURI\": \"http://areahogehoge.com\",\n" + " \"name\": \"Totori Tori\",\n" + - "\t\"position\": {\"x\": 0.5, \"y\": 1.2, \"z\": 1.2},\n" + + "\t\"position\": {\"x\": 0.5, \"y\": 2, \"z\": 0.2},\n" + "\t\"angle\": {\"vx\": 0, \"vy\": 0, \"vz\": 0, \"a\": 0},\n" + "\t\"modelID\": \"5\"\n" + " },\n" + - " {\n" + + " \"id2\" : {\n" + " \"accountURI\": \"http://hogehoge.com\",\n" + " \"areaURI\": \"http://areahogehoge.com\",\n" + " \"name\": \"Tataru Taru\",\n" + - "\t\"position\": {\"x\": 1.2, \"y\": 1.2, \"z\": 1.2},\n" + + "\t\"position\": {\"x\": 3.5, \"y\": 8, \"z\": 3.5},\n" + "\t\"angle\": {\"vx\": 0, \"vy\": 0, \"vz\": 0, \"a\": 0},\n" + "\t\"modelID\": \"5\"\n" + " }\n" + - "]");return; + "}");return; } }