summaryrefslogtreecommitdiff
path: root/same-android/src/main/java/com/orbekk/same/GameController.java
diff options
context:
space:
mode:
Diffstat (limited to 'same-android/src/main/java/com/orbekk/same/GameController.java')
-rw-r--r--same-android/src/main/java/com/orbekk/same/GameController.java80
1 files changed, 80 insertions, 0 deletions
diff --git a/same-android/src/main/java/com/orbekk/same/GameController.java b/same-android/src/main/java/com/orbekk/same/GameController.java
new file mode 100644
index 0000000..144d6af
--- /dev/null
+++ b/same-android/src/main/java/com/orbekk/same/GameController.java
@@ -0,0 +1,80 @@
+package com.orbekk.same;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.orbekk.same.SameInterface;
+import com.orbekk.same.StateChangedListener;
+import com.orbekk.same.UpdateConflict;
+
+import android.graphics.Paint;
+
+public class GameController implements StateChangedListener {
+ private Logger logger = LoggerFactory.getLogger(getClass());
+ private List<Player> remotePlayers = new ArrayList<Player>();
+ private Player localPlayer;
+ private ChangeListener changeListener = null;
+ private SameInterface same;
+
+ public static class Player {
+ public Paint color;
+ public float posX;
+ public float posY;
+ }
+
+ public interface ChangeListener {
+ void playerStatesChanged();
+ }
+
+ public static Player newPlayer() {
+ Player player = new Player();
+ player.color = new Paint();
+ player.color.setARGB(255, 255, 0, 0);
+ player.posX = 0.5f;
+ player.posY = 0.5f;
+ return player;
+ }
+
+ public static GameController create(Player localPlayer,
+ SameInterface same) {
+ GameController controller = new GameController(localPlayer, same);
+ same.addStateChangedListener(controller);
+ return controller;
+ }
+
+ GameController(Player localPlayer, SameInterface same) {
+ this.localPlayer = localPlayer;
+ this.same = same;
+ }
+
+ public void setMyPosition(float x, float y) {
+ this.localPlayer.posX = x;
+ this.localPlayer.posY = y;
+ changeListener.playerStatesChanged();
+ try {
+ same.set("position", x + "," + y);
+ } catch (UpdateConflict e) {
+ logger.warn("Update failed.", e);
+ }
+ }
+
+ public Player getLocalPlayer() {
+ return localPlayer;
+ }
+
+ public List<Player> getRemotePlayers() {
+ return remotePlayers;
+ }
+
+ public void setChangeListener(ChangeListener listener) {
+ this.changeListener = listener;
+ }
+
+ @Override
+ public void stateChanged(String id, String data) {
+ logger.info("StateChanged({}, {})", id, data);
+ }
+}