aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ch/epfl/xblast/server/painter/PlayerPainter.java26
1 files changed, 15 insertions, 11 deletions
diff --git a/src/ch/epfl/xblast/server/painter/PlayerPainter.java b/src/ch/epfl/xblast/server/painter/PlayerPainter.java
index eb450d6..9fb0647 100644
--- a/src/ch/epfl/xblast/server/painter/PlayerPainter.java
+++ b/src/ch/epfl/xblast/server/painter/PlayerPainter.java
@@ -2,6 +2,7 @@ package ch.epfl.xblast.server.painter;
2 2
3import ch.epfl.xblast.Direction; 3import ch.epfl.xblast.Direction;
4import ch.epfl.xblast.PlayerID; 4import ch.epfl.xblast.PlayerID;
5import ch.epfl.xblast.SubCell;
5import ch.epfl.xblast.server.Player; 6import ch.epfl.xblast.server.Player;
6 7
7/** 8/**
@@ -21,21 +22,24 @@ public final class PlayerPainter {
21 private static final int PLAYER_MULTIPLIER = 20; 22 private static final int PLAYER_MULTIPLIER = 20;
22 private static final int DIRECTION_MULTIPLIER = 3; 23 private static final int DIRECTION_MULTIPLIER = 3;
23 24
24 private static final int ANIMATION_TICK_LOOP = 4; 25 private static final int ANIMATION_POSITION_LOOP = 4;
25 26
26 /** 27 /**
27 * Computes and returns the animation frame byte for the given tick if the player is moving. 28 * Computes and returns the animation frame byte for the given tick if the player is moving.
28 * 29 *
29 * @param tick the tick 30 * @param dir the direction
30 * @param player the player 31 * @param pos the position
31 * @return the frame byte 32 * @return the position byte
32 */ 33 */
33 private static byte byteForFrame(Player player,int tick) { 34 private static byte byteForPosition(Direction dir, SubCell pos) {
34 // if the player is stopped 35 int axialPosition;
35 if (player.directedPositions().head().position() == player.directedPositions().tail().head().position())
36 return 0; // no byte related to the frame
37 36
38 int cycleTick = tick % ANIMATION_TICK_LOOP; 37 if (dir == Direction.E || dir == Direction.W)
38 axialPosition = pos.x();
39 else
40 axialPosition = pos.y();
41
42 int cycleTick = axialPosition % ANIMATION_POSITION_LOOP;
39 return (byte) (cycleTick % 2 == 0 ? 0 : cycleTick / 2 + 1); 43 return (byte) (cycleTick % 2 == 0 ? 0 : cycleTick / 2 + 1);
40 } 44 }
41 45
@@ -98,12 +102,12 @@ public final class PlayerPainter {
98 if (tick % 2 == 0) 102 if (tick % 2 == 0)
99 return (byte) (byteForPlayerID() 103 return (byte) (byteForPlayerID()
100 + byteForDirection(player.direction()) 104 + byteForDirection(player.direction())
101 + byteForFrame(player, tick)); 105 + byteForPosition(player.direction(), player.position()));
102 106
103 default: 107 default:
104 return (byte) (byteForPlayerID(player.id()) 108 return (byte) (byteForPlayerID(player.id())
105 + byteForDirection(player.direction()) 109 + byteForDirection(player.direction())
106 + byteForFrame(player, tick)); 110 + byteForPosition(player.direction(), player.position()));
107 } 111 }
108 } 112 }
109 113