diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 6522ee3..a446cd7 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 1f755b2..73bde58 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,30 +21,6 @@ android:supportsRtl="true" android:theme="@style/AppTheme"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file 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 66a0711..24d5bad 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 @@ -1,5 +1,7 @@ package org.ntlab.radishforandroidstudio.cactusClient.tests; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; @@ -11,5 +13,12 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sample); + + FragmentManager manager = getSupportFragmentManager(); + FragmentTransaction transaction = manager.beginTransaction(); + transaction.add(R.id.fragment_field, new StartFragment()); + transaction.addToBackStack(null); + transaction.commit(); } + } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/tests/SampleUiFragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/tests/SampleUiFragment.java new file mode 100644 index 0000000..54f31e0 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/tests/SampleUiFragment.java @@ -0,0 +1,115 @@ +package org.ntlab.radishforandroidstudio.cactusClient.tests; + + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.view.LayoutInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; + +import org.ntlab.radishforandroidstudio.R; +import org.ntlab.radishforandroidstudio.framework.gameMain.OvergroundActor; +import org.ntlab.radishforandroidstudio.framework.gameMain.RealTime3DFragment; +import org.ntlab.radishforandroidstudio.framework.model3D.BaseObject3D; +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.Appearance; +import org.ntlab.radishforandroidstudio.java3d.Box; +import org.ntlab.radishforandroidstudio.java3d.IndexedTriangleArray; +import org.ntlab.radishforandroidstudio.java3d.Material; +import org.ntlab.radishforandroidstudio.java3d.Point3d; +import org.ntlab.radishforandroidstudio.java3d.TextureCubeMap; +import org.ntlab.radishforandroidstudio.java3d.TextureLoader; +import org.ntlab.radishforandroidstudio.java3d.Vector3f; + +public class SampleUiFragment extends RealTime3DFragment { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // 3Dモデルの作成 + + // サイコロの作成 + Appearance ap1 = new Appearance(); + Material m = new Material(); + m.setDiffuseColor(1.0f, 1.0f, 1.0f); + ap1.setMaterial(m); + 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()); + ap1.setTexture(tex1); + Box b1 = new Box(1.0f, 1.0f, 1.0f, ap1); + final Object3D obj1 = new Object3D("box", b1); + obj1.scale(2.0, 2.0, 2.0); + obj1.apply(new Position3D(0.0 , 30.0, 0.0), false); + OvergroundActor actor = new OvergroundActor(obj1, null); + universe.place(actor); + + // 地面の作成 + IndexedTriangleArray groundGeometry = new IndexedTriangleArray(4, + IndexedTriangleArray.COORDINATES | IndexedTriangleArray.NORMALS, 6); + groundGeometry.setCoordinate(0, new Point3d(-20.0, 0.0, -20.0)); + groundGeometry.setCoordinate(1, new Point3d(20.0, 0.0, -20.0)); + groundGeometry.setCoordinate(2, new Point3d(20.0, 0.0, 20.0)); + groundGeometry.setCoordinate(3, new Point3d(-20.0, 0.0, 20.0)); + groundGeometry.setNormal(0, new Vector3f(0.0f, 1.0f, 0.0f)); + groundGeometry.setNormal(1, new Vector3f(0.0f, 1.0f, 0.0f)); + groundGeometry.setNormal(2, new Vector3f(0.0f, 1.0f, 0.0f)); + groundGeometry.setNormal(3, new Vector3f(0.0f, 1.0f, 0.0f)); + groundGeometry.setCoordinateIndices(0, new int[]{0, 3, 2}); + groundGeometry.setCoordinateIndices(3, new int[]{0, 2, 1}); + Appearance ap2 = new Appearance(); + Material m2 = new Material(); + m2.setDiffuseColor(0.5f, 1.0f, 0.2f); + ap2.setMaterial(m2); + Ground ground = new Ground(new BaseObject3D(groundGeometry, ap2)); + universe.place(ground); + + // カメラの設定 + camera.setViewPoint(new Position3D(0.0, 10.0, -20.0)); + camera.addTarget(actor); + + // フレームの間隔(ms) + start(16); + + //onCreateOptionMenuの呼び出し + setHasOptionsMenu(true); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState); + return inflater.inflate(R.layout.fragment_real_time_3d, container, false); + } + + @Override + public void onDestroy() { + + super.onDestroy(); + } + + public boolean onOptionsItemSelected(MenuItem item){ + int id = item.getItemId(); + + if(id == R.id.action_settings){ + return true; + + } + return super.onOptionsItemSelected(item); + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/tests/StartFragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/tests/StartFragment.java index 04cc646..b6668d5 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/tests/StartFragment.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/tests/StartFragment.java @@ -31,7 +31,7 @@ public void onClick(View view) { FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); - transaction.replace(R.id.fragment_field,new SampleGame2Fragment()); + transaction.replace(R.id.fragment_field,new SampleUiFragment()); transaction.addToBackStack(null); transaction.commit(); } 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 1dd6ff2..10742e2 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,6 +1,6 @@ package org.ntlab.radishforandroidstudio.framework.RWT; -import android.app.Fragment; +import android.support.v4.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.MotionEvent; diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTView.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTView.java index f3b00d1..6037cb1 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTView.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTView.java @@ -6,6 +6,11 @@ import android.util.AttributeSet; import android.view.View; +/** + * ゲームに使用するViewの基底クラス + * + * @author s.iwatani + */ public abstract class RWTView extends View { private float dp = 1; private Point size = null; @@ -60,6 +65,4 @@ public int applyDp(int a) { return (int)(a * dp); } - - } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/RealTime3DFragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/RealTime3DFragment.java index 9b4024d..ed41fa9 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/RealTime3DFragment.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/RealTime3DFragment.java @@ -1,24 +1,27 @@ package org.ntlab.radishforandroidstudio.framework.gameMain; - +import android.support.v4.app.Fragment; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.FrameLayout; import android.widget.LinearLayout; import org.ntlab.radishforandroidstudio.R; import org.ntlab.radishforandroidstudio.framework.RWT.RWTSurfaceView; +import org.ntlab.radishforandroidstudio.framework.RWT.RWTUIFragment; import org.ntlab.radishforandroidstudio.framework.model3D.Universe; import org.ntlab.radishforandroidstudio.framework.view3D.Camera3D; -import static android.content.ContentValues.TAG; - public class RealTime3DFragment extends RealTimeFragment{ protected Universe universe; protected Camera3D camera; protected RWTSurfaceView view; + protected View parentView = null; @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -27,18 +30,20 @@ camera = new Camera3D(universe); - view = new RWTSurfaceView(this.getActivity()); - view.setRenderMode(RWTSurfaceView.RENDERMODE_WHEN_DIRTY); - view.attachCamera(camera); - - getActivity().addContentView(view,new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); +// getActivity().addContentView(view,new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + parentView = inflater.inflate(R.layout.fragment_real_time_3d, container, false); + initGameWindowView(); return inflater.inflate(R.layout.fragment_real_time_3d, container, false); } + public View getParentView() { + return parentView; + } + @Override protected void update(long interval) { progress(interval); @@ -50,5 +55,23 @@ protected void progress(long interval) { } + + public void initGameWindowView() { + // 画面との関連付け + view = new RWTSurfaceView(this.getActivity()); + view.setRenderMode(RWTSurfaceView.RENDERMODE_WHEN_DIRTY); + view.attachCamera(camera); + FrameLayout l = parentView.findViewById(R.id.game_layout); + l.addView(view, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); + + FragmentManager fragmentManager = getFragmentManager(); + FragmentTransaction transaction = fragmentManager.beginTransaction(); + Fragment f = new RWTUIFragment(); + + View uiLayout = parentView.findViewById(R.id.ui_layout); + uiLayout.setOnTouchListener((RWTUIFragment)f); + transaction.add(R.id.ui_layout, f); + transaction.commit(); + } } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/spriteTest/TestActivity.java b/app/src/main/java/org/ntlab/radishforandroidstudio/spriteTest/TestActivity.java deleted file mode 100644 index 5d943a9..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/spriteTest/TestActivity.java +++ /dev/null @@ -1,163 +0,0 @@ -package org.ntlab.radishforandroidstudio.spriteTest; - -import android.app.Fragment; -import android.app.FragmentManager; -import android.app.FragmentTransaction; -import android.os.Bundle; -import android.view.Menu; -import android.view.MenuItem; -import android.view.MotionEvent; -import android.view.View; -import android.widget.FrameLayout; -import android.widget.LinearLayout; -import android.widget.RelativeLayout; - -import org.ntlab.radishforandroidstudio.R; -import org.ntlab.radishforandroidstudio.framework.RWT.RWTSprite; -import org.ntlab.radishforandroidstudio.framework.RWT.RWTSurfaceView; -import org.ntlab.radishforandroidstudio.framework.RWT.RWTUIFragment; -import org.ntlab.radishforandroidstudio.framework.gameMain.RealTimeActivity; -import org.ntlab.radishforandroidstudio.framework.listener.PadListener; -import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; -import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; -import org.ntlab.radishforandroidstudio.framework.model3D.Universe; -import org.ntlab.radishforandroidstudio.framework.physics.AngularVelocity3D; -import org.ntlab.radishforandroidstudio.framework.physics.Force3D; -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.framework.subject.PadSubject; -import org.ntlab.radishforandroidstudio.framework.view3D.Camera3D; -import org.ntlab.radishforandroidstudio.java3d.Appearance; -import org.ntlab.radishforandroidstudio.java3d.Box; -import org.ntlab.radishforandroidstudio.java3d.Material; -import org.ntlab.radishforandroidstudio.java3d.TextureCubeMap; -import org.ntlab.radishforandroidstudio.java3d.TextureLoader; -import org.ntlab.radishforandroidstudio.java3d.Transform3D; - -public class TestActivity extends RealTimeActivity { - private PhysicalSystem physicalSystem; - private Object3D groundObj; - private Solid3D ground; - private Transform3D initTrans; - private Solid3D diceObj; - private long time = 0; - private int side = 0; - - private RWTSurfaceView view = null; - - private RWTSprite[] sprite = new RWTSprite[3]; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - - // 3Dモデルの作成 - Universe universe = new Universe(); - - // サイコロの作成 - Appearance ap1 = 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()); - ap1.setTexture(tex1); - physicalSystem = new PhysicalSystem(); - Box b1 = new Box(1.0f, 1.0f, 1.0f, ap1); - Object3D obj1 = new Object3D("box", b1); - obj1.apply(new Position3D(0.0 , 30.0, 0.0), false); - diceObj = new Solid3D(obj1); - diceObj.scale(2.0, 2.0, 2.0); - diceObj.apply(new AngularVelocity3D(-0.4, 0.0, -0.6), false); - universe.place(diceObj); - physicalSystem.add(diceObj); - initTrans = new Transform3D(); - obj1.rot.getTransform(initTrans); - - // 地面の作成 - Appearance ap2 = new Appearance(); - Material m = new Material(); - m.setDiffuseColor(1.0f, 1.0f, 1.0f); - m.setAmbientColor(0.5f, 0.5f, 0.5f); - m.setSpecularColor(0.0f, 0.0f, 0.0f); - m.setShininess(1.0f); - ap2.setMaterial(m); - - Box b2 = new Box(1.0f, 1.0f, 1.0f, ap1); - groundObj = new Object3D("ground", b2); - groundObj.apply(new Position3D(0.0, -3.0, 0.0), false); - groundObj.scale(100.0, 3.0, -50.0); - ground = new Solid3D(groundObj); - ground.setMass(100000000); - universe.place(ground); - physicalSystem.add(ground); - - // カメラの作成 - Camera3D camera = new Camera3D(universe); - camera.setViewPoint(new Position3D(0.0, 30, -30.0)); - camera.addTarget(diceObj); - - // 画面との関連付け - FrameLayout l = findViewById(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(); - Fragment f = new RWTUIFragment(); - View uiLayout = (View)findViewById(R.id.ui_layout); - uiLayout.setOnTouchListener((RWTUIFragment)f); - transaction.add(R.id.ui_layout, f); - transaction.commit(); - - start(10); - } - - @Override - protected void update(long interval) { - ground.apply(new Position3D(0.0, -3.0, 0.0), false); - ground.apply(new Velocity3D(), false); - groundObj.rot.setTransform(initTrans); - - long newTime = System.nanoTime(); - physicalSystem.motion(0, 10, Force3D.ZERO, physicalSystem.objects.get(0).getGravityCenter(), null); - // Log.v("moji", "" + ((System.nanoTime()-newTime)/1000.0)); - } - - @Override - public void onDestroy() { - super.onDestroy(); - } - - @Override - public boolean onTouchEvent(MotionEvent event){ - physicalSystem.objects.get(0).setPosition(new Position3D(0.0 , 30.0, 0.0)); - return true; - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.main, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - int id = item.getItemId(); - if (id == R.id.action_settings) { - return true; - } - return super.onOptionsItemSelected(item); - } -} diff --git a/app/src/main/res/layout/activity_sample.xml b/app/src/main/res/layout/activity_sample.xml index 6883ce2..ac0f24f 100644 --- a/app/src/main/res/layout/activity_sample.xml +++ b/app/src/main/res/layout/activity_sample.xml @@ -7,11 +7,10 @@ android:layout_height="match_parent" tools:context=".cactusClient.tests.SampleActivity"> - + app:layout_constraintTop_toTopOf="parent"> + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_real_time_3d.xml b/app/src/main/res/layout/fragment_real_time_3d.xml index bb6264a..99fb49b 100644 --- a/app/src/main/res/layout/fragment_real_time_3d.xml +++ b/app/src/main/res/layout/fragment_real_time_3d.xml @@ -7,10 +7,18 @@ - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_sample_game.xml b/app/src/main/res/layout/fragment_sample_game.xml index 03fd74f..5a00b52 100644 --- a/app/src/main/res/layout/fragment_sample_game.xml +++ b/app/src/main/res/layout/fragment_sample_game.xml @@ -5,4 +5,5 @@ android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".cactusClient.tests.SampleGameFragment"> + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 741b9e8..22d7231 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.2' + 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 }