diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 9867642..c1bde53 100644 --- a/.idea/caches/build_file_checksums.ser +++ b/.idea/caches/build_file_checksums.ser Binary files differ 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 index 4ee4826..16032b6 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/BulletCreateConnection.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/BulletCreateConnection.java @@ -3,7 +3,7 @@ import org.ntlab.radishforandroidstudio.framework.network.HttpAsyncConnection; public class BulletCreateConnection extends HttpAsyncConnection { -public BulletCreateConnection(String instanceId, String playerId) { + public BulletCreateConnection(String instanceId, String playerId) { super("http://nitta-lab-www.is.konan-u.ac.jp/CactusServer/rest/instances/" + instanceId + "/bullets/" + playerId); } } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/CharactersFragmentConnection.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/CharactersFragmentConnection.java index 2a52994..59cbc73 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/CharactersFragmentConnection.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/CharactersFragmentConnection.java @@ -5,7 +5,7 @@ public class CharactersFragmentConnection extends HttpAsyncConnection { public CharactersFragmentConnection(String instanceId) { - super("http://nitta-lab-www.is.konan-u.ac.jp/CactusServer/rest/instances/"+ instanceId +"/characters"); + super("http://nitta-lab-www.is.konan-u.ac.jp/CactusServer/rest/instances/" + instanceId + "/characters"); } } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/factory/NormalBulletFactory.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/factory/NormalBulletFactory.java index facfaf4..cd5062e 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/factory/NormalBulletFactory.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/factory/NormalBulletFactory.java @@ -20,5 +20,7 @@ } @Override - protected float getScale() { return 0.5f; } + protected float getScale() { + return 0.5f; + } } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Account.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Account.java index 8e38502..1304ec5 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Account.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Account.java @@ -5,7 +5,8 @@ public class Account { private String id, name, token, pass, uniqueID; private boolean login = false; - private Account(){ + + private Account() { } public Account(String userID, String userName, String userPass, String uniqueID) { @@ -33,7 +34,7 @@ this.name = name; } - @JSONHint(ignore=true) + @JSONHint(ignore = true) public String getPass() { return pass; } @@ -50,7 +51,7 @@ this.login = login; } - public void setToken(String token){ + public void setToken(String token) { this.token = token; } @@ -64,7 +65,7 @@ return token; } - @JSONHint(ignore=true) + @JSONHint(ignore = true) public String getUniqueID() { return uniqueID; } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Area.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Area.java index 6b76158..46366fa 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Area.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Area.java @@ -1,11 +1,11 @@ package org.ntlab.radishforandroidstudio.cactusClient.models; -import java.util.HashSet; +import net.arnx.jsonic.JSONHint; import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; -import net.arnx.jsonic.JSONHint; +import java.util.HashSet; public class Area extends Entity { private String name; 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 index 1c86634..59e0915 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Bullet.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Bullet.java @@ -2,11 +2,10 @@ import net.arnx.jsonic.JSONHint; -import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D; -public class Bullet extends Entity{ +public class Bullet extends Entity { private String playerID; private Position3D position; private Quaternion3D angle; 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 deleted file mode 100644 index 77a7adf..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/BulletsManager.java +++ /dev/null @@ -1,152 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.models; - -import android.content.res.Resources; - -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.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.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; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -public class -BulletsManager implements GameBaseModel, CallBack { - private Universe universe; - private Resources resources; - private BulletGetConnection con; - private int nextConnectRenaimdTime = 0; - static final private int CONNECT_INTERVAL = 100; - private Map visibleBullets = new HashMap<>(); - private Map playerVisibleBullets = new HashMap<>(); - private String instanceId; - private String playerId; - - private Set bulletsSet; - - public enum BulletType { - Normal - } - - public BulletsManager(Resources fragment, Universe universe) { - this.universe = universe; - this.resources = fragment; - } - - @Override - 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 && instanceId != null) { - nextConnectRenaimdTime = CONNECT_INTERVAL; - con = new BulletGetConnection(instanceId); - con.setCallBack(this); - con.doGet(); - } - } - - @Override - public void onResponse(String response) { - Map lastVisibleBullets = new HashMap<>(visibleBullets); - Map lastPlayerVisibleBullets = new HashMap<>(playerVisibleBullets); - visibleBullets.clear(); - JSON json = new JSON(); - if (!response.equals("{}")) { - 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<>(); - - Bullet b = entry.getValue(); - - // 自分自身は無視する - if (b.getPlayerID().equals(playerId)) { - playerVisibleBullets.put(entry.getKey(), 1); - continue; - } - - - // 情報の取得 - properties.add(b.getPosition()); - properties.add(b.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(resources, "pocha.stl", ap1).createObject(); - pochaBody.scale(0.5); - } 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); - } - } - - // 消えた弾の削除(プレイヤーのみ) - for(String key: lastPlayerVisibleBullets.keySet()) { - bulletsSet.add(key); - } - } - - /** - * 消えた弾のうち,セットしたプレイヤーに該当する弾を取得する - * - * @return ArrayList - */ - public ArrayList getDeletedPlayerBullets() { - ArrayList bullets = new ArrayList<>(); - - for(String key : bulletsSet) { - bullets.add(key); - } - bulletsSet.clear(); - return bullets; - } -} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/BulletsModel.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/BulletsModel.java new file mode 100644 index 0000000..a5b6ac7 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/BulletsModel.java @@ -0,0 +1,148 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models; + +import android.content.res.Resources; + +import net.arnx.jsonic.JSON; +import net.arnx.jsonic.TypeReference; + +import org.ntlab.radishforandroidstudio.cactusClient.connections.BulletGetConnection; +import org.ntlab.radishforandroidstudio.framework.gameMain.OnlineModel; +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.java3d.Appearance; +import org.ntlab.radishforandroidstudio.java3d.Material; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +public class BulletsModel implements OnlineModel { + private Universe universe; + private Resources resources; + private BulletGetConnection con; + private int nextConnectRenaimdTime = 0; + static final private int CONNECT_INTERVAL = 100; + private Map visibleBullets = new HashMap<>(); + private Map playerVisibleBullets = new HashMap<>(); + private String instanceId; + private String playerId; + + private Set bulletsSet; + + public enum BulletType { + Normal + } + + public BulletsModel(Resources fragment, Universe universe) { + this.universe = universe; + this.resources = fragment; + } + + @Override + public void setInstanceId(String id) { + this.instanceId = id; + } + + public void setPlayerId(String id) { + playerId = id; + } + + /** + * 玉の状態を更新する + * + * @param interval 前回の更新からの時間差 + * @author s.iwatani + */ + @Override + public void update(double interval) { + nextConnectRenaimdTime -= interval; + if (nextConnectRenaimdTime <= 0 && instanceId != null) { + nextConnectRenaimdTime = CONNECT_INTERVAL; + con = new BulletGetConnection(instanceId); + con.setCallBack(this); + con.doGet(); + } + } + + @Override + public void onResponse(String response) { + Map lastVisibleBullets = new HashMap<>(visibleBullets); + Map lastPlayerVisibleBullets = new HashMap<>(playerVisibleBullets); + visibleBullets.clear(); + JSON json = new JSON(); + if (!response.equals("{}")) { + 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<>(); + + Bullet b = entry.getValue(); + + // 自分自身は無視する + if (b.getPlayerID().equals(playerId)) { + playerVisibleBullets.put(entry.getKey(), 1); + continue; + } + + + // 情報の取得 + properties.add(b.getPosition()); + properties.add(b.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(resources, "pocha.stl", ap1).createObject(); + pochaBody.scale(0.5); + } catch (Exception e) { + e.printStackTrace(); + } + OtherPlayerBullet bullet = new OtherPlayerBullet(pochaBody); + universe.place(entry.getKey(), bullet); + } + universe.apply(entry.getKey(), properties); + } + } + } + // 見えなくなったキャラクターの削除 + for (String key : lastVisibleBullets.keySet()) { + if (visibleBullets.get(key) == null) { + universe.displace(key); + } + } + + // 消えた弾の削除(プレイヤーのみ) + for (String key : lastPlayerVisibleBullets.keySet()) { + bulletsSet.add(key); + } + } + + /** + * 消えた弾のうち,セットしたプレイヤーに該当する弾を取得する + * + * @return ArrayList + */ + public ArrayList getDeletedPlayerBullets() { + ArrayList bullets = new ArrayList<>(); + + for (String key : bulletsSet) { + bullets.add(key); + } + bulletsSet.clear(); + return bullets; + } +} 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 deleted file mode 100644 index 021e578..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/CactusModels.java +++ /dev/null @@ -1,36 +0,0 @@ -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; - -/** - * モデルを管理する - * - * singleton - * - * @author s.iwatani - */ -public class CactusModels extends GameBaseModelManager implements GameBaseModel { - private String instanceId = ""; - private static CactusModels singleton = new CactusModels(); - - private CactusModels() { - super(); - } - - static public CactusModels getInstance() { - return singleton; - } - - public void setInstanceId(String id) { - for(GameBaseModel model : models) { - model.setInstanceId(id); - } - for(GameBaseModel model : nextAddModels) { - model.setInstanceId(id); - } - instanceId = id; - } -} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/CactusRepository.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/CactusRepository.java new file mode 100644 index 0000000..961c027 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/CactusRepository.java @@ -0,0 +1,40 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models; + +import org.ntlab.radishforandroidstudio.framework.gameMain.GameBaseModel; +import org.ntlab.radishforandroidstudio.framework.gameMain.GameModelContainer; +import org.ntlab.radishforandroidstudio.framework.gameMain.OnlineModel; + +/** + * モデルを管理する + *

+ * singleton + * + * @author s.iwatani + */ +public class CactusRepository extends GameModelContainer implements OnlineModel { + private String instanceId = ""; + + public CactusRepository() { + super(); + } + + public void setInstanceId(String id) { + for (GameBaseModel model : models) { + model.setInstanceId(id); + } + for (GameBaseModel model : nextAddModels) { + model.setInstanceId(id); + } + instanceId = id; + } + + @Override + public void update(double interval) { + super.update(interval); + } + + @Override + public void onResponse(String response) { + + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Character.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Character.java index 2c5dbf8..820d6c9 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Character.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Character.java @@ -1,14 +1,12 @@ package org.ntlab.radishforandroidstudio.cactusClient.models; -import java.util.HashMap; +import net.arnx.jsonic.JSONHint; import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D; - - -import net.arnx.jsonic.JSONHint; +import java.util.HashMap; public class Character extends Entity { private String accountURI; diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/CharacterModelManager.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/CharacterModelManager.java index 07a4dc8..a42d3d0 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/CharacterModelManager.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/CharacterModelManager.java @@ -1,16 +1,13 @@ package org.ntlab.radishforandroidstudio.cactusClient.models; -import java.io.IOException; +import org.ntlab.radishforandroidstudio.framework.model3D.Model3D; + import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.HashMap; import java.util.Map; -import org.ntlab.radishforandroidstudio.framework.model3D.Model3D; -import org.ntlab.radishforandroidstudio.framework.model3D.ModelFactory; -import org.ntlab.radishforandroidstudio.framework.model3D.ModelFileFormatException; - public class CharacterModelManager { private static CharacterModelManager theInstance = null; private HashMap characterModels = new HashMap<>(); @@ -22,7 +19,7 @@ } private void initCharacterModels() { - String[] initCharacterModelFileNames = { "pocha.stl", "Head4.obj" }; + String[] initCharacterModelFileNames = {"pocha.stl", "Head4.obj"}; for (String fileName : initCharacterModelFileNames) { addCharacterModel(fileName); } @@ -61,11 +58,11 @@ private Model3D loadModel(String fileName) { /***************************************************************************************************** - try { - return ModelFactory.loadModel(fileName, null, false, true); - } catch (IOException | ModelFileFormatException e) { - e.printStackTrace(); - } + try { + return ModelFactory.loadModel(fileName, null, false, true); + } catch (IOException | ModelFileFormatException e) { + e.printStackTrace(); + } *****************************************************************************************************/ return null; } 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 deleted file mode 100644 index e69de29..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/DummyBullet.java +++ /dev/null diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/EmoteState.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/EmoteState.java index de81264..82e4f69 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/EmoteState.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/EmoteState.java @@ -4,8 +4,8 @@ /** * エモートの情報を表すクラス
* 内部にエモートの種類を表す列挙型も定義 - * @author r-isitani * + * @author r-isitani */ public class EmoteState { private EmoteType emoteType; diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Entity.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Entity.java index 9507a22..bf9cf2e 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Entity.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Entity.java @@ -2,8 +2,8 @@ /** * AddressedEntityクラスにて扱う実体を表す抽象クラス - * @author r-isitani * + * @author r-isitani */ public abstract class Entity { diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Entity3D.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Entity3D.java index 351eec7..c99bfe0 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Entity3D.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Entity3D.java @@ -1,10 +1,10 @@ package org.ntlab.radishforandroidstudio.cactusClient.models; -import org.ntlab.radishforandroidstudio.framework.model3D.Placeable; - import net.arnx.jsonic.JSONHint; +import org.ntlab.radishforandroidstudio.framework.model3D.Placeable; + public abstract class Entity3D extends Entity { private Placeable placeable; diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Instance.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Instance.java index 2ec03c6..0da5009 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Instance.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Instance.java @@ -1,23 +1,22 @@ package org.ntlab.radishforandroidstudio.cactusClient.models; -import java.util.HashMap; -import java.util.HashSet; +import net.arnx.jsonic.JSONHint; +import org.ntlab.radishforandroidstudio.cactusClient.models.Area.Allowed; 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.physics.Ground; -import net.arnx.jsonic.JSONHint; -import org.ntlab.radishforandroidstudio.cactusClient.models.Area.Allowed; +import java.util.HashMap; +import java.util.HashSet; /** * インスタンス * * @author r-isitani - * */ public class Instance extends Entity { private String name; diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Instances.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Instances.java index ce0cf28..3718482 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Instances.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Instances.java @@ -1,16 +1,15 @@ package org.ntlab.radishforandroidstudio.cactusClient.models; -import java.util.HashMap; - import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D; +import java.util.HashMap; + /** * インスタンスを管理するクラス * * @author r-isitani - * */ public class Instances { private static Instances theInstance = null; 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 76b3b06..c5551d6 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 @@ -4,27 +4,24 @@ 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.OnlineModel; 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; /** * オブジェクトを管理するモデル */ -public class MovableObjectModel implements GameBaseModel, CallBack { +public class MovableObjectModel implements OnlineModel { private Universe universe; private RealTime3DFragment fragment; private ObjectsConnection con; @@ -33,7 +30,7 @@ private String instanceId; private Map visibleobject = new HashMap<>(); - public MovableObjectModel(RealTime3DFragment fragment, Universe universe,String instanceId) { + public MovableObjectModel(RealTime3DFragment fragment, Universe universe, String instanceId) { this.fragment = fragment; this.universe = universe; this.setInstanceId(instanceId); 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 fadd0f2..ca87b78 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 @@ -1,21 +1,17 @@ package org.ntlab.radishforandroidstudio.cactusClient.models; -import android.telecom.Call; - import net.arnx.jsonic.JSON; 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.gameMain.OnlineModel; 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.model3D.Position3D; import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D; -import org.ntlab.radishforandroidstudio.framework.network.CallBack; import org.ntlab.radishforandroidstudio.framework.physics.Force3D; import org.ntlab.radishforandroidstudio.framework.physics.Solid3D; import org.ntlab.radishforandroidstudio.framework.physics.Velocity3D; @@ -24,7 +20,7 @@ import java.util.ArrayList; import java.util.UUID; -public class MyBullet extends Actor implements GameBaseModel, CallBack { +public class MyBullet extends Actor implements OnlineModel { private String instanceId; private String playerId; private String uuid; @@ -92,7 +88,7 @@ public void onCollisionExit(Placeable p) { } - + @Override public Force3D getGravity() { return Force3D.ZERO; @@ -105,7 +101,7 @@ // サーバに弾を作成 if (!isCreatedOnServer && !instanceId.equals("") && !playerId.equals("") && !isWaitCreatingOnServer) { JSON json = new JSON(); - Quaternion3D q = ((Solid3D)(getBody())).getQuaternion(); + Quaternion3D q = ((Solid3D) (getBody())).getQuaternion(); BulletCreateConnection con = new BulletCreateConnection(instanceId, playerId); con.setCallBack(this); con.addFormParam("bulletID", getUuid()); @@ -114,13 +110,12 @@ con.doPost(); isWaitCreatingOnServer = true; System.out.println("create shot uuid:" + getUuid()); - } - else if (isCreatedOnServer && !isWaitCreatingOnServer) { + } else if (isCreatedOnServer && !isWaitCreatingOnServer) { // サーバの弾の情報を更新 updateInterval -= interval; if (updateInterval <= 0 && isCreatedOnServer) { JSON json = new JSON(); - Quaternion3D q = ((Solid3D)(getBody())).getQuaternion(); + Quaternion3D q = ((Solid3D) (getBody())).getQuaternion(); updateInterval = INIT_UPDATE_INTERVAL; BulletUpdateConnection con = new BulletUpdateConnection(instanceId, playerId, getUuid()); con.setCallBack(this); 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 7dfc485..63d2679 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 @@ -1,5 +1,7 @@ package org.ntlab.radishforandroidstudio.cactusClient.models; +import net.arnx.jsonic.JSONHint; + import org.ntlab.radishforandroidstudio.framework.model3D.Model3D; import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; @@ -12,7 +14,6 @@ //import framework.model3D.Position3D; //import framework.physics.AngularVelocity3D; //import framework.physics.Velocity3D; -import net.arnx.jsonic.JSONHint; public class Object extends Entity3D { private Position3D position; @@ -33,7 +34,7 @@ } public Object(Position3D position, Velocity3D velocity, AngularVelocity3D angularVelocity, - Quaternion3D angle, Attribute attribute, int modelID) { + Quaternion3D angle, Attribute attribute, int modelID) { setPrim(new Box()); setObject(new Object3D("", prim)); setPlaceable(object); 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 1d33074..0f47ad1 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 @@ -17,8 +17,8 @@ // 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())); + 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(); 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 a36c44a..391b6d9 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 @@ -1,9 +1,6 @@ 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 { public OtherPlayerCharacter(Object3D 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 d81cfb6..b844a71 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 @@ -4,13 +4,12 @@ import net.arnx.jsonic.TypeReference; import org.ntlab.radishforandroidstudio.cactusClient.connections.PlayersConnection; -import org.ntlab.radishforandroidstudio.framework.gameMain.GameBaseModel; +import org.ntlab.radishforandroidstudio.framework.gameMain.OnlineModel; 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; @@ -23,7 +22,7 @@ * * @author s.iwatani */ -public class OtherPlayerCharactersModel implements GameBaseModel, CallBack { +public class OtherPlayerCharactersModel implements OnlineModel { private Universe universe; private RealTime3DFragment fragment; private PlayersConnection con; @@ -49,8 +48,8 @@ /** * キャラクターの状態を更新する * - * @author s.iwatani * @param interval 前回の更新からの時間差 + * @author s.iwatani */ @Override public void update(double interval) { @@ -69,8 +68,9 @@ Map lastVisibleCharacters = new HashMap<>(visibleCharacters); visibleCharacters.clear(); JSON json = new JSON(); - Map m = json.decode(response, new TypeReference>(){}); - for (Map.Entry entry: m.entrySet()) { + 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(); @@ -105,7 +105,6 @@ } 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/cactusClient/models/OwnBullets.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnBullets.java deleted file mode 100644 index 27d1125..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnBullets.java +++ /dev/null @@ -1,105 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.models; - -import android.content.res.Resources; - -import org.ntlab.radishforandroidstudio.framework.event.BulletShotEvent; -import org.ntlab.radishforandroidstudio.framework.gameMain.GameBaseModel; -import org.ntlab.radishforandroidstudio.framework.listener.BulletShotListener; -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.subject.BulletShotSubject; - -import java.util.ArrayList; -import java.util.Iterator; - -public class OwnBullets implements GameBaseModel, BulletShotListener { - private ArrayList bullets = new ArrayList<>(); - private String playerId; - private String instanceId; - private Resources resources; - private Universe universe; - private CactusModels cactusModels; - private Position3D playerPos; - private Quaternion3D playerAngle; - - public OwnBullets(Resources resources, Universe universe, String instanceId, String playerId) { - this.resources = resources; - this.universe = universe; - cactusModels = CactusModels.getInstance(); - - setInstanceId(instanceId); - setPlayerId(playerId); - - BulletShotSubject.getInstance().addListener(this); - } - - public void setPosition(Position3D pos) { - playerPos = pos; - } - - public void setAngle(Quaternion3D angle) { - playerAngle = angle; - } - - public void sendDeleteBulletForServer(MyBullet myBullet) { - // TODO: 弾消し情報を送信 - } - - @Override - public void update(double interval) { - 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; - } - } - } - } - - @Override - public void setInstanceId(String id) { - instanceId = id; - } - - public void setPlayerId(String id) { - playerId = id; - } - - /** - * 弾作成のイベント受け - * - * @param event イベントの情報 - * @return - */ - @Override - public boolean onEvent(BulletShotEvent event) { - if (playerPos == null || playerAngle == null || playerId == null || instanceId == null) { - return false; - } - MyBullet b = event.getBullet(); - b.setPlayerid(playerId); - b.setInstanceId(instanceId); - b.init(playerPos, playerAngle); - bullets.add(b); - universe.place(b); - cactusModels.addModel(b); - return true; - } -} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnBulletsModel.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnBulletsModel.java new file mode 100644 index 0000000..04f3cac --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnBulletsModel.java @@ -0,0 +1,105 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models; + +import android.content.res.Resources; + +import org.ntlab.radishforandroidstudio.framework.event.BulletShotEvent; +import org.ntlab.radishforandroidstudio.framework.gameMain.OnlineModel; +import org.ntlab.radishforandroidstudio.framework.listener.BulletShotListener; +import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Universe; + +import java.util.ArrayList; +import java.util.Iterator; + +public class OwnBulletsModel implements OnlineModel, BulletShotListener { + private ArrayList bullets = new ArrayList<>(); + private String playerId; + private String instanceId; + private Resources resources; + private Universe universe; + private Position3D playerPos; + private Quaternion3D playerAngle; + + public OwnBulletsModel(Resources resources, Universe universe, String instanceId, String playerId) { + this.resources = resources; + this.universe = universe; + + setInstanceId(instanceId); + setPlayerId(playerId); + } + + public void setPosition(Position3D pos) { + playerPos = pos; + } + + public void setAngle(Quaternion3D angle) { + playerAngle = angle; + } + + public void sendDeleteBulletForServer(MyBullet myBullet) { + // TODO: 弾消し情報を送信 + } + + @Override + public void update(double interval) { + for (Iterator bulletIterator = bullets.iterator(); bulletIterator.hasNext();) { + MyBullet bullet = bulletIterator.next(); + bullet.update(interval); + // 弾削除 + 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; + } + } + } + } + + @Override + public void setInstanceId(String id) { + instanceId = id; + } + + public void setPlayerId(String id) { + playerId = id; + } + + /** + * 弾作成のイベント受け + * + * @param event イベントの情報 + * @return + */ + @Override + public boolean onEvent(BulletShotEvent event) { + if (playerPos == null || playerAngle == null || playerId == null || instanceId == null) { + return false; + } + MyBullet b = event.getBullet(); + b.setPlayerid(playerId); + b.setInstanceId(instanceId); + b.init(playerPos, playerAngle); + bullets.add(b); + universe.place(b); + return true; + } + + @Override + public void onResponse(String response) { + + } +} 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 deleted file mode 100644 index a4780cc..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnPlayer.java +++ /dev/null @@ -1,222 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.models; - -import android.content.res.Resources; -import android.view.MotionEvent; -import android.view.View; - -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; - -import java.util.ArrayList; - -public class OwnPlayer implements PadListener, GameBaseModel, CallBack { - private boolean isPadTouched = false; //Padのタッチ判定 - private float touchPadX = 0.0f; - private float touchPadY = 0.0f; - double n = 1.0; - - private OvergroundActor actor; - private Camera3D camera; - private Player player; - private CharacterConnection con; - private int nextConnectRenaimdTime = 0; - private int connectInterval = 300; - private String playerId; - private OwnBullets bullets; - - public OwnPlayer(Player player, Resources resources, Universe universe, Camera3D camera, String playerId, String instanceId) { - this.player = player; - setPlayerId(playerId); - setInstanceId(instanceId); - bullets = new OwnBullets(resources, universe, instanceId, playerId); - CactusModels.getInstance().addModel(bullets); - - // キャラクタの作成 - Appearance ap1 = new Appearance(); - Material m = new Material(); - m.setDiffuseColor(0.0f, 0.3f, 1.0f); - m.setAmbientColor(0.0f, 0.0f, 0.0f); - m.setEmissiveColor(0.0f, 0.0f, 0.0f); - m.setSpecularColor(0.0f, 0.0f, 0.0f); - m.setShininess(5.0f); - ap1.setMaterial(m); - Object3D pochaBody = null; - try { - pochaBody = ModelFactory.loadModel(resources, "pocha.stl", ap1).createObject(); - Animation3D pochaAnimation = null; //AnimationFactory.loadAnimation("data\\pocha\\walk.wrl"); - actor = new OvergroundActor(pochaBody, pochaAnimation); - actor.setPosition(new Position3D(0.0, 1.0, 0.0)); - universe.place(actor); - } catch (Exception e) { - e.printStackTrace(); - } - - this.camera = camera; - camera.setViewPoint(actor.getPosition().add(0.0, 1.5, 0.0)); - camera.setViewLine(actor.getDirection()); - camera.setFieldOfView(1.5); - camera.setBackClipDistance(10000.0); - updateCamera(n); - } - - public void setPlayerId(String id) { - playerId = id; - } - - public void updateCamera(double n) { - Vector3d charaVector3d = actor.getDirection(); - charaVector3d.normalize();//キャラの向きを単位ベクトルに - camera.setViewPoint(actor.getPosition().add(5.0 * charaVector3d.getX(), charaVector3d.getY() + 5.5 - n, 5.0 * charaVector3d.getZ()));//視点 - camera.setViewLine(new Vector3d(-5.0 * charaVector3d.getX(), charaVector3d.getY() - 2.5 + n, -5.0 * charaVector3d.getZ()));//視線 - } - - /** - * パッドを動かしたときのイベント処理 - * - * @param event イベントの情報 - * @return - */ - @Override - public boolean onEvent(PadEvent event) { - Vector3d charaVector3d = actor.getDirection(); - charaVector3d.normalize();//キャラの向きを単位ベクトルに - MotionEvent motionEvent = event.getMotionEvent(); - - if (motionEvent.getAction() == MotionEvent.ACTION_DOWN || motionEvent.getAction() == MotionEvent.ACTION_MOVE) { - isPadTouched = true; - touchPadX = (float) (Math.cos(event.getAngle()) * event.getLength()); - touchPadY = (float) (Math.sin(event.getAngle()) * event.getLength()); - } else if (motionEvent.getAction() == MotionEvent.ACTION_UP) { - Velocity3D vel = actor.getVelocity(); - vel.setX(0); - vel.setY(0); - actor.setVelocity(vel); - isPadTouched = false; - } - return false; - } - - @Override - public void update(double interval) { - updateCamera(n); - Velocity3D vel = actor.getVelocity(); - Vector3d actorVec = actor.getDirection(); - bullets.setPosition(actor.getPosition()); - bullets.setAngle(((Solid3D) (actor.getBody())).getQuaternion()); - - if (isPadTouched) { - Vector3d up = new Vector3d(0, 1, 0); - Vector3d total = new Vector3d(); - Vector3d right = new Vector3d(); - - right.cross(actorVec, up); - - Vector3d touchXVec = right.clone(); - Vector3d touchYVec = actorVec.clone(); - - touchXVec.scale(touchPadX * -5); - touchYVec.scale(touchPadY * 5); - - total.add(touchXVec); - total.add(touchYVec); - total.y = vel.getY(); - - vel.setVector3d(total); - actor.setVelocity(vel); - - } else { - vel.setX(0.0); - vel.setZ(0.0); - actor.setVelocity(vel); - } - - nextConnectRenaimdTime -= interval; - if (nextConnectRenaimdTime <= 0) { - nextConnectRenaimdTime = connectInterval; - sendPlayerInfo(); - } - } - - public void sendPlayerInfo() { - 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", 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) { - - } - - public void jump() { - if (actor.isOnGround()) { - Velocity3D vel = actor.getVelocity(); - vel.setY(vel.getY() + 5); - actor.setVelocity(vel); - System.out.print("Jumpしました。"); - } else { - System.out.print("地に足がついてない。"); - } - System.out.print("onClick押されましたよ。"); - } - - public void changeViewpoint(float eyeX, float eyeY) { - actor.rotY(0.1 * (0.5f - eyeX)); - if (n <= 5 && n >= 0) { - n += (0.5f - eyeY); - } else if (n > 5) { - n = 5; - } else if (n < 0) { - n = 0; - } - } - - public boolean onTouch(View v, MotionEvent event) { - System.out.println("RWTUIFragment touch"); - return false; - } - - public void logout() { - con = new CharacterConnection(playerId); - con.setCallBack(this); - con.doDelete(); - } - - public void deleteBullets(ArrayList bullets) { - this.bullets.deleteBullets(bullets); - } -} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnPlayerModel.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnPlayerModel.java new file mode 100644 index 0000000..9041acf --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnPlayerModel.java @@ -0,0 +1,224 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models; + +import android.content.res.Resources; +import android.view.MotionEvent; +import android.view.View; + +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.OnlineModel; +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.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; + +import java.util.ArrayList; + +public class OwnPlayerModel implements PadListener, OnlineModel { + private boolean isPadTouched = false; //Padのタッチ判定 + private float touchPadX = 0.0f; + private float touchPadY = 0.0f; + double n = 1.0; + + private OvergroundActor actor; + private Camera3D camera; + private Player player; + private CharacterConnection con; + private int nextConnectRenaimdTime = 0; + private int connectInterval = 300; + private String playerId; + private OwnBulletsModel bullets; + + public OwnPlayerModel(Player player, Resources resources, Universe universe, Camera3D camera, String playerId, String instanceId) { + this.player = player; + setPlayerId(playerId); + setInstanceId(instanceId); + bullets = new OwnBulletsModel(resources, universe, instanceId, playerId); + + // キャラクタの作成 + Appearance ap1 = new Appearance(); + Material m = new Material(); + m.setDiffuseColor(0.0f, 0.3f, 1.0f); + m.setAmbientColor(0.0f, 0.0f, 0.0f); + m.setEmissiveColor(0.0f, 0.0f, 0.0f); + m.setSpecularColor(0.0f, 0.0f, 0.0f); + m.setShininess(5.0f); + ap1.setMaterial(m); + Object3D pochaBody = null; + try { + pochaBody = ModelFactory.loadModel(resources, "pocha.stl", ap1).createObject(); + Animation3D pochaAnimation = null; //AnimationFactory.loadAnimation("data\\pocha\\walk.wrl"); + actor = new OvergroundActor(pochaBody, pochaAnimation); + actor.setPosition(new Position3D(0.0, 1.0, 0.0)); + universe.place(actor); + } catch (Exception e) { + e.printStackTrace(); + } + + this.camera = camera; + camera.setViewPoint(actor.getPosition().add(0.0, 1.5, 0.0)); + camera.setViewLine(actor.getDirection()); + camera.setFieldOfView(1.5); + camera.setBackClipDistance(10000.0); + updateCamera(n); + } + + public void setPlayerId(String id) { + playerId = id; + } + + public void updateCamera(double n) { + Vector3d charaVector3d = actor.getDirection(); + charaVector3d.normalize();//キャラの向きを単位ベクトルに + camera.setViewPoint(actor.getPosition().add(5.0 * charaVector3d.getX(), charaVector3d.getY() + 5.5 - n, 5.0 * charaVector3d.getZ()));//視点 + camera.setViewLine(new Vector3d(-5.0 * charaVector3d.getX(), charaVector3d.getY() - 2.5 + n, -5.0 * charaVector3d.getZ()));//視線 + } + + /** + * パッドを動かしたときのイベント処理 + * + * @param event イベントの情報 + * @return + */ + @Override + public boolean onEvent(PadEvent event) { + Vector3d charaVector3d = actor.getDirection(); + charaVector3d.normalize();//キャラの向きを単位ベクトルに + MotionEvent motionEvent = event.getMotionEvent(); + + if (motionEvent.getAction() == MotionEvent.ACTION_DOWN || motionEvent.getAction() == MotionEvent.ACTION_MOVE) { + isPadTouched = true; + touchPadX = (float) (Math.cos(event.getAngle()) * event.getLength()); + touchPadY = (float) (Math.sin(event.getAngle()) * event.getLength()); + } else if (motionEvent.getAction() == MotionEvent.ACTION_UP) { + Velocity3D vel = actor.getVelocity(); + vel.setX(0); + vel.setY(0); + actor.setVelocity(vel); + isPadTouched = false; + } + return false; + } + + @Override + public void update(double interval) { + updateCamera(n); + Velocity3D vel = actor.getVelocity(); + Vector3d actorVec = actor.getDirection(); + bullets.setPosition(actor.getPosition()); + bullets.setAngle(((Solid3D) (actor.getBody())).getQuaternion()); + + if (isPadTouched) { + Vector3d up = new Vector3d(0, 1, 0); + Vector3d total = new Vector3d(); + Vector3d right = new Vector3d(); + + right.cross(actorVec, up); + + Vector3d touchXVec = right.clone(); + Vector3d touchYVec = actorVec.clone(); + + touchXVec.scale(touchPadX * -5); + touchYVec.scale(touchPadY * 5); + + total.add(touchXVec); + total.add(touchYVec); + total.y = vel.getY(); + + vel.setVector3d(total); + actor.setVelocity(vel); + + } else { + vel.setX(0.0); + vel.setZ(0.0); + actor.setVelocity(vel); + } + + nextConnectRenaimdTime -= interval; + if (nextConnectRenaimdTime <= 0) { + nextConnectRenaimdTime = connectInterval; + sendPlayerInfo(); + } + } + + public void sendPlayerInfo() { + 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", 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) { + + } + + public void jump() { + if (actor.isOnGround()) { + Velocity3D vel = actor.getVelocity(); + vel.setY(vel.getY() + 5); + actor.setVelocity(vel); + System.out.print("Jumpしました。"); + } else { + System.out.print("地に足がついてない。"); + } + System.out.print("onClick押されましたよ。"); + } + + public void changeViewpoint(float eyeX, float eyeY) { + actor.rotY(0.1 * (0.5f - eyeX)); + if (n <= 5 && n >= 0) { + n += (0.5f - eyeY); + } else if (n > 5) { + n = 5; + } else if (n < 0) { + n = 0; + } + } + + public OwnBulletsModel getBulletsModel() { + return bullets; + } + + public boolean onTouch(View v, MotionEvent event) { + System.out.println("RWTUIFragment touch"); + return false; + } + + public void logout() { + con = new CharacterConnection(playerId); + con.setCallBack(this); + con.doDelete(); + } + + public void deleteBullets(ArrayList bullets) { + this.bullets.deleteBullets(bullets); + } +} 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 ce1a31c..173f5b7 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 @@ -1,13 +1,13 @@ package org.ntlab.radishforandroidstudio.cactusClient.models; +import net.arnx.jsonic.JSONHint; + import org.ntlab.radishforandroidstudio.framework.gameMain.OvergroundActor; import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D; -import net.arnx.jsonic.JSONHint; - import java.io.Serializable; public class Player extends Entity3D implements Serializable { diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/RandomStringGenerator.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/RandomStringGenerator.java index 6796d1d..3f48a41 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/RandomStringGenerator.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/RandomStringGenerator.java @@ -1,9 +1,9 @@ package org.ntlab.radishforandroidstudio.cactusClient.models; -import java.util.Set; - import org.apache.commons.lang3.RandomStringUtils; +import java.util.Set; + public class RandomStringGenerator { public static final String ALPHA_NUMERIC = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/StageModelManager.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/StageModelManager.java index 5287d4f..9db2c3e 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/StageModelManager.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/StageModelManager.java @@ -1,12 +1,9 @@ package org.ntlab.radishforandroidstudio.cactusClient.models; -import java.io.IOException; -import java.util.HashMap; - import org.ntlab.radishforandroidstudio.framework.model3D.Model3D; -import org.ntlab.radishforandroidstudio.framework.model3D.ModelFactory; -import org.ntlab.radishforandroidstudio.framework.model3D.ModelFileFormatException; + +import java.util.HashMap; public class StageModelManager { private static StageModelManager theInstance = null; @@ -14,13 +11,13 @@ private StageModelManager() { /***************************************************************************************************** - try { - setStage(0, ModelFactory.loadModel(getClass().getResource("../../konan/konan.stl").getPath())); - setStage(1, ModelFactory.loadModel(getClass().getResource("../../konan/konan.stl").getPath())); - } catch (IOException | ModelFileFormatException e) { - e.printStackTrace(); - } - *******************************************************************************************************/ + try { + setStage(0, ModelFactory.loadModel(getClass().getResource("../../konan/konan.stl").getPath())); + setStage(1, ModelFactory.loadModel(getClass().getResource("../../konan/konan.stl").getPath())); + } catch (IOException | ModelFileFormatException e) { + e.printStackTrace(); + } + *******************************************************************************************************/ } public static StageModelManager getInstance() { diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/URIAddressedAccount.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/URIAddressedAccount.java index 634ccaf..4807175 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/URIAddressedAccount.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/URIAddressedAccount.java @@ -2,7 +2,7 @@ import java.net.URI; -public class URIAddressedAccount{ +public class URIAddressedAccount { private URI uri; private Account account; diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/UpdateBoundary.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/UpdateBoundary.java new file mode 100644 index 0000000..f1776d1 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/UpdateBoundary.java @@ -0,0 +1,11 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models; + +public interface UpdateBoundary { + + /** + * モデルの状態を更新する + + * @param interval 前回の更新からの時間差 + */ + void onUpdate(double interval); +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/UpdateUsecase.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/UpdateUsecase.java new file mode 100644 index 0000000..177af6f --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/UpdateUsecase.java @@ -0,0 +1,11 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models; + +public class UpdateUsecase implements UpdateBoundary { + CactusRepository cactusRepository; + + @Override + public void onUpdate(double interval) { + cactusRepository.update(interval); + + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/viewModels/test b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/viewModels/test deleted file mode 100644 index d75fa73..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/viewModels/test +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -