diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index d8b7bba..68fcedc 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -1,5 +1,7 @@ eclipse.preferences.version=1 +encoding//src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/Actor.java=UTF-8 encoding//src/main/java/org/ntlab/radishforandroidstudio/framework/model3D/ModelFactory.java=UTF-8 +encoding//src/main/java/org/ntlab/radishforandroidstudio/framework/model3D/Position3D.java=UTF-8 encoding//src/main/java/org/ntlab/radishforandroidstudio/framework/model3D/Quaternion3D.java=UTF-8 encoding//src/main/java/org/ntlab/radishforandroidstudio/framework/model3D/Universe.java=UTF-8 encoding//src/main/java/org/ntlab/radishforandroidstudio/framework/physics/PhysicsUtility.java=UTF-8 diff --git a/src/main/java/cactusServer/models/CollisionManager.java b/src/main/java/cactusServer/models/CollisionManager.java index 8bffff6..297ab44 100644 --- a/src/main/java/cactusServer/models/CollisionManager.java +++ b/src/main/java/cactusServer/models/CollisionManager.java @@ -77,6 +77,7 @@ null); if (result != null) { System.out.println("�I�u�W�F�N�g�ƃv���C���[���Փ�"); + System.out.println("CollisionManager#objMove1"); objMove(result, object, false); } } @@ -89,8 +90,10 @@ Vector3d vec1 = object1.getVelocity().getVector3d(); Vector3d vec2 = object2.getVelocity().getVector3d(); if (vec1.length() > vec2.length()) { + System.out.println("CollisionManager#objMove2"); objMove(result, object1, true); } else { + System.out.println("CollisionManager#objMove2"); objMove(result, object2, true); } } @@ -113,6 +116,8 @@ result.normal.negate(); vec.add(result.normal); object.setPosition(new Position3D(vec)); + System.out.println("CollisionManager#objMove3:" + this + ":" + new Position3D(vec)); + } private void objMove(CollisionResult result, Player player, boolean negate) { diff --git a/src/main/java/cactusServer/utils/App.java b/src/main/java/cactusServer/utils/App.java index 8231180..70e8c2e 100644 --- a/src/main/java/cactusServer/utils/App.java +++ b/src/main/java/cactusServer/utils/App.java @@ -90,6 +90,7 @@ accountUri = "/CactusServer/rest/accounts/" + Accounts.getInstance().getAccountByID("test2").getUniqueID(); chara1 = new Character("test2", accountUri, "chara3", new Position3D(), new Quaternion3D(), 0); Instances.getInstance().getInstance("test2").getCharacters().put("chara3", chara1); + /* // �_�~�[�v���C���[2�� chara1.setPosition(new Position3D(34.5, 23.4, 19)); CameraState cameraState = new CameraState(1.24, new Quaternion3D(), 2.38, 3); @@ -99,12 +100,11 @@ Instances.getInstance().getPlayers().put("player2", player2); Player player3 = new Player("test1","chara1",null,null); Instances.getInstance().getPlayers().put("player3", player3); + */ // �_�~�[�I�u�W�F�N�g - Instances.getInstance().getInstance("test1").createObject(new Position3D(10, 10, 10), new Velocity3D(), - new AngularVelocity3D(), new Quaternion3D(), new Attribute(true, 1), 0); Instances.getInstance().getInstance("test1").createObject(new Position3D(0, 0, 0), new Velocity3D(), new AngularVelocity3D(), new Quaternion3D(), new Attribute(true, 1), 0); - + /* // �_�~�[�o���b�g Instances.getInstance().getInstance("test1").createBullet("player1", "testBulletId1", new Position3D(50, 50, 50), new Quaternion3D()); @@ -118,7 +118,8 @@ new Position3D(300, 400, 500), new Quaternion3D()); Instances.getInstance().getInstance("test1").createBullet("player1", "testBulletId6", new Position3D(300, 400, 500), new Quaternion3D()); - + System.out.println("obj"); + */ // // �m�F�p // String player1Encode = JSON.encode(player1, true); // String player2Encode = JSON.encode(player2, true); diff --git a/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/Actor.java b/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/Actor.java index af0c4ab..b29b618 100644 --- a/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/Actor.java +++ b/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/Actor.java @@ -21,14 +21,14 @@ /** - * ゲーム内の登場物全般 - * @author 新田直也 + * 繧イ繝シ繝�蜀�縺ョ逋サ蝣エ迚ゥ蜈ィ闊ャ + * @author 譁ー逕ー逶エ荵� * */ public abstract class Actor extends Animatable implements Movable { protected Vector3d direction = new Vector3d(1.0, 0.0, 0.0); protected Mode mode; - // 以下省メモリ化のため予めインスタンスを生成 + // 莉・荳狗怐繝。繝「繝ェ蛹悶�ョ縺溘a莠医a繧、繝ウ繧ケ繧ソ繝ウ繧ケ繧堤函謌� protected Mode modeFreeFall = new ModeFreeFall(); protected Mode modeOnGround = new ModeOnGround(); @@ -48,82 +48,83 @@ // } /** - * 単位時間ごとの動作(衝突判定処理は行わない) - * @param interval --- 前回呼び出されたときからの経過時間(ミリ秒単位) + * 蜊倅ス肴凾髢薙#縺ィ縺ョ蜍穂ス懶シ郁。晉ェ∝愛螳壼�ヲ逅�縺ッ陦後o縺ェ縺�シ� + * @param interval --- 蜑榊屓蜻シ縺ウ蜃コ縺輔l縺溘→縺阪°繧峨�ョ邨碁℃譎る俣�シ医Α繝ェ遘貞腰菴搾シ� */ public void motion(long interval){ - // 1. 位置を動かす + // 1. 菴咲スョ繧貞虚縺九☆ ((Solid3D)body).move(interval, getGravity(), getGravityCenter()); super.motion(interval); } /** - * 単位時間ごとの動作(衝突判定処理も行う) - * @param interval --- 前回呼び出されたときからの経過時間(ミリ秒単位) - * @param ground --- 地面(構造物) + * 蜊倅ス肴凾髢薙#縺ィ縺ョ蜍穂ス懶シ郁。晉ェ∝愛螳壼�ヲ逅�繧り。後≧�シ� + * @param interval --- 蜑榊屓蜻シ縺ウ蜃コ縺輔l縺溘→縺阪°繧峨�ョ邨碁℃譎る俣�シ医Α繝ェ遘貞腰菴搾シ� + * @param ground --- 蝨ー髱「�シ域ァ矩��迚ゥ�シ� */ public void motion(long interval, Ground ground) { - // 1. 位置を動かす + // 1. 菴咲スョ繧貞虚縺九☆ ((Solid3D)body).move(interval, getGravity(), getGravityCenter()); + System.out.println("Actor#motion:" + this + ":" + body.getPosition3D()); if (animation != null) { - // 2. アニメーションを実行 + // 2. 繧「繝九Γ繝シ繧キ繝ァ繝ウ繧貞ョ溯。� if (animation.progress(interval) == false) { onEndAnimation(); } - // 3. 姿勢を変える + // 3. 蟋ソ蜍「繧貞、峨∴繧� body.apply(animation.getPose(), false); } - // 4. 衝突判定 + // 4. 陦晉ェ∝愛螳� CollisionResult cr = PhysicsUtility.doesIntersect((Solid3D)body, ground); - // 5. 衝突応答 + // 5. 陦晉ェ∝ソ懃ュ� if (cr != null) { - // 構造物にぶつかった、または接触している時 + // 讒矩��迚ゥ縺ォ縺カ縺、縺九▲縺溘�√∪縺溘�ッ謗・隗ヲ縺励※縺�繧区凾 if (cr.normal.dot(PhysicsUtility.vertical) > GeometryUtility.TOLERANCE) { - // 上向きの面(=地面)にぶつかった、または接触している時 + // 荳雁髄縺阪�ョ髱「�シ茨シ晏慍髱「�シ峨↓縺カ縺、縺九▲縺溘�√∪縺溘�ッ謗・隗ヲ縺励※縺�繧区凾 if (cr.length <= GeometryUtility.TOLERANCE) { - // 地面に乗っている + // 蝨ー髱「縺ォ荵励▲縺ヲ縺�繧� if (!(mode instanceof ModeOnGround)) { - // 落ちてきて丁度乗った + // 關ス縺。縺ヲ縺阪※荳∝コヲ荵励▲縺� mode = modeOnGround; ((ModeOnGround)mode).setNormal(cr.normal); onEndFall(); } } else { - // 地面にめり込んだ - // 5.1. 押し戻す + // 蝨ー髱「縺ォ繧√j霎シ繧薙□ + // 5.1. 謚シ縺玲綾縺� onIntersect(cr, interval); if (!(mode instanceof ModeOnGround)) { - // 落ちてきてめり込んだ - // 6. 地面モードにする + // 關ス縺。縺ヲ縺阪※繧√j霎シ繧薙□ + // 6. 蝨ー髱「繝「繝シ繝峨↓縺吶k mode = modeOnGround; ((ModeOnGround)mode).setNormal(cr.normal); onEndFall(); } else { - // 歩いている途中で、アニメーションの関係で一瞬だけめり込んだ - // または、歩いている途中で斜面に差し掛かった + // 豁ゥ縺�縺ヲ縺�繧矩�比クュ縺ァ縲√い繝九Γ繝シ繧キ繝ァ繝ウ縺ョ髢「菫ゅ〒荳�迸ャ縺�縺代a繧願セシ繧薙□ + // 縺セ縺溘�ッ縲∵ュゥ縺�縺ヲ縺�繧矩�比クュ縺ァ譁憺擇縺ォ蟾ョ縺玲寺縺九▲縺� ((ModeOnGround)mode).setNormal(cr.normal); } } } else if (cr.normal.dot(PhysicsUtility.vertical) >= -GeometryUtility.TOLERANCE) { - // 垂直壁にめり込んだ - // 5.1. 押し戻す + // 蝙ら峩螢√↓繧√j霎シ繧薙□ + // 5.1. 謚シ縺玲綾縺� onIntersect(cr, interval); } else { - // 下からぶつかった、または接触した(頭をぶつけた) + // 荳九°繧峨�カ縺、縺九▲縺溘�√∪縺溘�ッ謗・隗ヲ縺励◆(鬆ュ繧偵�カ縺、縺代◆) if (cr.length > GeometryUtility.TOLERANCE) { - // 5.1. 押し戻す + // 5.1. 謚シ縺玲綾縺� onIntersect(cr, interval); } } cr = null; } else { - // 地面とぶつかっても接触してもいない時 - // 6. 落下モードにする + // 蝨ー髱「縺ィ縺カ縺、縺九▲縺ヲ繧よ磁隗ヲ縺励※繧ゅ>縺ェ縺�譎� + // 6. 關ス荳九Δ繝シ繝峨↓縺吶k mode = modeFreeFall; } } @@ -134,66 +135,66 @@ forces.add(getGravity()); appPoints.add(getGravityCenter()); - // 1. 位置を動かす + // 1. 菴咲スョ繧貞虚縺九☆ ((Solid3D)body).move(interval, forces, appPoints); if (animation != null) { - // 2. アニメーションを実行 + // 2. 繧「繝九Γ繝シ繧キ繝ァ繝ウ繧貞ョ溯。� if (animation.progress(interval) == false) { onEndAnimation(); } - // 3. 姿勢を変える + // 3. 蟋ソ蜍「繧貞、峨∴繧� body.apply(animation.getPose(), false); } - // 4. 衝突判定 + // 4. 陦晉ェ∝愛螳� CollisionResult cr = PhysicsUtility.doesIntersect((Solid3D)body, ground); - // 5. 衝突応答 + // 5. 陦晉ェ∝ソ懃ュ� if (cr != null) { - // 構造物にぶつかった、または接触している時 + // 讒矩��迚ゥ縺ォ縺カ縺、縺九▲縺溘�√∪縺溘�ッ謗・隗ヲ縺励※縺�繧区凾 if (cr.normal.dot(PhysicsUtility.vertical) > GeometryUtility.TOLERANCE) { - // 上向きの面(=地面)にぶつかった、または接触している時 + // 荳雁髄縺阪�ョ髱「�シ茨シ晏慍髱「�シ峨↓縺カ縺、縺九▲縺溘�√∪縺溘�ッ謗・隗ヲ縺励※縺�繧区凾 if (cr.length <= GeometryUtility.TOLERANCE) { - // 地面に乗っている + // 蝨ー髱「縺ォ荵励▲縺ヲ縺�繧� if (!(mode instanceof ModeOnGround)) { - // 落ちてきて丁度乗った + // 關ス縺。縺ヲ縺阪※荳∝コヲ荵励▲縺� mode = modeOnGround; ((ModeOnGround)mode).setNormal(cr.normal); onEndFall(); } } else { - // 地面にめり込んだ - // 5.1. 押し戻す + // 蝨ー髱「縺ォ繧√j霎シ繧薙□ + // 5.1. 謚シ縺玲綾縺� onIntersect(cr, interval); if (!(mode instanceof ModeOnGround)) { - // 落ちてきてめり込んだ - // 6. 地面モードにする + // 關ス縺。縺ヲ縺阪※繧√j霎シ繧薙□ + // 6. 蝨ー髱「繝「繝シ繝峨↓縺吶k mode = modeOnGround; ((ModeOnGround)mode).setNormal(cr.normal); onEndFall(); } else { - // 歩いている途中で、アニメーションの関係で一瞬だけめり込んだ - // または、歩いている途中で斜面に差し掛かった + // 豁ゥ縺�縺ヲ縺�繧矩�比クュ縺ァ縲√い繝九Γ繝シ繧キ繝ァ繝ウ縺ョ髢「菫ゅ〒荳�迸ャ縺�縺代a繧願セシ繧薙□ + // 縺セ縺溘�ッ縲∵ュゥ縺�縺ヲ縺�繧矩�比クュ縺ァ譁憺擇縺ォ蟾ョ縺玲寺縺九▲縺� ((ModeOnGround)mode).setNormal(cr.normal); } } } else if (cr.normal.dot(PhysicsUtility.vertical) >= -GeometryUtility.TOLERANCE) { - // 垂直壁にめり込んだ - // 5.1. 押し戻す + // 蝙ら峩螢√↓繧√j霎シ繧薙□ + // 5.1. 謚シ縺玲綾縺� onIntersect(cr, interval); } else { - // 下からぶつかった、または接触した(頭をぶつけた) + // 荳九°繧峨�カ縺、縺九▲縺溘�√∪縺溘�ッ謗・隗ヲ縺励◆(鬆ュ繧偵�カ縺、縺代◆) if (cr.length > GeometryUtility.TOLERANCE) { - // 5.1. 押し戻す + // 5.1. 謚シ縺玲綾縺� onIntersect(cr, interval); } } cr = null; } else { - // 地面とぶつかっても接触してもいない時 - // 6. 落下モードにする + // 蝨ー髱「縺ィ縺カ縺、縺九▲縺ヲ繧よ磁隗ヲ縺励※繧ゅ>縺ェ縺�譎� + // 6. 關ス荳九Δ繝シ繝峨↓縺吶k mode = modeFreeFall; } } @@ -207,8 +208,8 @@ } /** - * 指定した方向に向かせる - * @param vec 新しい向き + * 謖�螳壹@縺滓婿蜷代↓蜷代°縺帙k + * @param vec 譁ー縺励>蜷代″ */ public void setDirection(Vector3d vec) { Vector3d v1 = new Vector3d(); @@ -228,8 +229,8 @@ } /** - * 指定した方向に向かせる - * @param vec 新しい向き + * 謖�螳壹@縺滓婿蜷代↓蜷代°縺帙k + * @param vec 譁ー縺励>蜷代″ */ public void setDirection3D(Vector3d vec) { Vector3d v1 = new Vector3d(); @@ -253,8 +254,8 @@ } /** - * 現在向いている方向を取得する - * @return 現在の向き + * 迴セ蝨ィ蜷代>縺ヲ縺�繧区婿蜷代r蜿門セ励☆繧� + * @return 迴セ蝨ィ縺ョ蜷代″ */ public Vector3d getDirection() { Vector3d dir = new Vector3d(direction); @@ -265,24 +266,24 @@ } /** - * 移動速度ベクトルを設定する - * @param vel 新しい移動速度ベクトル + * 遘サ蜍暮�溷コヲ繝吶け繝医Ν繧定ィュ螳壹☆繧� + * @param vel 譁ー縺励>遘サ蜍暮�溷コヲ繝吶け繝医Ν */ public void setVelocity(Velocity3D vel) { ((Solid3D)body).apply(vel, false); } /** - * 移動速度ベクトルを取得する - * @return 現在の移動速度ベクトル + * 遘サ蜍暮�溷コヲ繝吶け繝医Ν繧貞叙蠕励☆繧� + * @return 迴セ蝨ィ縺ョ遘サ蜍暮�溷コヲ繝吶け繝医Ν */ public Velocity3D getVelocity() { return ((Solid3D)body).getVelocity(); } /** - * X軸を中心に回転する - * @param angle 回転角(反時計回り, 単位:ラジアン) + * X霆ク繧剃クュ蠢�縺ォ蝗櫁サ「縺吶k + * @param angle 蝗櫁サ「隗抵シ亥渚譎りィ亥屓繧�, 蜊倅ス�:繝ゥ繧ク繧「繝ウ�シ� */ public void rotX(double angle) { Quaternion3D curQuat = body.getQuaternion(); @@ -291,8 +292,8 @@ } /** - * Y軸を中心に回転する - * @param angle 回転角(反時計回り, 単位:ラジアン) + * Y霆ク繧剃クュ蠢�縺ォ蝗櫁サ「縺吶k + * @param angle 蝗櫁サ「隗抵シ亥渚譎りィ亥屓繧�, 蜊倅ス�:繝ゥ繧ク繧「繝ウ�シ� */ public void rotY(double angle) { Quaternion3D curQuat = body.getQuaternion(); @@ -301,8 +302,8 @@ } /** - * Z軸を中心に回転する - * @param angle 回転角(反時計回り, 単位:ラジアン) + * Z霆ク繧剃クュ蠢�縺ォ蝗櫁サ「縺吶k + * @param angle 蝗櫁サ「隗抵シ亥渚譎りィ亥屓繧�, 蜊倅ス�:繝ゥ繧ク繧「繝ウ�シ� */ public void rotZ(double angle) { Quaternion3D curQuat = body.getQuaternion(); @@ -311,38 +312,38 @@ } /** - * 加わっている重力を取得する - * @return 重力 + * 蜉�繧上▲縺ヲ縺�繧矩㍾蜉帙r蜿門セ励☆繧� + * @return 驥榊鴨 */ public Force3D getGravity() { return mode.getForce((Solid3D)body); } /** - * 重心を取得する - * @return 重心位置 + * 驥榊ソ�繧貞叙蠕励☆繧� + * @return 驥榊ソ�菴咲スョ */ public Position3D getGravityCenter() { return ((Solid3D)body).getGravityCenter(); } /** - * 地面に乗っている状態か否かを取得する - * @return true --- 地面に乗っている, false --- 地面に乗っていない(空中にいる) + * 蝨ー髱「縺ォ荵励▲縺ヲ縺�繧狗憾諷九°蜷ヲ縺九r蜿門セ励☆繧� + * @return true --- 蝨ー髱「縺ォ荵励▲縺ヲ縺�繧�, false --- 蝨ー髱「縺ォ荵励▲縺ヲ縺�縺ェ縺�シ育ゥコ荳ュ縺ォ縺�繧具シ� */ public boolean isOnGround() { return (mode instanceof ModeOnGround); } /** - * 地面(構造物)に落下した瞬間に呼び出される + * 蝨ー髱「�シ域ァ矩��迚ゥ�シ峨↓關ス荳九@縺溽椪髢薙↓蜻シ縺ウ蜃コ縺輔l繧� */ public abstract void onEndFall(); /** - * 地面(構造物)に衝突した瞬間に呼び出される - * @param normal --- 地面の法線方向ベクトル - * @param interval --- 前回の動作からの経過時間(ミリ秒単位) + * 蝨ー髱「�シ域ァ矩��迚ゥ�シ峨↓陦晉ェ√@縺溽椪髢薙↓蜻シ縺ウ蜃コ縺輔l繧� + * @param normal --- 蝨ー髱「縺ョ豕慕キ壽婿蜷代�吶け繝医Ν + * @param interval --- 蜑榊屓縺ョ蜍穂ス懊°繧峨�ョ邨碁℃譎る俣�シ医Α繝ェ遘貞腰菴搾シ� */ public abstract void onIntersect(CollisionResult normal, long interval); diff --git a/src/main/java/org/ntlab/radishforandroidstudio/framework/model3D/Position3D.java b/src/main/java/org/ntlab/radishforandroidstudio/framework/model3D/Position3D.java index bfe6946..d81d217 100644 --- a/src/main/java/org/ntlab/radishforandroidstudio/framework/model3D/Position3D.java +++ b/src/main/java/org/ntlab/radishforandroidstudio/framework/model3D/Position3D.java @@ -3,8 +3,8 @@ import org.ntlab.radishforandroidstudio.java3d.Vector3d; /** - * 座標値を表す - * @author 新田直也 + * 蠎ァ讓吝�、繧定。ィ縺� + * @author 譁ー逕ー逶エ荵� * */ public class Position3D extends Property3D { @@ -12,14 +12,14 @@ private double y; private double z; - // コンストラクタ + // 繧ウ繝ウ繧ケ繝医Λ繧ッ繧ソ public Position3D() { x = 0.0; y = 0.0; z = 0.0; } - // コンストラクタ + // 繧ウ繝ウ繧ケ繝医Λ繧ッ繧ソ public Position3D(double px, double py, double pz) { x = px; y = py; @@ -32,12 +32,12 @@ z = v.z; } - // property3Dの抽象クラスを埋める + // property3D縺ョ謚ス雎。繧ッ繝ゥ繧ケ繧貞沂繧√k public void applyTo(Object3D o) { o.setPosition(this); } - // コピーコンストラクタ + // 繧ウ繝斐�シ繧ウ繝ウ繧ケ繝医Λ繧ッ繧ソ public Position3D(Position3D p) { this.x = p.x; this.y = p.y; @@ -51,7 +51,7 @@ return this; } - // 加算 + // 蜉�邂� public Position3D add(double x, double y, double z) { this.x += x; this.y += y; @@ -59,7 +59,7 @@ return this; } - // 加算 + // 蜉�邂� public Position3D add(Position3D p) { this.x += p.x; this.y += p.y; @@ -67,7 +67,7 @@ return this; } - // 加算 + // 蜉�邂� public Position3D add(Vector3d v) { this.x += v.x; this.y += v.y; @@ -75,7 +75,7 @@ return this; } - // 減算 + // 貂帷ョ� public Position3D sub(double x, double y, double z) { this.x -= x; this.y -= y; @@ -83,7 +83,7 @@ return this; } - // 減算 + // 貂帷ョ� public Position3D sub(Position3D p) { this.x -= p.x; this.y -= p.y; @@ -91,7 +91,7 @@ return this; } - // 減算 + // 貂帷ョ� public Position3D sub(Vector3d v) { this.x -= v.x; this.y -= v.y; @@ -99,7 +99,7 @@ return this; } - // スカラー倍 + // 繧ケ繧ォ繝ゥ繝シ蛟� public Position3D mul(double d) { this.x *= d; this.y *= d; @@ -148,4 +148,8 @@ public Position3D clone() { return new Position3D(this); } + + public String toString() { + return "{" + x + "," + y + "," + z + "}"; + } }