diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index d6dea49..a36d297 100644 --- a/.idea/caches/build_file_checksums.ser +++ b/.idea/caches/build_file_checksums.ser Binary files differ diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/Cactus.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/Cactus.java index 169053e..9ade637 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/Cactus.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/Cactus.java @@ -6,11 +6,14 @@ import android.os.Bundle; import org.ntlab.radishforandroidstudio.cactusClient.models.Account; +import org.ntlab.radishforandroidstudio.cactusClient.models.URIAddressedAccount; public class Cactus extends Application { private Account myAccount = null; + private URIAddressedAccount addressedAccount; + public Cactus() { registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @@ -61,6 +64,13 @@ myAccount = ac; } + public URIAddressedAccount getAddressedAccount() { + return addressedAccount; + } + + public void setAddressedAccount(URIAddressedAccount addressedAccount) { + this.addressedAccount = addressedAccount; + } } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/CharactersFragmentConnection.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/CharactersFragmentConnection.java index dbe9a35..a6f7f9f 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/CharactersFragmentConnection.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/CharactersFragmentConnection.java @@ -4,10 +4,6 @@ public class CharactersFragmentConnection extends HttpAsyncConnection { - public CharactersFragmentConnection() { - super("http://nitta-lab-www.is.konan-u.ac.jp:8080/CactusServer/rest/instances/"+"変数"+"/characters"); - } - public CharactersFragmentConnection(String instanceId) { super("http://nitta-lab-www.is.konan-u.ac.jp:8080/CactusServer/rest/instances/"+ instanceId +"/characters"); } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/PlayersConnection.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/PlayersConnection.java new file mode 100644 index 0000000..b55b956 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/connections/PlayersConnection.java @@ -0,0 +1,11 @@ +package org.ntlab.radishforandroidstudio.cactusClient.connections; + +import org.ntlab.radishforandroidstudio.framework.network.HttpAsyncConnection; + +public class PlayersConnection extends HttpAsyncConnection { + + public PlayersConnection() { + super("http://nitta-lab-www.is.konan-u.ac.jp:8080/CactusServer/rest/instances/players"); + } + +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Instances.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Instances.java index 1c7ebe0..ce0cf28 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Instances.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Instances.java @@ -83,7 +83,7 @@ HashMap responsePlayers = new HashMap<>(); for (String id : playerMap.keySet()) { Player player = playerMap.get(id); - String[] instanceURISplit = player.getInstanceURI().split("/"); // …/instances/{instanceId} + String[] instanceURISplit = player.getInstanceID().split("/"); // …/instances/{instanceId} if (instanceId.equals(instanceURISplit[instanceURISplit.length - 1])) { responsePlayers.put(id, player); } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Player.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Player.java index c02904d..c809e49 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Player.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Player.java @@ -9,8 +9,8 @@ import net.arnx.jsonic.JSONHint; public class Player extends Entity3D { - private String instanceURI; - private String characterURI; + private String instanceID; + private String characterID; private String areaURI; private Position3D position; private Quaternion3D angle; @@ -23,13 +23,13 @@ // JSONDecode時の呼び出し用 } - public Player(String instanceURI, String characterURI, CameraState cameraState, + public Player(String instanceID, String characterID, CameraState cameraState, EmoteState.EmoteType animationClassToStart) { - setInstanceURI(instanceURI); - setCharacterURI(characterURI); + setInstanceID(instanceID); + setCharacterID(characterID); setCameraState(cameraState); setAnimationClassToStart(animationClassToStart); - Character character = getCharacter(characterURI); + Character character = getCharacter(characterID); readCharacterData(character); initPlaceable(character.getModelID()); } @@ -39,17 +39,17 @@ Object3D body = CharacterModelManager.getInstance().getCharacterModel(modelID).createObject(); setPlaceable(new OvergroundActor(body, null)); // 所属するInstanceが持つUniverseにplaceableを配置する - String[] instanceURISplit = instanceURI.split("/"); // ……/instances/{instanceId} + String[] instanceURISplit = instanceID.split("/"); // ……/instances/{instanceId} String instanceId = instanceURISplit[instanceURISplit.length - 1]; Instances.getInstance().getInstance(instanceId).getUniverse().place(this.getPlaceable()); } - public String getInstanceURI() { - return instanceURI; + public String getInstanceID() { + return instanceID; } - public String getCharacterURI() { - return characterURI; + public String getCharacterID() { + return characterID; } public String getAreaURI() { @@ -72,12 +72,12 @@ return emoteState; } - public void setInstanceURI(String instanceURI) { - this.instanceURI = instanceURI; + public void setInstanceID(String instanceID) { + this.instanceID = instanceID; } - public void setCharacterURI(String characterURI) { - this.characterURI = characterURI; + public void setCharacterID(String characterID) { + this.characterID = characterID; } public void setAreaURI(String areaURI) { @@ -106,7 +106,7 @@ public Player update(String characterURI, Position3D position, Quaternion3D angle, CameraState cameraState, EmoteState.EmoteType animationClassToStart) { - setCharacterURI(characterURI); + setCharacterID(characterURI); setPosition(position); setQuaternion3D(angle); setCameraState(cameraState); @@ -145,12 +145,12 @@ } public void changeCharacter(String characterURI) { - writeCharacterData(this.characterURI); + writeCharacterData(this.characterID); readCharacterData(characterURI); } public void destroy() { - writeCharacterData(characterURI); + writeCharacterData(characterID); } private Character getCharacter(String characterURI) { @@ -165,7 +165,7 @@ setPosition(character.getPosition()); setQuaternion3D(character.getQuaternion3D()); setAreaURI(character.getAreaURI()); - setCharacterURI(characterURI); + setCharacterID(characterID); } private void readCharacterData(String characterURI) { 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 index c43f67f..124a776 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/CharactersFragment.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/CharactersFragment.java @@ -1,5 +1,6 @@ package org.ntlab.radishforandroidstudio.cactusClient.views; +import android.content.Context; import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; @@ -13,28 +14,40 @@ import android.widget.ListView; +import net.arnx.jsonic.JSON; +import net.arnx.jsonic.TypeReference; + import org.ntlab.radishforandroidstudio.R; import org.ntlab.radishforandroidstudio.cactusClient.Cactus; import org.ntlab.radishforandroidstudio.cactusClient.connections.CharactersFragmentConnection; +import org.ntlab.radishforandroidstudio.cactusClient.connections.PlayersConnection; import org.ntlab.radishforandroidstudio.cactusClient.models.Account; +import org.ntlab.radishforandroidstudio.cactusClient.models.Character; +import org.ntlab.radishforandroidstudio.cactusClient.models.Player; +import org.ntlab.radishforandroidstudio.framework.network.CallBack; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; public class CharactersFragment extends Fragment { private CharactersFragmentConnection connection; + private String instanceId; + private Account account; + private Cactus cactus; + private ArrayList characterIds = new ArrayList<>(); @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - String instanceId = getArguments().getString("instanceId"); + instanceId = getArguments().getString("instanceId"); - Cactus c = (Cactus) getActivity().getApplication(); - Account account = c.getMyAccount(); + cactus = (Cactus) getActivity().getApplication(); + account = cactus.getMyAccount(); connection = new CharactersFragmentConnection(instanceId); - // Inflate the layout for this fragment return inflater.inflate(R.layout.characters_fragment, container, false); } @@ -55,29 +68,61 @@ } }); - // ListViewに表示するデータ - final ArrayList items = new ArrayList<>(); -// items.add("インスタンスが"+ InstanceNum +"のキャラクター1"); -// items.add("インスタンスが"+ InstanceNum +"のキャラクター2"); -// items.add("インスタンスが"+ InstanceNum +"のキャラクター3"); - // ListViewをセット - final ArrayAdapter adapter = new ArrayAdapter(this.getContext(), android.R.layout.simple_list_item_1, items); + final ArrayAdapter adapter = new ArrayAdapter(this.getContext(), android.R.layout.simple_list_item_1, characterIds); ListView listView = (ListView) view.findViewById(R.id.list); listView.setAdapter(adapter); + + CharactersFragmentConnection con = new CharactersFragmentConnection(instanceId); +// con.addQueryParam("accountID", account.getUniqueID()); + con.setCallBack(new CallBack() { + private Context context; + public CallBack setContext(Context context) { + this.context = context; + return this; + } + @Override + public void onResponse(String response) { + Map characters = JSON.decode(response, new TypeReference>(){}); + for (String characterId : characters.keySet()) { + characterIds.add(characterId); + final ArrayAdapter adapter = new ArrayAdapter(context, android.R.layout.simple_list_item_1, characterIds); + ListView listView = (ListView)view.findViewById(R.id.list); + listView.setAdapter(adapter); + } + } + }.setContext(this.getContext())); + con.doGet(); // セルを選択されたら詳細画面フラグメント呼び出す listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + private Context context; @Override public void onItemClick(AdapterView parent, View v, int position, long id) { + PlayersConnection con = new PlayersConnection(); + con.addFormParam("instanceID", instanceId); + con.addFormParam("characterID", characterIds.get(position)); + con.setCallBack(new CallBack() { + @Override + public void onResponse(String response) { + Map player = JSON.decode(response, new TypeReference>(){}); +// Player character = JSON.decode(response, Player.class); + // プレイ画面へ + Bundle bundle = new Bundle(); + bundle.putSerializable("characterId", characterIds.get(position)); + PlayerFragmentLight fragment = new PlayerFragmentLight(); + fragment.setArguments(bundle); + // TODO: 型を上のMAPのやつを渡すようにする + fragment.setPlayer(player.values().iterator().next()); + FragmentManager manager = getFragmentManager(); + FragmentTransaction transaction = manager.beginTransaction(); + transaction.replace(R.id.fragment_place, fragment); + transaction.addToBackStack(null); + characterIds.clear(); + transaction.commit(); + } + }); - //ここでサーバーに何番のインスタンスが選ばれたのかを送信して、受け取った値に応じてキャラクターを送信しなければならない - //................................................... - //positionで選ばれたインスタンスわかるで!数字は0からやで!例えば1はデータ2やで!やで - FragmentManager manager = getFragmentManager(); - FragmentTransaction transaction = manager.beginTransaction(); - transaction.replace(R.id.fragment_place, new PlayerFragment()); - transaction.addToBackStack(null); - transaction.commit(); + con.doPost(); } }); } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/LoginFragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/LoginFragment.java index 61e5b78..fff180f 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/LoginFragment.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/LoginFragment.java @@ -87,6 +87,7 @@ Toast.makeText(getActivity(),"ログインに成功しました。", Toast.LENGTH_SHORT).show(); Cactus c = (Cactus) getActivity().getApplication(); c.setMyAccount(user); + c.setAddressedAccount(lac); FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.fragment_place, new InstancesFragment()); diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/PlayerFragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/PlayerFragment.java index d019d30..9cadaf1 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/PlayerFragment.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/PlayerFragment.java @@ -11,6 +11,7 @@ import android.view.ViewGroup; import org.ntlab.radishforandroidstudio.R; +import org.ntlab.radishforandroidstudio.cactusClient.models.Player; import org.ntlab.radishforandroidstudio.framework.RWT.RWTPad; import org.ntlab.radishforandroidstudio.framework.RWT.RWTUIFragment; import org.ntlab.radishforandroidstudio.framework.animation.Animation3D; @@ -38,6 +39,7 @@ private float touchX = 0.0f; private float touchY = 0.0f; RWTPad pad = null; + private Player player; public PlayerFragment() { // Required empty public constructor @@ -157,6 +159,12 @@ pad.addListener((PadListener) this); } + /** + * TODO: 座標等はcharacter変数を使用するようにする + * + * @param event イベントの情報 + * @return + */ @Override public boolean onEvent(PadEvent event) { Vector3d charaVector3d = pocha.getDirection(); @@ -178,5 +186,9 @@ } return false; } + + public void setPlayer(Player player) { + this.player = player; + } } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/PlayerFragmentLight.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/PlayerFragmentLight.java new file mode 100644 index 0000000..46f3081 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/PlayerFragmentLight.java @@ -0,0 +1,99 @@ +package org.ntlab.radishforandroidstudio.cactusClient.views; + + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.ntlab.radishforandroidstudio.R; +import org.ntlab.radishforandroidstudio.cactusClient.models.Player; +import org.ntlab.radishforandroidstudio.framework.RWT.RWTPad; +import org.ntlab.radishforandroidstudio.framework.RWT.RWTUIFragment; +import org.ntlab.radishforandroidstudio.framework.event.PadEvent; +import org.ntlab.radishforandroidstudio.framework.gameMain.RealTime3DFragment; +import org.ntlab.radishforandroidstudio.framework.listener.PadListener; +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 PlayerFragmentLight extends RealTime3DFragment implements PadListener { + private boolean isTouched = false; + private float touchX = 0.0f; + private float touchY = 0.0f; + RWTPad pad = null; + private Player player; + + public PlayerFragmentLight() { + // 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); + camera.setFieldOfView(1.5); + camera.setBackClipDistance(10000.0); + start(1000L, 50L, true); + } + + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState); + initGameWindowView(); + return parentView; + } + + @Override + protected void progress(long interval) { + } + + + //sampleUiFragmentからそのまま持ってきた + public void initGameWindowView() { + } + + public void onCreateFragmentEvent(RWTUIFragment f) { + pad = (RWTPad) f.findViewById(R.id.pad); + pad.addListener((PadListener) this); + } + + @Override + public boolean onEvent(PadEvent event) { + return false; + } + + public void setPlayer(Player player) { + this.player = player; + } +} +