diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/Cactus.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/Cactus.java index 9ade637..7625a51 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/Cactus.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/Cactus.java @@ -5,7 +5,7 @@ import android.app.Application; import android.os.Bundle; -import org.ntlab.radishforandroidstudio.cactusClient.models.Account; +import org.ntlab.radishforandroidstudio.cactusClient.models.account.Account; import org.ntlab.radishforandroidstudio.cactusClient.models.URIAddressedAccount; public class Cactus extends Application { diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/domain/CactusUser.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/domain/CactusUser.java new file mode 100644 index 0000000..0b7c06b --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/domain/CactusUser.java @@ -0,0 +1,97 @@ +package org.ntlab.radishforandroidstudio.cactusClient.domain; + + +public class CactusUser { + + private final String userId; + + public CactusUser(String userId) { + this.userId = userId; + } + + private String userPass; + private String userName; + private String instanceId; + private String characterId; + private String player; + private String playerId; + private String bulletID; + private String position; + private String angle; + + public String getUserId() { + return userId; + } + + public String getUserName() { + return userName; + } + + public String getUserPass() { + return userPass; + } + + public void setUserPass(String userPass) { + this.userPass = userPass; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getInstanceId() { + return instanceId; + } + + public void setInstanceId(String instanceId) { + this.instanceId = instanceId; + } + + public String getCharacterId() { + return characterId; + } + + public void setCharacterId(String characterId) { + this.characterId = characterId; + } + + public String getPlayerId() { + return playerId; + } + + public void setPlayerId(String playerId) { + this.playerId = playerId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getPlayer() { + return player; + } + + public void setPlayer(String player) { + this.player = player; + } + + public String getAngle() { + return angle; + } + + public void setAngle(String angle) { + this.angle = angle; + } + + public String getBulletID() { + return bulletID; + } + + public void setBulletID(String bulletID) { + this.bulletID = bulletID; + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/entity/CactusUserEntity.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/entity/CactusUserEntity.java new file mode 100644 index 0000000..dbacb7f --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/entity/CactusUserEntity.java @@ -0,0 +1,81 @@ +package org.ntlab.radishforandroidstudio.cactusClient.entity; + +import net.arnx.jsonic.JSONHint; + +public class CactusUserEntity { + + @JSONHint(name = "userID") + private String userId; + + @JSONHint(name = "userPass") + private String userPass; + + @JSONHint(name = "userName") + private String userName; + + @JSONHint(name = "instanceId") + private String instanceId; + + @JSONHint(name = "characterId") + private String characterId; + + @JSONHint(name = "player") + private String player; + + @JSONHint(name = "playerId") + private String playerId; + + @JSONHint(name = "bulletID") + private String bulletID; + + @JSONHint(name = "position") + private String position; + + @JSONHint(name = "angle") + private String angle; + + public CactusUserEntity() { + //empty + } + + public String getUserId() { + return userId; + } + + public String getUserName() { + return userName; + } + + public String getCharacterId() { + return characterId; + } + + public String getInstanceId() { + return instanceId; + } + + public String getBulletID() { + return bulletID; + } + + public String getUserPass() { + return userPass; + } + + public String getAngle() { + return angle; + } + + public String getPlayer() { + return player; + } + + public String getPlayerId() { + return playerId; + } + + public String getPosition() { + return position; + } + +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/entity/mapper/CactusEntityJsonMapper.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/entity/mapper/CactusEntityJsonMapper.java new file mode 100644 index 0000000..8f9d202 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/entity/mapper/CactusEntityJsonMapper.java @@ -0,0 +1,16 @@ +package org.ntlab.radishforandroidstudio.cactusClient.entity.mapper; + +import net.arnx.jsonic.JSON; + +/** + * Jsonを表すStringから有効なObjectへの変換に使用されるクラス + */ +public class CactusEntityJsonMapper { + + private final JSON json; + + public CactusEntityJsonMapper() { + this.json = new JSON(); + } + +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/entity/mapper/CactusUserEntityDataMapper.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/entity/mapper/CactusUserEntityDataMapper.java new file mode 100644 index 0000000..a654c61 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/entity/mapper/CactusUserEntityDataMapper.java @@ -0,0 +1,33 @@ +package org.ntlab.radishforandroidstudio.cactusClient.entity.mapper; + +import org.ntlab.radishforandroidstudio.cactusClient.domain.CactusUser; +import org.ntlab.radishforandroidstudio.cactusClient.entity.CactusUserEntity; + +/** + * ドメイン層のCactusUserEntity→CactusUserに変換するためのMapperクラス + */ + +public class CactusUserEntityDataMapper { + + CactusUserEntityDataMapper() { + + } + + public CactusUser transform(CactusUserEntity cactusUserEntity) { + CactusUser cactusUser = null; + if (cactusUserEntity != null) { + cactusUser = new CactusUser(cactusUserEntity.getUserId()); + cactusUser.setUserName(cactusUserEntity.getUserName()); + cactusUser.setPlayer(cactusUserEntity.getPlayer()); + cactusUser.setUserPass(cactusUserEntity.getUserPass()); + cactusUser.setPlayer(cactusUserEntity.getPlayer()); + cactusUser.setCharacterId(cactusUserEntity.getCharacterId()); + cactusUser.setAngle(cactusUserEntity.getAngle()); + cactusUser.setPosition(cactusUserEntity.getPosition()); + cactusUser.setInstanceId(cactusUserEntity.getInstanceId()); + } + + return cactusUser; + } + +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/factory/BulletFactory.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/factory/BulletFactory.java index adf0d8c..2ea983e 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/factory/BulletFactory.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/factory/BulletFactory.java @@ -2,7 +2,7 @@ import android.content.res.Resources; -import org.ntlab.radishforandroidstudio.cactusClient.models.MyBullet; +import org.ntlab.radishforandroidstudio.cactusClient.models.bullet.MyBullet; import org.ntlab.radishforandroidstudio.framework.model3D.ModelFactory; import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; import org.ntlab.radishforandroidstudio.java3d.Appearance; 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 deleted file mode 100644 index 1304ec5..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Account.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.models; - -import net.arnx.jsonic.JSONHint; - -public class Account { - private String id, name, token, pass, uniqueID; - private boolean login = false; - - private Account() { - } - - public Account(String userID, String userName, String userPass, String uniqueID) { - setId(userID); - setName(userName); - setPass(userPass); - setUniqueID(uniqueID); - formToken(); - login = true; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @JSONHint(ignore = true) - public String getPass() { - return pass; - } - - public void setPass(String pass) { - this.pass = pass; - } - - public boolean isLogin() { - return login; - } - - public void setLogin(boolean login) { - this.login = login; - } - - public void setToken(String token) { - this.token = token; - - } - - public String getToken() { - return token; - } - - public String formToken() { - token = RandomStringGenerator.generateRandomString(64, RandomStringGenerator.ALPHA_NUMERIC); - return token; - } - - @JSONHint(ignore = true) - public String getUniqueID() { - return uniqueID; - } - - public void setUniqueID(String uniqueID) { - this.uniqueID = 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 deleted file mode 100644 index 46366fa..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Area.java +++ /dev/null @@ -1,83 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.models; - - -import net.arnx.jsonic.JSONHint; - -import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; - -import java.util.HashSet; - -public class Area extends Entity { - private String name; - private Plain[] region; // 任意個の平面の方程式 - private HashSet permissions; // エリア内で可能なことの羅列 - @JSONHint(ignore = true) - public static final int UNIQUE_ID_LENGTH = 12; - - @SuppressWarnings("unused") - private Area() { - // JSONDecode時の呼び出し用 - } - - public Area(String name, Plain[] region, HashSet permissions) { - setName(name); - setRegion(region); - setPermissions(permissions); - } - - public String getName() { - return name; - } - - public Plain[] getRegion() { - return region; - } - - public Plain getPlain(int index) { - return region[index]; - } - - public HashSet getPermissions() { - return permissions; - } - - public boolean isPermission(Allowed allowed) { - return permissions.contains(allowed); - } - - public boolean isSurroundingPosition(Position3D position) { - for (Plain plain : region) { - // ここで Plainのa,b,c,d と Characterのx,y,z を用いて, キャラクターが平面の裏にいるかどうかの判定を行う - double equation = (plain.getA() * position.getX()) + (plain.getB() * position.getY()) - + (plain.getC() * position.getZ()) + plain.getD(); - if (equation > 0) { - return false; - } - } - return true; - } - - public void setName(String name) { - this.name = name; - } - - public void setRegion(Plain[] region) { - this.region = region; - } - - public void setPermissions(HashSet permissions) { - this.permissions = permissions; - } - - public void addPermission(Allowed allowed) { - permissions.add(allowed); - } - - public void removePermission(Allowed allowed) { - permissions.remove(allowed); - } - - public static enum Allowed { - SHOOT, KILL; - } -} \ No newline at end of file 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 deleted file mode 100644 index 59e0915..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Bullet.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.models; - -import net.arnx.jsonic.JSONHint; - -import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; -import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D; - -public class Bullet extends Entity { - private String playerID; - private Position3D position; - private Quaternion3D angle; - private boolean isAlive = true; - - public Bullet() { - // JSONエンコード時の呼び出し用 - } - - public Bullet(String playerID, Position3D position, Quaternion3D angle) { -// Object3D body = BulletModelManager.getInstance().getBulletModel(0).createObject(); // モデルIDは仮に0を指定 -// setPlaceable(body); - setPlayerID(playerID); - setPosition(position); - setAngle(angle); - } - - public String getPlayerID() { - return playerID; - } - - public Position3D getPosition() { - return position; - } - - public Quaternion3D getAngle() { - return angle; - } - - @JSONHint(ignore = true) - public boolean isAlive() { - return isAlive; - } - - public void setPlayerID(String playerID) { - this.playerID = playerID; - } - - public void setPosition(Position3D position) { - this.position = position; -// if (this.placeable != null) { -// ((Object3D)this.placeable.getBody()).setPosition(position); -// } - } - - public void setAngle(Quaternion3D angle) { - this.angle = angle; -// if (this.placeable != null) { -// ((Object3D)this.placeable.getBody()).apply(angle, false); -// } - } - - @JSONHint(ignore = true) - public void setAlive(boolean isAlive) { - this.isAlive = isAlive; - } - - public void update(Position3D position, Quaternion3D angle) { - setPosition(position); - setAngle(angle); - } -} 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 deleted file mode 100644 index a5b6ac7..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/BulletsModel.java +++ /dev/null @@ -1,148 +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.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/Character.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Character.java deleted file mode 100644 index 820d6c9..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Character.java +++ /dev/null @@ -1,172 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.models; - - -import net.arnx.jsonic.JSONHint; - -import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; -import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D; - -import java.util.HashMap; - -public class Character extends Entity { - private String accountURI; - private String areaURI; - private String name; - private Position3D position; - private Quaternion3D angle; - private int modelID; - - private HashMap itemMap = new HashMap<>(); - @JSONHint(ignore = true) - public static final int UNIQUE_ID_LENGTH = 12; - - private Character() { - // JSONDecode時の呼び出し用 - } - - public Character(String instanceId, String accountURI, String name, Position3D position, Quaternion3D angle, - int modelID) { - setAccountURI(accountURI); - setName(name); - setPosition(position); - setQuaternion3D(angle); - setModelID(modelID); - initAreaURI(instanceId); - } - - public String getAccountURI() { - return accountURI; - } - - public String getName() { - return name; - } - - public Position3D getPosition() { - return position; - } - - public Quaternion3D getQuaternion3D() { - return angle; - } - - public int getModelID() { - return modelID; - } - - public String getAreaURI() { - return areaURI; - } - - @JSONHint(ignore = true) - public Item getItem(String itemId) { - return itemMap.get(itemId); - } - - @JSONHint(ignore = true) - public HashMap getItems() { - return itemMap; - } - - public void setAccountURI(String accountURI) { - this.accountURI = accountURI; - } - - public void setName(String name) { - this.name = name; - } - - public void setPosition(Position3D position) { - this.position = position; - } - - public void setQuaternion3D(Quaternion3D angle) { - this.angle = angle; - } - - public void setModelID(int modelID) { - this.modelID = modelID; - } - - public void setAreaURI(String areaURI) { - this.areaURI = areaURI; - } - - public HashMap createItem(String name, int amount) { - Item item = new Item(name, amount); - if (!hasItem(item)) { - String id = RandomStringGenerator.generateUniqueString(Item.UNIQUE_ID_LENGTH, - RandomStringGenerator.ALPHA_NUMERIC, itemMap.keySet()); - itemMap.put(id, item); - HashMap returnedMap = new HashMap<>(); - returnedMap.put(id, item); - return returnedMap; - } - return null; - } - - public boolean hasItem(Item item) { - for (Item value : itemMap.values()) { - if (value.equals(item)) { - return true; - } - } - return false; - } - - public Item changeAmountOfItem(String itemId, int amountOfChange) { - Item item = itemMap.get(itemId).changeAmount(amountOfChange); - if (item.isEmpty()) { - destroyItem(itemId); - } - return item; - } - - private void initAreaURI(String instanceId) { - Instance instance = Instances.getInstance().getInstance(instanceId); - setAreaURI(findAreaURI(instance)); - } - - private String findAreaURI(Instance instance) { - // キャラクターのポジションを用いてどのエリア内にいるかを判定して当該エリアのURIに更新する - for (String areaId : instance.getAreas().keySet()) { - Area area = instance.getArea(areaId); - if (area.isSurroundingPosition(position)) { - int subStringEndIndex = areaURI.length() - Area.UNIQUE_ID_LENGTH; - StringBuilder newAreaURI = new StringBuilder(); - return newAreaURI.append(areaURI.substring(0, subStringEndIndex)).append(areaId).toString(); - } - } - return ""; - } - - public void update(Position3D position, Quaternion3D angle, String modelID, String areaURI) { - setPosition(position); - setQuaternion3D(angle); - if (modelID != null) { - setModelID(Integer.parseInt(modelID)); - } - if (areaURI != null) { - setAreaURI(areaURI); - } else { - updateAreaURI(); - } - } - - private void updateAreaURI() { - String[] areaURISplit = areaURI.split("/"); // ……/instances/{instanceId}/areas/{areaId} - int splitSize = areaURISplit.length; - String instanceId = areaURISplit[splitSize - 3]; - String previousAreaId = areaURISplit[splitSize - 1]; - Instance instance = Instances.getInstance().getInstance(instanceId); - Area previousArea = instance.getArea(previousAreaId); - if (!previousArea.isSurroundingPosition(position)) { - // キャラクターのポジションを用いてどのエリア内にいるかを判定して当該エリアのURIに更新する - setAreaURI(findAreaURI(instance)); - } - } - - public Item destroyItem(String itemId) { - return itemMap.remove(itemId); - } -} \ No newline at end of file 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 deleted file mode 100644 index 82e4f69..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/EmoteState.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.models; - - -/** - * エモートの情報を表すクラス
- * 内部にエモートの種類を表す列挙型も定義 - * - * @author r-isitani - */ -public class EmoteState { - private EmoteType emoteType; - - private EmoteState() { - // JSONDecode時の呼び出し用 - } - - public EmoteState(EmoteType emoteType) { - setEmoteType(emoteType); - } - - public EmoteType getEmoteType() { - return emoteType; - } - - public void setEmoteType(EmoteType emoteType) { - this.emoteType = emoteType; - } - - public static enum EmoteType { - // 開始するエモートの種類の列挙 - DUMMY; - } -} \ No newline at end of file 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 deleted file mode 100644 index 0da5009..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Instance.java +++ /dev/null @@ -1,167 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.models; - -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 java.util.HashMap; -import java.util.HashSet; - - -/** - * インスタンス - * - * @author r-isitani - */ -public class Instance extends Entity { - private String name; - private State state; - private int stageID; - - private Universe universe; - private Ground stage; - private HashMap areaMap = new HashMap<>(); - private HashMap objMap = new HashMap<>(); - private HashMap characterMap = new HashMap<>(); - @JSONHint(ignore = true) - public static final int UNIQUE_ID_LENGTH = 12; - - private Instance() { - // JSONDecode時の呼び出し用 - } - - public Instance(String name, int stageID) { - setName(name); - setState(Instance.State.AVAILABLE); - setStageID(stageID); - initUniverse(); - } - - private void initUniverse() { - universe = new Universe(); - // ステージの3Dデータを読み込み配置する - Object3D stageObj = StageModelManager.getInstance().getStage(stageID).createObject(); - stage = new Ground(stageObj); - universe.place(stage); - } - - public String getName() { - return name; - } - - public State getState() { - return state; - } - - public int getStageID() { - return stageID; - } - - @JSONHint(ignore = true) - public Universe getUniverse() { - return universe; - } - - @JSONHint(ignore = true) - public HashMap getAreas() { - return areaMap; - } - - public Area getArea(String areaId) { - return areaMap.get(areaId); - } - - @JSONHint(ignore = true) - public HashMap getObjects() { - return objMap; - } - - public MovableObject getObject(String objId) { - return objMap.get(objId); - } - - @JSONHint(ignore = true) - public HashMap getCharacters() { - return characterMap; - } - - public HashMap getCharacters(String accountID) { - if (accountID == null || accountID.isEmpty()) { - return getCharacters(); - } - HashMap returnedMap = new HashMap<>(); - for (String id : characterMap.keySet()) { - Character character = characterMap.get(id); - String[] accountURISplit = character.getAccountURI().split("/"); - if (accountURISplit[accountURISplit.length - 1].equals(accountID)) { - returnedMap.put(id, character); - } - } - return returnedMap; - } - - public Character getCharacter(String characterId) { - return characterMap.get(characterId); - } - - - public void setName(String name) { - this.name = name; - } - - public void setState(State state) { - this.state = state; - } - - public void setStageID(int stageURI) { - this.stageID = stageURI; - } - - public HashMap createArea(String name, Plain[] region, HashSet permissions) { - String id = RandomStringGenerator.generateUniqueString(Area.UNIQUE_ID_LENGTH, - RandomStringGenerator.ALPHA_NUMERIC, areaMap.keySet()); - Area area = new Area(name, region, permissions); - areaMap.put(id, area); - HashMap returnedMap = new HashMap<>(); - returnedMap.put(id, area); - return returnedMap; - } - - public HashMap createCharacter(String instanceId, String accountURI, String name, - Position3D position, Quaternion3D angle, int modelID) { - String id = RandomStringGenerator.generateUniqueString(Character.UNIQUE_ID_LENGTH, - RandomStringGenerator.ALPHA_NUMERIC, characterMap.keySet()); - Character character = new Character(instanceId, accountURI, name, position, angle, modelID); - characterMap.put(id, character); - HashMap returnedMap = new HashMap<>(); - returnedMap.put(id, character); - return returnedMap; - } - - public Instance update(Instance.State state) { - setState(state); - return this; - } - - public Character destroyCharacter(String characterId) { - return characterMap.remove(characterId); - } - - public Area destroyArea(String areaId) { - return areaMap.remove(areaId); - } - - public MovableObject destroyObject(String objId) { - return objMap.remove(objId); - } - - - public static enum State { - AVAILABLE, MAINTENANCE; - } -} \ No newline at end of file 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 deleted file mode 100644 index 3718482..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Instances.java +++ /dev/null @@ -1,119 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.models; - - -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; - private HashMap instanceMap = new HashMap<>(); // instanceのIDと実体を管理 - private HashMap playerMap = new HashMap<>(); - - private Instances() { -// // ダミーコード -// instanceMap.put("test1", new Instance("test1", 0)); -// instanceMap.put("test2", new Instance("test2", 1)); - } - - /** - * Instancesクラスを取得する (シングルトン) - * - * @return - */ - public static Instances getInstance() { - if (theInstance == null) { - theInstance = new Instances(); - } - return theInstance; - } - - public HashMap createInstance(String name, int stageID) { - String id = RandomStringGenerator.generateUniqueString(Instance.UNIQUE_ID_LENGTH, - RandomStringGenerator.ALPHA_NUMERIC, instanceMap.keySet()); - Instance instance = new Instance(name, stageID); - instanceMap.put(id, instance); - HashMap returnedMap = new HashMap<>(); - returnedMap.put(id, instance); - return returnedMap; - } - - public HashMap createPlayer(String instanceURI, String characterURI, CameraState cameraState, - EmoteState.EmoteType animationClassToStart) { - String id = RandomStringGenerator.generateUniqueString(Player.UNIQUE_ID_LENGTH, - RandomStringGenerator.ALPHA_NUMERIC, playerMap.keySet()); - Player player = new Player(instanceURI, characterURI, cameraState, animationClassToStart); - playerMap.put(id, player); - HashMap returnedMap = new HashMap<>(); - returnedMap.put(id, player); - return returnedMap; - } - - public HashMap getInstances() { - return instanceMap; - } - - public Instance getInstance(String instanceId) { - return instanceMap.get(instanceId); - } - - /** - * 全playerを返す - */ - public HashMap getPlayers() { - return playerMap; - } - - /** - * IDに対応するinstanceにいる全playerを返す - * - * @param instanceId - */ - public HashMap getPlayers(String instanceId) { - if (instanceId == null || instanceId.isEmpty()) { - return getPlayers(); - } - HashMap responsePlayers = new HashMap<>(); - for (String id : playerMap.keySet()) { - Player player = playerMap.get(id); - String[] instanceURISplit = player.getInstanceID().split("/"); // …/instances/{instanceId} - if (instanceId.equals(instanceURISplit[instanceURISplit.length - 1])) { - responsePlayers.put(id, player); - } - } - return responsePlayers; - } - - public Player getPlayer(String playerId) { - return playerMap.get(playerId); - } - - public Instance updateInstance(String instanceId, Instance.State state) { - Instance instance = instanceMap.get(instanceId); - instance.update(state); - return instance; - } - - public Player updatePlayer(String playerId, String characterURI, Position3D position, Quaternion3D angle, - CameraState cameraState, EmoteState.EmoteType animationClassToStart) { - Player player = playerMap.get(playerId); - player.update(characterURI, position, angle, cameraState, animationClassToStart); - return player; - } - - public Instance destroyInstance(String instanceId) { - return instanceMap.remove(instanceId); - } - - public Player destroyPlayer(String playerId) { - Player player = playerMap.get(playerId); - player.destroy(); - return playerMap.remove(playerId); - } -} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/MovableObject.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/MovableObject.java deleted file mode 100644 index 5d7c095..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/MovableObject.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.models; - -import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; -import org.ntlab.radishforandroidstudio.framework.model3D.Universe; - -public class MovableObject extends Object3D { - private Universe universe = null; - - public MovableObject(Object3D obj) { - super(obj); - } -} 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 deleted file mode 100644 index c5551d6..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/MovableObjectModel.java +++ /dev/null @@ -1,114 +0,0 @@ -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.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.java3d.Appearance; -import org.ntlab.radishforandroidstudio.java3d.Material; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - -/** - * オブジェクトを管理するモデル - */ - -public class MovableObjectModel implements OnlineModel { - private Universe universe; - private RealTime3DFragment fragment; - private ObjectsConnection con; - private int nextConnectRenaimdTime = 0; - private int connectInterval = 300; - private String instanceId; - private Map visibleobject = new HashMap<>(); - - public MovableObjectModel(RealTime3DFragment fragment, Universe universe, String instanceId) { - this.fragment = fragment; - this.universe = universe; - this.setInstanceId(instanceId); - } - - - @Override - public void setInstanceId(String instanceId) { - this.instanceId = instanceId; - } - - - /** - * オブジェクトの状態更新 - * - * @param interval 前回の更新からの時間差 - */ - @Override - public void update(double interval) { - 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(); - objBody.scale(0.1); - } 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/MyBullet.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/MyBullet.java deleted file mode 100644 index ca87b78..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/MyBullet.java +++ /dev/null @@ -1,155 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.models; - -import net.arnx.jsonic.JSON; - -import org.ntlab.radishforandroidstudio.cactusClient.connections.BulletCreateConnection; -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.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.physics.Force3D; -import org.ntlab.radishforandroidstudio.framework.physics.Solid3D; -import org.ntlab.radishforandroidstudio.framework.physics.Velocity3D; -import org.ntlab.radishforandroidstudio.java3d.Vector3d; - -import java.util.ArrayList; -import java.util.UUID; - -public class MyBullet extends Actor implements OnlineModel { - private String instanceId; - private String playerId; - private String uuid; - final private int INIT_UPDATE_INTERVAL = 100; - private int updateInterval = INIT_UPDATE_INTERVAL; - private boolean isCreatedOnServer = false; - private boolean isWaitCreatingOnServer = false; - private boolean isDelete = false; - - public MyBullet(Object3D body, Animation3D animation) { - super(body, animation); - initUuid(); - } - - public MyBullet(Solid3D body, Animation3D animation) { - super(body, animation); - initUuid(); - } - - public void initUuid() { - if (getUuid() == null || getUuid().equals("")) { - uuid = UUID.randomUUID().toString(); - } - } - - public String getUuid() { - return uuid; - } - - public boolean isDelete() { - return isDelete; - } - - @Override - public void onEndFall() { - - } - - @Override - public void onIntersect(CollisionResult normal, long interval) { - - } - - @Override - public void onEndAnimation() { - - } - - @Override - public void addCollidable(ArrayList pList) { - - } - - @Override - public void onCollisionEnter(Placeable p) { - - } - - @Override - public void onCollisionStay(Placeable p) { - - } - - @Override - public void onCollisionExit(Placeable p) { - - } - - @Override - public Force3D getGravity() { - return Force3D.ZERO; - } - - - @Override - final public void update(double interval) { - progress(interval); - // サーバに弾を作成 - if (!isCreatedOnServer && !instanceId.equals("") && !playerId.equals("") && !isWaitCreatingOnServer) { - JSON json = new JSON(); - Quaternion3D q = ((Solid3D) (getBody())).getQuaternion(); - BulletCreateConnection con = new BulletCreateConnection(instanceId, playerId); - con.setCallBack(this); - con.addFormParam("bulletID", getUuid()); - con.addFormParam("position", json.encode(getPosition())); - con.addFormParam("angle", "{ \"x\":" + q.getX() + ", \"y\":" + q.getY() + ", \"z\":" + q.getZ() + ", \"w\":" + q.getW() + "}"); - con.doPost(); - isWaitCreatingOnServer = true; - System.out.println("create shot uuid:" + getUuid()); - } else if (isCreatedOnServer && !isWaitCreatingOnServer) { - // サーバの弾の情報を更新 - updateInterval -= interval; - if (updateInterval <= 0 && isCreatedOnServer) { - JSON json = new JSON(); - Quaternion3D q = ((Solid3D) (getBody())).getQuaternion(); - updateInterval = INIT_UPDATE_INTERVAL; - BulletUpdateConnection con = new BulletUpdateConnection(instanceId, playerId, getUuid()); - con.setCallBack(this); - con.addFormParam("position", json.encode(getPosition())); - con.addFormParam("angle", "{ \"x\":" + q.getX() + ", \"y\":" + q.getY() + ", \"z\":" + q.getZ() + ", \"w\":" + q.getW() + "}"); - con.doPut(); - } - } - } - - public void progress(double interval) { - - } - - public void init(Position3D pos, Quaternion3D angle) { - setPosition(pos); - Vector3d v = new Vector3d(-1.0f, 0, 0); - v = v.rotate(angle); - setVelocity(new Velocity3D(v)); - } - - - @Override - public void setInstanceId(String id) { - instanceId = id; - } - - public void setPlayerid(String id) { - playerId = id; - } - - @Override - public void onResponse(String response) { - isWaitCreatingOnServer = false; - isCreatedOnServer = true; - } -} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/NormalBullet.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/NormalBullet.java deleted file mode 100644 index 66e0a71..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/NormalBullet.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.models; - -import org.ntlab.radishforandroidstudio.framework.animation.Animation3D; -import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; -import org.ntlab.radishforandroidstudio.framework.physics.Solid3D; - -public class NormalBullet extends MyBullet { - public NormalBullet(Object3D body, Animation3D animation) { - super(body, animation); - } - - public NormalBullet(Solid3D body, Animation3D animation) { - super(body, animation); - } -} 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 deleted file mode 100644 index 63d2679..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Object.java +++ /dev/null @@ -1,152 +0,0 @@ -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; -import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D; -import org.ntlab.radishforandroidstudio.framework.physics.AngularVelocity3D; -import org.ntlab.radishforandroidstudio.framework.physics.Velocity3D; -import org.ntlab.radishforandroidstudio.java3d.Box; -import org.ntlab.radishforandroidstudio.java3d.Primitive; - -//import framework.model3D.Position3D; -//import framework.physics.AngularVelocity3D; -//import framework.physics.Velocity3D; - -public class Object extends Entity3D { - private Position3D position; - private Velocity3D velocity; - private AngularVelocity3D angularVelocity; - private Quaternion3D angle; - private Attribute attribute; - private Model3D model; - private Primitive prim; - private Object3D object; - - @JSONHint(ignore = true) - public static final int UNIQUE_ID_LENGTH = 12; - - @SuppressWarnings("unused") - private Object() { - // JSONDecode時の呼び出し用 - } - - 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); - } - - public Position3D getPosition() { - return position; - } - - @JSONHint(ignore = true) - public Velocity3D getVelocity() { - return velocity; - } - - @JSONHint(ignore = true) - public AngularVelocity3D getAngularVelocity() { - return angularVelocity; - } - - public Quaternion3D getAngle() { - 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) { - this.velocity = velocity; - } - - public void setAngularVelocity(AngularVelocity3D angularVelocity) { - this.angularVelocity = angularVelocity; - } - - public void setAngle(Quaternion3D angle) { - this.angle = angle; -// ((Object3D) getPlaceable().getBody()).apply(angle, false); - } - - public void setAttribute(Attribute attribute) { - this.attribute = attribute; - } - - public void setModel(int modelID) { - this.model = ObjectModelManager.getInstance().getObject(modelID); - } - - public static class Attribute { - private boolean movable; // 可動 - private double cof; // 摩擦係数 - - @SuppressWarnings("unused") - private Attribute() { - - } - - public Attribute(boolean moveable, double cof) { - setMovable(moveable); - setCof(cof); - } - - public boolean isMovable() { - return movable; - } - - public double getCof() { - return cof; - } - - public void setMovable(boolean moveable) { - this.movable = moveable; - } - - public void setCof(double cof) { - this.cof = cof; - } - } - - @JSONHint(ignore = true) - public Primitive getPrim() { - return prim; - } - - public void setPrim(Primitive prim) { - this.prim = prim; - } - - @JSONHint(ignore = true) - public Object3D getObject() { - 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 deleted file mode 100644 index 0f47ad1..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/ObjectModelManager.java +++ /dev/null @@ -1,46 +0,0 @@ -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; - -import java.io.IOException; -import java.util.HashMap; - -class ObjectModelManager { - - 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/models/OtherPlayerBullet.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerBullet.java deleted file mode 100644 index 77546d5..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerBullet.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.models; - -import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; - -public class OtherPlayerBullet extends Object3D { - public OtherPlayerBullet(Object3D obj) { - super(obj); - } -} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerCharacter.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerCharacter.java deleted file mode 100644 index 391b6d9..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerCharacter.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.models; - -import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; - -public class OtherPlayerCharacter extends Object3D { - 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 deleted file mode 100644 index b844a71..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerCharactersModel.java +++ /dev/null @@ -1,119 +0,0 @@ -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.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.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 OnlineModel { - private Universe universe; - private RealTime3DFragment fragment; - private PlayersConnection con; - private int nextConnectRenaimdTime = 0; - static final private int CONNECT_INTERVAL = 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; - } - - /** - * キャラクターの状態を更新する - * - * @param interval 前回の更新からの時間差 - * @author s.iwatani - */ - @Override - public void update(double interval) { - nextConnectRenaimdTime -= interval; - if (nextConnectRenaimdTime <= 0) { - nextConnectRenaimdTime = CONNECT_INTERVAL; - 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(); - - // 自分自身は無視する - 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(); - } catch (Exception e) { - e.printStackTrace(); - } - OtherPlayerCharacter chara = new OtherPlayerCharacter(pochaBody); - universe.place(entry.getKey(), 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/OwnBulletsModel.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnBulletsModel.java deleted file mode 100644 index 04f3cac..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnBulletsModel.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.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/OwnPlayerModel.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnPlayerModel.java deleted file mode 100644 index 9041acf..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnPlayerModel.java +++ /dev/null @@ -1,224 +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.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/Plain.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Plain.java deleted file mode 100644 index 9b92230..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Plain.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.models; - - -public class Plain { - private double a; // 平面の方程式 ax+by+cz+d のa - private double b; // 平面の方程式 ax+by+cz+d のb - private double c; // 平面の方程式 ax+by+cz+d のc - private double d; // 平面の方程式 ax+by+cz+d のd - - private Plain() { - // JSONDecode時の呼び出し用 - } - - public Plain(double a, double b, double c, double d) { - setA(a); - setB(b); - setC(c); - setD(d); - } - - public double getA() { - return a; - } - - public double getB() { - return b; - } - - public double getC() { - return c; - } - - public double getD() { - return d; - } - - public void setA(double a) { - this.a = a; - } - - public void setB(double b) { - this.b = b; - } - - public void setC(double c) { - this.c = c; - } - - public void setD(double d) { - this.d = d; - } -} \ No newline at end of file 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 deleted file mode 100644 index 173f5b7..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Player.java +++ /dev/null @@ -1,182 +0,0 @@ -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 java.io.Serializable; - -public class Player extends Entity3D implements Serializable { - private String instanceID; - private String characterID; - private String areaURI; - private Position3D position; - private Quaternion3D angle; - private CameraState cameraState; - private EmoteState emoteState; - @JSONHint(ignore = true) - public static final int UNIQUE_ID_LENGTH = 12; - - private Player() { - // JSONDecode時の呼び出し用 - } - - public Player(String instanceID, String characterID, CameraState cameraState, - EmoteState.EmoteType animationClassToStart) { - setInstanceID(instanceID); - setCharacterID(characterID); - setCameraState(cameraState); - setAnimationClassToStart(animationClassToStart); - Character character = getCharacter(characterID); - readCharacterData(character); - initPlaceable(character.getModelID()); - } - - private void initPlaceable(int modelID) { - // こんな感じで当該コンストラクタの最後でplaceableの注入を行う - Object3D body = CharacterModelManager.getInstance().getCharacterModel(modelID).createObject(); - setPlaceable(new OvergroundActor(body, null)); - // 所属するInstanceが持つUniverseにplaceableを配置する - String[] instanceURISplit = instanceID.split("/"); // ……/instances/{instanceId} - String instanceId = instanceURISplit[instanceURISplit.length - 1]; - Instances.getInstance().getInstance(instanceId).getUniverse().place(this.getPlaceable()); - } - - public String getInstanceID() { - return instanceID; - } - - public String getCharacterID() { - return characterID; - } - - public String getAreaURI() { - return areaURI; - } - - public Position3D getPosition() { - return position; - } - - public Quaternion3D getAngle() { - return angle; - } - - public CameraState getCameraState() { - return cameraState; - } - - public EmoteState getEmoteState() { - return emoteState; - } - - public void setInstanceID(String instanceID) { - this.instanceID = instanceID; - } - - public void setCharacterID(String characterID) { - this.characterID = characterID; - } - - public void setAreaURI(String areaURI) { - this.areaURI = areaURI; - } - - public void setPosition(Position3D position) { - this.position = position; - } - - public void setAngle(Quaternion3D angle) { - this.angle = angle; - } - - public void setCameraState(CameraState cameraState) { - this.cameraState = cameraState; - } - - public void setEmoteState(EmoteState emoteState) { - this.emoteState = emoteState; - } - - public void setAnimationClassToStart(EmoteState.EmoteType animationClassToStart) { - setEmoteState(new EmoteState(animationClassToStart)); - } - - public Player update(String characterURI, Position3D position, Quaternion3D angle, CameraState cameraState, - EmoteState.EmoteType animationClassToStart) { - setCharacterID(characterURI); - setPosition(position); - setAngle(angle); - setCameraState(cameraState); - updateEmoteType(animationClassToStart); - updateAreaURI(); - return this; - } - - private void updateAreaURI() { - String[] areaURISplit = areaURI.split("/"); // ……/instances/{instanceId}/areas/{areaId} - int splitSize = areaURISplit.length; - String instanceId = areaURISplit[splitSize - 3]; - String previousAreaId = areaURISplit[splitSize - 1]; - Instance instance = Instances.getInstance().getInstance(instanceId); - Area previousArea = instance.getArea(previousAreaId); - if (!previousArea.isSurroundingPosition(position)) { - // キャラクターのポジションを用いてどのエリア内にいるかを判定して当該エリアのURIに更新する - setAreaURI(findAreaURI(instance)); - } - } - - private String findAreaURI(Instance instance) { - // キャラクターのポジションを用いてどのエリア内にいるかを判定して当該エリアのURIに更新する - for (String areaId : instance.getAreas().keySet()) { - Area area = instance.getArea(areaId); - if (area.isSurroundingPosition(position)) { - int subStringEndIndex = areaURI.length() - Area.UNIQUE_ID_LENGTH; // …/{instanceId}/areas/ まで - return areaURI.substring(0, subStringEndIndex) + areaId; - } - } - return ""; - } - - private void updateEmoteType(EmoteState.EmoteType animationClassToStart) { - emoteState.setEmoteType(animationClassToStart); - } - - public void changeCharacter(String characterURI) { - writeCharacterData(this.characterID); - readCharacterData(characterURI); - } - - public void destroy() { - writeCharacterData(characterID); - } - - private Character getCharacter(String characterURI) { - String[] characterURISplit = characterURI.split("/"); // ……/instances/{instanceId}/characters/{characterId} - int splitSize = characterURISplit.length; - String characterId = characterURISplit[splitSize - 1]; - String instanceId = characterURISplit[splitSize - 3]; - return Instances.getInstance().getInstance(instanceId).getCharacter(characterId); - } - - private void readCharacterData(Character character) { - setPosition(character.getPosition()); - setAngle(character.getQuaternion3D()); - setAreaURI(character.getAreaURI()); - setCharacterID(characterID); - } - - private void readCharacterData(String characterURI) { - Character character = getCharacter(characterURI); - readCharacterData(character); - } - - private void writeCharacterData(String characterURI) { - Character character = getCharacter(characterURI); - character.update(position, angle, null, areaURI); // model(第3引数)の更新は出来ない - } -} \ No newline at end of file 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 deleted file mode 100644 index 9db2c3e..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/StageModelManager.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.models; - - -import org.ntlab.radishforandroidstudio.framework.model3D.Model3D; - -import java.util.HashMap; - -public class StageModelManager { - private static StageModelManager theInstance = null; - private HashMap model = new HashMap<>(); - - 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(); - } - *******************************************************************************************************/ - } - - public static StageModelManager getInstance() { - if (theInstance == null) { - theInstance = new StageModelManager(); - } - return theInstance; - } - - public void setStage(int key, Model3D model3d) { - model.put(key, model3d); - } - - public Model3D getStage(int stageID) { - return model.get(stageID); - } - - public int getStageModelCount() { - return model.size(); - } - -} \ No newline at end of file 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 4807175..a538583 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 @@ -1,5 +1,7 @@ package org.ntlab.radishforandroidstudio.cactusClient.models; +import org.ntlab.radishforandroidstudio.cactusClient.models.account.Account; + import java.net.URI; public class URIAddressedAccount { diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/account/Account.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/account/Account.java new file mode 100644 index 0000000..5544aef --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/account/Account.java @@ -0,0 +1,78 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.account; + +import net.arnx.jsonic.JSONHint; + +import org.ntlab.radishforandroidstudio.cactusClient.models.RandomStringGenerator; + +public class Account { + private String id, name, token, pass, uniqueID; + private boolean login = false; + + private Account() { + } + + public Account(String userID, String userName, String userPass, String uniqueID) { + setId(userID); + setName(userName); + setPass(userPass); + setUniqueID(uniqueID); + formToken(); + login = true; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @JSONHint(ignore = true) + public String getPass() { + return pass; + } + + public void setPass(String pass) { + this.pass = pass; + } + + public boolean isLogin() { + return login; + } + + public void setLogin(boolean login) { + this.login = login; + } + + public void setToken(String token) { + this.token = token; + + } + + public String getToken() { + return token; + } + + public String formToken() { + token = RandomStringGenerator.generateRandomString(64, RandomStringGenerator.ALPHA_NUMERIC); + return token; + } + + @JSONHint(ignore = true) + public String getUniqueID() { + return uniqueID; + } + + public void setUniqueID(String uniqueID) { + this.uniqueID = uniqueID; + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/bullet/Bullet.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/bullet/Bullet.java new file mode 100644 index 0000000..b826825 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/bullet/Bullet.java @@ -0,0 +1,71 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.bullet; + +import net.arnx.jsonic.JSONHint; + +import org.ntlab.radishforandroidstudio.cactusClient.models.Entity; +import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D; + +public class Bullet extends Entity { + private String playerID; + private Position3D position; + private Quaternion3D angle; + private boolean isAlive = true; + + public Bullet() { + // JSONエンコード時の呼び出し用 + } + + public Bullet(String playerID, Position3D position, Quaternion3D angle) { +// Object3D body = BulletModelManager.getInstance().getBulletModel(0).createObject(); // モデルIDは仮に0を指定 +// setPlaceable(body); + setPlayerID(playerID); + setPosition(position); + setAngle(angle); + } + + public String getPlayerID() { + return playerID; + } + + public Position3D getPosition() { + return position; + } + + public Quaternion3D getAngle() { + return angle; + } + + @JSONHint(ignore = true) + public boolean isAlive() { + return isAlive; + } + + public void setPlayerID(String playerID) { + this.playerID = playerID; + } + + public void setPosition(Position3D position) { + this.position = position; +// if (this.placeable != null) { +// ((Object3D)this.placeable.getBody()).setPosition(position); +// } + } + + public void setAngle(Quaternion3D angle) { + this.angle = angle; +// if (this.placeable != null) { +// ((Object3D)this.placeable.getBody()).apply(angle, false); +// } + } + + @JSONHint(ignore = true) + public void setAlive(boolean isAlive) { + this.isAlive = isAlive; + } + + public void update(Position3D position, Quaternion3D angle) { + setPosition(position); + setAngle(angle); + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/bullet/BulletsModel.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/bullet/BulletsModel.java new file mode 100644 index 0000000..b56a344 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/bullet/BulletsModel.java @@ -0,0 +1,148 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.bullet; + +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/bullet/MyBullet.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/bullet/MyBullet.java new file mode 100644 index 0000000..4517749 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/bullet/MyBullet.java @@ -0,0 +1,161 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.bullet; + +import net.arnx.jsonic.JSON; + +import org.ntlab.radishforandroidstudio.cactusClient.connections.BulletCreateConnection; +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.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.physics.Force3D; +import org.ntlab.radishforandroidstudio.framework.physics.Solid3D; +import org.ntlab.radishforandroidstudio.framework.physics.Velocity3D; +import org.ntlab.radishforandroidstudio.java3d.Vector3d; + +import java.util.ArrayList; +import java.util.UUID; + +public class MyBullet extends Actor implements OnlineModel { + private String instanceId; + private String playerId; + private String uuid; + final private int INIT_UPDATE_INTERVAL = 100; + private int updateInterval = INIT_UPDATE_INTERVAL; + private boolean isCreatedOnServer = false; + private boolean isWaitCreatingOnServer = false; + private boolean isDelete = false; + + public MyBullet(Object3D body, Animation3D animation) { + super(body, animation); + initUuid(); + } + + public MyBullet(Solid3D body, Animation3D animation) { + super(body, animation); + initUuid(); + } + + public void initUuid() { + if (getUuid() == null || getUuid().equals("")) { + uuid = UUID.randomUUID().toString(); + } + } + + public String getUuid() { + return uuid; + } + + public boolean isDelete() { + return isDelete; + } + + @Override + public void onEndFall() { + + } + + @Override + public void onIntersect(CollisionResult normal, long interval) { + + } + + @Override + public void onEndAnimation() { + + } + + @Override + public void addCollidable(ArrayList pList) { + + } + + @Override + public void onCollisionEnter(Placeable p) { + + } + + @Override + public void onCollisionStay(Placeable p) { + + } + + @Override + public void onCollisionExit(Placeable p) { + + } + + @Override + public Force3D getGravity() { + return Force3D.ZERO; + } + + + @Override + final public void update(double interval) { + progress(interval); + // サーバに弾を作成 + if (!isCreatedOnServer && !instanceId.equals("") && !playerId.equals("") && !isWaitCreatingOnServer) { + JSON json = new JSON(); + Quaternion3D q = ((Solid3D) (getBody())).getQuaternion(); + BulletCreateConnection con = new BulletCreateConnection(instanceId, playerId); + con.setCallBack(this); + + con.addFormParam("bulletID", getUuid()); + con.addFormParam("position", json.encode(getPosition())); + con.addFormParam("angle", "{ \"x\":" + q.getX() + ", \"y\":" + q.getY() + ", \"z\":" + q.getZ() + ", \"w\":" + q.getW() + "}"); + + con.doPost(); + + isWaitCreatingOnServer = true; + System.out.println("create shot uuid:" + getUuid()); + + } else if (isCreatedOnServer && !isWaitCreatingOnServer) { + // サーバの弾の情報を更新 + updateInterval -= interval; + if (updateInterval <= 0 && isCreatedOnServer) { + JSON json = new JSON(); + Quaternion3D q = ((Solid3D) (getBody())).getQuaternion(); + updateInterval = INIT_UPDATE_INTERVAL; + BulletUpdateConnection con = new BulletUpdateConnection(instanceId, playerId, getUuid()); + con.setCallBack(this); + + con.addFormParam("position", json.encode(getPosition())); + con.addFormParam("angle", "{ \"x\":" + q.getX() + ", \"y\":" + q.getY() + ", \"z\":" + q.getZ() + ", \"w\":" + q.getW() + "}"); + + con.doPut(); + } + } + } + + public void progress(double interval) { + + } + + public void init(Position3D pos, Quaternion3D angle) { + setPosition(pos); + Vector3d v = new Vector3d(-1.0f, 0, 0); + v = v.rotate(angle); + setVelocity(new Velocity3D(v)); + } + + + @Override + public void setInstanceId(String id) { + instanceId = id; + } + + public void setPlayerid(String id) { + playerId = id; + } + + @Override + public void onResponse(String response) { + isWaitCreatingOnServer = false; + isCreatedOnServer = true; + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/bullet/NormalBullet.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/bullet/NormalBullet.java new file mode 100644 index 0000000..cccef77 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/bullet/NormalBullet.java @@ -0,0 +1,15 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.bullet; + +import org.ntlab.radishforandroidstudio.framework.animation.Animation3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; +import org.ntlab.radishforandroidstudio.framework.physics.Solid3D; + +public class NormalBullet extends MyBullet { + public NormalBullet(Object3D body, Animation3D animation) { + super(body, animation); + } + + public NormalBullet(Solid3D body, Animation3D animation) { + super(body, animation); + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/bullet/OtherPlayerBullet.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/bullet/OtherPlayerBullet.java new file mode 100644 index 0000000..07b6b9f --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/bullet/OtherPlayerBullet.java @@ -0,0 +1,9 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.bullet; + +import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; + +public class OtherPlayerBullet extends Object3D { + public OtherPlayerBullet(Object3D obj) { + super(obj); + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/bullet/OwnBulletsModel.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/bullet/OwnBulletsModel.java new file mode 100644 index 0000000..7a23ec0 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/bullet/OwnBulletsModel.java @@ -0,0 +1,105 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.bullet; + +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/instance/Area.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/instance/Area.java new file mode 100644 index 0000000..193f911 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/instance/Area.java @@ -0,0 +1,84 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.instance; + + +import net.arnx.jsonic.JSONHint; + +import org.ntlab.radishforandroidstudio.cactusClient.models.Entity; +import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; + +import java.util.HashSet; + +public class Area extends Entity { + private String name; + private Plain[] region; // 任意個の平面の方程式 + private HashSet permissions; // エリア内で可能なことの羅列 + @JSONHint(ignore = true) + public static final int UNIQUE_ID_LENGTH = 12; + + @SuppressWarnings("unused") + private Area() { + // JSONDecode時の呼び出し用 + } + + public Area(String name, Plain[] region, HashSet permissions) { + setName(name); + setRegion(region); + setPermissions(permissions); + } + + public String getName() { + return name; + } + + public Plain[] getRegion() { + return region; + } + + public Plain getPlain(int index) { + return region[index]; + } + + public HashSet getPermissions() { + return permissions; + } + + public boolean isPermission(Allowed allowed) { + return permissions.contains(allowed); + } + + public boolean isSurroundingPosition(Position3D position) { + for (Plain plain : region) { + // ここで Plainのa,b,c,d と Characterのx,y,z を用いて, キャラクターが平面の裏にいるかどうかの判定を行う + double equation = (plain.getA() * position.getX()) + (plain.getB() * position.getY()) + + (plain.getC() * position.getZ()) + plain.getD(); + if (equation > 0) { + return false; + } + } + return true; + } + + public void setName(String name) { + this.name = name; + } + + public void setRegion(Plain[] region) { + this.region = region; + } + + public void setPermissions(HashSet permissions) { + this.permissions = permissions; + } + + public void addPermission(Allowed allowed) { + permissions.add(allowed); + } + + public void removePermission(Allowed allowed) { + permissions.remove(allowed); + } + + public static enum Allowed { + SHOOT, KILL; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/instance/Instance.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/instance/Instance.java new file mode 100644 index 0000000..c1f73ff --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/instance/Instance.java @@ -0,0 +1,171 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.instance; + +import net.arnx.jsonic.JSONHint; + +import org.ntlab.radishforandroidstudio.cactusClient.models.instance.Area.Allowed; +import org.ntlab.radishforandroidstudio.cactusClient.models.player.Character; +import org.ntlab.radishforandroidstudio.cactusClient.models.Entity; +import org.ntlab.radishforandroidstudio.cactusClient.models.object.MovableObject; +import org.ntlab.radishforandroidstudio.cactusClient.models.RandomStringGenerator; +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 java.util.HashMap; +import java.util.HashSet; + + +/** + * インスタンス + * + * @author r-isitani + */ +public class Instance extends Entity { + private String name; + private State state; + private int stageID; + + private Universe universe; + private Ground stage; + private HashMap areaMap = new HashMap<>(); + private HashMap objMap = new HashMap<>(); + private HashMap characterMap = new HashMap<>(); + @JSONHint(ignore = true) + public static final int UNIQUE_ID_LENGTH = 12; + + private Instance() { + // JSONDecode時の呼び出し用 + } + + public Instance(String name, int stageID) { + setName(name); + setState(Instance.State.AVAILABLE); + setStageID(stageID); + initUniverse(); + } + + private void initUniverse() { + universe = new Universe(); + // ステージの3Dデータを読み込み配置する + Object3D stageObj = StageModelManager.getInstance().getStage(stageID).createObject(); + stage = new Ground(stageObj); + universe.place(stage); + } + + public String getName() { + return name; + } + + public State getState() { + return state; + } + + public int getStageID() { + return stageID; + } + + @JSONHint(ignore = true) + public Universe getUniverse() { + return universe; + } + + @JSONHint(ignore = true) + public HashMap getAreas() { + return areaMap; + } + + public Area getArea(String areaId) { + return areaMap.get(areaId); + } + + @JSONHint(ignore = true) + public HashMap getObjects() { + return objMap; + } + + public MovableObject getObject(String objId) { + return objMap.get(objId); + } + + @JSONHint(ignore = true) + public HashMap getCharacters() { + return characterMap; + } + + public HashMap getCharacters(String accountID) { + if (accountID == null || accountID.isEmpty()) { + return getCharacters(); + } + HashMap returnedMap = new HashMap<>(); + for (String id : characterMap.keySet()) { + Character character = characterMap.get(id); + String[] accountURISplit = character.getAccountURI().split("/"); + if (accountURISplit[accountURISplit.length - 1].equals(accountID)) { + returnedMap.put(id, character); + } + } + return returnedMap; + } + + public Character getCharacter(String characterId) { + return characterMap.get(characterId); + } + + + public void setName(String name) { + this.name = name; + } + + public void setState(State state) { + this.state = state; + } + + public void setStageID(int stageURI) { + this.stageID = stageURI; + } + + public HashMap createArea(String name, Plain[] region, HashSet permissions) { + String id = RandomStringGenerator.generateUniqueString(Area.UNIQUE_ID_LENGTH, + RandomStringGenerator.ALPHA_NUMERIC, areaMap.keySet()); + Area area = new Area(name, region, permissions); + areaMap.put(id, area); + HashMap returnedMap = new HashMap<>(); + returnedMap.put(id, area); + return returnedMap; + } + + public HashMap createCharacter(String instanceId, String accountURI, String name, + Position3D position, Quaternion3D angle, int modelID) { + String id = RandomStringGenerator.generateUniqueString(Character.UNIQUE_ID_LENGTH, + RandomStringGenerator.ALPHA_NUMERIC, characterMap.keySet()); + Character character = new Character(instanceId, accountURI, name, position, angle, modelID); + characterMap.put(id, character); + HashMap returnedMap = new HashMap<>(); + returnedMap.put(id, character); + return returnedMap; + } + + public Instance update(Instance.State state) { + setState(state); + return this; + } + + public Character destroyCharacter(String characterId) { + return characterMap.remove(characterId); + } + + public Area destroyArea(String areaId) { + return areaMap.remove(areaId); + } + + public MovableObject destroyObject(String objId) { + return objMap.remove(objId); + } + + + public static enum State { + AVAILABLE, MAINTENANCE; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/instance/Instances.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/instance/Instances.java new file mode 100644 index 0000000..d8c9f42 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/instance/Instances.java @@ -0,0 +1,123 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.instance; + + +import org.ntlab.radishforandroidstudio.cactusClient.models.CameraState; +import org.ntlab.radishforandroidstudio.cactusClient.models.player.EmoteState; +import org.ntlab.radishforandroidstudio.cactusClient.models.player.Player; +import org.ntlab.radishforandroidstudio.cactusClient.models.RandomStringGenerator; +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; + private HashMap instanceMap = new HashMap<>(); // instanceのIDと実体を管理 + private HashMap playerMap = new HashMap<>(); + + private Instances() { +// // ダミーコード +// instanceMap.put("test1", new Instance("test1", 0)); +// instanceMap.put("test2", new Instance("test2", 1)); + } + + /** + * Instancesクラスを取得する (シングルトン) + * + * @return + */ + public static Instances getInstance() { + if (theInstance == null) { + theInstance = new Instances(); + } + return theInstance; + } + + public HashMap createInstance(String name, int stageID) { + String id = RandomStringGenerator.generateUniqueString(Instance.UNIQUE_ID_LENGTH, + RandomStringGenerator.ALPHA_NUMERIC, instanceMap.keySet()); + Instance instance = new Instance(name, stageID); + instanceMap.put(id, instance); + HashMap returnedMap = new HashMap<>(); + returnedMap.put(id, instance); + return returnedMap; + } + + public HashMap createPlayer(String instanceURI, String characterURI, CameraState cameraState, + EmoteState.EmoteType animationClassToStart) { + String id = RandomStringGenerator.generateUniqueString(Player.UNIQUE_ID_LENGTH, + RandomStringGenerator.ALPHA_NUMERIC, playerMap.keySet()); + Player player = new Player(instanceURI, characterURI, cameraState, animationClassToStart); + playerMap.put(id, player); + HashMap returnedMap = new HashMap<>(); + returnedMap.put(id, player); + return returnedMap; + } + + public HashMap getInstances() { + return instanceMap; + } + + public Instance getInstance(String instanceId) { + return instanceMap.get(instanceId); + } + + /** + * 全playerを返す + */ + public HashMap getPlayers() { + return playerMap; + } + + /** + * IDに対応するinstanceにいる全playerを返す + * + * @param instanceId + */ + public HashMap getPlayers(String instanceId) { + if (instanceId == null || instanceId.isEmpty()) { + return getPlayers(); + } + HashMap responsePlayers = new HashMap<>(); + for (String id : playerMap.keySet()) { + Player player = playerMap.get(id); + String[] instanceURISplit = player.getInstanceID().split("/"); // …/instances/{instanceId} + if (instanceId.equals(instanceURISplit[instanceURISplit.length - 1])) { + responsePlayers.put(id, player); + } + } + return responsePlayers; + } + + public Player getPlayer(String playerId) { + return playerMap.get(playerId); + } + + public Instance updateInstance(String instanceId, Instance.State state) { + Instance instance = instanceMap.get(instanceId); + instance.update(state); + return instance; + } + + public Player updatePlayer(String playerId, String characterURI, Position3D position, Quaternion3D angle, + CameraState cameraState, EmoteState.EmoteType animationClassToStart) { + Player player = playerMap.get(playerId); + player.update(characterURI, position, angle, cameraState, animationClassToStart); + return player; + } + + public Instance destroyInstance(String instanceId) { + return instanceMap.remove(instanceId); + } + + public Player destroyPlayer(String playerId) { + Player player = playerMap.get(playerId); + player.destroy(); + return playerMap.remove(playerId); + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/instance/Plain.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/instance/Plain.java new file mode 100644 index 0000000..6aebdd4 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/instance/Plain.java @@ -0,0 +1,52 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.instance; + + +public class Plain { + private double a; // 平面の方程式 ax+by+cz+d のa + private double b; // 平面の方程式 ax+by+cz+d のb + private double c; // 平面の方程式 ax+by+cz+d のc + private double d; // 平面の方程式 ax+by+cz+d のd + + private Plain() { + // JSONDecode時の呼び出し用 + } + + public Plain(double a, double b, double c, double d) { + setA(a); + setB(b); + setC(c); + setD(d); + } + + public double getA() { + return a; + } + + public double getB() { + return b; + } + + public double getC() { + return c; + } + + public double getD() { + return d; + } + + public void setA(double a) { + this.a = a; + } + + public void setB(double b) { + this.b = b; + } + + public void setC(double c) { + this.c = c; + } + + public void setD(double d) { + this.d = d; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/instance/StageModelManager.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/instance/StageModelManager.java new file mode 100644 index 0000000..e2b46cd --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/instance/StageModelManager.java @@ -0,0 +1,42 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.instance; + + +import org.ntlab.radishforandroidstudio.framework.model3D.Model3D; + +import java.util.HashMap; + +public class StageModelManager { + private static StageModelManager theInstance = null; + private HashMap model = new HashMap<>(); + + 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(); + } + *******************************************************************************************************/ + } + + public static StageModelManager getInstance() { + if (theInstance == null) { + theInstance = new StageModelManager(); + } + return theInstance; + } + + public void setStage(int key, Model3D model3d) { + model.put(key, model3d); + } + + public Model3D getStage(int stageID) { + return model.get(stageID); + } + + public int getStageModelCount() { + return model.size(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/object/MovableObject.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/object/MovableObject.java new file mode 100644 index 0000000..028d6ad --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/object/MovableObject.java @@ -0,0 +1,12 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.object; + +import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Universe; + +public class MovableObject extends Object3D { + private Universe universe = null; + + public MovableObject(Object3D obj) { + super(obj); + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/object/MovableObjectModel.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/object/MovableObjectModel.java new file mode 100644 index 0000000..de26fa6 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/object/MovableObjectModel.java @@ -0,0 +1,114 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.object; + +import net.arnx.jsonic.JSON; +import net.arnx.jsonic.TypeReference; + +import org.ntlab.radishforandroidstudio.cactusClient.connections.ObjectsConnection; +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.java3d.Appearance; +import org.ntlab.radishforandroidstudio.java3d.Material; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +/** + * オブジェクトを管理するモデル + */ + +public class MovableObjectModel implements OnlineModel { + private Universe universe; + private RealTime3DFragment fragment; + private ObjectsConnection con; + private int nextConnectRenaimdTime = 0; + private int connectInterval = 300; + private String instanceId; + private Map visibleobject = new HashMap<>(); + + public MovableObjectModel(RealTime3DFragment fragment, Universe universe, String instanceId) { + this.fragment = fragment; + this.universe = universe; + this.setInstanceId(instanceId); + } + + + @Override + public void setInstanceId(String instanceId) { + this.instanceId = instanceId; + } + + + /** + * オブジェクトの状態更新 + * + * @param interval 前回の更新からの時間差 + */ + @Override + public void update(double interval) { + 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(); + objBody.scale(0.1); + } 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/Object.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/object/Object.java new file mode 100644 index 0000000..e111491 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/object/Object.java @@ -0,0 +1,153 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.object; + +import net.arnx.jsonic.JSONHint; + +import org.ntlab.radishforandroidstudio.cactusClient.models.Entity3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Model3D; +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.physics.AngularVelocity3D; +import org.ntlab.radishforandroidstudio.framework.physics.Velocity3D; +import org.ntlab.radishforandroidstudio.java3d.Box; +import org.ntlab.radishforandroidstudio.java3d.Primitive; + +//import framework.model3D.Position3D; +//import framework.physics.AngularVelocity3D; +//import framework.physics.Velocity3D; + +public class Object extends Entity3D { + private Position3D position; + private Velocity3D velocity; + private AngularVelocity3D angularVelocity; + private Quaternion3D angle; + private Attribute attribute; + private Model3D model; + private Primitive prim; + private Object3D object; + + @JSONHint(ignore = true) + public static final int UNIQUE_ID_LENGTH = 12; + + @SuppressWarnings("unused") + private Object() { + // JSONDecode時の呼び出し用 + } + + 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); + } + + public Position3D getPosition() { + return position; + } + + @JSONHint(ignore = true) + public Velocity3D getVelocity() { + return velocity; + } + + @JSONHint(ignore = true) + public AngularVelocity3D getAngularVelocity() { + return angularVelocity; + } + + public Quaternion3D getAngle() { + 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) { + this.velocity = velocity; + } + + public void setAngularVelocity(AngularVelocity3D angularVelocity) { + this.angularVelocity = angularVelocity; + } + + public void setAngle(Quaternion3D angle) { + this.angle = angle; +// ((Object3D) getPlaceable().getBody()).apply(angle, false); + } + + public void setAttribute(Attribute attribute) { + this.attribute = attribute; + } + + public void setModel(int modelID) { + this.model = ObjectModelManager.getInstance().getObject(modelID); + } + + public static class Attribute { + private boolean movable; // 可動 + private double cof; // 摩擦係数 + + @SuppressWarnings("unused") + private Attribute() { + + } + + public Attribute(boolean moveable, double cof) { + setMovable(moveable); + setCof(cof); + } + + public boolean isMovable() { + return movable; + } + + public double getCof() { + return cof; + } + + public void setMovable(boolean moveable) { + this.movable = moveable; + } + + public void setCof(double cof) { + this.cof = cof; + } + } + + @JSONHint(ignore = true) + public Primitive getPrim() { + return prim; + } + + public void setPrim(Primitive prim) { + this.prim = prim; + } + + @JSONHint(ignore = true) + public Object3D getObject() { + 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/object/ObjectModelManager.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/object/ObjectModelManager.java new file mode 100644 index 0000000..d732d18 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/object/ObjectModelManager.java @@ -0,0 +1,46 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.object; + +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; + +import java.io.IOException; +import java.util.HashMap; + +class ObjectModelManager { + + 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/models/player/Character.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/player/Character.java new file mode 100644 index 0000000..1e00909 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/player/Character.java @@ -0,0 +1,178 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.player; + + +import net.arnx.jsonic.JSONHint; + +import org.ntlab.radishforandroidstudio.cactusClient.models.Entity; +import org.ntlab.radishforandroidstudio.cactusClient.models.Item; +import org.ntlab.radishforandroidstudio.cactusClient.models.RandomStringGenerator; +import org.ntlab.radishforandroidstudio.cactusClient.models.instance.Area; +import org.ntlab.radishforandroidstudio.cactusClient.models.instance.Instance; +import org.ntlab.radishforandroidstudio.cactusClient.models.instance.Instances; +import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D; + +import java.util.HashMap; + +public class Character extends Entity { + private String accountURI; + private String areaURI; + private String name; + private Position3D position; + private Quaternion3D angle; + private int modelID; + + private HashMap itemMap = new HashMap<>(); + @JSONHint(ignore = true) + public static final int UNIQUE_ID_LENGTH = 12; + + private Character() { + // JSONDecode時の呼び出し用 + } + + public Character(String instanceId, String accountURI, String name, Position3D position, Quaternion3D angle, + int modelID) { + setAccountURI(accountURI); + setName(name); + setPosition(position); + setQuaternion3D(angle); + setModelID(modelID); + initAreaURI(instanceId); + } + + public String getAccountURI() { + return accountURI; + } + + public String getName() { + return name; + } + + public Position3D getPosition() { + return position; + } + + public Quaternion3D getQuaternion3D() { + return angle; + } + + public int getModelID() { + return modelID; + } + + public String getAreaURI() { + return areaURI; + } + + @JSONHint(ignore = true) + public Item getItem(String itemId) { + return itemMap.get(itemId); + } + + @JSONHint(ignore = true) + public HashMap getItems() { + return itemMap; + } + + public void setAccountURI(String accountURI) { + this.accountURI = accountURI; + } + + public void setName(String name) { + this.name = name; + } + + public void setPosition(Position3D position) { + this.position = position; + } + + public void setQuaternion3D(Quaternion3D angle) { + this.angle = angle; + } + + public void setModelID(int modelID) { + this.modelID = modelID; + } + + public void setAreaURI(String areaURI) { + this.areaURI = areaURI; + } + + public HashMap createItem(String name, int amount) { + Item item = new Item(name, amount); + if (!hasItem(item)) { + String id = RandomStringGenerator.generateUniqueString(Item.UNIQUE_ID_LENGTH, + RandomStringGenerator.ALPHA_NUMERIC, itemMap.keySet()); + itemMap.put(id, item); + HashMap returnedMap = new HashMap<>(); + returnedMap.put(id, item); + return returnedMap; + } + return null; + } + + public boolean hasItem(Item item) { + for (Item value : itemMap.values()) { + if (value.equals(item)) { + return true; + } + } + return false; + } + + public Item changeAmountOfItem(String itemId, int amountOfChange) { + Item item = itemMap.get(itemId).changeAmount(amountOfChange); + if (item.isEmpty()) { + destroyItem(itemId); + } + return item; + } + + private void initAreaURI(String instanceId) { + Instance instance = Instances.getInstance().getInstance(instanceId); + setAreaURI(findAreaURI(instance)); + } + + private String findAreaURI(Instance instance) { + // キャラクターのポジションを用いてどのエリア内にいるかを判定して当該エリアのURIに更新する + for (String areaId : instance.getAreas().keySet()) { + Area area = instance.getArea(areaId); + if (area.isSurroundingPosition(position)) { + int subStringEndIndex = areaURI.length() - Area.UNIQUE_ID_LENGTH; + StringBuilder newAreaURI = new StringBuilder(); + return newAreaURI.append(areaURI.substring(0, subStringEndIndex)).append(areaId).toString(); + } + } + return ""; + } + + public void update(Position3D position, Quaternion3D angle, String modelID, String areaURI) { + setPosition(position); + setQuaternion3D(angle); + if (modelID != null) { + setModelID(Integer.parseInt(modelID)); + } + if (areaURI != null) { + setAreaURI(areaURI); + } else { + updateAreaURI(); + } + } + + private void updateAreaURI() { + String[] areaURISplit = areaURI.split("/"); // ……/instances/{instanceId}/areas/{areaId} + int splitSize = areaURISplit.length; + String instanceId = areaURISplit[splitSize - 3]; + String previousAreaId = areaURISplit[splitSize - 1]; + Instance instance = Instances.getInstance().getInstance(instanceId); + Area previousArea = instance.getArea(previousAreaId); + if (!previousArea.isSurroundingPosition(position)) { + // キャラクターのポジションを用いてどのエリア内にいるかを判定して当該エリアのURIに更新する + setAreaURI(findAreaURI(instance)); + } + } + + public Item destroyItem(String itemId) { + return itemMap.remove(itemId); + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/player/EmoteState.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/player/EmoteState.java new file mode 100644 index 0000000..44d94d8 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/player/EmoteState.java @@ -0,0 +1,33 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.player; + + +/** + * エモートの情報を表すクラス
+ * 内部にエモートの種類を表す列挙型も定義 + * + * @author r-isitani + */ +public class EmoteState { + private EmoteType emoteType; + + private EmoteState() { + // JSONDecode時の呼び出し用 + } + + public EmoteState(EmoteType emoteType) { + setEmoteType(emoteType); + } + + public EmoteType getEmoteType() { + return emoteType; + } + + public void setEmoteType(EmoteType emoteType) { + this.emoteType = emoteType; + } + + public static enum EmoteType { + // 開始するエモートの種類の列挙 + DUMMY; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/player/OtherPlayerCharacter.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/player/OtherPlayerCharacter.java new file mode 100644 index 0000000..ff01d05 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/player/OtherPlayerCharacter.java @@ -0,0 +1,9 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.player; + +import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; + +public class OtherPlayerCharacter extends Object3D { + public OtherPlayerCharacter(Object3D body) { + super(body); + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/player/OtherPlayerCharactersModel.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/player/OtherPlayerCharactersModel.java new file mode 100644 index 0000000..51378d3 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/player/OtherPlayerCharactersModel.java @@ -0,0 +1,119 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.player; + +import net.arnx.jsonic.JSON; +import net.arnx.jsonic.TypeReference; + +import org.ntlab.radishforandroidstudio.cactusClient.connections.PlayersConnection; +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.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 OnlineModel { + private Universe universe; + private RealTime3DFragment fragment; + private PlayersConnection con; + private int nextConnectRenaimdTime = 0; + static final private int CONNECT_INTERVAL = 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; + } + + /** + * キャラクターの状態を更新する + * + * @param interval 前回の更新からの時間差 + * @author s.iwatani + */ + @Override + public void update(double interval) { + nextConnectRenaimdTime -= interval; + if (nextConnectRenaimdTime <= 0) { + nextConnectRenaimdTime = CONNECT_INTERVAL; + 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(); + + // 自分自身は無視する + 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(); + } catch (Exception e) { + e.printStackTrace(); + } + OtherPlayerCharacter chara = new OtherPlayerCharacter(pochaBody); + universe.place(entry.getKey(), 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/player/OwnPlayerModel.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/player/OwnPlayerModel.java new file mode 100644 index 0000000..666352d --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/player/OwnPlayerModel.java @@ -0,0 +1,226 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.player; + +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.cactusClient.models.bullet.OwnBulletsModel; +import org.ntlab.radishforandroidstudio.cactusClient.models.player.Player; +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/Player.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/player/Player.java new file mode 100644 index 0000000..b18c332 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/player/Player.java @@ -0,0 +1,188 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models.player; + + +import net.arnx.jsonic.JSONHint; + +import org.ntlab.radishforandroidstudio.cactusClient.models.instance.Area; +import org.ntlab.radishforandroidstudio.cactusClient.models.CameraState; +import org.ntlab.radishforandroidstudio.cactusClient.models.CharacterModelManager; +import org.ntlab.radishforandroidstudio.cactusClient.models.Entity3D; +import org.ntlab.radishforandroidstudio.cactusClient.models.instance.Instance; +import org.ntlab.radishforandroidstudio.cactusClient.models.instance.Instances; +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 java.io.Serializable; + +public class Player extends Entity3D implements Serializable { + private String instanceID; + private String characterID; + private String areaURI; + private Position3D position; + private Quaternion3D angle; + private CameraState cameraState; + private EmoteState emoteState; + @JSONHint(ignore = true) + public static final int UNIQUE_ID_LENGTH = 12; + + private Player() { + // JSONDecode時の呼び出し用 + } + + public Player(String instanceID, String characterID, CameraState cameraState, + EmoteState.EmoteType animationClassToStart) { + setInstanceID(instanceID); + setCharacterID(characterID); + setCameraState(cameraState); + setAnimationClassToStart(animationClassToStart); + Character character = getCharacter(characterID); + readCharacterData(character); + initPlaceable(character.getModelID()); + } + + private void initPlaceable(int modelID) { + // こんな感じで当該コンストラクタの最後でplaceableの注入を行う + Object3D body = CharacterModelManager.getInstance().getCharacterModel(modelID).createObject(); + setPlaceable(new OvergroundActor(body, null)); + // 所属するInstanceが持つUniverseにplaceableを配置する + String[] instanceURISplit = instanceID.split("/"); // ……/instances/{instanceId} + String instanceId = instanceURISplit[instanceURISplit.length - 1]; + Instances.getInstance().getInstance(instanceId).getUniverse().place(this.getPlaceable()); + } + + public String getInstanceID() { + return instanceID; + } + + public String getCharacterID() { + return characterID; + } + + public String getAreaURI() { + return areaURI; + } + + public Position3D getPosition() { + return position; + } + + public Quaternion3D getAngle() { + return angle; + } + + public CameraState getCameraState() { + return cameraState; + } + + public EmoteState getEmoteState() { + return emoteState; + } + + public void setInstanceID(String instanceID) { + this.instanceID = instanceID; + } + + public void setCharacterID(String characterID) { + this.characterID = characterID; + } + + public void setAreaURI(String areaURI) { + this.areaURI = areaURI; + } + + public void setPosition(Position3D position) { + this.position = position; + } + + public void setAngle(Quaternion3D angle) { + this.angle = angle; + } + + public void setCameraState(CameraState cameraState) { + this.cameraState = cameraState; + } + + public void setEmoteState(EmoteState emoteState) { + this.emoteState = emoteState; + } + + public void setAnimationClassToStart(EmoteState.EmoteType animationClassToStart) { + setEmoteState(new EmoteState(animationClassToStart)); + } + + public Player update(String characterURI, Position3D position, Quaternion3D angle, CameraState cameraState, + EmoteState.EmoteType animationClassToStart) { + setCharacterID(characterURI); + setPosition(position); + setAngle(angle); + setCameraState(cameraState); + updateEmoteType(animationClassToStart); + updateAreaURI(); + return this; + } + + private void updateAreaURI() { + String[] areaURISplit = areaURI.split("/"); // ……/instances/{instanceId}/areas/{areaId} + int splitSize = areaURISplit.length; + String instanceId = areaURISplit[splitSize - 3]; + String previousAreaId = areaURISplit[splitSize - 1]; + Instance instance = Instances.getInstance().getInstance(instanceId); + Area previousArea = instance.getArea(previousAreaId); + if (!previousArea.isSurroundingPosition(position)) { + // キャラクターのポジションを用いてどのエリア内にいるかを判定して当該エリアのURIに更新する + setAreaURI(findAreaURI(instance)); + } + } + + private String findAreaURI(Instance instance) { + // キャラクターのポジションを用いてどのエリア内にいるかを判定して当該エリアのURIに更新する + for (String areaId : instance.getAreas().keySet()) { + Area area = instance.getArea(areaId); + if (area.isSurroundingPosition(position)) { + int subStringEndIndex = areaURI.length() - Area.UNIQUE_ID_LENGTH; // …/{instanceId}/areas/ まで + return areaURI.substring(0, subStringEndIndex) + areaId; + } + } + return ""; + } + + private void updateEmoteType(EmoteState.EmoteType animationClassToStart) { + emoteState.setEmoteType(animationClassToStart); + } + + public void changeCharacter(String characterURI) { + writeCharacterData(this.characterID); + readCharacterData(characterURI); + } + + public void destroy() { + writeCharacterData(characterID); + } + + private Character getCharacter(String characterURI) { + String[] characterURISplit = characterURI.split("/"); // ……/instances/{instanceId}/characters/{characterId} + int splitSize = characterURISplit.length; + String characterId = characterURISplit[splitSize - 1]; + String instanceId = characterURISplit[splitSize - 3]; + return Instances.getInstance().getInstance(instanceId).getCharacter(characterId); + } + + private void readCharacterData(Character character) { + setPosition(character.getPosition()); + setAngle(character.getQuaternion3D()); + setAreaURI(character.getAreaURI()); + setCharacterID(characterID); + } + + private void readCharacterData(String characterURI) { + Character character = getCharacter(characterURI); + readCharacterData(character); + } + + private void writeCharacterData(String characterURI) { + Character character = getCharacter(characterURI); + character.update(position, angle, null, areaURI); // model(第3引数)の更新は出来ない + } +} \ No newline at end of file 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 899525d..e1aaa8b 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 @@ -17,9 +17,9 @@ import org.ntlab.radishforandroidstudio.cactusClient.Cactus; import org.ntlab.radishforandroidstudio.cactusClient.connections.CharactersFragmentConnection; import org.ntlab.radishforandroidstudio.cactusClient.connections.PlayersConnection; -import org.ntlab.radishforandroidstudio.cactusClient.models.Account; -import org.ntlab.radishforandroidstudio.cactusClient.models.Character; -import org.ntlab.radishforandroidstudio.cactusClient.models.Player; +import org.ntlab.radishforandroidstudio.cactusClient.models.account.Account; +import org.ntlab.radishforandroidstudio.cactusClient.models.player.Character; +import org.ntlab.radishforandroidstudio.cactusClient.models.player.Player; import org.ntlab.radishforandroidstudio.framework.network.CallBack; import java.util.ArrayList; @@ -114,7 +114,7 @@ PlayerFragment fragment = new PlayerFragment(); fragment.setArguments(bundle); replaceFragment(R.id.fragment_place, fragment,true); - characterIds.clear(); + characterIds.clear();//コミットの前か後か後で確かめる } }); con.doPost(); diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/InstancesFragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/InstancesFragment.java index e9a2e43..5c40aad 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/InstancesFragment.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/InstancesFragment.java @@ -14,7 +14,7 @@ import org.ntlab.radishforandroidstudio.R; import org.ntlab.radishforandroidstudio.cactusClient.connections.InstancesFragmentConnection; -import org.ntlab.radishforandroidstudio.cactusClient.models.Instance; +import org.ntlab.radishforandroidstudio.cactusClient.models.instance.Instance; import org.ntlab.radishforandroidstudio.framework.network.CallBack; import java.util.ArrayList; @@ -27,8 +27,7 @@ ListView listView; @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.instances_fragment, container, false); return view; } @@ -40,13 +39,10 @@ connection.setCallBack(new CallBack() { @Override public void onResponse(String response) { - //通信した時の処理を書くのだよ - HashMap mapInstances = JSON.decode(response, new TypeReference>() { - }); + //通信した時の処理 + HashMap mapInstances = JSON.decode(response, new TypeReference>() {}); System.out.println(response); -// for(Map.Entry entry : mapInstances.entrySet()){ -// listInstances.add(entry); -// } + listInstances = new ArrayList<>(mapInstances.entrySet()); ArrayList listNames = new ArrayList<>(); for (Map.Entry entry : listInstances) { @@ -72,6 +68,7 @@ Bundle bundle = new Bundle(); bundle.putSerializable("instanceId", s[s.length - 1]); fragment.setArguments(bundle); + //画面きりかえ replaceFragment(R.id.fragment_place, fragment, true); } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/LoginFragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/LoginFragment.java index df73261..e8c66ce 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/LoginFragment.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/LoginFragment.java @@ -14,7 +14,7 @@ import org.ntlab.radishforandroidstudio.R; import org.ntlab.radishforandroidstudio.cactusClient.Cactus; import org.ntlab.radishforandroidstudio.cactusClient.connections.LoginFragmentConnection; -import org.ntlab.radishforandroidstudio.cactusClient.models.Account; +import org.ntlab.radishforandroidstudio.cactusClient.models.account.Account; import org.ntlab.radishforandroidstudio.cactusClient.models.URIAddressedAccount; import org.ntlab.radishforandroidstudio.framework.network.CallBack; @@ -65,6 +65,7 @@ return; } + //もらう connection = new LoginFragmentConnection(); connection.setCallBack(new CallBack() { @Override 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 2204634..7f5c156 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 @@ -12,13 +12,13 @@ import android.widget.Button; import org.ntlab.radishforandroidstudio.R; -import org.ntlab.radishforandroidstudio.cactusClient.models.BulletsModel; +import org.ntlab.radishforandroidstudio.cactusClient.models.bullet.BulletsModel; import org.ntlab.radishforandroidstudio.cactusClient.models.CactusRepository; -import org.ntlab.radishforandroidstudio.cactusClient.models.MovableObjectModel; -import org.ntlab.radishforandroidstudio.cactusClient.models.OtherPlayerCharactersModel; -import org.ntlab.radishforandroidstudio.cactusClient.models.OwnBulletsModel; -import org.ntlab.radishforandroidstudio.cactusClient.models.OwnPlayerModel; -import org.ntlab.radishforandroidstudio.cactusClient.models.Player; +import org.ntlab.radishforandroidstudio.cactusClient.models.object.MovableObjectModel; +import org.ntlab.radishforandroidstudio.cactusClient.models.player.OtherPlayerCharactersModel; +import org.ntlab.radishforandroidstudio.cactusClient.models.bullet.OwnBulletsModel; +import org.ntlab.radishforandroidstudio.cactusClient.models.player.OwnPlayerModel; +import org.ntlab.radishforandroidstudio.cactusClient.models.player.Player; import org.ntlab.radishforandroidstudio.framework.RWT.RWTPad; import org.ntlab.radishforandroidstudio.framework.RWT.RWTShotButton; import org.ntlab.radishforandroidstudio.framework.RWT.RWTUIFragment; diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/PlayerFragmentLight.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/PlayerFragmentLight.java index 46f3081..3bce486 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/PlayerFragmentLight.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/PlayerFragmentLight.java @@ -8,7 +8,7 @@ import android.view.ViewGroup; import org.ntlab.radishforandroidstudio.R; -import org.ntlab.radishforandroidstudio.cactusClient.models.Player; +import org.ntlab.radishforandroidstudio.cactusClient.models.player.Player; import org.ntlab.radishforandroidstudio.framework.RWT.RWTPad; import org.ntlab.radishforandroidstudio.framework.RWT.RWTUIFragment; import org.ntlab.radishforandroidstudio.framework.event.PadEvent; diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/SignUpFragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/SignUpFragment.java index ddd2fae..6c8ffb2 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/SignUpFragment.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/SignUpFragment.java @@ -67,16 +67,13 @@ connection.setCallBack(new CallBack() { @Override public void onResponse(String response) { - //通信した時の処理を書くのだよ -// URIAddressedAccount ac = JSON.decode(response,URIAddressedAccount.class); -// System.out.println("JSON.decode(response, URIAddressedAccount.class);\viewPoint"+ac.getUri()); - URIAddressedAccount ac2 = JSON.decode(response, new TypeReference() {}); - System.out.println("JSON.decode(response, new TypeReference(){});\n" + ac2.getUri()); + //通信した時の処理を書く(登録:サインアップ) + URIAddressedAccount ac = JSON.decode(response, new TypeReference() {}); + System.out.println("JSON.decode(response, new TypeReference(){});\n" + ac.getUri()); System.out.println(response); Toast.makeText(getActivity(), "アカウントを作成しました。", Toast.LENGTH_SHORT).show(); } }); - connection.addFormParam("userID", inputUserID.getText().toString()); connection.addFormParam("userPass", inputPassword.getText().toString()); connection.addFormParam("userName", inputUserName.getText().toString()); 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 5f488c3..6181343 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 @@ -26,7 +26,6 @@ @Override public void onClick(View view) { replaceFragment(R.id.fragment_place, new LoginFragment(),false); - } }); } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/BulletShotEvent.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/BulletShotEvent.java index 26c14d3..898802f 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/BulletShotEvent.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/BulletShotEvent.java @@ -2,7 +2,7 @@ import android.view.MotionEvent; -import org.ntlab.radishforandroidstudio.cactusClient.models.MyBullet; +import org.ntlab.radishforandroidstudio.cactusClient.models.bullet.MyBullet; public class BulletShotEvent extends MyEvent { private MyBullet b;