diff options
| -rw-r--r-- | same-android/src/main/java/com/orbekk/same/GameView.java | 30 | ||||
| -rw-r--r-- | same-android/src/main/java/com/orbekk/same/android/ClientInterfaceBridge.java | 2 | 
2 files changed, 26 insertions, 6 deletions
| diff --git a/same-android/src/main/java/com/orbekk/same/GameView.java b/same-android/src/main/java/com/orbekk/same/GameView.java index d9a8052..9290bad 100644 --- a/same-android/src/main/java/com/orbekk/same/GameView.java +++ b/same-android/src/main/java/com/orbekk/same/GameView.java @@ -16,6 +16,8 @@ import android.view.SurfaceHolder;  import android.view.SurfaceView;  import android.widget.Toast; +import java.util.concurrent.atomic.AtomicReference; +  public class GameView extends SurfaceView implements SurfaceHolder.Callback {      private Logger logger = LoggerFactory.getLogger(getClass());      private GameThread thread; @@ -34,6 +36,9 @@ public class GameView extends SurfaceView implements SurfaceHolder.Callback {          private Context context;          private Paint background;          private Variable<Player> player; +        private AtomicReference<Player> currentPosition = +                new AtomicReference<Player>(); +                  private Paint color = new Paint();          public GameThread(SurfaceHolder holder, Context context, @@ -41,6 +46,15 @@ public class GameView extends SurfaceView implements SurfaceHolder.Callback {              this.holder = holder;              this.context = context;              this.player = player; +            if (player.get() != null) { +                currentPosition.set(player.get()); +            } else { +                currentPosition.set(new Player() {{ +                    posX = 0.5f; +                    posY = 0.5f; +                }}); +            } +                          background = new Paint();              background.setARGB(255, 0, 0, 0);              color.setARGB(255, 255, 0, 0); @@ -83,17 +97,23 @@ public class GameView extends SurfaceView implements SurfaceHolder.Callback {              }          } -        private synchronized void setPosition(float x, float y) { -            Player newPlayer = new Player(); -            newPlayer.posX = x / width; -            newPlayer.posY = y / width; -            player.set(newPlayer); +        private synchronized void setPosition(final float x, final float y) { +            Player newPlayer = new Player() {{ +                posX = x / width; +                posY = y / width; +            }}; +            currentPosition.set(newPlayer);          }          @Override          public void valueChanged(Variable<Player> unused) {              logger.info("Variable updated.");              player.update(); +            if (player.get() == null || +                    currentPosition.get().posX != player.get().posX || +                    currentPosition.get().posY != player.get().posY) { +                player.set(currentPosition.get()); +            }              run();          }      } diff --git a/same-android/src/main/java/com/orbekk/same/android/ClientInterfaceBridge.java b/same-android/src/main/java/com/orbekk/same/android/ClientInterfaceBridge.java index dfab773..faa1072 100644 --- a/same-android/src/main/java/com/orbekk/same/android/ClientInterfaceBridge.java +++ b/same-android/src/main/java/com/orbekk/same/android/ClientInterfaceBridge.java @@ -90,7 +90,7 @@ public class ClientInterfaceBridge implements ClientInterface {      };      private void updateState(State.Component component) { -        state.update(component.getName(), component.getData(), +        state.forceUpdate(component.getName(), component.getData(),                  component.getRevision());          for (StateChangedListener listener : listeners) {              listener.stateChanged(component); | 
