diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
index ee1e5f5..a446cd7 100644
--- a/.idea/caches/build_file_checksums.ser
+++ b/.idea/caches/build_file_checksums.ser
Binary files differ
diff --git a/app/build.gradle b/app/build.gradle
index a5c220b..8d40625 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -21,14 +21,22 @@
}
}
buildToolsVersion '27.0.3'
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
+ implementation 'com.android.support:support-v4:27.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+ implementation group: 'net.arnx', name: 'jsonic', version: '1.3.10'
+ implementation 'com.android.support:cardview-v7:27.1.1'
+ implementation 'com.google.android.gms:play-services-maps:15.0.1'
// implementation files('/Users/matsumotoayaju/AndroidStudioProjects/Cactus2/lib/jsonic-1.3.9/jsonic-1.3.9.jar')
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 161ac37..bd77dc5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
package="org.ntlab.radishforandroidstudio">
+
-
-
-
+
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/LoginFragmentConnection.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/LoginFragmentConnection.java
new file mode 100644
index 0000000..282c22a
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/LoginFragmentConnection.java
@@ -0,0 +1,11 @@
+package org.ntlab.radishforandroidstudio.cactusClient.connections;
+
+import org.ntlab.radishforandroidstudio.framework.network.HttpAsyncConnection;
+
+public class LoginFragmentConnection extends HttpAsyncConnection {
+
+ public LoginFragmentConnection() {
+ super("http://nitta-lab-www2.is.konan-u.ac.jp:8080/CactusServer/rest/accounts");
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/SignUpFragmentConnection.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/SignUpFragmentConnection.java
new file mode 100644
index 0000000..790156d
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/SignUpFragmentConnection.java
@@ -0,0 +1,11 @@
+package org.ntlab.radishforandroidstudio.cactusClient.connections;
+
+import org.ntlab.radishforandroidstudio.framework.network.HttpAsyncConnection;
+
+public class SignUpFragmentConnection extends HttpAsyncConnection {
+
+ public SignUpFragmentConnection() {
+ super("http://nitta-lab-www2.is.konan-u.ac.jp:8080/CactusServer/rest/accounts");
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/AddressedEntity.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/AddressedEntity.java
new file mode 100644
index 0000000..791dfda
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/AddressedEntity.java
@@ -0,0 +1,26 @@
+package org.ntlab.radishforandroidstudio.cactusClient.models;
+
+/**
+ * �e���\�[�X��POST�ō쐬�����ۂ�, ���Y���\�[�X�̎��̂�URI���Ăяo�����ɕԂ��Ƃ��ɗp����N���X
+ * @author r-isitani
+ *
+ */
+public abstract class AddressedEntity {
+ private Entity body;
+
+ protected AddressedEntity() {
+ // JSONDecode���̌Ăяo���p
+ }
+
+ public AddressedEntity(Entity body) {
+ setBody(body);
+ }
+
+ public Entity getBody() {
+ return body;
+ }
+
+ public void setBody(Entity body) {
+ this.body = body;
+ }
+}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Entity.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Entity.java
new file mode 100644
index 0000000..59e4eb0
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Entity.java
@@ -0,0 +1,10 @@
+package org.ntlab.radishforandroidstudio.cactusClient.models;
+
+/**
+ * AddressedEntity�N���X�ɂĈ������̂�\�����ۃN���X
+ * @author r-isitani
+ *
+ */
+public abstract class Entity {
+
+}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/URIAddressedEntity.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/URIAddressedEntity.java
new file mode 100644
index 0000000..fddd54d
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/URIAddressedEntity.java
@@ -0,0 +1,30 @@
+package org.ntlab.radishforandroidstudio.cactusClient.models;
+
+import java.net.URI;
+
+public class URIAddressedEntity extends AddressedEntity {
+ private URI uri;
+
+ private URIAddressedEntity() {
+ // JSONDecode時の呼び出し用
+ }
+
+ public URIAddressedEntity(URI uri, Entity body) {
+ super(body);
+ setUri(uri);
+ }
+
+ public URIAddressedEntity(String str, Entity body) {
+ super(body);
+ setUri(URI.create(str));
+ }
+
+ public URI getUri() {
+ return uri;
+ }
+
+ public void setUri(URI uri) {
+ this.uri = uri;
+ }
+
+}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/test b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/test
deleted file mode 100644
index e69de29..0000000
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/test
+++ /dev/null
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
new file mode 100644
index 0000000..24d5bad
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/tests/SampleActivity.java
@@ -0,0 +1,24 @@
+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;
+
+import org.ntlab.radishforandroidstudio.R;
+
+public class SampleActivity extends AppCompatActivity {
+
+ @Override
+ 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/SampleGame2Fragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/tests/SampleGame2Fragment.java
new file mode 100644
index 0000000..b36586c
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/tests/SampleGame2Fragment.java
@@ -0,0 +1,143 @@
+package org.ntlab.radishforandroidstudio.cactusClient.tests;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+
+import org.ntlab.radishforandroidstudio.R;
+import org.ntlab.radishforandroidstudio.framework.animation.Animation3D;
+import org.ntlab.radishforandroidstudio.framework.gameMain.OvergroundActor;
+import org.ntlab.radishforandroidstudio.framework.gameMain.RealTime3DFragment;
+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.Vector3f;
+
+public class SampleGame2Fragment extends RealTime3DFragment {
+ private OvergroundActor pocha;
+ private Ground stage;
+ private boolean isTouched = false;
+ private float touchX = 0.0f;
+ private float touchY = 0.0f;
+
+ public SampleGame2Fragment() {
+ // Required empty public constructor
+ }
+
+ @Override
+ public 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();
+ }
+
+ 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
+ protected 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));
+ pocha.setVelocity(curV);
+ } else {
+ curV.setX(0.0);
+ curV.setZ(0.0);
+ pocha.setVelocity(curV);
+ }
+ camera.setViewPoint(pocha.getPosition().add(0.0, 15.0, 0.0));
+ camera.setViewLine(pocha.getDirection());
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ View view = inflater.inflate(R.layout.fragment_sample_game2, container, false);
+ view.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 view;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/tests/SampleGameFragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/tests/SampleGameFragment.java
new file mode 100644
index 0000000..720a447
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/tests/SampleGameFragment.java
@@ -0,0 +1,122 @@
+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.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.R;
+import org.ntlab.radishforandroidstudio.java3d.Vector3f;
+
+public class SampleGameFragment 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);
+
+// final OvergroundActor oga = new OvergroundActor(obj1, null) {
+// @Override
+// public Force3D getGravity() {
+// return new Force3D(0.0,0.0,0.0);
+// }
+// };
+// universe.place(oga);
+
+ // カメラの設定
+ camera.setViewPoint(new Position3D(0.0, 10.0, -20.0));
+ camera.addTarget(actor);
+
+ // フレームの間隔(ms)
+ start(20);
+
+ //onCreateOptionMenuの呼び出し
+ setHasOptionsMenu(true);
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.fragment_sample_game, 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/SampleUiFragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/tests/SampleUiFragment.java
new file mode 100644
index 0000000..3bf12b0
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/tests/SampleUiFragment.java
@@ -0,0 +1,141 @@
+package org.ntlab.radishforandroidstudio.cactusClient.tests;
+
+
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentTransaction;
+import android.view.LayoutInflater;
+import android.view.MenuItem;
+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.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) {
+ parentView = inflater.inflate(R.layout.fragment_real_time_3d, container, false);
+ initGameWindowView();
+ return parentView;
+ }
+
+ @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);
+ }
+
+ 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();
+ }
+}
\ 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
new file mode 100644
index 0000000..b6668d5
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/tests/StartFragment.java
@@ -0,0 +1,40 @@
+package org.ntlab.radishforandroidstudio.cactusClient.tests;
+
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+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.Button;
+
+import org.ntlab.radishforandroidstudio.R;
+
+public class StartFragment extends Fragment {
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.fragment_start, container, false);
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+
+ Button button = getActivity().findViewById(R.id.start_button);
+ button.setOnClickListener(new View.OnClickListener(){
+ @Override
+ public void onClick(View view) {
+ FragmentManager manager = getFragmentManager();
+ FragmentTransaction transaction = manager.beginTransaction();
+ transaction.replace(R.id.fragment_field,new SampleUiFragment());
+ transaction.addToBackStack(null);
+ transaction.commit();
+ }
+ });
+ }
+}
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
new file mode 100644
index 0000000..100114b
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/CharactersFragment.java
@@ -0,0 +1,37 @@
+package org.ntlab.radishforandroidstudio.cactusClient.views;
+
+import android.os.Bundle;
+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.support.v4.app.Fragment;
+import android.widget.Button;
+
+
+import org.ntlab.radishforandroidstudio.R;
+
+public class CharactersFragment extends Fragment {
+
+ public void onStart() {
+ super.onStart();
+
+ Button button = (Button) getActivity().findViewById(R.id.chooseInstances);
+ //↓↓↓↓↓↓↓↓画面遷移↓↓↓↓↓↓↓↓
+ button.setOnClickListener(new View.OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ //Toast.makeText(getActivity(), "hoge!", Toast.LENGTH_SHORT).show();
+
+ FragmentManager manager = getFragmentManager();
+ FragmentTransaction transaction = manager.beginTransaction();
+
+ transaction.replace(R.id.fragment_place, new InstancesFragment());
+
+ transaction.commit();
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/InstancesFragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/InstancesFragment.java
new file mode 100644
index 0000000..3c678f2
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/InstancesFragment.java
@@ -0,0 +1,49 @@
+package org.ntlab.radishforandroidstudio.cactusClient.views;
+
+
+import android.accounts.Account;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+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.Button;
+import android.widget.EditText;
+import android.widget.Toast;
+
+
+
+import org.ntlab.radishforandroidstudio.R;
+
+public class InstancesFragment extends Fragment {
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.instances_fragment, container, false);
+ }
+
+ public void onStart() {
+ super.onStart();
+
+ Button button = (Button) getActivity().findViewById(R.id.Instance1);
+ //↓↓↓↓↓↓↓↓画面遷移↓↓↓↓↓↓↓↓
+ button.setOnClickListener(new View.OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ //Toast.makeText(getActivity(), "hoge!", Toast.LENGTH_SHORT).show();
+
+ FragmentManager manager = getFragmentManager();
+ FragmentTransaction transaction = manager.beginTransaction();
+
+ transaction.replace(R.id.fragment_place, new CharactersFragment());
+
+ transaction.commit();
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/LoginFragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/LoginFragment.java
index 8a6bb3f..4cc9675 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/LoginFragment.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/LoginFragment.java
@@ -1,11 +1,11 @@
package org.ntlab.radishforandroidstudio.cactusClient.views;
+import android.accounts.Account;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
-import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -13,10 +13,17 @@
import android.widget.EditText;
import android.widget.Toast;
+import net.arnx.jsonic.JSON;
+
import org.ntlab.radishforandroidstudio.R;
+import org.ntlab.radishforandroidstudio.cactusClient.Cactus;
+import org.ntlab.radishforandroidstudio.cactusClient.connections.LoginFragmentConnection;
+import org.ntlab.radishforandroidstudio.cactusClient.views.InstancesFragment;
+import org.ntlab.radishforandroidstudio.cactusClient.models.URIAddressedEntity;
+import org.ntlab.radishforandroidstudio.framework.network.CallBack;
public class LoginFragment extends Fragment {
-// private URIAddressedEntity connection;
+ private LoginFragmentConnection connection;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
@@ -26,7 +33,6 @@
}
-
@Override
public void onStart() {
super.onStart();
@@ -42,6 +48,7 @@
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
+ transaction.addToBackStack(null);
transaction.replace(R.id.fragment_place, new SignUpFragment());
transaction.commit();
@@ -56,42 +63,54 @@
EditText userName = (EditText)getActivity().findViewById(R.id.inputUserName);
EditText passWord = (EditText)getActivity().findViewById(R.id.checkPassword);
- CharSequence userNameText = userName.getText();
- CharSequence passWordText = passWord.getText();
+ if (userName.getText().toString().isEmpty()) {
+ Toast.makeText(getActivity(), "ユーザー名が未記入です", Toast.LENGTH_SHORT).show();
+ } else if(passWord.getText().toString().isEmpty()){
+ Toast.makeText(getActivity(), "パスワードが未記入です", Toast.LENGTH_SHORT).show();
+ } else {
- Toast tp = Toast.makeText(getActivity(), passWordText, Toast.LENGTH_SHORT);
- tp.setGravity(Gravity.BOTTOM, 0, 0);
- tp.show();
+ connection = new LoginFragmentConnection();
+ connection.setCallBack(new CallBack() {
+ @Override
+ public void onResponse(String response) {
+ //通信した時の処理を書くのだよ
+ URIAddressedEntity lac = JSON.decode(response, URIAddressedEntity.class);
+
+ System.out.println("///////////////////////////////////////////////");
+ System.out.println(response);
-// if (userName.getText().toString().isEmpty()) {
-// Toast.makeText(getActivity(), "値が未記入です", Toast.LENGTH_SHORT).show();
-// } else {
-//
-// connection = new URIAddressedEntity();
-//
-// connection.setCallBack(new CallBack() {
-// @Override
-// public void onResponse(String response) {
-// //通信した時の処理を書くのだ
-// }
-//
-// });
-// connection.addFormParam("userName", userName.getText().toString());
-// connection.doPost();
-// }
+ //Cactus.setMyAccount((Account)lac.getBody());
+ if(response.contains("\"login\":true,")){
+ Toast.makeText(getActivity(),"ログインに成功しました。", Toast.LENGTH_SHORT).show();
+ FragmentManager manager = getFragmentManager();
+ FragmentTransaction transaction = manager.beginTransaction();
+ transaction.replace(R.id.fragment_place, new InstancesFragment());
+ transaction.commit();
+
+ }else {
+ Toast.makeText(getActivity(),"ログインに失敗しました。", Toast.LENGTH_SHORT).show();
+ }
+
+ }
+ });
+ connection.addFormParam("userID", userName.getText().toString());
+ connection.addFormParam("userPass", passWord.getText().toString());
+ connection.doPut();
+ }
}
});
+
}
}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/SignUpFragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/SignUpFragment.java
index 84b31ad..4506291 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/SignUpFragment.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/SignUpFragment.java
@@ -1,6 +1,5 @@
package org.ntlab.radishforandroidstudio.cactusClient.views;
-
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
@@ -11,9 +10,14 @@
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
+import net.arnx.jsonic.JSON;
import org.ntlab.radishforandroidstudio.R;
+import org.ntlab.radishforandroidstudio.cactusClient.connections.SignUpFragmentConnection;
+import org.ntlab.radishforandroidstudio.cactusClient.models.URIAddressedEntity;
+import org.ntlab.radishforandroidstudio.framework.network.CallBack;
public class SignUpFragment extends Fragment {
+ private SignUpFragmentConnection connection;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
@@ -26,8 +30,10 @@
//↓↓↓↓↓↓↓↓画面遷移↓↓↓↓↓↓↓↓
@Override
public void onStart() {
+
super.onStart();
+ //ログインボタン
Button button = (Button) getActivity().findViewById(R.id.LoginButton2);
button.setOnClickListener(new View.OnClickListener() {
@@ -38,6 +44,7 @@
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
+ transaction.addToBackStack(null);
//transaction.replace(R.id.fragment_place, new LoginFragment());
transaction.replace(R.id.fragment_place, new LoginFragment());
@@ -45,35 +52,48 @@
}
});
- Button sihnupButton = (Button) getActivity().findViewById(R.id.signUp2);
- sihnupButton.setOnClickListener(new View.OnClickListener(){
+ //サインアップ
+ Button signUpButton = (Button) getActivity().findViewById(R.id.signUp2);
+ signUpButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
EditText inputPassword = (EditText)getActivity().findViewById(R.id.inputPassword2);
EditText checkPassWord = (EditText)getActivity().findViewById(R.id.checkPassword);
+ EditText inputUserName = (EditText)getActivity().findViewById(R.id.inputUserName);
+ EditText inputUserID = (EditText)getActivity().findViewById(R.id.inputUserID);
- String strInputPassword = EditTextChangeToString(inputPassword);
- String strCheckPassWord = EditTextChangeToString(checkPassWord);
- if (strInputPassword.isEmpty()) {
+ if(inputUserID.getText().toString().contains(" ") || inputUserID.getText().toString().contains(" ")){
+ Toast.makeText(getActivity(), "空白の含むIDは登録できません", Toast.LENGTH_SHORT).show();
+ }else if (inputPassword.getText().toString().isEmpty()) {
Toast.makeText(getActivity(), "パスワードを入力してください", Toast.LENGTH_SHORT).show();
- } else if (strCheckPassWord.isEmpty()) {
+ } else if (checkPassWord.getText().toString().isEmpty()) {
Toast.makeText(getActivity(), "確認用パスワードを入力してください", Toast.LENGTH_SHORT).show();
- } else if (!strInputPassword.equals(strCheckPassWord )) {
+ } else if (!inputPassword.getText().toString().equals(checkPassWord.getText().toString() )) {
Toast.makeText(getActivity(), "パスワードが一致しません", Toast.LENGTH_SHORT).show();
}else{
- Toast.makeText(getActivity(), "アカウント作成に成功しましたね", Toast.LENGTH_SHORT).show();
+
+ connection = new SignUpFragmentConnection();
+ connection.setCallBack(new CallBack() {
+ @Override
+ public void onResponse(String response) {
+ //通信した時の処理を書くのだよ
+ URIAddressedEntity ac = JSON.decode(response, URIAddressedEntity.class);
+ System.out.println(ac.getUri());
+ System.out.println(response);
+ Toast.makeText(getActivity(),response, Toast.LENGTH_SHORT).show();
+ }
+ });
+
+ connection.addFormParam("userID", inputUserID.getText().toString());
+ connection.addFormParam("userPass", inputPassword.getText().toString());
+ connection.addFormParam("userName", inputUserName.getText().toString());
+ connection.doPost();
+
}
}
});
}
- private static String EditTextChangeToString(EditText text){
- CharSequence CharSequenceText = text.getText();
-
- String str = CharSequenceText.toString();
-
- return str;
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTCameraController.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTCameraController.java
new file mode 100644
index 0000000..cbf951e
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTCameraController.java
@@ -0,0 +1,34 @@
+package org.ntlab.radishforandroidstudio.framework.RWT;
+
+import android.content.Context;
+import android.support.annotation.Nullable;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+
+import org.ntlab.radishforandroidstudio.framework.listener.PadListener;
+import org.ntlab.radishforandroidstudio.framework.subject.PadSubject;
+
+public class RWTCameraController extends RWTView {
+ public RWTCameraController(Context context) {
+ super(context);
+ }
+
+ public RWTCameraController(Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public RWTCameraController(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+
+
+ return true;
+ }
+
+ public void addListener(PadListener listener) {
+ PadSubject.getInstance().addListener(listener);
+ }
+}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTDrawable.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTDrawable.java
new file mode 100644
index 0000000..7fcc412
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTDrawable.java
@@ -0,0 +1,34 @@
+package org.ntlab.radishforandroidstudio.framework.RWT;
+
+import org.ntlab.radishforandroidstudio.java3d.GraphicsContext3D;
+
+/**
+ * 描画可能な要素を示すインタフェース
+ *
+ * @author s.iwatani
+ */
+public interface RWTDrawable {
+ /**
+ * 描画を行う
+ *
+ * @author s.iwatani
+ * @param gc3D
+ */
+ public void draw(GraphicsContext3D gc3D);
+
+ /**
+ * 描画するかしないかをセット
+ *
+ * @author s.iwatani
+ * @param isDraw trueで描画する
+ */
+ public void setIsDraw(boolean isDraw);
+
+ /**
+ * 描画するかしないかを取得
+ *
+ * @author s.iwatani
+ * @return boolean
+ */
+ public boolean getIsDraw();
+}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTImageLoader.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTImageLoader.java
new file mode 100644
index 0000000..b571577
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTImageLoader.java
@@ -0,0 +1,100 @@
+package org.ntlab.radishforandroidstudio.framework.RWT;
+
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.util.DisplayMetrics;
+
+import org.ntlab.radishforandroidstudio.framework.model3D.Position3D;
+import org.ntlab.radishforandroidstudio.java3d.ImageComponent2D;
+import org.ntlab.radishforandroidstudio.java3d.Texture;
+import org.ntlab.radishforandroidstudio.java3d.Texture2D;
+
+import java.io.InputStream;
+
+/**
+ * 画像ローダー
+ * java3d.TextureLoaderから取ってきた
+ * 物体に貼り付けるテクスチャとかには使えないと思われる
+ * RWTSprite用
+ *
+ * @author s.iwatani
+ */
+public class RWTImageLoader {
+ public static final int BY_REFERENCE = 2;
+ public static final int Y_UP = 4;
+ private InputStream in = null;
+ private Resources res = null;
+ private int id = 0;
+ private Bitmap bitmap;
+ private int format, texFormat;
+ private Position3D size = null;
+
+ public RWTImageLoader(InputStream in, int flags) {
+ this.in = in;
+ }
+
+ public RWTImageLoader(Resources res, int id, int flags) {
+ this(res, id, flags, ImageComponent2D.FORMAT_RGB);
+ }
+
+ /**
+ * TextureLoaderコンストラクタ
+ *
+ * @author s.iwatani
+ * @param res Resources
+ * @param id リソースID
+ * @param flags 知らん
+ * @param format 画像がRGBかRGBAか ImageComponent2D.FORMAT_RGBまたはImageComponent2D.FORMAT_RGBA
+ */
+ public RWTImageLoader(Resources res, int id, int flags, int format) {
+ this.res = res;
+ this.id = id;
+ setFormat(format);
+ }
+
+ /**
+ * 画像がRGBかRGBAかをセット
+ *
+ * @param format ImageComponent2D.FORMAT_RGBまたはImageComponent2D.FORMAT_RGBA
+ */
+ public void setFormat(int format) {
+ this.format = format;
+ if (this.format == ImageComponent2D.FORMAT_RGB) {
+ texFormat = Texture.RGB;
+ }
+ else {
+ texFormat = Texture.RGBA;
+ }
+ }
+
+ public ImageComponent2D getImage() {
+ if (in != null) {
+ bitmap = BitmapFactory.decodeStream(in);
+ } else if (res != null) {
+ bitmap = BitmapFactory.decodeResource(res, id);
+ }
+ if (format == ImageComponent2D.FORMAT_RGBA) {
+ bitmap.setHasAlpha(true);
+ }
+
+ size = new Position3D(bitmap.getWidth(), bitmap.getHeight(), 0.0);
+ return new ImageComponent2D(format, bitmap);
+ }
+
+ public Position3D getSize() {
+ return size;
+ }
+
+ public ImageComponent2D setImage(Bitmap bitmap) {
+ this.bitmap = bitmap;
+ return new ImageComponent2D(format, this.bitmap);
+ }
+
+ public Texture getTexture() {
+ ImageComponent2D ic2 = getImage();
+ Texture tex = new Texture2D(Texture.BASE_LEVEL, texFormat, bitmap.getWidth(), bitmap.getHeight());
+ tex.setImage(0, ic2);
+ return tex;
+ }
+}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTPad.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTPad.java
new file mode 100644
index 0000000..d232c13
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTPad.java
@@ -0,0 +1,124 @@
+package org.ntlab.radishforandroidstudio.framework.RWT;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Point;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+
+import org.ntlab.radishforandroidstudio.framework.event.PadEvent;
+import org.ntlab.radishforandroidstudio.framework.listener.PadListener;
+import org.ntlab.radishforandroidstudio.framework.listener.SamplePadListener;
+import org.ntlab.radishforandroidstudio.framework.subject.PadSubject;
+
+/**
+ * Padクラス
+ * Android Viewに貼り付けているもの
+ *
+ * @author s.iwatani
+ */
+
+public class RWTPad extends RWTView {
+ private MotionEvent touchInfo = null;
+ private Point circlePos = null;
+
+ public RWTPad(Context context) {
+ super(context);
+ }
+
+ public RWTPad(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public RWTPad(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ /**
+ * 状態を初期化する
+ */
+ @Override
+ public void init() {
+ super.init();
+ // Listenerサンプル
+ addListener(new SamplePadListener());
+ }
+
+ /**
+ * canvasに描画を行う
+ *
+ * @param canvas
+ */
+ // TODO: 見た目の調整
+ @Override
+ public void onDraw(Canvas canvas) {
+ // super.onDraw(canvas);
+ Paint paint = this.createRedPaint();
+ canvas.drawCircle(getSize().x / 2, getSize().x / 2, getSize().x / 2, paint);
+
+ // TODO: あとでいい感じになるように修正
+ // このクラス内の他の部分も同様
+ paint.setColor(Color.BLUE);
+ if (circlePos == null) {
+ circlePos = new Point(getSize().x / 2, getSize().y / 2);
+ }
+ canvas.drawCircle(circlePos.x, circlePos.y, getSize().x / 6, paint);
+ }
+
+ private Paint createRedPaint() {
+ Paint paint = new Paint();
+ paint.setAntiAlias(true);
+ paint.setColor(Color.RED);
+ // 以下の値が小さいと点が見えない可能性があります
+ paint.setStrokeWidth(10);
+ return paint;
+ }
+
+ /**
+ * Padをタッチしたときのイベント
+ *
+ * @param event
+ * @return
+ */
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ // 中央からの距離を取得
+ float dx = event.getX() - getSize().x / 2;
+ float dy = event.getY() - getSize().y / 2;
+ float rawLen = (float)Math.sqrt(dx*dx + dy*dy);
+ float angle = (float)Math.atan2(dy, dx);
+ float maxLen = getSize().x / 2;
+ float len = rawLen / maxLen;
+ float fixLen = Math.max(Math.min(1.f, len), -1.f);
+
+ circlePos.x = (int)event.getX();
+ circlePos.y = (int)event.getY();
+
+ if (len > 1) {
+ circlePos.x = (int)(fixLen * Math.cos(angle) * maxLen + maxLen);
+ circlePos.y = (int)(fixLen * Math.sin(angle) * maxLen + maxLen);
+ }
+
+ touchInfo = event;
+ PadEvent padEvent = new PadEvent(event, fixLen, angle);
+ PadSubject.getInstance().notifyListeners(padEvent);
+
+ if (event.getAction() == MotionEvent.ACTION_UP) {
+ circlePos.x = getSize().x / 2;
+ circlePos.y = getSize().y / 2;
+ }
+
+ invalidate();
+ return true;
+ }
+
+ /**
+ * Pad操作時に発生するイベントのリスナを追加する
+ * @param listener
+ */
+ public void addListener(PadListener listener) {
+ PadSubject.getInstance().addListener(listener);
+ }
+}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTRenderer.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTRenderer.java
index 8213ff5..ca2a4c7 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTRenderer.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTRenderer.java
@@ -1,26 +1,27 @@
package org.ntlab.radishforandroidstudio.framework.RWT;
-import android.opengl.GLSurfaceView.Renderer;
-
-import java.util.ArrayList;
-
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
+import android.opengl.GLSurfaceView.Renderer;
+
import org.ntlab.radishforandroidstudio.framework.view3D.Camera3D;
import org.ntlab.radishforandroidstudio.framework.view3D.Viewer3D;
import org.ntlab.radishforandroidstudio.java3d.GraphicsContext3D;
import org.ntlab.radishforandroidstudio.java3d.Light;
+import java.util.ArrayList;
+
public class RWTRenderer implements Renderer {
protected Viewer3D viewer;
protected Camera3D camera;
protected GraphicsContext3D gc3D = null;
+ protected GL10 gl;
public RWTRenderer() {
super();
}
-
+
public void attachCamera(Camera3D camera) {
// onSurfaceCreated()より先に呼ばれる
this.camera = camera;
@@ -29,6 +30,7 @@
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
+ this.gl = gl;
gc3D = new GraphicsContext3D(gl);
ArrayList lights = camera.getUniverse().getLights();
for (int i = 0; i < lights.size(); i++){
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTSprite.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTSprite.java
new file mode 100644
index 0000000..ffebc9e
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTSprite.java
@@ -0,0 +1,156 @@
+package org.ntlab.radishforandroidstudio.framework.RWT;
+
+import android.content.res.Resources;
+import android.opengl.GLUtils;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.TableLayout;
+
+import org.ntlab.radishforandroidstudio.framework.model3D.Position3D;
+import org.ntlab.radishforandroidstudio.java3d.GraphicsContext3D;
+import org.ntlab.radishforandroidstudio.java3d.ImageComponent2D;
+import org.ntlab.radishforandroidstudio.java3d.Texture;
+import org.ntlab.radishforandroidstudio.java3d.TextureLoader;
+
+import java.util.ArrayList;
+
+/**
+ * 画像管理クラス
+ * 座標は左下が原点であることに注意(DirectXは左上のため)
+ *
+ * @author s.iwatani
+ */
+public class RWTSprite implements RWTDrawable {
+ private int[] textureId = null;
+ private ImageComponent2D image = null;
+ private boolean isDraw = true;
+
+ // 表示座標
+ private Position3D pos = new Position3D(0.f, 0.f, 0.f);
+ private Position3D texSize = new Position3D(0.f, 0.f, 0.f);
+ private Position3D texPos = new Position3D(0.f, 0.f, 0.f);
+ private Position3D viewSize = new Position3D(0.f, 0.f, 0.f);
+
+ public RWTSprite() {
+ }
+
+ /**
+ * 表示する座標を取得
+ *
+ * @author s.iwatani
+ * @return Position3D
+ */
+ final public Position3D getPosition() {
+ return pos;
+ }
+
+ /**
+ * 表示サイズを取得
+ *
+ * @author s.iwatani
+ * @return Position3D
+ */
+ final public Position3D getViewSize() {
+ return viewSize;
+ }
+
+ /**
+ * 画像サイズを取得
+ *
+ * @author s.iwatani
+ * @return Position3D
+ */
+ final public Position3D getTextureSize() {
+ return texSize;
+ }
+
+ /**
+ * 描画する座標をセット
+ *
+ * @author s.iwatani
+ * @param x x座標
+ * @param y y座標
+ */
+ public void setPosition(float x, float y) {
+ pos.setX(x);
+ pos.setY(y);
+ }
+
+ /**
+ * 描画する座標をセット
+ * @param pos Position3D
+ */
+ public void setPosition(Position3D pos) {
+ setPosition((float)pos.getX(), (float)pos.getY());
+ }
+
+ /**
+ * テクスチャをセット
+ *
+ * @author s.iwatani
+ * @param res Resources
+ * @param id リソースのID R.drawable.なんちゃらみたいなやつ
+ *
+ * TODO: 画像サイズが元と違うため,そのサイズが元のものになるようにする
+ * Bitmap.createScaledBitmap(robot, 100, 100, false);のやつ
+ */
+ public void setTexture(Resources res, int id, boolean isEnableAlpha) {
+ RWTImageLoader texLoader = new RWTImageLoader(res, id,
+ TextureLoader.BY_REFERENCE | TextureLoader.Y_UP,
+ isEnableAlpha ? ImageComponent2D.FORMAT_RGBA : ImageComponent2D.FORMAT_RGB);
+ image = texLoader.getImage();
+ Texture tex = texLoader.getTexture();
+ Log.v("moji", "faaa");
+ Log.v("moji", ((Double)(texLoader.getSize().getX())).toString() + ", " + ((Double)(texLoader.getSize().getY())).toString());
+ Log.v("moji", "faaa");
+
+ texPos.setX(0.f);
+ texPos.setY(image.getBitmap().getHeight());
+ texSize.setX(image.getBitmap().getWidth());
+ texSize.setY(-image.getBitmap().getHeight());
+ pos.set(0.0, 0.0, 0.0);
+ viewSize.setX((float)image.getBitmap().getWidth());
+ viewSize.setY((float)image.getBitmap().getHeight());
+ }
+
+ /**
+ * 画像を描画する
+ *
+ * @author s.iwatani
+ * @param gc3D GL10
+ */
+ public void draw(GraphicsContext3D gc3D) {
+ if (!getIsDraw()) {
+ return;
+ }
+
+ if (textureId == null) {
+ textureId = new int[1];
+ textureId[0] = gc3D.loadImage(image);
+ }
+ gc3D.draw(textureId[0], pos, texPos, texSize, viewSize);
+ }
+
+ /**
+ * 描画するかしないかをセット
+ *
+ * @author s.iwatani
+ * @param isDraw trueで描画する
+ */
+ @Override
+ public void setIsDraw(boolean isDraw) {
+ this.isDraw = isDraw;
+ }
+
+ /**
+ * 描画するかしないかを取得
+ *
+ * @author s.iwatani
+ * @return boolean
+ */
+ @Override
+ public boolean getIsDraw() {
+ return isDraw;
+ }
+}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTSurfaceView.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTSurfaceView.java
index 2aa9093..aa7b742 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTSurfaceView.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTSurfaceView.java
@@ -11,18 +11,17 @@
public RWTSurfaceView(Context context) {
this(context, true);
}
-
+
public RWTSurfaceView(Context context, boolean bInitRenderer) {
super(context);
if (bInitRenderer) {
renderer = new RWTRenderer();
setEGLConfigChooser(8, 8, 8, 8, 16, 0);
- this.setRenderer(renderer);
+ this.setRenderer(renderer);
}
}
public void attachCamera(Camera3D camera) {
renderer.attachCamera(camera);
}
-
}
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
new file mode 100644
index 0000000..e528f91
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTUIFragment.java
@@ -0,0 +1,35 @@
+package org.ntlab.radishforandroidstudio.framework.RWT;
+
+import android.support.annotation.NonNull;
+import android.support.v4.app.Fragment;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+
+import org.ntlab.radishforandroidstudio.R;
+
+import static android.view.View.*;
+
+public class RWTUIFragment extends Fragment implements OnTouchListener {
+ public RWTUIFragment() {}
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.ui_fragment, container, false);
+ }
+
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ System.out.println("RWTUIFragment touch");
+ v.performClick();
+ return false;
+ }
+}
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
new file mode 100644
index 0000000..6037cb1
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTView.java
@@ -0,0 +1,68 @@
+package org.ntlab.radishforandroidstudio.framework.RWT;
+
+import android.content.Context;
+import android.graphics.Point;
+import android.support.annotation.Nullable;
+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;
+ private Point pos = null;
+
+ public RWTView(Context context) {
+ super(context);
+ init();
+ }
+
+ public RWTView(Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ init();
+ }
+
+ public RWTView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ init();
+ }
+
+ public void init() {
+ dp = getResources().getDisplayMetrics().density;
+ }
+
+ /**
+ * 画面上に表示されるサイズを取得
+ * @return Point
+ */
+ public Point getSize() {
+ if (size == null) {
+ size = new Point(getWidth(), getHeight());
+ }
+ return size;
+ }
+
+ /**
+ * 画面上に表示される左上の座標を取得
+ * @return Point
+ */
+ public Point getPosition() {
+ if (pos == null) {
+ pos = new Point(getLeft(), getTop());
+ }
+ return pos;
+ }
+
+ /**
+ * DPを乗算する
+ * @param a
+ * @return int
+ */
+ public int applyDp(int a) {
+ return (int)(a * dp);
+ }
+}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/MyEvent.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/MyEvent.java
new file mode 100644
index 0000000..37c04b4
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/MyEvent.java
@@ -0,0 +1,15 @@
+package org.ntlab.radishforandroidstudio.framework.event;
+
+import android.view.MotionEvent;
+
+public class MyEvent {
+ MotionEvent e;
+
+ public MyEvent(MotionEvent e) {
+ this.e = e;
+ }
+
+ public final MotionEvent getMotionEvent() {
+ return e;
+ }
+}
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
new file mode 100644
index 0000000..8e5d25e
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/PadEvent.java
@@ -0,0 +1,33 @@
+package org.ntlab.radishforandroidstudio.framework.event;
+
+import android.view.MotionEvent;
+
+public class PadEvent extends MyEvent{
+ private MotionEvent e;
+
+ /**
+ * パッドを倒した距離
+ * 範囲は 0<=length<=1
+ */
+ private float length;
+
+ /**
+ * パッドを倒した方向
+ * 単位radian
+ */
+ private float angle;
+
+ public PadEvent(MotionEvent e, float length, float angle) {
+ super(e);
+ this.length = length;
+ this.angle = angle;
+ }
+
+ public final float getLength() {
+ return length;
+ }
+
+ public final float getAngle() {
+ return angle;
+ }
+}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/RealTime3DActivity.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/RealTime3DActivity.java
index 2bb5dd7..c5e84eb 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/RealTime3DActivity.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/RealTime3DActivity.java
@@ -1,27 +1,32 @@
package org.ntlab.radishforandroidstudio.framework.gameMain;
import android.os.Bundle;
+import android.widget.LinearLayout;
import org.ntlab.radishforandroidstudio.framework.RWT.RWTSurfaceView;
import org.ntlab.radishforandroidstudio.framework.model3D.Universe;
import org.ntlab.radishforandroidstudio.framework.view3D.Camera3D;
+//addcontentViewのサンプルとして作成
public abstract class RealTime3DActivity extends RealTimeActivity {
protected Universe universe;
protected Camera3D camera;
protected RWTSurfaceView view;
-
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+
universe = new Universe();
-
+
camera = new Camera3D(universe);
-
+
view = new RWTSurfaceView(this);
view.setRenderMode(RWTSurfaceView.RENDERMODE_WHEN_DIRTY);
view.attachCamera(camera);
- setContentView(view);
+
+ addContentView(view,new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
+
}
protected void update(long interval) {
@@ -30,6 +35,6 @@
camera.adjust(interval);
view.requestRender();
}
-
+
abstract protected void progress(long interval);
}
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
new file mode 100644
index 0000000..67c6d5b
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/RealTime3DFragment.java
@@ -0,0 +1,46 @@
+package org.ntlab.radishforandroidstudio.framework.gameMain;
+
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import org.ntlab.radishforandroidstudio.R;
+import org.ntlab.radishforandroidstudio.framework.RWT.RWTSurfaceView;
+import org.ntlab.radishforandroidstudio.framework.model3D.Universe;
+import org.ntlab.radishforandroidstudio.framework.view3D.Camera3D;
+
+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) {
+ super.onCreate(savedInstanceState);
+ universe = new Universe();
+ camera = new Camera3D(universe);
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.fragment_real_time_3d, container, false);
+ }
+
+ @Override
+ protected void update(long interval) {
+ progress(interval);
+ universe.update(interval);
+ camera.adjust(interval);
+ view.requestRender();
+ }
+
+ protected void progress(long interval) {
+
+ }
+}
+
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/RealTimeActivity.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/RealTimeActivity.java
index 29025ca..0a85e18 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/RealTimeActivity.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/RealTimeActivity.java
@@ -10,38 +10,38 @@
//インターバル確認用変数
private long interval = 15L;
private long prevTime = 0L;
-
+
private ScheduledThreadPoolExecutor schedule = new ScheduledThreadPoolExecutor(1);
private boolean fixedInterval;
-
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- }
-
+ }
+
protected void start(long interval){
this.interval = interval;
this.fixedInterval = false;
schedule.scheduleWithFixedDelay(this, interval, interval, TimeUnit.MILLISECONDS);
}
-
+
protected void start(long delay, long interval){
this.interval = interval;
this.fixedInterval = false;
schedule.scheduleWithFixedDelay(this, delay, interval, TimeUnit.MILLISECONDS);
}
-
+
protected void start(long delay, long interval, boolean fixedInterval){
this.interval = interval;
this.fixedInterval = fixedInterval;
schedule.scheduleWithFixedDelay(this, delay, interval, TimeUnit.MILLISECONDS);
}
-
+
protected void stop() {
schedule.shutdown();
}
-
+
//繰り返し実行される部分
public void run(){
long interval;
@@ -55,7 +55,7 @@
}
update(interval);
}
-
+
//intervalミリ秒のインターバルをおいて定期実行
protected abstract void update(long interval);
}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/RealTimeFragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/RealTimeFragment.java
new file mode 100644
index 0000000..6fa410f
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/RealTimeFragment.java
@@ -0,0 +1,74 @@
+package org.ntlab.radishforandroidstudio.framework.gameMain;
+
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import org.ntlab.radishforandroidstudio.R;
+
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+public abstract class RealTimeFragment extends Fragment implements Runnable{
+ //インターバル確認用変数
+ private long interval = 15L;
+ private long prevTime = 0L;
+
+ private ScheduledThreadPoolExecutor schedule = new ScheduledThreadPoolExecutor(1);
+ private boolean fixedInterval;
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.fragment_real_time, container, false);
+ }
+
+ protected void start(long interval){
+ this.interval = interval;
+ this.fixedInterval = false;
+ schedule.scheduleWithFixedDelay(this, interval, interval, TimeUnit.MILLISECONDS);
+ }
+
+ protected void start(long delay, long interval){
+ this.interval = interval;
+ this.fixedInterval = false;
+ schedule.scheduleWithFixedDelay(this, delay, interval, TimeUnit.MILLISECONDS);
+ }
+
+ protected void start(long delay, long interval, boolean fixedInterval){
+ this.interval = interval;
+ this.fixedInterval = fixedInterval;
+ schedule.scheduleWithFixedDelay(this, delay, interval, TimeUnit.MILLISECONDS);
+ }
+
+
+ protected void stop() {
+ schedule.shutdown();
+ }
+
+ //繰り返し実行される部分
+ public void run(){
+ long interval;
+ if (prevTime == 0L || fixedInterval) {
+ interval = this.interval;
+ prevTime = System.currentTimeMillis();
+ } else {
+ long curTime = System.currentTimeMillis();
+ interval = curTime - prevTime;
+ prevTime = curTime;
+ }
+ update(interval);
+ }
+ //intervalミリ秒のインターバルをおいて定期実行
+ protected abstract void update(long interval);
+
+}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/listener/MyListener.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/listener/MyListener.java
new file mode 100644
index 0000000..64943d5
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/listener/MyListener.java
@@ -0,0 +1,19 @@
+package org.ntlab.radishforandroidstudio.framework.listener;
+
+import org.ntlab.radishforandroidstudio.framework.event.MyEvent;
+
+/**
+ * 全リスナの基底クラス
+ *
+ * @author s.iwatani
+ * @param イベントの型
+ */
+public interface MyListener {
+ /**
+ * イベント発生時に実行するメソッド
+ *
+ * @param event イベントの情報
+ * @return
+ */
+ boolean onEvent(EventType event);
+}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/listener/PadListener.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/listener/PadListener.java
new file mode 100644
index 0000000..577fce2
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/listener/PadListener.java
@@ -0,0 +1,10 @@
+package org.ntlab.radishforandroidstudio.framework.listener;
+
+import org.ntlab.radishforandroidstudio.framework.event.PadEvent;
+
+/**
+ * Padのリスナ
+ *
+ * @author s.iwatani
+ */
+public interface PadListener extends MyListener {}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/listener/SamplePadListener.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/listener/SamplePadListener.java
new file mode 100644
index 0000000..c7d4751
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/listener/SamplePadListener.java
@@ -0,0 +1,11 @@
+package org.ntlab.radishforandroidstudio.framework.listener;
+
+import org.ntlab.radishforandroidstudio.framework.event.PadEvent;
+
+public class SamplePadListener implements PadListener {
+ @Override
+ public boolean onEvent(PadEvent event) {
+ System.out.println("PadListener Length:" + event.getLength() + " angle:" + event.getAngle());
+ return false;
+ }
+}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/MySubject.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/MySubject.java
new file mode 100644
index 0000000..2ec1f31
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/MySubject.java
@@ -0,0 +1,59 @@
+package org.ntlab.radishforandroidstudio.framework.subject;
+
+import android.view.InputEvent;
+
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+import org.ntlab.radishforandroidstudio.framework.event.MyEvent;
+import org.ntlab.radishforandroidstudio.framework.listener.MyListener;
+
+/**
+ * Listenerへイベントを通知するクラス
+ *
+ * @author s.iwatani
+ * @param リスナの型
+ * @param イベントを保存する型
+ */
+public abstract class MySubject {
+ protected Set listenerSet = new CopyOnWriteArraySet<>();
+
+ public MySubject() {}
+
+ /**
+ * リスナを追加する
+ *
+ * @author s.iwatani
+ * @param listener
+ */
+ public void addListener(ListenerType listener) {
+ listenerSet.add(listener);
+ }
+
+ /**
+ * 指定したリスナを削除する
+ *
+ * @author s.iwatani
+ * @param listener
+ */
+ public void removeListener(ListenerType listener) { listenerSet.remove(listener); };
+
+ /**
+ * リスナをすべて削除する
+ *
+ * @author s.iwatani
+ */
+ public void clearListener() { listenerSet.clear(); };
+
+ /**
+ * イベントを通知する
+ *
+ * @author s.iwatani
+ * @param event イベントの情報を保存したもの
+ */
+ public void notifyListeners(EventType event) {
+ for (ListenerType listener : listenerSet) {
+ listener.onEvent(event);
+ }
+ }
+}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/PadSubject.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/PadSubject.java
new file mode 100644
index 0000000..441dad9
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/PadSubject.java
@@ -0,0 +1,16 @@
+package org.ntlab.radishforandroidstudio.framework.subject;
+
+import org.ntlab.radishforandroidstudio.framework.event.PadEvent;
+import org.ntlab.radishforandroidstudio.framework.listener.PadListener;
+
+// 実装いらない説
+// Listener側と同じようにC++のテンプレート特殊化的なことだけして中身なしにするかも
+public class PadSubject extends MySubject {
+ public final static PadSubject own = new PadSubject();
+
+ private PadSubject() { super(); }
+
+ public static PadSubject getInstance() {
+ return own;
+ }
+}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/java3d/GraphicsContext3D.java b/app/src/main/java/org/ntlab/radishforandroidstudio/java3d/GraphicsContext3D.java
index cb0fe2e..cd13e19 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/java3d/GraphicsContext3D.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/java3d/GraphicsContext3D.java
@@ -1,5 +1,6 @@
package org.ntlab.radishforandroidstudio.java3d;
+import android.graphics.Bitmap;
import android.opengl.GLU;
import android.opengl.GLUtils;
@@ -10,6 +11,8 @@
import java.util.HashMap;
import javax.microedition.khronos.opengles.GL10;
+import javax.microedition.khronos.opengles.GL11;
+import javax.microedition.khronos.opengles.GL11Ext;
public class GraphicsContext3D {
private GL10 gl;
@@ -348,6 +351,72 @@
}
}
+ /**
+ * 画像を流し込む
+ *
+ * @author s.iwatani
+ * @param image ImageComponent2D
+ * @return int textureId
+ */
+ public int loadImage(ImageComponent2D image) {
+ int[] textureId = new int[1];
+ gl.glGenTextures(1, textureId, 0);
+ //テクスチャIDに対応するテクスチャをバインドする
+ gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId[0]);
+
+ // 初回のみ画像を流し込む
+ GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, image.getBitmap(), 0);
+ return textureId[0];
+ }
+
+ /**
+ * Bitmap描画
+ *
+ * @author s.iwatani
+ * @param textureId
+ * @param pos
+ * @param texPos
+ * @param texSize
+ * @param viewSize
+ */
+ public void draw(int textureId, Position3D pos, Position3D texPos, Position3D texSize, Position3D viewSize) {
+ //テクスチャIDに対応するテクスチャをバインドする
+ gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId);
+
+ // 拡大縮小のアルゴリズム指定
+ gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
+ gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST);
+
+ int rect[] = { (int)texPos.getX(), (int)texPos.getY(), (int)texSize.getX(), (int)texSize.getY()};
+ ((GL11) gl).glTexParameteriv(GL10.GL_TEXTURE_2D, GL11Ext.GL_TEXTURE_CROP_RECT_OES, rect, 0);
+ ((GL11Ext) gl).glDrawTexfOES((int)pos.getX(), (int)pos.getY(), (int)pos.getZ(), (int)viewSize.getX(), (int)viewSize.getY());
+ }
+
+ public void startDrawImage() {
+ // なんかやってる
+ gl.glDisable(GL10.GL_DEPTH_TEST);
+ gl.glDisable(GL10.GL_DITHER);
+ gl.glDisable(GL10.GL_LIGHTING);
+
+// gl.glEnable(GL10.GL_ALPHA_TEST);
+ // アルファ値を適用するための一連
+ gl.glEnable(GL10.GL_ALPHA); // GL_INVALID_ENUMが出るけどちゃんと動いてる.謎
+ gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
+ gl.glEnable(GL10.GL_BLEND);
+
+ gl.glEnable(GL10.GL_TEXTURE_2D);
+
+ // テクスチャ0番をアクティブにする(よくわからん)
+ gl.glActiveTexture(GL10.GL_TEXTURE0);
+ }
+
+ public void endDrawImage() {
+ gl.glEnable(GL10.GL_DEPTH_TEST);
+ gl.glEnable(GL10.GL_DITHER);
+ gl.glEnable(GL10.GL_LIGHTING);
+ gl.glDisable(GL10.GL_ALPHA);
+ }
+
private void setTextureAttributes(TextureAttributes ta) {
int textureMode = ta.getTextureMode();
switch (textureMode) {
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/sample/SampleActivity.java b/app/src/main/java/org/ntlab/radishforandroidstudio/sample/SampleActivity.java
new file mode 100644
index 0000000..76f1430
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/sample/SampleActivity.java
@@ -0,0 +1,178 @@
+package org.ntlab.radishforandroidstudio.sample;
+
+import android.annotation.SuppressLint;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.Button;
+import android.widget.LinearLayout;
+
+import org.ntlab.radishforandroidstudio.R;
+import org.ntlab.radishforandroidstudio.framework.animation.Animation3D;
+import org.ntlab.radishforandroidstudio.framework.gameMain.OvergroundActor;
+import org.ntlab.radishforandroidstudio.framework.gameMain.RealTime3DActivity;
+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.Vector3f;
+
+//addContentViewの追加のためにSampleを作成
+public class SampleActivity extends RealTime3DActivity {
+
+ private OvergroundActor pocha;
+ private Ground stage;
+ private boolean isTouched = false;
+ private float touchX = 0.0f;
+ private float touchY = 0.0f;
+
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ //ボタンの重ね合わせ
+ View view1 = getLayoutInflater().inflate(R.layout.button_layout, null);
+ addContentView(view1, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
+
+ //環境光
+ 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();
+ }
+
+ 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);
+
+
+ //top-button操作
+ Button top_button = findViewById(R.id.top_button);
+ top_button.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ System.out.println("top-button");
+ }
+ });
+ //down-button操作
+ Button down_button = findViewById(R.id.down_button);
+ down_button.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ System.out.println("down-button");
+ }
+ });
+ //left_button操作
+ Button left_button = findViewById(R.id.left_button);
+ left_button.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ System.out.println("left_button");
+ }
+ });
+ //right_button操作
+ Button right_button = findViewById(R.id.right_button);
+ right_button.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ System.out.println("right_button");
+ }
+ });
+ }
+
+ @Override
+ 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));
+ pocha.setVelocity(curV);
+ } else {
+ curV.setX(0.0);
+ curV.setZ(0.0);
+ pocha.setVelocity(curV);
+ }
+ camera.setViewPoint(pocha.getPosition().add(0.0, 15.0, 0.0));
+ camera.setViewLine(pocha.getDirection());
+ }
+
+ @SuppressLint("NewApi")
+ @Override
+ public boolean onTouchEvent(MotionEvent event){
+ super.onTouchEvent(event);
+
+ //ACTION_MOVE:タッチしたまま移動,ACTION_DOWN:タッチダウン
+ 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);
+ System.out.println("touch");
+ } else if (event.getAction() == MotionEvent.ACTION_UP) {
+ isTouched = false;
+ System.out.println("Not-touch");
+ }
+ return true;
+ }
+}
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 3a61419..fe6d53a 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/sample/SampleGameActivity.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/sample/SampleGameActivity.java
@@ -30,7 +30,6 @@
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
-
//環境光
AmbientLight amblight = new AmbientLight(new Color3f(1.0f, 1.0f, 1.0f));
diff --git a/app/src/main/res/drawable/tss_thumb.png b/app/src/main/res/drawable/tss_thumb.png
new file mode 100644
index 0000000..18e0ca2
--- /dev/null
+++ b/app/src/main/res/drawable/tss_thumb.png
Binary files differ
diff --git a/app/src/main/res/drawable/wadahand.png b/app/src/main/res/drawable/wadahand.png
new file mode 100644
index 0000000..7294a18
--- /dev/null
+++ b/app/src/main/res/drawable/wadahand.png
Binary files differ
diff --git a/app/src/main/res/layout/activity_sample.xml b/app/src/main/res/layout/activity_sample.xml
new file mode 100644
index 0000000..ac0f24f
--- /dev/null
+++ b/app/src/main/res/layout/activity_sample.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/button_layout.xml b/app/src/main/res/layout/button_layout.xml
new file mode 100644
index 0000000..cb143fa
--- /dev/null
+++ b/app/src/main/res/layout/button_layout.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/characters_fragment.xml b/app/src/main/res/layout/characters_fragment.xml
new file mode 100644
index 0000000..bfaa80a
--- /dev/null
+++ b/app/src/main/res/layout/characters_fragment.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_real_time.xml b/app/src/main/res/layout/fragment_real_time.xml
new file mode 100644
index 0000000..899bc36
--- /dev/null
+++ b/app/src/main/res/layout/fragment_real_time.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
\ 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
new file mode 100644
index 0000000..99fb49b
--- /dev/null
+++ b/app/src/main/res/layout/fragment_real_time_3d.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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
new file mode 100644
index 0000000..5a00b52
--- /dev/null
+++ b/app/src/main/res/layout/fragment_sample_game.xml
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_sample_game2.xml b/app/src/main/res/layout/fragment_sample_game2.xml
new file mode 100644
index 0000000..f1649e6
--- /dev/null
+++ b/app/src/main/res/layout/fragment_sample_game2.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_start.xml b/app/src/main/res/layout/fragment_start.xml
new file mode 100644
index 0000000..f9d8f19
--- /dev/null
+++ b/app/src/main/res/layout/fragment_start.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/instances_fragment.xml b/app/src/main/res/layout/instances_fragment.xml
new file mode 100644
index 0000000..f86651a
--- /dev/null
+++ b/app/src/main/res/layout/instances_fragment.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/login_fragment.xml b/app/src/main/res/layout/login_fragment.xml
index b78eccb..b1a3de6 100644
--- a/app/src/main/res/layout/login_fragment.xml
+++ b/app/src/main/res/layout/login_fragment.xml
@@ -6,7 +6,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/background_light"
- tools:context=".cactusClient.LoginFragment">
+ tools:context=".cactusClient.views.LoginFragment">
+ android:hint="Please enter UserID" />
+ android:text="UserID" />
+ android:hint="Please enter UserID"/>
+ android:hint="Please enter Name"/>
\ No newline at end of file
diff --git a/app/src/main/res/layout/test_activity.xml b/app/src/main/res/layout/test_activity.xml
new file mode 100644
index 0000000..b514099
--- /dev/null
+++ b/app/src/main/res/layout/test_activity.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/ui_fragment.xml b/app/src/main/res/layout/ui_fragment.xml
new file mode 100644
index 0000000..6a89e34
--- /dev/null
+++ b/app/src/main/res/layout/ui_fragment.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index d30ee8e..7ae17f3 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,4 +1,7 @@
RadishForAndroidStudio
Settings
+
+
+ Hello blank fragment