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..d2c81ce 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 @@ -36,6 +36,7 @@ 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; @@ -51,8 +52,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,7 +59,7 @@ 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); Appearance ap1 = new Appearance(); @@ -111,33 +110,60 @@ @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 +185,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; } -} +}