diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
index a36d297..69fc380 100644
--- a/.idea/caches/build_file_checksums.ser
+++ b/.idea/caches/build_file_checksums.ser
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 795735f..762146b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -27,6 +27,27 @@
android:label="@string/app_name"
android:screenOrientation="landscape"
android:theme="@style/SplashTheme">
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/tests/SampleActivity.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/tests/SampleActivity.java
index fac885d..4756cd5 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/tests/SampleActivity.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/tests/SampleActivity.java
@@ -6,8 +6,13 @@
import android.os.Bundle;
import org.ntlab.radishforandroidstudio.R;
+import org.ntlab.radishforandroidstudio.cactusClient.views.PlayerFragment;
import org.ntlab.radishforandroidstudio.cactusClient.views.StartFragment;
+/**
+ * プレイ画面のテスト用(PlayerFragment)
+ */
+
public class SampleActivity extends AppCompatActivity {
@Override
@@ -17,7 +22,7 @@
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
- transaction.add(R.id.framelayout_field, new StartFragment());
+ transaction.add(R.id.framelayout_field, new PlayerFragment());
transaction.commit();
}
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 124a776..ed83adc 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
@@ -45,9 +45,7 @@
cactus = (Cactus) getActivity().getApplication();
account = cactus.getMyAccount();
-
connection = new CharactersFragmentConnection(instanceId);
-
// Inflate the layout for this fragment
return inflater.inflate(R.layout.characters_fragment, container, false);
}
@@ -109,7 +107,7 @@
// プレイ画面へ
Bundle bundle = new Bundle();
bundle.putSerializable("characterId", characterIds.get(position));
- PlayerFragmentLight fragment = new PlayerFragmentLight();
+ PlayerFragment fragment = new PlayerFragment();//PlayerFragmentがメイン
fragment.setArguments(bundle);
// TODO: 型を上のMAPのやつを渡すようにする
fragment.setPlayer(player.values().iterator().next());
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 9cadaf1..c11b8b7 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
@@ -22,13 +22,20 @@
import org.ntlab.radishforandroidstudio.framework.model3D.ModelFactory;
import org.ntlab.radishforandroidstudio.framework.model3D.Object3D;
import org.ntlab.radishforandroidstudio.framework.model3D.Position3D;
+import org.ntlab.radishforandroidstudio.framework.physics.AngularVelocity3D;
import org.ntlab.radishforandroidstudio.framework.physics.Ground;
+import org.ntlab.radishforandroidstudio.framework.physics.PhysicalSystem;
+import org.ntlab.radishforandroidstudio.framework.physics.Solid3D;
import org.ntlab.radishforandroidstudio.framework.physics.Velocity3D;
import org.ntlab.radishforandroidstudio.java3d.AmbientLight;
import org.ntlab.radishforandroidstudio.java3d.Appearance;
+import org.ntlab.radishforandroidstudio.java3d.Box;
import org.ntlab.radishforandroidstudio.java3d.Color3f;
import org.ntlab.radishforandroidstudio.java3d.DirectionalLight;
import org.ntlab.radishforandroidstudio.java3d.Material;
+import org.ntlab.radishforandroidstudio.java3d.TextureCubeMap;
+import org.ntlab.radishforandroidstudio.java3d.TextureLoader;
+import org.ntlab.radishforandroidstudio.java3d.Transform3D;
import org.ntlab.radishforandroidstudio.java3d.Vector3d;
import org.ntlab.radishforandroidstudio.java3d.Vector3f;
@@ -36,10 +43,14 @@
private OvergroundActor pocha;
private Ground stage;
private boolean isTouched = false;
+ private boolean isPadTouched = false;
private float touchX = 0.0f;
private float touchY = 0.0f;
RWTPad pad = null;
private Player player;
+ private PhysicalSystem physicalSystem;
+ private Transform3D initTrans;
+ private Solid3D diceObj;
public PlayerFragment() {
// Required empty public constructor
@@ -51,8 +62,6 @@
super.onCreate(savedInstanceState);
//環境光
AmbientLight amblight = new AmbientLight(new Color3f(1.0f, 1.0f, 1.0f));
-
-// amblight.setInfluencingBounds(new BoundingSphere(new Point3d(), 10000.0));
universe.placeLight(amblight);
//平行光源
@@ -60,9 +69,10 @@
new Color3f(1.0f, 1.0f, 1.0f), //光の色
new Vector3f(0.0f, -1.0f, -0.5f) //光の方向ベクトル
);
-// dirlight.setInfluencingBounds(new BoundingSphere(new Point3d(), 10000.0));
+
universe.placeLight(dirlight);
+ //pochaの生成
Appearance ap1 = new Appearance();
Material m = new Material();
m.setDiffuseColor(0.0f, 0.3f, 1.0f);
@@ -83,6 +93,7 @@
e.printStackTrace();
}
+ //甲南ステージの生成
Appearance ap2 = new Appearance();
Material m2 = new Material();
m2.setDiffuseColor(0.1f, 0.0f, 0.02f);
@@ -100,9 +111,47 @@
} catch (Exception e) {
e.printStackTrace();
}
+ // サイコロの作成
+ Appearance ap3 = new Appearance();
+ TextureCubeMap tex1 = new TextureCubeMap(TextureCubeMap.BASE_LEVEL, TextureCubeMap.RGB, 0);
+ TextureLoader loader = new TextureLoader(getResources(), R.drawable.dice_1, TextureLoader.BY_REFERENCE | TextureLoader.Y_UP);
+ tex1.setImage(0, TextureCubeMap.POSITIVE_Z, loader.getImage());
+ loader = new TextureLoader(getResources(), R.drawable.dice_6, TextureLoader.BY_REFERENCE | TextureLoader.Y_UP);
+ tex1.setImage(0, TextureCubeMap.NEGATIVE_Z, loader.getImage());
+ loader = new TextureLoader(getResources(), R.drawable.dice_4, TextureLoader.BY_REFERENCE | TextureLoader.Y_UP);
+ tex1.setImage(0, TextureCubeMap.POSITIVE_X, loader.getImage());
+ loader = new TextureLoader(getResources(), R.drawable.dice_3, TextureLoader.BY_REFERENCE | TextureLoader.Y_UP);
+ tex1.setImage(0, TextureCubeMap.NEGATIVE_X, loader.getImage());
+ loader = new TextureLoader(getResources(), R.drawable.dice_5, TextureLoader.BY_REFERENCE | TextureLoader.Y_UP);
+ tex1.setImage(0, TextureCubeMap.POSITIVE_Y, loader.getImage());
+ loader = new TextureLoader(getResources(), R.drawable.dice_2, TextureLoader.BY_REFERENCE | TextureLoader.Y_UP);
+ tex1.setImage(0, TextureCubeMap.NEGATIVE_Y, loader.getImage());
+ ap3.setTexture(tex1);
+ physicalSystem = new PhysicalSystem();
+ Box b1 = new Box(1.0f, 1.0f, 1.0f, ap3);
+ Object3D obj1 = new Object3D("box", b1);
+ //設置のみの時のオブジェクトの初期値
+ obj1.apply(new Position3D(0.0, -118.0, 250.0), false);
+ //地面との当たり判定の時のオブジェクトの初期値
+// obj1.apply(new Position3D(0.0, -80.0, 250.0), false);
+ diceObj = new Solid3D(obj1);
+ diceObj.scale(1.0, 1.0, 1.0);
+ diceObj.apply(new AngularVelocity3D(-0.4, 0.0, -0.6), false);
+// OvergroundActor actor = new OvergroundActor(obj1, null);
+ //地面との当たり判定するとき
+// universe.place(actor);
+
+ //地面との当たり判定しないとき
+ universe.place(diceObj);
+ physicalSystem.add(diceObj);
+ initTrans = new Transform3D();
+ obj1.rot.getTransform(initTrans);
+
+ //カメラの設定(視点)
camera.setViewPoint(pocha.getPosition().add(0.0, 1.5, 0.0));
camera.setViewLine(pocha.getDirection());
+// camera.addTarget(diceObj);
camera.setFieldOfView(1.5);
camera.setBackClipDistance(10000.0);
start(1000L, 50L, true);
@@ -111,33 +160,61 @@
@Nullable
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
+ //画面生成
initGameWindowView();
+
+ parentView.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE) {
+ isTouched = true;
+ //画面をどこタッチしたか
+ float maxX = event.getDevice().getMotionRange(MotionEvent.AXIS_X).getMax();
+ float minX = event.getDevice().getMotionRange(MotionEvent.AXIS_X).getMin();
+ float maxY = event.getDevice().getMotionRange(MotionEvent.AXIS_Y).getMax();
+ float minY = event.getDevice().getMotionRange(MotionEvent.AXIS_Y).getMin();
+ touchX = (event.getX() - minX) / (maxX - minX);
+ touchY = (event.getY() - minY) / (maxY - minY);
+ } else if (event.getAction() == MotionEvent.ACTION_UP) {
+ isTouched = false;
+ }
+ return true;
+ }
+ });
+
return parentView;
}
+ //追跡
@Override
protected void progress(long interval) {
Velocity3D curV = pocha.getVelocity();
- if (isTouched) {
- pocha.rotY(0.001 * (0.5f - touchX) * (double) (interval / 15.0));
- curV.setX(pocha.getDirection().getX() * 200.0 * (0.5f - touchY));
- curV.setZ(pocha.getDirection().getZ() * 200.0 * (0.5f - touchX));
- pocha.setVelocity(curV);
+ //パッドタッチの時
+ if (isPadTouched) {
+ pocha.rotY(0.05 * (0.5f - touchX) * (double) (interval / 40.0));
+ //向いた方向に前後移動する
+ curV.setX(pocha.getDirection().getX() * 50.0 * (0.5f - touchY));
+ curV.setZ(pocha.getDirection().getZ() * 50.0 * (0.5f - touchY));
+ pocha.setVelocity(curV);//pochaの追跡
+ } else if (isTouched) {
+ //本体タッチの時
+ pocha.rotY(0.1 * (0.5f - touchX) * (double) (interval / 20.0));
} else {
curV.setX(0.0);
curV.setZ(0.0);
pocha.setVelocity(curV);
}
+ // 向き設定
Vector3d charaVector3d = pocha.getDirection();
charaVector3d.normalize();//キャラの向きを単位ベクトルに
- camera.setViewPoint(pocha.getPosition()
- .add(-5.0 * charaVector3d.getX(), charaVector3d.getY() + 5.0, -5.0 * charaVector3d.getZ()));//視点
- camera.setViewLine(new Vector3d(5.0 * charaVector3d.getX(), charaVector3d.getY() - 2.5, 5.0 * charaVector3d.getZ() + touchX));//視線
+
+ camera.setViewPoint(pocha.getPosition().add(-5.0 * charaVector3d.getX(), charaVector3d.getY() + 5.0, -5.0 * charaVector3d.getZ()));//視点
+ camera.setViewLine(new Vector3d(5.0 * charaVector3d.getX(), charaVector3d.getY() - 2.5, 5.0 * charaVector3d.getZ()));//視線
+
}
@@ -159,36 +236,25 @@
pad.addListener((PadListener) this);
}
- /**
- * TODO: 座標等はcharacter変数を使用するようにする
- *
- * @param event イベントの情報
- * @return
- */
+ //タッチパッドのonEvent
@Override
public boolean onEvent(PadEvent event) {
- Vector3d charaVector3d = pocha.getDirection();
- charaVector3d.normalize();//キャラの向きを単位ベクトルに
MotionEvent motionEvent = event.getMotionEvent();
-
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN || motionEvent.getAction() == MotionEvent.ACTION_MOVE) {
- isTouched = true;
+ isPadTouched = true;
+ //前後ろ動き
touchX = (float) (Math.cos(event.getAngle()) * event.getLength());
touchY = (float) (Math.sin(event.getAngle()) * event.getLength());
-
- //motion.eventをevent.getLengthみたいに変えればいい?
- //touchYのもとは(motionEvent.getY() - minY) / (maxY - minY),X (motionEvent.getX() - minX) / (maxX - minX)
- camera.setViewPoint(pocha.getPosition()
- .add(-5.0 * charaVector3d.getX(), charaVector3d.getY() + 5.0, -5.0 * charaVector3d.getZ()));//視点
- camera.setViewLine(new Vector3d(5.0 * charaVector3d.getX(), charaVector3d.getY() - 2.5, 5.0 * charaVector3d.getZ() + touchX));//視線
} else if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
- isTouched = false;
+ isPadTouched = false;
}
+
return false;
+
}
public void setPlayer(Player player) {
this.player = player;
}
-}
+}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/OvergroundActor.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/OvergroundActor.java
index c9cbda8..1bf96d7 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/OvergroundActor.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/OvergroundActor.java
@@ -14,64 +14,67 @@
/**
* 地面の上を移動するもの(ジャンプや自由落下させることも可能)
- * @author 新田直也
*
+ * @author 新田直也
*/
public class OvergroundActor extends Actor {
- public OvergroundActor(Object3D body, Animation3D animation) {
- super(body, animation);
- }
+ public OvergroundActor(Object3D body, Animation3D animation) {
+ super(body, animation);
+ }
- public OvergroundActor(Solid3D body, Animation3D animation) {
- super(body, animation);
- }
+ public OvergroundActor(Solid3D body, Animation3D animation) {
+ super(body, animation);
+ }
// public OvergroundActor(ActorModel model) {
// super(model);
// }
- public void onIntersect(CollisionResult cr, long interval) {
- // めり込んだら(めり込んだ面の法線方向に)押し戻す
- Vector3d back = (Vector3d) cr.normal.clone();
- back.scale(cr.length * 2.0);
- body.apply(new Position3D(body.getPosition3D().add(back)), false);
-
- // 速度の面の法線方向の成分を 0 にする
- Vector3d v = (Vector3d) ((Solid3D)body).getVelocity().getVector3d().clone();
- double d = v.dot(cr.normal);
- v.scaleAdd(-d, cr.normal, v);
- body.apply(new Velocity3D(v), false);
- }
+ public void onIntersect(CollisionResult cr, long interval) {
+ // めり込んだら(めり込んだ面の法線方向に)押し戻す
+ Vector3d back = (Vector3d) cr.normal.clone();
+ back.scale(cr.length * 2.0);
+ body.apply(new Position3D(body.getPosition3D().add(back)), false);
- @Override
- public void onEndFall() {
- }
+ // 速度の面の法線方向の成分を 0 にする
+ Vector3d v = (Vector3d) ((Solid3D) body).getVelocity().getVector3d().clone();
+ double d = v.dot(cr.normal);
+ v.scaleAdd(-d, cr.normal, v);
+ body.apply(new Velocity3D(v), false);
+ }
- @Override
- public void onEndAnimation() {
- }
+ @Override
+ public void onEndFall() {
+ }
- //可動物関係
+ @Override
+ public void onEndAnimation() {
+ }
+
+ //可動物関係
- @Override
- public void addCollidable(ArrayList pList) {
+ @Override
+ public void addCollidable(ArrayList pList) {
- }
+ }
- @Override
- public void onCollisionEnter(Placeable p) {
+ //ほかの物体と触れたとき
+ @Override
+ public void onCollisionEnter(Placeable p) {
- }
+ }
- @Override
- public void onCollisionStay(Placeable p) {
+ //触れている間
+ @Override
+ public void onCollisionStay(Placeable p) {
- }
+ }
- @Override
- public void onCollisionExit(Placeable p) {
+ //触れるのをやめたとき
+ @Override
+ public void onCollisionExit(Placeable p) {
- }
+ }
}
\ No newline at end of file