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