diff --git a/app/build.gradle b/app/build.gradle
index b424cec..8d40625 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -31,7 +31,12 @@
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 65884d7..7c3c703 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -53,15 +53,6 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/Cactus.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/Cactus.java
new file mode 100644
index 0000000..c4a6c46
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/Cactus.java
@@ -0,0 +1,64 @@
+package org.ntlab.radishforandroidstudio.cactusClient;
+
+import android.accounts.Account;
+import android.app.Activity;
+import android.app.Application;
+import android.os.Bundle;
+
+public class Cactus extends Application {
+
+ private Account myAccount = null;
+
+ public Cactus() {
+
+ registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
+ @Override
+ public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
+
+ }
+
+ @Override
+ public void onActivityStarted(Activity activity) {
+
+
+ }
+
+ @Override
+ public void onActivityResumed(Activity activity) {
+
+ }
+
+ @Override
+ public void onActivityPaused(Activity activity) {
+
+ }
+
+ @Override
+ public void onActivityStopped(Activity activity) {
+
+ }
+
+ @Override
+ public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
+
+ }
+
+ @Override
+ public void onActivityDestroyed(Activity activity) {
+
+ }
+ });
+ }
+
+ //MyAccountの追加
+ public Account getMyAccount(){
+ return myAccount;
+ }
+
+ public void setMyAccount(Account ac){
+ myAccount = ac;
+ }
+
+}
+
+
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/MainActivity.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/MainActivity.java
index 909b56b..ca51f9c 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/MainActivity.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/MainActivity.java
@@ -1,9 +1,12 @@
package org.ntlab.radishforandroidstudio.cactusClient;
-import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v7.app.AppCompatActivity;
import org.ntlab.radishforandroidstudio.R;
+import org.ntlab.radishforandroidstudio.cactusClient.views.LoginFragment;
+
public class MainActivity extends AppCompatActivity {
@@ -11,5 +14,11 @@
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
+
+ Fragment fragment;
+ fragment = new LoginFragment();
+ getSupportFragmentManager().beginTransaction().add(R.id.fragment_place, fragment).commit();
+
}
+
}
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/connections/test.txt b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/test.txt
new file mode 100644
index 0000000..2839ac9
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/test.txt
@@ -0,0 +1 @@
+ここに、??connection.javaをいれるぅ
\ 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..5d084ef
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/tests/SampleUiFragment.java
@@ -0,0 +1,134 @@
+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) {
+ super.onCreateView(inflater, container, savedInstanceState);
+ 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() {
+ 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..a5ffa6c
--- /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/types/PlayerId.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/types/PlayerId.java
new file mode 100644
index 0000000..3bc3da6
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/types/PlayerId.java
@@ -0,0 +1,16 @@
+package org.ntlab.radishforandroidstudio.cactusClient.types;
+
+import android.support.annotation.NonNull;
+
+import org.ntlab.radishforandroidstudio.framework.common.CommonId;
+
+/**
+ * Player IDの管理クラス
+ *
+ * @author s.iwatani
+ */
+public class PlayerId extends CommonId {
+ public PlayerId(@NonNull Integer id) {
+ super(id);
+ }
+}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/viewModels/test b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/viewModels/test
index e69de29..d75fa73 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/viewModels/test
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/viewModels/test
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
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..c12f7ea
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/CharactersFragment.java
@@ -0,0 +1,44 @@
+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 {
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.characters_fragment, container, false);
+ }
+
+ 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
new file mode 100644
index 0000000..4cc9675
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/LoginFragment.java
@@ -0,0 +1,116 @@
+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 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 LoginFragmentConnection connection;
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.login_fragment, container, false);
+
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+
+ Button button = (Button)getActivity().findViewById(R.id.signUP1);
+ //↓↓↓↓↓↓↓↓画面遷移↓↓↓↓↓↓↓↓
+ 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.addToBackStack(null);
+ transaction.replace(R.id.fragment_place, new SignUpFragment());
+
+ transaction.commit();
+ }
+ });
+ //↑↑↑↑↑画面遷移↑↑↑↑↑↑
+
+ Button loginButton = (Button)getActivity().findViewById(R.id.login);
+ loginButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ EditText userName = (EditText)getActivity().findViewById(R.id.inputUserName);
+ EditText passWord = (EditText)getActivity().findViewById(R.id.checkPassword);
+
+
+
+ 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 {
+
+ 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);
+
+ //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
new file mode 100644
index 0000000..4506291
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/SignUpFragment.java
@@ -0,0 +1,99 @@
+package org.ntlab.radishforandroidstudio.cactusClient.views;
+
+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 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,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.sign_up_fragment, container, false);
+
+ }
+
+ //↓↓↓↓↓↓↓↓画面遷移↓↓↓↓↓↓↓↓
+ @Override
+ public void onStart() {
+
+ super.onStart();
+
+ //ログインボタン
+ Button button = (Button) getActivity().findViewById(R.id.LoginButton2);
+ 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.addToBackStack(null);
+ //transaction.replace(R.id.fragment_place, new LoginFragment());
+ transaction.replace(R.id.fragment_place, new LoginFragment());
+
+ transaction.commit();
+ }
+ });
+
+ //サインアップ
+ 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);
+
+
+ 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 (checkPassWord.getText().toString().isEmpty()) {
+ Toast.makeText(getActivity(), "確認用パスワードを入力してください", Toast.LENGTH_SHORT).show();
+ } else if (!inputPassword.getText().toString().equals(checkPassWord.getText().toString() )) {
+ Toast.makeText(getActivity(), "パスワードが一致しません", Toast.LENGTH_SHORT).show();
+ }else{
+
+ 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();
+
+ }
+ }
+ });
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/test b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/test
deleted file mode 100644
index e69de29..0000000
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/test
+++ /dev/null
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/RWTPad.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTPad.java
index d756d18..d232c13 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTPad.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTPad.java
@@ -13,25 +13,32 @@
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);
- init();
}
public RWTPad(Context context, AttributeSet attrs) {
super(context, attrs);
- init();
}
public RWTPad(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
- init();
}
+ /**
+ * 状態を初期化する
+ */
@Override
public void init() {
super.init();
@@ -39,6 +46,11 @@
addListener(new SamplePadListener());
}
+ /**
+ * canvasに描画を行う
+ *
+ * @param canvas
+ */
// TODO: 見た目の調整
@Override
public void onDraw(Canvas canvas) {
@@ -64,6 +76,12 @@
return paint;
}
+ /**
+ * Padをタッチしたときのイベント
+ *
+ * @param event
+ * @return
+ */
@Override
public boolean onTouchEvent(MotionEvent event) {
// 中央からの距離を取得
@@ -96,6 +114,10 @@
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/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/common/CommonId.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/common/CommonId.java
new file mode 100644
index 0000000..4414b62
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/common/CommonId.java
@@ -0,0 +1,25 @@
+package org.ntlab.radishforandroidstudio.framework.common;
+
+import android.support.annotation.NonNull;
+
+/**
+ * Id管理の基底クラス
+ *
+ * @author s.iwatani
+ * @param
+ */
+public abstract class CommonId {
+ private IdType id = null;
+
+ public CommonId(@NonNull IdType id) {
+ setId(id);
+ }
+
+ public IdType getId() {
+ return id;
+ }
+
+ public void setId(IdType id) {
+ this.id = id;
+ }
+}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/Actor.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/Actor.java
index af0c4ab..c8bac3e 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/Actor.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/Actor.java
@@ -6,8 +6,8 @@
import org.ntlab.radishforandroidstudio.framework.animation.Animation3D;
import org.ntlab.radishforandroidstudio.framework.model3D.CollisionResult;
import org.ntlab.radishforandroidstudio.framework.model3D.GeometryUtility;
-import org.ntlab.radishforandroidstudio.framework.model3D.Movable;
import org.ntlab.radishforandroidstudio.framework.model3D.Object3D;
+import org.ntlab.radishforandroidstudio.framework.model3D.Placeable;
import org.ntlab.radishforandroidstudio.framework.model3D.Position3D;
import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D;
import org.ntlab.radishforandroidstudio.framework.physics.Force3D;
@@ -22,328 +22,356 @@
/**
* ゲーム内の登場物全般
- * @author 新田直也
*
+ * @author 新田直也
*/
-public abstract class Actor extends Animatable implements Movable {
- protected Vector3d direction = new Vector3d(1.0, 0.0, 0.0);
- protected Mode mode;
- // 以下省メモリ化のため予めインスタンスを生成
- protected Mode modeFreeFall = new ModeFreeFall();
- protected Mode modeOnGround = new ModeOnGround();
-
- public Actor(Object3D body, Animation3D animation) {
- super(new Solid3D(body), animation);
- mode = modeOnGround;
- }
+public abstract class Actor extends BaseActor {
+ // public abstract class Actor extends Animatable implements Movable {
+ protected Vector3d direction = new Vector3d(1.0, 0.0, 0.0);
+ protected Mode mode;
+ // 以下省メモリ化のため予めインスタンスを生成
+ protected Mode modeFreeFall = new ModeFreeFall();
+ protected Mode modeOnGround = new ModeOnGround();
- public Actor(Solid3D body, Animation3D animation) {
- super(body, animation);
- mode = modeOnGround;
- }
+ public Actor(Object3D body, Animation3D animation) {
+ super(new Solid3D(body), animation);
+ mode = modeOnGround;
+ }
+
+ public Actor(Solid3D body, Animation3D animation) {
+ super(body, animation);
+ mode = modeOnGround;
+ }
// public Actor(ActorModel model) {
// super(model.createBody(), model.getAnimation());
// mode = modeOnGround;
// }
-
- /**
- * 単位時間ごとの動作(衝突判定処理は行わない)
- * @param interval --- 前回呼び出されたときからの経過時間(ミリ秒単位)
- */
- public void motion(long interval){
- // 1. 位置を動かす
- ((Solid3D)body).move(interval, getGravity(), getGravityCenter());
- super.motion(interval);
- }
- /**
- * 単位時間ごとの動作(衝突判定処理も行う)
- * @param interval --- 前回呼び出されたときからの経過時間(ミリ秒単位)
- * @param ground --- 地面(構造物)
- */
- public void motion(long interval, Ground ground) {
+ /**
+ * 単位時間ごとの動作(衝突判定処理は行わない)
+ *
+ * @param interval --- 前回呼び出されたときからの経過時間(ミリ秒単位)
+ */
+ public void motion(long interval) {
+ // 1. 位置を動かす
+ ((Solid3D) body).move(interval, getGravity(), getGravityCenter());//地面とあたり判定してない
+ super.motion(interval);
+ }
- // 1. 位置を動かす
- ((Solid3D)body).move(interval, getGravity(), getGravityCenter());
+ /**
+ * 単位時間ごとの動作(衝突判定処理も行う)
+ *
+ * @param interval --- 前回呼び出されたときからの経過時間(ミリ秒単位)
+ * @param ground --- 地面(構造物)
+ */
+ public void motion(long interval, Ground ground) {//k.地面とあたり判定
- if (animation != null) {
- // 2. アニメーションを実行
- if (animation.progress(interval) == false) {
- onEndAnimation();
- }
-
- // 3. 姿勢を変える
- body.apply(animation.getPose(), false);
- }
+ // 1. 位置を動かす
+ ((Solid3D) body).move(interval, getGravity(), getGravityCenter());
- // 4. 衝突判定
- CollisionResult cr = PhysicsUtility.doesIntersect((Solid3D)body, ground);
+ if (animation != null) {
+ // 2. アニメーションを実行
+ if (animation.progress(interval) == false) {
+ onEndAnimation();
+ }
- // 5. 衝突応答
- if (cr != null) {
- // 構造物にぶつかった、または接触している時
- if (cr.normal.dot(PhysicsUtility.vertical) > GeometryUtility.TOLERANCE) {
- // 上向きの面(=地面)にぶつかった、または接触している時
- if (cr.length <= GeometryUtility.TOLERANCE) {
- // 地面に乗っている
- if (!(mode instanceof ModeOnGround)) {
- // 落ちてきて丁度乗った
- mode = modeOnGround;
- ((ModeOnGround)mode).setNormal(cr.normal);
- onEndFall();
- }
- } else {
- // 地面にめり込んだ
- // 5.1. 押し戻す
- onIntersect(cr, interval);
- if (!(mode instanceof ModeOnGround)) {
- // 落ちてきてめり込んだ
- // 6. 地面モードにする
- mode = modeOnGround;
- ((ModeOnGround)mode).setNormal(cr.normal);
- onEndFall();
- } else {
- // 歩いている途中で、アニメーションの関係で一瞬だけめり込んだ
- // または、歩いている途中で斜面に差し掛かった
- ((ModeOnGround)mode).setNormal(cr.normal);
- }
- }
- } else if (cr.normal.dot(PhysicsUtility.vertical) >= -GeometryUtility.TOLERANCE) {
- // 垂直壁にめり込んだ
- // 5.1. 押し戻す
- onIntersect(cr, interval);
- } else {
- // 下からぶつかった、または接触した(頭をぶつけた)
- if (cr.length > GeometryUtility.TOLERANCE) {
- // 5.1. 押し戻す
- onIntersect(cr, interval);
- }
- }
- cr = null;
- } else {
- // 地面とぶつかっても接触してもいない時
- // 6. 落下モードにする
- mode = modeFreeFall;
- }
- }
-
- public void motion(long interval, Ground ground,ArrayList forces,
- ArrayList appPoints) {
-
- forces.add(getGravity());
- appPoints.add(getGravityCenter());
+ // 3. 姿勢を変える
+ body.apply(animation.getPose(), false);//k.実際に適応する
+ }
- // 1. 位置を動かす
- ((Solid3D)body).move(interval, forces, appPoints);
+ // 4. 衝突判定
+ CollisionResult cr = PhysicsUtility.doesIntersect((Solid3D) body, ground);//k.crに情報が入っている
- if (animation != null) {
- // 2. アニメーションを実行
- if (animation.progress(interval) == false) {
- onEndAnimation();
- }
-
- // 3. 姿勢を変える
- body.apply(animation.getPose(), false);
- }
+ // 5. 衝突応答
+ if (cr != null) {
+ // 構造物にぶつかった、または接触している時
+ if (cr.normal.dot(PhysicsUtility.vertical) > GeometryUtility.TOLERANCE) {
+ // 上向きの面(=地面)にぶつかった、または接触している時
+ if (cr.length <= GeometryUtility.TOLERANCE) {
+ // 地面に乗っている
+ if (!(mode instanceof ModeOnGround)) {
+ // 落ちてきて丁度乗った
+ mode = modeOnGround;
+ ((ModeOnGround) mode).setNormal(cr.normal);
+ onEndFall();
+ }
+ } else {
+ // 地面にめり込んだ
+ // 5.1. 押し戻す
+ onIntersect(cr, interval);
+ if (!(mode instanceof ModeOnGround)) {
+ // 落ちてきてめり込んだ
+ // 6. 地面モードにする
+ mode = modeOnGround;
+ ((ModeOnGround) mode).setNormal(cr.normal);
+ onEndFall();
+ } else {
+ // 歩いている途中で、アニメーションの関係で一瞬だけめり込んだ
+ // または、歩いている途中で斜面に差し掛かった
+ ((ModeOnGround) mode).setNormal(cr.normal);
+ }
+ }
+ } else if (cr.normal.dot(PhysicsUtility.vertical) >= -GeometryUtility.TOLERANCE) {
+ // 垂直壁にめり込んだ
+ // 5.1. 押し戻す
+ onIntersect(cr, interval);
+ } else {
+ // 下からぶつかった、または接触した(頭をぶつけた)
+ if (cr.length > GeometryUtility.TOLERANCE) {
+ // 5.1. 押し戻す
+ onIntersect(cr, interval);
+ }
+ }
+ cr = null;
+ } else {
+ // 地面とぶつかっても接触してもいない時
+ // 6. 落下モードにする
+ mode = modeFreeFall;
+ }
- // 4. 衝突判定
- CollisionResult cr = PhysicsUtility.doesIntersect((Solid3D)body, ground);
+// TODO: 2018/06/11 物体と人のあたり判定の記述
+ for (ArrayList collidableList : collidableListList) {
+ for (Placeable anothor : collidableList) {
+ //自分と物体のあたり判定
+ CollisionResult cr2 = PhysicsUtility.checkCollision(body, null, (Solid3D) (anothor.getBody()), null);
- // 5. 衝突応答
- if (cr != null) {
- // 構造物にぶつかった、または接触している時
- if (cr.normal.dot(PhysicsUtility.vertical) > GeometryUtility.TOLERANCE) {
- // 上向きの面(=地面)にぶつかった、または接触している時
- if (cr.length <= GeometryUtility.TOLERANCE) {
- // 地面に乗っている
- if (!(mode instanceof ModeOnGround)) {
- // 落ちてきて丁度乗った
- mode = modeOnGround;
- ((ModeOnGround)mode).setNormal(cr.normal);
- onEndFall();
- }
- } else {
- // 地面にめり込んだ
- // 5.1. 押し戻す
- onIntersect(cr, interval);
- if (!(mode instanceof ModeOnGround)) {
- // 落ちてきてめり込んだ
- // 6. 地面モードにする
- mode = modeOnGround;
- ((ModeOnGround)mode).setNormal(cr.normal);
- onEndFall();
- } else {
- // 歩いている途中で、アニメーションの関係で一瞬だけめり込んだ
- // または、歩いている途中で斜面に差し掛かった
- ((ModeOnGround)mode).setNormal(cr.normal);
- }
- }
- } else if (cr.normal.dot(PhysicsUtility.vertical) >= -GeometryUtility.TOLERANCE) {
- // 垂直壁にめり込んだ
- // 5.1. 押し戻す
- onIntersect(cr, interval);
- } else {
- // 下からぶつかった、または接触した(頭をぶつけた)
- if (cr.length > GeometryUtility.TOLERANCE) {
- // 5.1. 押し戻す
- onIntersect(cr, interval);
- }
- }
- cr = null;
- } else {
- // 地面とぶつかっても接触してもいない時
- // 6. 落下モードにする
- mode = modeFreeFall;
- }
- }
-
- public void setInitialDirection(Vector3d dir) {
- direction = dir;
- }
-
- public Vector3d getInitialDirection() {
- return direction;
- }
-
- /**
- * 指定した方向に向かせる
- * @param vec 新しい向き
- */
- public void setDirection(Vector3d vec) {
- Vector3d v1 = new Vector3d();
- Vector3d v2 = new Vector3d();
- v1.cross(direction, GeometryUtility.Y_AXIS);
- v2.cross(vec, GeometryUtility.Y_AXIS);
- if (v2.length() < GeometryUtility.TOLERANCE) return;
- v1.normalize();
- v2.normalize();
- double cos = v1.dot(v2);
- v1.cross(v1, v2);
- double sin = v1.dot(GeometryUtility.Y_AXIS);
- double angle = Math.atan2(sin, cos);
- AxisAngle4d axisAngle = new AxisAngle4d(GeometryUtility.Y_AXIS, angle);
- Quaternion3D quat = new Quaternion3D(axisAngle);
- ((Solid3D)body).apply(quat, false);
- }
-
- /**
- * 指定した方向に向かせる
- * @param vec 新しい向き
- */
- public void setDirection3D(Vector3d vec) {
- Vector3d v1 = new Vector3d();
- Vector3d v2 = new Vector3d();
- v1.cross(direction, GeometryUtility.Y_AXIS);
- double angle = Math.PI / 2.0 - Math.acos(vec.dot(GeometryUtility.Y_AXIS));
- AxisAngle4d axisAngle2 = new AxisAngle4d(v1, angle);
- v2.cross(vec, GeometryUtility.Y_AXIS);
- if (v2.length() < GeometryUtility.TOLERANCE) return;
- v1.normalize();
- v2.normalize();
- double cos = v1.dot(v2);
- v1.cross(v1, v2);
- double sin = v1.dot(GeometryUtility.Y_AXIS);
- angle = Math.atan2(sin, cos);
- AxisAngle4d axisAngle = new AxisAngle4d(GeometryUtility.Y_AXIS, angle);
- Quaternion3D quat = new Quaternion3D(axisAngle);
- Quaternion3D quat2 = new Quaternion3D(axisAngle2);
- quat.mul(quat2);
- ((Solid3D)body).apply(quat, false);
- }
-
- /**
- * 現在向いている方向を取得する
- * @return 現在の向き
- */
- public Vector3d getDirection() {
- Vector3d dir = new Vector3d(direction);
- Transform3D trans = new Transform3D();
- trans.set(((Solid3D)body).getQuaternion().getAxisAngle());
- trans.transform(dir);
- return dir;
- }
-
- /**
- * 移動速度ベクトルを設定する
- * @param vel 新しい移動速度ベクトル
- */
- public void setVelocity(Velocity3D vel) {
- ((Solid3D)body).apply(vel, false);
- }
-
- /**
- * 移動速度ベクトルを取得する
- * @return 現在の移動速度ベクトル
- */
- public Velocity3D getVelocity() {
- return ((Solid3D)body).getVelocity();
- }
-
- /**
- * X軸を中心に回転する
- * @param angle 回転角(反時計回り, 単位:ラジアン)
- */
- public void rotX(double angle) {
- Quaternion3D curQuat = body.getQuaternion();
- curQuat.add(new AxisAngle4d(GeometryUtility.X_AXIS, angle));
- body.apply(curQuat, false);
- }
-
- /**
- * Y軸を中心に回転する
- * @param angle 回転角(反時計回り, 単位:ラジアン)
- */
- public void rotY(double angle) {
- Quaternion3D curQuat = body.getQuaternion();
- curQuat.add(new AxisAngle4d(GeometryUtility.Y_AXIS, angle));
- body.apply(curQuat, false);
- }
-
- /**
- * Z軸を中心に回転する
- * @param angle 回転角(反時計回り, 単位:ラジアン)
- */
- public void rotZ(double angle) {
- Quaternion3D curQuat = body.getQuaternion();
- curQuat.add(new AxisAngle4d(GeometryUtility.Z_AXIS, angle));
- body.apply(curQuat, false);
- }
+ if (cr2 != null) {
+ onCollisionStay(anothor);//k.呼び出される
+ }
+ }
+ }
+ }
- /**
- * 加わっている重力を取得する
- * @return 重力
- */
- public Force3D getGravity() {
- return mode.getForce((Solid3D)body);
- }
+ //k.完全な物理演算するためのMotion
+ public void motion(long interval, Ground ground, ArrayList forces,
+ ArrayList appPoints) {
- /**
- * 重心を取得する
- * @return 重心位置
- */
- public Position3D getGravityCenter() {
- return ((Solid3D)body).getGravityCenter();
- }
+ forces.add(getGravity());
+ appPoints.add(getGravityCenter());
- /**
- * 地面に乗っている状態か否かを取得する
- * @return true --- 地面に乗っている, false --- 地面に乗っていない(空中にいる)
- */
- public boolean isOnGround() {
- return (mode instanceof ModeOnGround);
- }
+ // 1. 位置を動かす
+ ((Solid3D) body).move(interval, forces, appPoints);
- /**
- * 地面(構造物)に落下した瞬間に呼び出される
- */
- public abstract void onEndFall();
+ if (animation != null) {
+ // 2. アニメーションを実行
+ if (animation.progress(interval) == false) {
+ onEndAnimation();
+ }
- /**
- * 地面(構造物)に衝突した瞬間に呼び出される
- * @param normal --- 地面の法線方向ベクトル
- * @param interval --- 前回の動作からの経過時間(ミリ秒単位)
- */
- public abstract void onIntersect(CollisionResult normal, long interval);
+ // 3. 姿勢を変える
+ body.apply(animation.getPose(), false);
+ }
+
+ // 4. 衝突判定
+ CollisionResult cr = PhysicsUtility.doesIntersect((Solid3D) body, ground);//k.←ここ地面とのあたり判定
+
+ // 5. 衝突応答
+ if (cr != null) {
+ // 構造物にぶつかった、または接触している時
+ if (cr.normal.dot(PhysicsUtility.vertical) > GeometryUtility.TOLERANCE) {
+ // 上向きの面(=地面)にぶつかった、または接触している時
+ if (cr.length <= GeometryUtility.TOLERANCE) {//k.押し戻しの処理を
+ // 地面に乗っている
+ if (!(mode instanceof ModeOnGround)) {
+ // 落ちてきて丁度乗った
+ mode = modeOnGround;
+ ((ModeOnGround) mode).setNormal(cr.normal);
+ onEndFall();//k.地面に着地
+ }
+ } else {
+ // 地面にめり込んだ
+ // 5.1. 押し戻す
+ onIntersect(cr, interval);//k.めり込んだとき地面以外のあたり判定
+ if (!(mode instanceof ModeOnGround)) {
+ // 落ちてきてめり込んだ
+ // 6. 地面モードにする
+ mode = modeOnGround;
+ ((ModeOnGround) mode).setNormal(cr.normal);
+ onEndFall();
+ } else {
+ // 歩いている途中で、アニメーションの関係で一瞬だけめり込んだ
+ // または、歩いている途中で斜面に差し掛かった
+ ((ModeOnGround) mode).setNormal(cr.normal);
+ }
+ }
+ } else if (cr.normal.dot(PhysicsUtility.vertical) >= -GeometryUtility.TOLERANCE) {
+ // 垂直壁にめり込んだ
+ // 5.1. 押し戻す
+ onIntersect(cr, interval);
+ } else {
+ // 下からぶつかった、または接触した(頭をぶつけた)
+ if (cr.length > GeometryUtility.TOLERANCE) {
+ // 5.1. 押し戻す
+ onIntersect(cr, interval);
+ }
+ }
+ cr = null;
+ } else {
+ // 地面とぶつかっても接触してもいない時
+ // 6. 落下モードにする
+ mode = modeFreeFall;
+ }
+ }
+
+ public void setInitialDirection(Vector3d dir) {
+ direction = dir;
+ }
+
+ public Vector3d getInitialDirection() {
+ return direction;
+ }
+
+ /**
+ * 指定した方向に向かせる
+ *
+ * @param vec 新しい向き
+ */
+ public void setDirection(Vector3d vec) {
+ Vector3d v1 = new Vector3d();
+ Vector3d v2 = new Vector3d();
+ v1.cross(direction, GeometryUtility.Y_AXIS);
+ v2.cross(vec, GeometryUtility.Y_AXIS);
+ if (v2.length() < GeometryUtility.TOLERANCE) return;
+ v1.normalize();
+ v2.normalize();
+ double cos = v1.dot(v2);
+ v1.cross(v1, v2);
+ double sin = v1.dot(GeometryUtility.Y_AXIS);
+ double angle = Math.atan2(sin, cos);
+ AxisAngle4d axisAngle = new AxisAngle4d(GeometryUtility.Y_AXIS, angle);
+ Quaternion3D quat = new Quaternion3D(axisAngle);
+ ((Solid3D) body).apply(quat, false);
+ }
+
+ /**
+ * 指定した方向に向かせる
+ *
+ * @param vec 新しい向き
+ */
+ public void setDirection3D(Vector3d vec) {
+ Vector3d v1 = new Vector3d();
+ Vector3d v2 = new Vector3d();
+ v1.cross(direction, GeometryUtility.Y_AXIS);
+ double angle = Math.PI / 2.0 - Math.acos(vec.dot(GeometryUtility.Y_AXIS));
+ AxisAngle4d axisAngle2 = new AxisAngle4d(v1, angle);
+ v2.cross(vec, GeometryUtility.Y_AXIS);
+ if (v2.length() < GeometryUtility.TOLERANCE) return;
+ v1.normalize();
+ v2.normalize();
+ double cos = v1.dot(v2);
+ v1.cross(v1, v2);
+ double sin = v1.dot(GeometryUtility.Y_AXIS);
+ angle = Math.atan2(sin, cos);
+ AxisAngle4d axisAngle = new AxisAngle4d(GeometryUtility.Y_AXIS, angle);
+ Quaternion3D quat = new Quaternion3D(axisAngle);
+ Quaternion3D quat2 = new Quaternion3D(axisAngle2);
+ quat.mul(quat2);
+ ((Solid3D) body).apply(quat, false);
+ }
+
+ /**
+ * 現在向いている方向を取得する
+ *
+ * @return 現在の向き
+ */
+ public Vector3d getDirection() {
+ Vector3d dir = new Vector3d(direction);
+ Transform3D trans = new Transform3D();
+ trans.set(((Solid3D) body).getQuaternion().getAxisAngle());
+ trans.transform(dir);
+ return dir;
+ }
+
+ /**
+ * 移動速度ベクトルを設定する
+ *
+ * @param vel 新しい移動速度ベクトル
+ */
+ public void setVelocity(Velocity3D vel) {
+ ((Solid3D) body).apply(vel, false);
+ }
+
+ /**
+ * 移動速度ベクトルを取得する
+ *
+ * @return 現在の移動速度ベクトル
+ */
+ public Velocity3D getVelocity() {
+ return ((Solid3D) body).getVelocity();
+ }
+
+ /**
+ * X軸を中心に回転する
+ *
+ * @param angle 回転角(反時計回り, 単位:ラジアン)
+ */
+ public void rotX(double angle) {
+ Quaternion3D curQuat = body.getQuaternion();
+ curQuat.add(new AxisAngle4d(GeometryUtility.X_AXIS, angle));
+ body.apply(curQuat, false);
+ }
+
+ /**
+ * Y軸を中心に回転する
+ *
+ * @param angle 回転角(反時計回り, 単位:ラジアン)
+ */
+ public void rotY(double angle) {
+ Quaternion3D curQuat = body.getQuaternion();
+ curQuat.add(new AxisAngle4d(GeometryUtility.Y_AXIS, angle));
+ body.apply(curQuat, false);
+ }
+
+ /**
+ * Z軸を中心に回転する
+ *
+ * @param angle 回転角(反時計回り, 単位:ラジアン)
+ */
+ public void rotZ(double angle) {
+ Quaternion3D curQuat = body.getQuaternion();
+ curQuat.add(new AxisAngle4d(GeometryUtility.Z_AXIS, angle));
+ body.apply(curQuat, false);
+ }
+
+ /**
+ * 加わっている重力を取得する
+ *
+ * @return 重力
+ */
+ public Force3D getGravity() {
+ return mode.getForce((Solid3D) body);
+ }
+
+ /**
+ * 重心を取得する
+ *
+ * @return 重心位置
+ */
+ public Position3D getGravityCenter() {
+ return ((Solid3D) body).getGravityCenter();
+ }
+
+ /**
+ * 地面に乗っている状態か否かを取得する
+ *
+ * @return true --- 地面に乗っている, false --- 地面に乗っていない(空中にいる)
+ */
+ public boolean isOnGround() {
+ return (mode instanceof ModeOnGround);
+ }
+
+ /**
+ * 地面(構造物)に落下した瞬間に呼び出される
+ */
+ public abstract void onEndFall();
+
+ /**
+ * 地面(構造物)に衝突した瞬間に呼び出される
+ *
+ * @param normal --- 地面の法線方向ベクトル
+ * @param interval --- 前回の動作からの経過時間(ミリ秒単位)
+ */
+ public abstract void onIntersect(CollisionResult normal, long interval);
}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/BaseActor.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/BaseActor.java
new file mode 100644
index 0000000..a6190ed
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/BaseActor.java
@@ -0,0 +1,27 @@
+package org.ntlab.radishforandroidstudio.framework.gameMain;
+
+import android.view.animation.Animation;
+
+import org.ntlab.radishforandroidstudio.framework.animation.Animation3D;
+import org.ntlab.radishforandroidstudio.framework.model3D.Object3D;
+import org.ntlab.radishforandroidstudio.framework.model3D.Placeable;
+import org.ntlab.radishforandroidstudio.framework.physics.Collidable;
+
+import java.util.ArrayList;
+
+public abstract class BaseActor extends Animatable implements Collidable {
+
+
+ protected ArrayList> collidableListList;
+
+ public BaseActor(Object3D body, Animation3D animation) {
+
+ super(body, animation);
+ collidableListList = new ArrayList>();
+
+ }
+
+ public void addCollidableList(ArrayList pList){
+ collidableListList.add(pList);
+ }
+}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/OvergroundActor.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/OvergroundActor.java
index 8f01031..c9cbda8 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/OvergroundActor.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/OvergroundActor.java
@@ -4,11 +4,14 @@
import org.ntlab.radishforandroidstudio.framework.animation.Animation3D;
import org.ntlab.radishforandroidstudio.framework.model3D.CollisionResult;
import org.ntlab.radishforandroidstudio.framework.model3D.Object3D;
+import org.ntlab.radishforandroidstudio.framework.model3D.Placeable;
import org.ntlab.radishforandroidstudio.framework.model3D.Position3D;
import org.ntlab.radishforandroidstudio.framework.physics.Solid3D;
import org.ntlab.radishforandroidstudio.framework.physics.Velocity3D;
import org.ntlab.radishforandroidstudio.java3d.Vector3d;
+import java.util.ArrayList;
+
/**
* 地面の上を移動するもの(ジャンプや自由落下させることも可能)
* @author 新田直也
@@ -48,4 +51,27 @@
@Override
public void onEndAnimation() {
}
+
+ //可動物関係
+
+
+ @Override
+ public void addCollidable(ArrayList pList) {
+
+ }
+
+ @Override
+ public void onCollisionEnter(Placeable p) {
+
+ }
+
+ @Override
+ public void onCollisionStay(Placeable p) {
+
+ }
+
+ @Override
+ public void onCollisionExit(Placeable p) {
+
+ }
}
\ No newline at end of file
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 2e6592d..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..e65c90f
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/RealTime3DFragment.java
@@ -0,0 +1,55 @@
+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 android.widget.FrameLayout;
+import android.widget.LinearLayout;
+
+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) {
+ parentView = inflater.inflate(R.layout.fragment_real_time_3d, container, false);
+ // 画面との関連付け
+ 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));
+ return parentView;
+ }
+
+ @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 0d8c19c..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
index fa5a7a8..64943d5 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/listener/MyListener.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/listener/MyListener.java
@@ -2,6 +2,18 @@
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
index 6c5e1a8..577fce2 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/listener/PadListener.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/listener/PadListener.java
@@ -2,4 +2,9 @@
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/model3D/Universe.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/model3D/Universe.java
index 258e7dd..6a8fe31 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/model3D/Universe.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/model3D/Universe.java
@@ -1,5 +1,6 @@
package org.ntlab.radishforandroidstudio.framework.model3D;
+import org.ntlab.radishforandroidstudio.framework.common.CommonId;
import org.ntlab.radishforandroidstudio.framework.physics.Ground;
import org.ntlab.radishforandroidstudio.java3d.BranchGroup;
import org.ntlab.radishforandroidstudio.java3d.Group;
@@ -11,6 +12,8 @@
import org.ntlab.radishforandroidstudio.java3d.TransformGroup;
import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
public class Universe {
private BranchGroup root = null;
@@ -18,6 +21,7 @@
private BackgroundBox skyBox = null;
private Ground ground = null;
private ArrayList movableList = new ArrayList();
+ private Map objMap = new HashMap<>();
public Universe() {
root = new BranchGroup();
@@ -59,7 +63,16 @@
viewer.draw(node);
}
}
-
+
+ public void apply(HashMap> properties) {
+ for (Map.Entry> entry : properties.entrySet()) {
+ Object3D target = objMap.get(entry.getKey());
+ for (Property3D prop : entry.getValue()) {
+ target.apply(prop, false);
+ }
+ }
+ }
+
public void update(long interval){
for(int i = 0; i < movableList.size(); i++){
Movable movable = movableList.get(i);
@@ -87,6 +100,10 @@
root.addChild(node);
}
+ public void place(Object3D obj, CommonId id) {
+ objMap.put(id, obj);
+ }
+
/**
* 後で取り除けるようにオブジェクトを配置する
*
@@ -135,6 +152,8 @@
root.removeChild(node);
}
+ public void displace(CommonId id) { objMap.remove(id); }
+
public ArrayList getLights() {
return lights;
}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/network/CallBack.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/network/CallBack.java
new file mode 100644
index 0000000..1e9238b
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/network/CallBack.java
@@ -0,0 +1,6 @@
+package org.ntlab.radishforandroidstudio.framework.network;
+
+
+public interface CallBack {
+ public void onResponse(String response);
+}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/network/HttpAsyncConnection.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/network/HttpAsyncConnection.java
index 2f1fb80..cd6bf85 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/network/HttpAsyncConnection.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/network/HttpAsyncConnection.java
@@ -1,101 +1,111 @@
package org.ntlab.radishforandroidstudio.framework.network;
-import android.app.Activity;
-import android.os.AsyncTask;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.xml.sax.InputSource;
+import android.os.AsyncTask;
+import android.util.Log;
import java.io.BufferedReader;
-import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.io.StringReader;
+import java.io.OutputStream;
import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
import java.net.URL;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
abstract public class HttpAsyncConnection extends AsyncTask {
- private HttpURLConnection conn;
- private StringBuffer message = new StringBuffer();
- protected Activity activity = null;
+ private HttpURLConnection conn = null;
+ private String baseUrl = null;
+ private String queryParams = "";
+ private String pathParams = "";
+ private String formParams = "";
+ private CallBack callBack = null;
+
+
+ private String method;
private static String clientSessionID = null;
-
public HttpAsyncConnection(String url) {
- try {
- conn = (HttpURLConnection) new URL(url).openConnection();
- } catch (MalformedURLException e) {
-
- e.printStackTrace();
- } catch (IOException e) {
-
- e.printStackTrace();
- }
+ baseUrl = url;
}
- public HttpAsyncConnection(String url, Activity activity) {
- this(url);
- this.activity = activity;
- try {
- conn = (HttpURLConnection) new URL(url).openConnection();
- } catch (MalformedURLException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
+ public void doPost() {
+ setMethod("POST");
+ execute();
+ }
+
+ public void doGet() {
+ setMethod("GET");
+ execute();
+ }
+
+ public void doPut() {
+ setMethod("PUT");
+ execute();
+ }
+
+ public void doDelete() {
+ setMethod("DELETE");
+ execute();
+ }
+
+ public void setCallBack(CallBack callBack) {
+ this.callBack = callBack;
+ }
+
+ private void setMethod(String method) {
+ this.method = method;
}
@Override
protected String doInBackground(Void... urls) {
- doPost();
- return doGet();
+ doAnything();
+ return doReceive();
}
- // Parse XML
- public void onPostExecute(String result) {
- // CLLog.debug(""+result);
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ /* (non-Javadoc)
+ * @see android.os.AsyncTask#onPostExecute(java.lang.Object)
+ */
+ public void onPostExecute(String response) {
try {
- DocumentBuilder builder = factory.newDocumentBuilder();
- InputSource is = new InputSource();
- is.setCharacterStream(new StringReader(result));
- Document dom = builder.parse(is);
- Element root = dom.getDocumentElement();
- receive(root);
- }catch(Exception e) {
- e.printStackTrace();
+ if (callBack != null) callBack.onResponse(response);
+ } catch (Exception e) {
+ // TODO: handle exception
+ Log.d("error", "�G���[�I");
}
}
- abstract protected void receive(Element root);
// request
- public void doPost() {
+ public void doAnything() {
try {
+ if(conn == null) {
+ if(queryParams == null || queryParams.length() == 0){
+ conn = (HttpURLConnection) new URL(baseUrl + pathParams).openConnection();
+ } else {
+ conn = (HttpURLConnection) new URL(baseUrl + pathParams + "?" + queryParams).openConnection();
+ }
+ }
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
- // POST or GET
- conn.setRequestMethod("POST");
- //conn.setRequestMethod("GET");
+ // POST or GET or PUT or DELETE
+ conn.setRequestMethod(method);
- conn.setDoOutput(true);
- if(clientSessionID != null) {
- conn.setRequestProperty("Cookie", clientSessionID);
+ if (formParams.length() > 0) {
+ conn.setDoOutput(true);
+ if(clientSessionID != null) {
+ conn.setRequestProperty("Cookie", clientSessionID);
+ }
+ OutputStream out = conn.getOutputStream();
+ out.write(formParams.getBytes("UTF-8"));
+ out.flush();
+ out.close();
+ formParams = "";
}
- BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8"));
- writer.write(message.toString());
- message.delete(0,message.length());
- writer.flush();
- writer.close();
+ pathParams = "";
+ queryParams = "";
+ conn.connect();
if(clientSessionID == null ) {
clientSessionID = conn.getHeaderField("Set-Cookie");
@@ -108,7 +118,7 @@
}
// response
- public String doGet() {
+ public String doReceive() {
BufferedReader reader;
try {
reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
@@ -117,9 +127,11 @@
while((line = reader.readLine()) != null)
builder.append(line);
reader.close();
+ if (conn != null) conn.disconnect();
return builder.toString();
} catch (IOException e) {
e.printStackTrace();
+ if (conn != null) conn.disconnect();
return null;
}
@@ -132,20 +144,21 @@
* @param key
* @param value
*/
- public void addParam(String key, String value) {
- if(message.length() > 0) {
- message.append("&");
+ public void addQueryParam(String key, String value) {
+ if(queryParams.length() > 0) {
+ queryParams += ("&");
}
- message.append(key+"="+value);
+ queryParams += (key + "=" + value);
}
- public Activity getActivity() {
- return activity;
+ public void addFormParam(String key, String value) {
+ if(formParams.length() > 0) {
+ formParams += "&";
+ }
+ formParams += (key + "=" + value);
}
- public void setActivity(Activity activity) {
- this.activity = activity;
-
-
+ public void addPathParam(String param){
+ pathParams += "/" + param;
}
}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/physics/Collidable.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/physics/Collidable.java
new file mode 100644
index 0000000..dc4c943
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/physics/Collidable.java
@@ -0,0 +1,13 @@
+package org.ntlab.radishforandroidstudio.framework.physics;
+
+import org.ntlab.radishforandroidstudio.framework.model3D.Movable;
+import org.ntlab.radishforandroidstudio.framework.model3D.Placeable;
+
+import java.util.ArrayList;
+
+public interface Collidable extends Movable {
+ public void addCollidable(ArrayList pList);
+ public void onCollisionEnter(Placeable p);//触れたとき
+ public void onCollisionStay(Placeable p);//触れている間
+ public void onCollisionExit(Placeable p);//触れるのをやめたとき
+}
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
index 7b10a88..2ec1f31 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/MySubject.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/MySubject.java
@@ -8,16 +8,49 @@
import org.ntlab.radishforandroidstudio.framework.event.MyEvent;
import org.ntlab.radishforandroidstudio.framework.listener.MyListener;
-// TODO: removeListenerの追加
+/**
+ * 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/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 1a46284..3ebd41d 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/sample/SampleGameActivity.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/sample/SampleGameActivity.java
@@ -36,7 +36,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/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_main.xml b/app/src/main/res/layout/activity_main.xml
index 77628c5..ef10842 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -4,25 +4,20 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context=".cactusClient.MainActivity">
+ tools:context=".cactusClient.MainActivity"
+ android:id="@+id/fragment_place"
+ tools:layout_editor_absoluteY="73dp">
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
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..eca4d58
--- /dev/null
+++ b/app/src/main/res/layout/instances_fragment.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ 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
new file mode 100644
index 0000000..b1a3de6
--- /dev/null
+++ b/app/src/main/res/layout/login_fragment.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/sign_up_fragment.xml b/app/src/main/res/layout/sign_up_fragment.xml
new file mode 100644
index 0000000..b4e6114
--- /dev/null
+++ b/app/src/main/res/layout/sign_up_fragment.xml
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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
index 7786ac5..6a89e34 100644
--- a/app/src/main/res/layout/ui_fragment.xml
+++ b/app/src/main/res/layout/ui_fragment.xml
@@ -6,7 +6,7 @@
android:layout_height="match_parent">
RadishForAndroidStudio
Settings
+
+
+ Hello blank fragment