diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index c212c12..a3f0973 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 c86cd5d..7c3c703 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,7 +3,6 @@ package="org.ntlab.radishforandroidstudio"> - - - コメントアウトか消すといい--> + + @@ -33,16 +33,26 @@ - - - - - - - - + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/PlayerActivity.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/PlayerActivity.java new file mode 100644 index 0000000..8aaabb5 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/PlayerActivity.java @@ -0,0 +1,210 @@ +package org.ntlab.radishforandroidstudio.cactusClient; + +import android.annotation.SuppressLint; +import android.app.Fragment; +import android.app.FragmentManager; +import android.app.FragmentTransaction; +import android.os.Bundle; +import android.text.Layout; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.widget.Button; +import android.widget.EditText; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.Toast; + +import android.R; + +import org.ntlab.radishforandroidstudio.framework.RWT.RWTPad; +import org.ntlab.radishforandroidstudio.framework.RWT.RWTSurfaceView; +import org.ntlab.radishforandroidstudio.framework.RWT.RWTUIFragment; +import org.ntlab.radishforandroidstudio.framework.animation.Animation3D; +import org.ntlab.radishforandroidstudio.framework.event.PadEvent; +import org.ntlab.radishforandroidstudio.framework.gameMain.OvergroundActor; +import org.ntlab.radishforandroidstudio.framework.gameMain.RealTime3DActivity; +import org.ntlab.radishforandroidstudio.framework.listener.PadListener; +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.Ground; +import org.ntlab.radishforandroidstudio.framework.physics.Velocity3D; +import org.ntlab.radishforandroidstudio.java3d.AmbientLight; +import org.ntlab.radishforandroidstudio.java3d.Appearance; +import org.ntlab.radishforandroidstudio.java3d.Color3f; +import org.ntlab.radishforandroidstudio.java3d.DirectionalLight; +import org.ntlab.radishforandroidstudio.java3d.Material; +import org.ntlab.radishforandroidstudio.java3d.Vector3d; +import org.ntlab.radishforandroidstudio.java3d.Vector3f; +import org.ntlab.radishforandroidstudio.java3d.View; + + +public class PlayerActivity extends RealTime3DActivity implements PadListener{ + private OvergroundActor pocha; + private Ground stage; + private boolean isTouched = false; + private float touchX = 0.0f; + private float touchY = 0.0f; + RWTPad pad = null; + + protected void onCreate(Bundle savedInstanceState) { + 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); + + //平行光源 + DirectionalLight dirlight = new DirectionalLight( + 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(); + Material m = new Material(); + m.setDiffuseColor(0.0f, 0.3f, 1.0f); + m.setAmbientColor(0.0f, 0.0f, 0.0f); + m.setEmissiveColor(0.0f, 0.0f, 0.0f); + m.setSpecularColor(0.0f, 0.0f, 0.0f); + m.setShininess(5.0f); + ap1.setMaterial(m); + + Object3D pochaBody = null; + try { + pochaBody = ModelFactory.loadModel(getResources(), "pocha.stl", ap1).createObject(); + Animation3D pochaAnimation = null; //AnimationFactory.loadAnimation("data\\pocha\\walk.wrl"); + pocha = new OvergroundActor(pochaBody, pochaAnimation); + pocha.setPosition(new Position3D(0.0, -100.0, 250.0)); + universe.place(pocha); + } catch (Exception e) { + e.printStackTrace(); + } + + Appearance ap2 = new Appearance(); + Material m2 = new Material(); + m2.setDiffuseColor(0.1f, 0.0f, 0.02f); + m2.setAmbientColor(0.1f, 0.1f, 0.1f); + m2.setEmissiveColor(0.0f, 0.0f, 0.0f); + m2.setSpecularColor(0.2f, 0.2f, 0.2f); + m2.setShininess(5.0f); + ap2.setMaterial(m2); + + Object3D stageObj = null; + try { + stageObj = ModelFactory.loadModel(getResources(), "konan/konan.obj").createObject(); + stage = new Ground(stageObj); + universe.place(stage); + } catch (Exception e) { + e.printStackTrace(); + } + + //pad 追加部分 + + + setContentView(org.ntlab.radishforandroidstudio.R.layout.activity_main); + + FrameLayout l = findViewById(org.ntlab.radishforandroidstudio.R.id.game_layout); + view = new RWTSurfaceView(this); + view.attachCamera(camera); + l.addView(view, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); + + + FragmentManager fragmentManager = getFragmentManager(); + FragmentTransaction transaction = fragmentManager.beginTransaction(); + RWTUIFragment f = new RWTUIFragment(); + f.setListener(this); + android.view.View uiLayout = (android.view.View)findViewById(org.ntlab.radishforandroidstudio.R.id.ui_layout); + uiLayout.setOnTouchListener((RWTUIFragment)f); + transaction.add(org.ntlab.radishforandroidstudio.R.id.ui_layout, f); + transaction.commit(); + + + + /*camera.setViewPoint(pocha.getPosition().add(0.0, 1.5, 0.0)); + camera.setViewLine(pocha.getDirection()); + camera.setFieldOfView(1.5); + camera.setBackClipDistance(10000.0);*/ + start(1000L, 50L, true); + } + + @Override + public 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); + + } 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));//視線 + } + + + @SuppressLint("NewApi") + /*@Override + public boolean onTouchEvent (MotionEvent event){ + Vector3d charaVector3d = pocha.getDirection(); + charaVector3d.normalize();//キャラの向きを単位ベクトルに + super.onTouchEvent(event); + + if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE) { + isTouched = true; + float maxX = event.getDevice().getMotionRange(MotionEvent.AXIS_X).getMax() / 2.0f; + 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(); + } else if (event.getAction() == MotionEvent.ACTION_UP) { + isTouched = false; + } + return true; + }*/ + + public void onCreateFragmentEvent(RWTUIFragment f) { + pad = (RWTPad) f.findViewById(org.ntlab.radishforandroidstudio.R.id.button3); + pad.addListener(this); + } + + @Override + public boolean onEvent(PadEvent event) { + Vector3d charaVector3d = pocha.getDirection(); + charaVector3d.normalize();//キャラの向きを単位ベクトルに + MotionEvent motionEvent = event.getMotionEvent(); + super.onTouchEvent(motionEvent); + + if (motionEvent.getAction() == MotionEvent.ACTION_DOWN || motionEvent.getAction() == MotionEvent.ACTION_MOVE) { + isTouched = true; + float maxX = motionEvent.getDevice().getMotionRange(MotionEvent.AXIS_X).getMax() / 2.0f; + float minX = motionEvent.getDevice().getMotionRange(MotionEvent.AXIS_X).getMin(); + float maxY = motionEvent.getDevice().getMotionRange(MotionEvent.AXIS_Y).getMax(); + float minY = motionEvent.getDevice().getMotionRange(MotionEvent.AXIS_Y).getMin(); + 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; + } + return false; + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTUIFragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTUIFragment.java index e528f91..4ab001a 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTUIFragment.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTUIFragment.java @@ -1,35 +1,64 @@ package org.ntlab.radishforandroidstudio.framework.RWT; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; +import android.app.Activity; +import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; import org.ntlab.radishforandroidstudio.R; +import org.ntlab.radishforandroidstudio.cactusClient.PlayerActivity; +import org.ntlab.radishforandroidstudio.framework.event.PadEvent; +import org.ntlab.radishforandroidstudio.framework.listener.PadListener; +import org.ntlab.radishforandroidstudio.sample.SampleGameActivity; import static android.view.View.*; -public class RWTUIFragment extends Fragment implements OnTouchListener { +public class RWTUIFragment extends Fragment implements OnTouchListener,PadListener { + PlayerActivity listener = null; + View v = null; public RWTUIFragment() {} @Override public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } @Override - public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return inflater.inflate(R.layout.ui_fragment, container, false); + v = inflater.inflate(R.layout.ui_fragment, container, false); + RWTPad pad = v.findViewById(org.ntlab.radishforandroidstudio.R.id.button3); + pad.addListener(this); + + if (listener != null) { + listener.onCreateFragmentEvent(this); + } + return inflater.inflate(R.layout.ui_fragment, null); } @Override public boolean onTouch(View v, MotionEvent event) { System.out.println("RWTUIFragment touch"); - v.performClick(); return false; } + + @Override + public boolean onEvent(PadEvent event) { + return false; + } + + public void setListener(PlayerActivity activity) { + listener = activity; + } + + public View findViewById(int id) { + return v.findViewById(id); + } + } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/PadEvent.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/PadEvent.java index 8e5d25e..3b81015 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/PadEvent.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/PadEvent.java @@ -23,11 +23,11 @@ this.angle = angle; } - public final float getLength() { + public float getLength() { return length; } - public final float getAngle() { + public float getAngle() { return angle; } } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/sample/SampleGameActivity.java b/app/src/main/java/org/ntlab/radishforandroidstudio/sample/SampleGameActivity.java index fe6d53a..3ebd41d 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/sample/SampleGameActivity.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/sample/SampleGameActivity.java @@ -1,12 +1,18 @@ package org.ntlab.radishforandroidstudio.sample; import android.annotation.SuppressLint; +import android.app.Fragment; import android.os.Bundle; import android.view.MotionEvent; +import org.ntlab.radishforandroidstudio.R; +import org.ntlab.radishforandroidstudio.framework.RWT.RWTPad; +import org.ntlab.radishforandroidstudio.framework.RWT.RWTUIFragment; import org.ntlab.radishforandroidstudio.framework.animation.Animation3D; +import org.ntlab.radishforandroidstudio.framework.event.PadEvent; import org.ntlab.radishforandroidstudio.framework.gameMain.OvergroundActor; import org.ntlab.radishforandroidstudio.framework.gameMain.RealTime3DActivity; +import org.ntlab.radishforandroidstudio.framework.listener.PadListener; import org.ntlab.radishforandroidstudio.framework.model3D.ModelFactory; import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; @@ -20,7 +26,7 @@ import org.ntlab.radishforandroidstudio.java3d.Vector3f; -public class SampleGameActivity extends RealTime3DActivity { +public class SampleGameActivity extends RealTime3DActivity{ private OvergroundActor pocha; private Ground stage; private boolean isTouched = false; @@ -94,8 +100,8 @@ Velocity3D curV = pocha.getVelocity(); if (isTouched) { pocha.rotY(0.1 * (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 - touchY)); + curV.setX(/*pocha.getDirection().getX() **/ 200.0 /** (0.5f - touchY)*/); + curV.setZ(/*pocha.getDirection().getZ() **/ 200.0 /** (0.5f - touchY)*/); pocha.setVelocity(curV); } else { curV.setX(0.0); diff --git a/app/src/main/res/layout/test_activity.xml b/app/src/main/res/layout/test_activity.xml index b514099..95c07ce 100644 --- a/app/src/main/res/layout/test_activity.xml +++ b/app/src/main/res/layout/test_activity.xml @@ -11,5 +11,6 @@ android:layout_height="wrap_content" android:text="Button" tools:layout_editor_absoluteX="16dp" - tools:layout_editor_absoluteY="16dp" /> + tools:layout_editor_absoluteY="16dp" + tools:ignore="MissingConstraints" /> \ No newline at end of file diff --git a/build.gradle b/build.gradle index 22d7231..43c0708 100644 --- a/build.gradle +++ b/build.gradle @@ -8,6 +8,8 @@ } dependencies { classpath 'com.android.tools.build:gradle:3.1.3' + + // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }