diff --git a/src/main/java/cactusServer/entities/MovableObject.java b/src/main/java/cactusServer/entities/MovableObject.java index 4d6d1a2..6d45442 100644 --- a/src/main/java/cactusServer/entities/MovableObject.java +++ b/src/main/java/cactusServer/entities/MovableObject.java @@ -1,10 +1,12 @@ package cactusServer.entities; +import org.ntlab.radishforandroidstudio.framework.gameMain.OvergroundActor; 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.Solid3D; import org.ntlab.radishforandroidstudio.framework.physics.Velocity3D; import org.ntlab.radishforandroidstudio.java3d.Box; import org.ntlab.radishforandroidstudio.java3d.Primitive; @@ -36,8 +38,8 @@ public MovableObject(Position3D position, Velocity3D velocity, AngularVelocity3D angularVelocity, Quaternion3D angle, Attribute attribute, int modelID) { setPrim(new Box()); - setObject(new Object3D("", prim)); - setPlaceable(object); + setObject(new Solid3D(new Object3D("", prim))); + setPlaceable(new OvergroundActor((Solid3D) object, null)); setPosition(position); setVelocity(velocity); setAngularVelocity(angularVelocity); @@ -72,7 +74,8 @@ public void setPosition(Position3D position) { this.position = position; - if(placeable != null)((Object3D)(getPlaceable().getBody())).setPosition(position); + if (placeable != null) + ((Object3D) (getPlaceable().getBody())).setPosition(position); } public void setVelocity(Velocity3D velocity) { @@ -85,7 +88,8 @@ public void setAngle(Quaternion3D angle) { this.angle = angle; - if(placeable != null)((Object3D) getPlaceable().getBody()).apply(angle, false); + if (placeable != null) + ((Object3D) getPlaceable().getBody()).apply(angle, false); } public void setAttribute(Attribute attribute) { diff --git a/src/main/java/cactusServer/entities/Player.java b/src/main/java/cactusServer/entities/Player.java index 2eb5b84..171b79c 100644 --- a/src/main/java/cactusServer/entities/Player.java +++ b/src/main/java/cactusServer/entities/Player.java @@ -1,36 +1,34 @@ package cactusServer.entities; - + 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 org.ntlab.radishforandroidstudio.java3d.Box; import org.ntlab.radishforandroidstudio.java3d.Primitive; - + import cactusServer.models.CharacterModelManager; import cactusServer.models.Instances; import net.arnx.jsonic.JSONHint; - + public class Player extends Entity3D { private String instanceID; private String characterID; private String areaURI; - private Object3D object; private Position3D position; private Quaternion3D angle; private CameraState cameraState; private EmoteState emoteState; - private Primitive prim; private long lastUpdateTime = System.nanoTime(); @JSONHint(ignore = true) public static final int UNIQUE_ID_LENGTH = 12; @JSONHint(ignore = true) public static final long STOP_TIME_LIMIT = (long) (30 * 1e+9); - + private Player() { // JSONDecode���̌Ăяo���p } - + public Player(String instanceID, String characterID, CameraState cameraState, EmoteState.EmoteType animationClassToStart) { setInstanceID(instanceID); @@ -49,51 +47,50 @@ initPlaceable(character.getModelID()); readCharacterData(character); } - + private void initPlaceable(int modelID) { // ����Ȋ����œ��Y�R���X�g���N�^�̍Ō��placeable�̒������s�� Object3D body = CharacterModelManager.getInstance().getCharacterModel(modelID).createObject(); setPlaceable(new OvergroundActor(body, null)); - setObject(body); } - + 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; } - + @JSONHint(ignore = true) public long getLastUpdateTime() { return lastUpdateTime; } - + public void setInstanceID(String instanceID) { this.instanceID = instanceID; } - + public void setCharacterID(String characterID) { if (characterID.startsWith("\"")) { characterID = characterID.substring(1); @@ -103,42 +100,42 @@ } this.characterID = characterID; } - + public void setAreaURI(String areaURI) { this.areaURI = areaURI; } - + 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); } } - + 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)); } - + @JSONHint(ignore = true) public void setLastUpdateTime(long lastUpdateTime) { this.lastUpdateTime = lastUpdateTime; } - + public Player update(String characterID, Position3D position, Quaternion3D angle, CameraState cameraState, EmoteState.EmoteType animationClassToStart, long lastUpdateTime) { setPosition(position); @@ -152,7 +149,7 @@ setLastUpdateTime(lastUpdateTime); return this; } - + private void updateAreaURI() { String[] areaURISplit = areaURI.split("/"); // �c�c/instances/{instanceId}/areas/{areaId} int splitSize = areaURISplit.length; @@ -165,7 +162,7 @@ setAreaURI(findAreaURI(instance)); } } - + private String findAreaURI(Instance instance) { // �L�����N�^�[�̃|�W�V������p���Ăǂ̃G���A���ɂ��邩�𔻒肵�ē��Y�G���A��URI�ɍX�V���� for (String areaId : instance.getAreas().keySet()) { @@ -177,53 +174,38 @@ } return ""; } - + private void updateEmoteType(EmoteState.EmoteType animationClassToStart) { emoteState.setEmoteType(animationClassToStart); } - + public void changeCharacter(String characterID) { - writeCharacterData(); + destroy(); setCharacterID(characterID); Character character = getCharacter(); initPlaceable(character.getModelID()); readCharacterData(character); } - + public void destroy() { writeCharacterData(); Instance instance = Instances.getInstance().getInstance(instanceID); instance.getUniverse().displace(this.getPlaceable()); } - + private Character getCharacter() { return Instances.getInstance().getInstance(instanceID).getCharacter(characterID); } - + private void readCharacterData(Character character) { setPosition(character.getPosition()); setAngle(character.getAngle()); setAreaURI(character.getAreaURI()); } - - // private void readCharacterData() { - // Character character = getCharacter(); - // readCharacterData(character); - // } - + private void writeCharacterData() { Character character = getCharacter(); // if (character == null) return; character.update(position, angle, areaURI); } - - @JSONHint(ignore = true) - public Object3D getObject() { - return object; - } - - public void setObject(Object3D object) { - this.object = object; - } - -} \ No newline at end of file +} diff --git a/src/main/java/cactusServer/models/CollisionManager.java b/src/main/java/cactusServer/models/CollisionManager.java index 1904551..d0a5485 100644 --- a/src/main/java/cactusServer/models/CollisionManager.java +++ b/src/main/java/cactusServer/models/CollisionManager.java @@ -67,8 +67,8 @@ public void collisionMove(MovableObject object, Player player) { CollisionResult result; result = PhysicsUtility.checkCollision((Object3D)player.getPlaceable().getBody(), null, object.getObject(), null); - if (result != null) { - System.out.println("�I�u�W�F�N�g�ƃv���C���[���Փ�"); + if (result != null) { + System.out.println("�I�u�W�F�N�g�ƃv���C���[���Փ�"); objMove(result, object, false); } } @@ -98,7 +98,7 @@ } private void collisionBulletsAndOthers(String instanceId, Instance instance) { -// collisionBulletAndOtherBullets(instance); + collisionBulletAndOtherBullets(instance); for (Map.Entry> playersBulletsEntry : instance.getBullets().entrySet()) { String bulletOwnerPlayerId = playersBulletsEntry.getKey(); Map bulletMap = playersBulletsEntry.getValue(); diff --git a/src/main/java/cactusServer/utils/App.java b/src/main/java/cactusServer/utils/App.java index ed8c80e..887f9d9 100644 --- a/src/main/java/cactusServer/utils/App.java +++ b/src/main/java/cactusServer/utils/App.java @@ -75,8 +75,8 @@ Instances.getInstance().getInstances().put("test2", new Instance("test2", 1)); // �_�~�[�L�����N�^�[4�� String accountUri = "/CactusServer/rest/accounts/" - + Accounts.getInstance().getAccountByID("test").getUniqueID(); - Character chara1 = new Character("test1", accountUri, "chara1", new Position3D(300, 400, 500), new Quaternion3D(), 0); + + Accounts.getInstance().getAccountByID("test").getUniqueID(); + Character chara1 = new Character("test1", accountUri, "chara1", new Position3D(300, 400, 500), new Quaternion3D(), 0); Character chara2 = new Character("test2", accountUri, "chara2", new Position3D(), new Quaternion3D(), 0); Instances.getInstance().getInstance("test1").getCharacters().put("chara1", chara1); Instances.getInstance().getInstance("test1").getCharacters().put("chara2", chara2); @@ -147,6 +147,7 @@ } } // System.out.println(); + } private void removeDeadBullets() { @@ -166,6 +167,6 @@ } } } - } + } } } \ No newline at end of file diff --git a/src/main/java/org/ntlab/radishforandroidstudio/framework/physics/BoundingBoxVisitor.java b/src/main/java/org/ntlab/radishforandroidstudio/framework/physics/BoundingBoxVisitor.java index b1e6038..dcdd32a 100644 --- a/src/main/java/org/ntlab/radishforandroidstudio/framework/physics/BoundingBoxVisitor.java +++ b/src/main/java/org/ntlab/radishforandroidstudio/framework/physics/BoundingBoxVisitor.java @@ -9,9 +9,9 @@ public class BoundingBoxVisitor extends ObjectVisitor { - private ArrayList obbList = new ArrayList(); // 全構成要素のOBBのリスト - private ArrayList bsStack = new ArrayList(); // オブジェクトの階層毎のBoundingSphereのスタック - private String partName = null; // 部品を指定する場合に使う + private ArrayList obbList = new ArrayList(); // 蜈ィ讒区�占ヲ∫エ�縺ョOBB縺ョ繝ェ繧ケ繝� + private ArrayList bsStack = new ArrayList(); // 繧ェ繝悶ず繧ァ繧ッ繝医�ョ髫主ア、豈弱�ョBoundingSphere縺ョ繧ケ繧ソ繝�繧ッ + private String partName = null; // 驛ィ蜩√r謖�螳壹☆繧句�エ蜷医↓菴ソ縺� private boolean inPart = false; public BoundingBoxVisitor() { @@ -28,7 +28,7 @@ inPart = true; } if (obj.hasChildren() && obj.bs == null) { - // 子供がいる場合、下の階層用にnullをpushする + // 蟄蝉セ帙′縺�繧句�エ蜷医�∽ク九�ョ髫主ア、逕ィ縺ォnull繧恥ush縺吶k bsStack.add(null); } } @@ -36,7 +36,7 @@ public void postVisit(Object3D obj) { int pattern = 2; if (!obj.hasChildren()) { - // 葉の場合 + // 闡峨�ョ蝣エ蜷� OBB obb = obj.getOBB(pattern); if (obb != null) { if (obj.bs == null) { @@ -47,37 +47,41 @@ BoundingSphere bs = (BoundingSphere)obj.bs.clone(); for (int i = stackList.size() - 1; i >= 0; i--) { obb.transform(stackList.get(i)); - bs.transform(stackList.get(i)); + if (i >= stackList.size() - 4) bs.transform(stackList.get(i)); } if (partName == null || partName.length() == 0 || inPart) { - obbList.add(obb); // Transform3Dを適応させたBoundsをboundsListに追加 + obbList.add(obb); // Transform3D繧帝←蠢懊&縺帙◆Bounds繧鍛oundsList縺ォ霑ス蜉� int stackTop = bsStack.size() - 1; if (bs != null && stackTop >= 0) { if (bsStack.get(stackTop) == null) { - // その階層の最初のオブジェクトの場合、nullを置き換え + // 縺昴�ョ髫主ア、縺ョ譛�蛻昴�ョ繧ェ繝悶ず繧ァ繧ッ繝医�ョ蝣エ蜷医�]ull繧堤スョ縺肴鋤縺� bsStack.set(stackTop, bs); } else { - // その階層の2番目以降のオブジェクトの場合、結合 + // 縺昴�ョ髫主ア、縺ョ2逡ェ逶ョ莉・髯阪�ョ繧ェ繝悶ず繧ァ繧ッ繝医�ョ蝣エ蜷医�∫オ仙粋 bsStack.get(stackTop).combine(bs); } } } } } else { - // 子供がいる場合 + // 蟄蝉セ帙′縺�繧句�エ蜷� int stackTop = bsStack.size() - 1; if (obj.bs == null) { - // 下の階層の結合結果をpopして利用する + // 荳九�ョ髫主ア、縺ョ邨仙粋邨先棡繧恥op縺励※蛻ゥ逕ィ縺吶k obj.bs = bsStack.remove(stackTop); stackTop--; } if (obj.bs != null && stackTop >= 0) { + BoundingSphere bs = (BoundingSphere)obj.bs.clone(); + for (int i = stackList.size() - 1; i >= stackList.size() - 4; i--) { + bs.transform(stackList.get(i)); + } if (bsStack.get(stackTop) == null) { - // その階層の最初のオブジェクトの場合、nullを置き換え - bsStack.set(stackTop, obj.bs); + // 縺昴�ョ髫主ア、縺ョ譛�蛻昴�ョ繧ェ繝悶ず繧ァ繧ッ繝医�ョ蝣エ蜷医�]ull繧堤スョ縺肴鋤縺� + bsStack.set(stackTop, bs); } else { - // その階層の2番目以降のオブジェクトの場合、結合 - bsStack.get(stackTop).combine(obj.bs); + // 縺昴�ョ髫主ア、縺ョ2逡ェ逶ョ莉・髯阪�ョ繧ェ繝悶ず繧ァ繧ッ繝医�ョ蝣エ蜷医�∫オ仙粋 + bsStack.get(stackTop).combine(bs); } } }