diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/CharacterConnection.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/CharacterConnection.java new file mode 100644 index 0000000..ade9809 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/CharacterConnection.java @@ -0,0 +1,9 @@ +package org.ntlab.radishforandroidstudio.cactusClient.connections; + +import org.ntlab.radishforandroidstudio.framework.network.HttpAsyncConnection; + +public class CharacterConnection extends HttpAsyncConnection { + public CharacterConnection(String playerId) { + super("http://nitta-lab-www.is.konan-u.ac.jp:8080/CactusServer/rest/instances/players/" + playerId); + } +} 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 new file mode 100644 index 0000000..004a465 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/CharactersConnection.java @@ -0,0 +1,10 @@ +package org.ntlab.radishforandroidstudio.cactusClient.connections; + +import org.ntlab.radishforandroidstudio.framework.network.HttpAsyncConnection; + +public class CharactersConnection extends HttpAsyncConnection { + public CharactersConnection(String instanceId) { + 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 new file mode 100644 index 0000000..9506eaf --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/CactusModels.java @@ -0,0 +1,30 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models; + +import org.ntlab.radishforandroidstudio.framework.gameMain.GameBaseModel; +import org.ntlab.radishforandroidstudio.framework.gameMain.RealTime3DFragment; +import org.ntlab.radishforandroidstudio.framework.gameMain.GameBaseModelManager; +import org.ntlab.radishforandroidstudio.framework.model3D.Universe; + +/** + * モデルを管理する + * + * @author s.iwatani + */ +public class CactusModels extends GameBaseModelManager implements GameBaseModel { + private String instanceId = ""; + + public CactusModels() { + super(); + } + + public CactusModels(RealTime3DFragment fragment, Universe universe) { + super(fragment, universe); + } + + public void setInstanceId(String id) { + for(GameBaseModel model : models) { + model.setInstanceId(id); + } + instanceId = id; + } +} 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/OtherPlayerCharactersModel.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerCharactersModel.java new file mode 100644 index 0000000..300f488 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerCharactersModel.java @@ -0,0 +1,124 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models; + +import net.arnx.jsonic.JSON; +import net.arnx.jsonic.TypeReference; + +import org.ntlab.radishforandroidstudio.cactusClient.connections.PlayersConnection; +import org.ntlab.radishforandroidstudio.framework.gameMain.Actor; +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; + +/** + * 自キャラ以外の全操作キャラを管理するモデル + * + * @author s.iwatani + */ +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; + private Map visibleCharacters = new HashMap<>(); + private String instanceId; + private String playerId; + + public OtherPlayerCharactersModel(RealTime3DFragment fragment, Universe universe) { + this.fragment = fragment; + this.universe = universe; + } + + 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 PlayersConnection(); + con.addQueryParam("instanceId", instanceId); + con.setCallBack(this); + con.doGet(); + } + } + + @Override + public void onResponse(String response) { + Map lastVisibleCharacters = new HashMap<>(visibleCharacters); + visibleCharacters.clear(); + JSON json = new JSON(); + Map m = json.decode(response, new TypeReference>(){}); + for (Map.Entry entry: m.entrySet()) { + visibleCharacters.put(entry.getKey(), 1); + ArrayList properties = new ArrayList<>(); + Player player = entry.getValue(); + + // 自分自身は無視する + System.out.println(entry.getKey() + ", " + playerId); + 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(); + } + OtherPlayerCharacter chara = new OtherPlayerCharacter(pochaBody); + universe.place(entry.getKey(), chara); + universe.place(chara); + } + universe.apply(entry.getKey(), properties); + } + + // 見えなくなったキャラクターの削除 + for (String key : lastVisibleCharacters.keySet()) { + if (visibleCharacters.get(key) == null) { + universe.displace(key); + } + } + } +} 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 6265720..6ce0c2d 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 @@ -3,30 +3,42 @@ import android.content.res.Resources; import android.view.MotionEvent; +import net.arnx.jsonic.JSON; + +import org.ntlab.radishforandroidstudio.cactusClient.connections.CharacterConnection; import org.ntlab.radishforandroidstudio.framework.animation.Animation3D; import org.ntlab.radishforandroidstudio.framework.event.PadEvent; +import org.ntlab.radishforandroidstudio.framework.gameMain.GameBaseModel; import org.ntlab.radishforandroidstudio.framework.gameMain.OvergroundActor; import org.ntlab.radishforandroidstudio.framework.listener.PadListener; 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.Quaternion3D; import org.ntlab.radishforandroidstudio.framework.model3D.Universe; +import org.ntlab.radishforandroidstudio.framework.network.CallBack; +import org.ntlab.radishforandroidstudio.framework.physics.Solid3D; import org.ntlab.radishforandroidstudio.framework.physics.Velocity3D; import org.ntlab.radishforandroidstudio.framework.view3D.Camera3D; import org.ntlab.radishforandroidstudio.java3d.Appearance; import org.ntlab.radishforandroidstudio.java3d.Material; import org.ntlab.radishforandroidstudio.java3d.Vector3d; -public class OwnPlayer implements PadListener { +public class OwnPlayer implements PadListener, GameBaseModel, CallBack { private boolean isTouched = false; private float touchX = 0.0f; private float touchY = 0.0f; private OvergroundActor actor; private Camera3D camera; private Player player; + private CharacterConnection con; + private int nextConnectRenaimdTime = 0; + private int connectInterval = 300; + private String playerId; - public OwnPlayer(Player player, Resources resources, Universe universe, Camera3D camera) { + public OwnPlayer(Player player, Resources resources, Universe universe, Camera3D camera, String playerId) { this.player = player; + setPlayerId(playerId); // キャラクタの作成 Appearance ap1 = new Appearance(); @@ -53,6 +65,11 @@ camera.setViewLine(actor.getDirection()); camera.setFieldOfView(1.5); camera.setBackClipDistance(10000.0); + updateCamera(); + } + + public void setPlayerId(String id) { + playerId = id; } public void updateCamera() { @@ -63,17 +80,6 @@ camera.setViewLine(new Vector3d(5.0 * charaVector3d.getX(), charaVector3d.getY() - 2.5, 5.0 * charaVector3d.getZ() + touchX));//視線 } - public void progress(long interval) { - updateCamera(); - - if (isTouched) { - Velocity3D vel = actor.getVelocity(); - vel.setX(touchX); - vel.setY(touchY); - actor.setVelocity(vel); - } - } - @Override public boolean onEvent(PadEvent event) { Vector3d charaVector3d = actor.getDirection(); @@ -95,4 +101,45 @@ } return false; } + + @Override + public void update(double interval) { + updateCamera(); + + if (isTouched) { + Velocity3D vel = actor.getVelocity(); + vel.setX(touchX); + vel.setY(touchY); + actor.setVelocity(vel); + } + + nextConnectRenaimdTime -= interval; + if (nextConnectRenaimdTime <= 0) { + nextConnectRenaimdTime = connectInterval; + con = new CharacterConnection(playerId); + con.setCallBack(this); + + Quaternion3D q = ((Solid3D)(actor.getBody())).getQuaternion(); + player.setPosition(actor.getPosition()); + player.setAngle(q); + + JSON json = new JSON(); + con.addFormParam("characterID", json.encode(player.getCharacterID())); + con.addFormParam("cameraState", json.encode(player.getCameraState())); + con.addFormParam("position", json.encode(player.getPosition())); + con.addFormParam("animationClassToStart", json.encode(player.getEmoteState())); + con.addFormParam("angle", "{ \"x\":" + q.getX() + ", \"y\":" + q.getY() + ", \"z\":" + q.getZ() + ", \"w\":" + q.getW() + "}"); + con.doPut(); + } + } + + @Override + public void setInstanceId(String id) { + player.setInstanceID(id); + } + + @Override + public void onResponse(String response) { + + } } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Player.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Player.java index 6cfbe77..ce1a31c 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Player.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Player.java @@ -62,7 +62,7 @@ return position; } - public Quaternion3D getQuaternion3D() { + public Quaternion3D getAngle() { return angle; } @@ -90,7 +90,7 @@ this.position = position; } - public void setQuaternion3D(Quaternion3D angle) { + public void setAngle(Quaternion3D angle) { this.angle = angle; } @@ -110,7 +110,7 @@ EmoteState.EmoteType animationClassToStart) { setCharacterID(characterURI); setPosition(position); - setQuaternion3D(angle); + setAngle(angle); setCameraState(cameraState); updateEmoteType(animationClassToStart); updateAreaURI(); @@ -165,7 +165,7 @@ private void readCharacterData(Character character) { setPosition(character.getPosition()); - setQuaternion3D(character.getQuaternion3D()); + setAngle(character.getQuaternion3D()); setAreaURI(character.getAreaURI()); setCharacterID(characterID); } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/types/PlayerId.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/types/PlayerId.java deleted file mode 100644 index 3bc3da6..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/types/PlayerId.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.types; - -import android.support.annotation.NonNull; - -import org.ntlab.radishforandroidstudio.framework.common.CommonId; - -/** - * Player IDの管理クラス - * - * @author s.iwatani - */ -public class PlayerId extends CommonId { - public PlayerId(@NonNull Integer id) { - super(id); - } -} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/CharactersFragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/CharactersFragment.java index 8de0258..a85f43b 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/CharactersFragment.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/CharactersFragment.java @@ -111,6 +111,9 @@ Bundle bundle = new Bundle(); bundle.putSerializable("characterId", characterIds.get(position)); bundle.putSerializable("player", (Player)player.values().toArray()[0]); + String[] splitedUri = ((String)(player.keySet().toArray()[0])).split("/"); + bundle.putString("playerId", splitedUri[splitedUri.length-1]); + bundle.putString("instanceId", instanceId); PlayerFragment fragment = new PlayerFragment(); fragment.setArguments(bundle); 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 67a1ae2..57a8743 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 @@ -6,26 +6,20 @@ import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.view.LayoutInflater; -import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import org.ntlab.radishforandroidstudio.R; +import org.ntlab.radishforandroidstudio.cactusClient.models.CactusModels; +import org.ntlab.radishforandroidstudio.cactusClient.models.OtherPlayerCharactersModel; import org.ntlab.radishforandroidstudio.cactusClient.models.OwnPlayer; import org.ntlab.radishforandroidstudio.cactusClient.models.Player; import org.ntlab.radishforandroidstudio.framework.RWT.RWTPad; import org.ntlab.radishforandroidstudio.framework.RWT.RWTUIFragment; -import org.ntlab.radishforandroidstudio.framework.animation.Animation3D; -import org.ntlab.radishforandroidstudio.framework.event.PadEvent; import org.ntlab.radishforandroidstudio.framework.gameMain.OvergroundActor; import org.ntlab.radishforandroidstudio.framework.gameMain.RealTime3DFragment; -import org.ntlab.radishforandroidstudio.framework.listener.PadListener; import org.ntlab.radishforandroidstudio.framework.model3D.BaseObject3D; -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.physics.Ground; -import org.ntlab.radishforandroidstudio.framework.physics.Velocity3D; import org.ntlab.radishforandroidstudio.java3d.AmbientLight; import org.ntlab.radishforandroidstudio.java3d.Appearance; import org.ntlab.radishforandroidstudio.java3d.Color3f; @@ -33,13 +27,13 @@ import org.ntlab.radishforandroidstudio.java3d.IndexedTriangleArray; import org.ntlab.radishforandroidstudio.java3d.Material; import org.ntlab.radishforandroidstudio.java3d.Point3d; -import org.ntlab.radishforandroidstudio.java3d.Vector3d; import org.ntlab.radishforandroidstudio.java3d.Vector3f; public class PlayerFragment extends RealTime3DFragment { private OvergroundActor pocha; RWTPad pad = null; private OwnPlayer player; + private OtherPlayerCharactersModel otherPlayerCharactersModel; public PlayerFragment() { // Required empty public constructor @@ -47,8 +41,9 @@ @Override public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + modelManager = new CactusModels(this, universe); + //環境光 AmbientLight amblight = new AmbientLight(new Color3f(1.0f, 1.0f, 1.0f)); @@ -91,17 +86,21 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); Bundle bundle = getArguments(); - - // プレイヤーの作成 - player = new OwnPlayer((Player)bundle.getSerializable("player"), getResources(), universe, camera); - + // プレイヤーの作成とインスタンス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")); initGameWindowView(); return parentView; } @Override protected void progress(long interval) { - player.progress(interval); + super.progress(interval); } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/StartFragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/StartFragment.java index a665386..5ab28fd 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/StartFragment.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/StartFragment.java @@ -10,7 +10,10 @@ import android.view.ViewGroup; import android.widget.Button; +import net.arnx.jsonic.JSON; + import org.ntlab.radishforandroidstudio.R; +import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D; public class StartFragment extends Fragment { diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/common/CommonId.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/common/CommonId.java deleted file mode 100644 index 4414b62..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/common/CommonId.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.ntlab.radishforandroidstudio.framework.common; - -import android.support.annotation.NonNull; - -/** - * Id管理の基底クラス - * - * @author s.iwatani - * @param - */ -public abstract class CommonId { - private IdType id = null; - - public CommonId(@NonNull IdType id) { - setId(id); - } - - public IdType getId() { - return id; - } - - public void setId(IdType id) { - this.id = id; - } -} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/GameBaseModel.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/GameBaseModel.java new file mode 100644 index 0000000..fcbdc04 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/GameBaseModel.java @@ -0,0 +1,26 @@ +package org.ntlab.radishforandroidstudio.framework.gameMain; + +/** + * モデルの基底インターフェース + * + * @author s.iwatani + */ +public interface GameBaseModel { + int MAX_CONNECTION_CONTINUITY_TIME = 5000; // ミリ秒 + + /** + * モデルの状態を更新する + * + * @author s.iwatani + * @param interval 前回の更新からの時間差 + */ + void update(double interval); + + /** + * instanceのIDをセットする + * + * @author s.iwatani + * @param id InstanceのID + */ + void setInstanceId(String id); +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/GameBaseModelManager.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/GameBaseModelManager.java new file mode 100644 index 0000000..3dc35ad --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/GameBaseModelManager.java @@ -0,0 +1,43 @@ +package org.ntlab.radishforandroidstudio.framework.gameMain; + +import org.ntlab.radishforandroidstudio.framework.model3D.Universe; + +import java.util.ArrayList; + +public abstract class GameBaseModelManager implements GameBaseModel { + protected ArrayList models = new ArrayList<>(); + protected RealTime3DFragment fragment = null; + protected Universe universe = null; + + public GameBaseModelManager() { + } + + public GameBaseModelManager(RealTime3DFragment fragment, Universe universe) { + this.universe = universe; + this.fragment = fragment; + } + + + /** + * GameBaseModelを追加 + * instanceIDのセットなどは実行されないことを注意 + * + * @param model 追加したいGameBaseModel + */ + public void addModel(GameBaseModel model) { + models.add(model); + } + + /** + * モデルの状態を更新する + * + * @author s.iwatani + * @param interval 前回の更新からの時間差 + */ + @Override + public void update(double interval) { + for (GameBaseModel model: models) { + model.update(interval); + } + } +} 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 e65c90f..fcc442e 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 @@ -10,6 +10,7 @@ import android.widget.LinearLayout; import org.ntlab.radishforandroidstudio.R; +import org.ntlab.radishforandroidstudio.cactusClient.models.CactusModels; import org.ntlab.radishforandroidstudio.framework.RWT.RWTSurfaceView; import org.ntlab.radishforandroidstudio.framework.model3D.Universe; import org.ntlab.radishforandroidstudio.framework.view3D.Camera3D; @@ -19,6 +20,7 @@ protected Camera3D camera; protected RWTSurfaceView view; protected View parentView = null; + protected GameBaseModelManager modelManager = null; @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -43,13 +45,19 @@ @Override protected void update(long interval) { progress(interval); + if (modelManager != null) { + modelManager.update(interval); + } universe.update(interval); camera.adjust(interval); view.requestRender(); } protected void progress(long interval) { + } + public Universe getUniverse() { + return universe; } } 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 6a8fe31..04a1215 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 @@ -1,6 +1,5 @@ package org.ntlab.radishforandroidstudio.framework.model3D; -import org.ntlab.radishforandroidstudio.framework.common.CommonId; import org.ntlab.radishforandroidstudio.framework.physics.Ground; import org.ntlab.radishforandroidstudio.java3d.BranchGroup; import org.ntlab.radishforandroidstudio.java3d.Group; @@ -21,7 +20,7 @@ private BackgroundBox skyBox = null; private Ground ground = null; private ArrayList movableList = new ArrayList(); - private Map objMap = new HashMap<>(); + private Map objMap = new HashMap<>(); public Universe() { root = new BranchGroup(); @@ -64,8 +63,12 @@ } } - public void apply(HashMap> properties) { - for (Map.Entry> entry : properties.entrySet()) { + 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()); for (Property3D prop : entry.getValue()) { target.apply(prop, false); @@ -73,6 +76,22 @@ } } + /** + * Idを持つ対象に対して座標等の更新をかける + * + * @param id + * @param properties + * @return boolean 存在しないなどで更新できなければfalse, できればtrue + */ + public boolean apply(Object id, ArrayList properties) { + Object3D target = objMap.get(id); + if (target == null) return false; + for (Property3D prop : properties) { + target.apply(prop, false); + } + return true; + } + public void update(long interval){ for(int i = 0; i < movableList.size(); i++){ Movable movable = movableList.get(i); @@ -100,7 +119,7 @@ root.addChild(node); } - public void place(Object3D obj, CommonId id) { + public void place(Object id, Object3D obj) { objMap.put(id, obj); } @@ -152,7 +171,13 @@ root.removeChild(node); } - public void displace(CommonId id) { objMap.remove(id); } + public void displace(Object id) { + Object3D t; + if ((t = objMap.get(id)) != null) { + displace(t); + 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 96cb463..93d7617 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 @@ -173,7 +173,6 @@ public void notConnection(){}; /** - * param set * @param key * @param value */