diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/MovableObjectModel.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/MovableObjectModel.java index 14b34b4..87b5e63 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/MovableObjectModel.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/MovableObjectModel.java @@ -1,10 +1,24 @@ package org.ntlab.radishforandroidstudio.cactusClient.models; +import net.arnx.jsonic.JSON; +import net.arnx.jsonic.TypeReference; + import org.ntlab.radishforandroidstudio.cactusClient.connections.ObjectsConnection; 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.HashSet; +import java.util.Map; +import java.util.Set; /** * オブジェクトを管理するモデル @@ -14,23 +28,23 @@ private Universe universe; private RealTime3DFragment fragment; private ObjectsConnection con; + private int nextConnectRenaimdTime = 0; + private int connectInterval = 300; private String instanceId; - private String objectId; + private Map visibleobject = new HashMap<>(); - public MovableObjectModel(RealTime3DFragment fragment, Universe universe) { + public MovableObjectModel(RealTime3DFragment fragment, Universe universe,String instanceId) { this.fragment = fragment; this.universe = universe; + this.setInstanceId(instanceId); } @Override - public void setInstanceId(String id) { - this.instanceId = id; + public void setInstanceId(String instanceId) { + this.instanceId = instanceId; } - public void setObjectId(String objectId) { - this.objectId = objectId; - } /** * オブジェクトの状態更新 @@ -39,15 +53,64 @@ */ @Override public void update(double interval) { - con = new ObjectsConnection(instanceId); - con.addQueryParam("instanceId", instanceId); - con.setCallBack(this); - con.doGet(); + nextConnectRenaimdTime -= interval; + if (nextConnectRenaimdTime <= 0) { + nextConnectRenaimdTime = connectInterval; + con = new ObjectsConnection(instanceId); + con.setCallBack(this); + con.doGet(); + } } @Override public void onResponse(String response) { + JSON json = new JSON(); + + + Map o = json.decode(response, new TypeReference>() { + }); + for (Map.Entry entry : o.entrySet()) { + ArrayList properties = new ArrayList<>(); + Object object = entry.getValue(); + + + properties.add(object.getPosition()); + properties.add(object.getAngle()); + + if (!visibleobject.containsKey(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 objBody = null; + try { + objBody = ModelFactory.loadModel(fragment.getResources(), "cube-binary.stl", ap1).createObject(); + } catch (Exception e) { + e.printStackTrace(); + } + + MovableObject object1 = new MovableObject(objBody); + visibleobject.put(entry.getKey(), object1); + universe.place(entry.getKey(), object1); + universe.place(object1); + + } + universe.apply(entry.getKey(), properties); + } + + for (String key : visibleobject.keySet()) { + if (!o.containsKey(key)) { + universe.displace(visibleobject.get(key)); + } + } + + } } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Object.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Object.java index 27d741a..7dfc485 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Object.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Object.java @@ -32,27 +32,29 @@ // JSONDecode時の呼び出し用 } - public Object(Position3D position, Velocity3D velocity, AngularVelocity3D angularVelocity, Quaternion3D angle, - Attribute attribute, int modelID) { + public Object(Position3D position, Velocity3D velocity, AngularVelocity3D angularVelocity, + Quaternion3D angle, Attribute attribute, int modelID) { + setPrim(new Box()); + setObject(new Object3D("", prim)); + setPlaceable(object); setPosition(position); setVelocity(velocity); setAngularVelocity(angularVelocity); setAngle(angle); setAttribute(attribute); setModel(modelID); - setPrim(new Box()); - setObject(new Object3D("", prim)); - setPlaceable(object); } public Position3D getPosition() { return position; } + @JSONHint(ignore = true) public Velocity3D getVelocity() { return velocity; } + @JSONHint(ignore = true) public AngularVelocity3D getAngularVelocity() { return angularVelocity; } @@ -61,16 +63,19 @@ return angle; } + @JSONHint(ignore = true) public Attribute getAttribute() { return attribute; } + @JSONHint(ignore = true) public Model3D getModel() { return model; } public void setPosition(Position3D position) { this.position = position; +// ((Object3D)(getPlaceable().getBody())).setPosition(position); } public void setVelocity(Velocity3D velocity) { @@ -83,6 +88,7 @@ public void setAngle(Quaternion3D angle) { this.angle = angle; +// ((Object3D) getPlaceable().getBody()).apply(angle, false); } public void setAttribute(Attribute attribute) { @@ -90,7 +96,7 @@ } public void setModel(int modelID) { -// this.model = ObjectModelManager.getInstance().getObject(modelID); + this.model = ObjectModelManager.getInstance().getObject(modelID); } public static class Attribute { @@ -135,12 +141,11 @@ @JSONHint(ignore = true) public Object3D getObject() { - return object; + return (Object3D) getPlaceable().getBody(); } public void setObject(Object3D object) { this.object = object; } - } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/ObjectModelManager.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/ObjectModelManager.java index f7afff7..1d33074 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/ObjectModelManager.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/ObjectModelManager.java @@ -1,5 +1,6 @@ package org.ntlab.radishforandroidstudio.cactusClient.models; +import org.ntlab.radishforandroidstudio.framework.gameMain.RealTime3DFragment; import org.ntlab.radishforandroidstudio.framework.model3D.Model3D; import org.ntlab.radishforandroidstudio.framework.model3D.ModelFactory; import org.ntlab.radishforandroidstudio.framework.model3D.ModelFileFormatException; @@ -8,35 +9,38 @@ import java.util.HashMap; class ObjectModelManager { -// -// private static ObjectModelManager theInstance = null; -// private HashMap model = new HashMap<>(); -// -// private ObjectModelManager() { -// try { -// setObject(0, ModelFactory.loadModel(getClass().getResource("../../pocha.stl").getPath())); -// setObject(1, ModelFactory.loadModel(getClass().getResource("../../pocha.stl").getPath())); -// } catch (IOException | ModelFileFormatException e) { -// e.printStackTrace(); -// } -// } -// -// public static ObjectModelManager getInstance() { -// if (theInstance == null) { -// theInstance = new ObjectModelManager(); -// } -// return theInstance; -// } -// -// public void setObject(int key, Model3D loadModel) { -// model.put(key, loadModel); -// } -// -// public Model3D getObject(int objectID) { -// return model.get(objectID); -// } -// -// public int getObjectModelCount() { -// return model.size(); -// } + + private static ObjectModelManager theInstance = null; + private HashMap model = new HashMap<>(); + private RealTime3DFragment fragment; + + // TODO: 2018/10/23 ObjectModelManagerの記述 + private ObjectModelManager() { + try { + setObject(0, ModelFactory.loadModel(fragment.getResources(),getClass().getResource("cube-binary.stl").getPath())); + setObject(1, ModelFactory.loadModel(fragment.getResources(),getClass().getResource("cube-binary.stl").getPath())); + + } catch (IOException | ModelFileFormatException e) { + e.printStackTrace(); + } + } + + public static ObjectModelManager getInstance() { + if (theInstance == null) { + theInstance = new ObjectModelManager(); + } + return theInstance; + } + + public void setObject(int key, Model3D loadModel) { + model.put(key, loadModel); + } + + public Model3D getObject(int objectID) { + return model.get(objectID); + } + + public int getObjectModelCount() { + return model.size(); + } } 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 ea61611..111ab9c 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 @@ -10,6 +10,7 @@ import android.view.ViewGroup; import org.ntlab.radishforandroidstudio.R; +import org.ntlab.radishforandroidstudio.cactusClient.connections.ObjectsConnection; import org.ntlab.radishforandroidstudio.cactusClient.models.CactusModels; import org.ntlab.radishforandroidstudio.cactusClient.models.MovableObjectModel; import org.ntlab.radishforandroidstudio.cactusClient.models.Object; @@ -35,10 +36,10 @@ private OvergroundActor pocha; RWTPad pad = null; private OwnPlayer player; - private Object obj; + private Object object; private OtherPlayerCharactersModel otherPlayerCharactersModel; - private MovableObjectModel movableObjectModel; + private ObjectsConnection con; public PlayerFragment() { // Required empty public constructor @@ -89,15 +90,18 @@ Bundle bundle = getArguments(); // プレイヤーの作成とインスタンスIDのセット String playerId = bundle.getString("playerId"); + player = new OwnPlayer((Player) bundle.getSerializable("player"), getResources(), universe, camera, playerId); modelManager.addModel(player); + otherPlayerCharactersModel = new OtherPlayerCharactersModel(this, universe); otherPlayerCharactersModel.setPlayerId(playerId); modelManager.addModel(otherPlayerCharactersModel); modelManager.setInstanceId(bundle.getString("instanceId")); - //オブジェクトの生成 - String objectId =bundle.getString("objectId"); - + //objectの通信 + String instanceId = bundle.getString("instanceId"); + movableObjectModel = new MovableObjectModel(this, universe, instanceId); + modelManager.addModel(movableObjectModel); //画面の生成 initGameWindowView();