Player #15

Merged n-konishi merged 7 commits into nitta-lab-2018:master from nitta-lab-2018:Player on 26 Jun 2018
Showing 8 changed files
View
.idea/caches/build_file_checksums.ser
Not supported
View
50
app/src/main/AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.ntlab.radishforandroidstudio">
 
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
 
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
android:name="android.hardware.camera.autofocus"
android:required="false" />
 
<application
android:name=".cactusClient.Cactus"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
 
<!--フラグメント画面遷移のやつ-->
<!--無効化の際に<activity></activity>コメントアウトか消すといい-->
<!--start-->
<activity
android:name=".sample.SampleGameActivity"
android:label="@string/app_name"
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!--end-->
 
<!--start-->
<activity android:name=".cactusClient.MainActivity"
android:label="@string/app_name"
android:screenOrientation="landscape">
<intent-filter>
</intent-filter>
</activity>
<!--end-->
 
<!--start-->
<!--<activity android:name=".cactusClient.MainActivity"-->
<!--android:label="@string/app_name"-->
<!--android:screenOrientation="landscape">-->
<!--<intent-filter>-->
<!--<action android:name="android.intent.action.MAIN" />-->
<!--<category android:name="android.intent.category.LAUNCHER" />-->
<!--</intent-filter>-->
<!--</activity>-->
<!--end-->
<activity
android:name=".spriteTest.TestActivity"
android:label="@string/app_name"
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
 
</application>
 
</manifest>
View
211
app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/PlayerActivity.java 0 → 100644
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;
}
}
View
50
app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTUIFragment.java
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);
}
 
}
View
4
app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/PadEvent.java
this.length = length;
this.angle = angle;
}
 
public final float getLength() {
public float getLength() {
return length;
}
 
public final float getAngle() {
public float getAngle() {
return angle;
}
}
View
12
app/src/main/java/org/ntlab/radishforandroidstudio/sample/SampleGameActivity.java
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;
import org.ntlab.radishforandroidstudio.framework.physics.Ground;
import org.ntlab.radishforandroidstudio.java3d.Material;
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;
private float touchX = 0.0f;
public void progress(long interval) {
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);
curV.setZ(0.0);
View
4
app/src/main/res/layout/test_activity.xml
android:layout_width="wrap_content"
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" />
</android.support.constraint.ConstraintLayout>
View
build.gradle