diff options
Diffstat (limited to 'src/ch')
-rw-r--r-- | src/ch/epfl/xblast/Lists.java | 14 | ||||
-rw-r--r-- | src/ch/epfl/xblast/client/XBlastComponent.java | 19 |
2 files changed, 27 insertions, 6 deletions
diff --git a/src/ch/epfl/xblast/Lists.java b/src/ch/epfl/xblast/Lists.java index 073e0cc..da3f919 100644 --- a/src/ch/epfl/xblast/Lists.java +++ b/src/ch/epfl/xblast/Lists.java | |||
@@ -167,4 +167,18 @@ public final class Lists { | |||
167 | .collect(Collectors.toList())); | 167 | .collect(Collectors.toList())); |
168 | } | 168 | } |
169 | 169 | ||
170 | /** | ||
171 | * Returns an immutable copy of the given list, sorted using the supplied comparator. | ||
172 | * | ||
173 | * @param l the list to sort | ||
174 | * @param cmp the Comparator to use | ||
175 | * @param <T> the type of the list's elements | ||
176 | * @return the sorted list | ||
177 | */ | ||
178 | public static <T> List<T> sorted(List<T> l, Comparator<T> cmp) { | ||
179 | List<T> r = new ArrayList<>(l); | ||
180 | Collections.sort(r, cmp); | ||
181 | return Collections.unmodifiableList(r); | ||
182 | } | ||
183 | |||
170 | } | 184 | } |
diff --git a/src/ch/epfl/xblast/client/XBlastComponent.java b/src/ch/epfl/xblast/client/XBlastComponent.java index cab6fde..0b4f0bf 100644 --- a/src/ch/epfl/xblast/client/XBlastComponent.java +++ b/src/ch/epfl/xblast/client/XBlastComponent.java | |||
@@ -1,15 +1,14 @@ | |||
1 | package ch.epfl.xblast.client; | 1 | package ch.epfl.xblast.client; |
2 | 2 | ||
3 | import ch.epfl.xblast.Cell; | 3 | import ch.epfl.xblast.Cell; |
4 | import ch.epfl.xblast.Lists; | ||
4 | import ch.epfl.xblast.PlayerID; | 5 | import ch.epfl.xblast.PlayerID; |
5 | 6 | ||
6 | import javax.swing.*; | 7 | import javax.swing.*; |
7 | import java.awt.*; | 8 | import java.awt.*; |
8 | import java.awt.image.ImageObserver; | 9 | import java.awt.image.ImageObserver; |
9 | import java.util.Arrays; | 10 | import java.util.*; |
10 | import java.util.Collections; | ||
11 | import java.util.List; | 11 | import java.util.List; |
12 | import java.util.Objects; | ||
13 | import java.util.stream.Collectors; | 12 | import java.util.stream.Collectors; |
14 | import java.util.stream.IntStream; | 13 | import java.util.stream.IntStream; |
15 | 14 | ||
@@ -64,6 +63,16 @@ public final class XBlastComponent extends JComponent { | |||
64 | new Point(912, vShift)); | 63 | new Point(912, vShift)); |
65 | } | 64 | } |
66 | 65 | ||
66 | private static Comparator<GameState.Player> buildPlayerComparator(PlayerID blackSheep) { | ||
67 | Comparator<GameState.Player> coordinateComparator = | ||
68 | (p1, p2) -> p2.position().y() - p1.position().y(); | ||
69 | |||
70 | Comparator<GameState.Player> idComparator = | ||
71 | (p1, p2) -> p1.id() == blackSheep ? -1 : 0; | ||
72 | |||
73 | return coordinateComparator.thenComparing(idComparator); | ||
74 | } | ||
75 | |||
67 | private static void drawImage(Graphics2D g, Image img, Point pos) { | 76 | private static void drawImage(Graphics2D g, Image img, Point pos) { |
68 | g.drawImage(img, pos.x, pos.y, IMG_OBSERVER); | 77 | g.drawImage(img, pos.x, pos.y, IMG_OBSERVER); |
69 | } | 78 | } |
@@ -89,9 +98,7 @@ public final class XBlastComponent extends JComponent { | |||
89 | * @param players the list of players to be displayed | 98 | * @param players the list of players to be displayed |
90 | */ | 99 | */ |
91 | private void drawPlayers(Graphics2D g, List<GameState.Player> players) { | 100 | private void drawPlayers(Graphics2D g, List<GameState.Player> players) { |
92 | // TODO: draw in preferred order | 101 | for (GameState.Player p : Lists.sorted(players, buildPlayerComparator(this.playerID))) |
93 | |||
94 | for (GameState.Player p : players) | ||
95 | drawImage(g, p.image(), playerPosition(p)); | 102 | drawImage(g, p.image(), playerPosition(p)); |
96 | } | 103 | } |
97 | 104 | ||