| | 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); |
---|
| | } |
---|
| | } |
---|
| | |
---|
| | |