Skip to content

Commit f592862

Browse files
Refac
1 parent 639dfe1 commit f592862

File tree

4 files changed

+40
-26
lines changed

4 files changed

+40
-26
lines changed

pacman-core/src/main/java/de/amr/pacmanfx/model/GameLevel.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -135,12 +135,6 @@ public GameLevel(int number, WorldMap worldMap, LevelData data) {
135135
}
136136
ghostStartPositions[ORANGE_GHOST_POKEY] = halfTileRightOf(orangeGhostTile);
137137

138-
// Revival positions
139-
house.setGhostRevivalTile(RED_GHOST_SHADOW, pinkGhostTile);
140-
house.setGhostRevivalTile(PINK_GHOST_SPEEDY, pinkGhostTile);
141-
house.setGhostRevivalTile(CYAN_GHOST_BASHFUL, cyanGhostTile);
142-
house.setGhostRevivalTile(ORANGE_GHOST_POKEY, orangeGhostTile);
143-
144138
// Scatter tiles
145139

146140
ghostScatterTiles[RED_GHOST_SHADOW] = worldMap.getTerrainTileProperty(POS_SCATTER_RED_GHOST,
@@ -154,7 +148,6 @@ public GameLevel(int number, WorldMap worldMap, LevelData data) {
154148

155149
ghostScatterTiles[ORANGE_GHOST_POKEY] = worldMap.getTerrainTileProperty(POS_SCATTER_ORANGE_GHOST,
156150
Vector2i.of(worldMap.numRows() - EMPTY_ROWS_BELOW_MAZE, 0));
157-
158151
}
159152

160153
private Portal[] findPortals(WorldMap worldMap) {
@@ -265,7 +258,20 @@ public void hidePacAndGhosts() {
265258
public void setPac(Pac pac) { this.pac = pac; }
266259
public Pac pac() { return pac; }
267260

268-
public void setGhosts(Ghost... ghosts) { this.ghosts = requireNonNull(ghosts); }
261+
public void setGhosts(Ghost... ghosts) {
262+
this.ghosts = requireNonNull(ghosts);
263+
for (Ghost ghost : ghosts) {
264+
byte personality = ghost.id().personality();
265+
Vector2i tile = switch (personality) {
266+
case RED_GHOST_SHADOW, PINK_GHOST_SPEEDY -> worldMap.getTerrainTileProperty(POS_RED_GHOST);
267+
case CYAN_GHOST_BASHFUL -> worldMap.getTerrainTileProperty(POS_CYAN_GHOST);
268+
case ORANGE_GHOST_POKEY -> worldMap.getTerrainTileProperty(POS_ORANGE_GHOST);
269+
default -> throw new IllegalArgumentException("Illegal ghost personality: %d".formatted(personality));
270+
};
271+
house.setGhostRevivalTile(ghost.id(), tile);
272+
}
273+
}
274+
269275
public Ghost ghost(byte id) { return ghosts != null ? ghosts[requireValidGhostPersonality(id)] : null; }
270276

271277
public Stream<Ghost> ghosts(GhostState... states) {

pacman-core/src/main/java/de/amr/pacmanfx/model/House.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package de.amr.pacmanfx.model;
22

3-
import de.amr.pacmanfx.Validations;
43
import de.amr.pacmanfx.lib.Vector2f;
54
import de.amr.pacmanfx.lib.Vector2i;
65
import de.amr.pacmanfx.model.actors.Actor;
6+
import de.amr.pacmanfx.model.actors.GhostID;
77

88
import java.util.HashMap;
99
import java.util.Map;
@@ -18,7 +18,7 @@ public class House {
1818
private final Vector2i maxTile;
1919
private final Vector2i leftDoorTile;
2020
private final Vector2i rightDoorTile;
21-
private final Map<Byte, Vector2i> ghostRevivalTileMap = new HashMap<>();
21+
private final Map<GhostID, Vector2i> ghostRevivalTileMap = new HashMap<>();
2222

2323
public House(Vector2i minTile, Vector2i maxTile, Vector2i leftDoorTile, Vector2i rightDoorTile) {
2424
this.minTile = requireNonNull(minTile);
@@ -52,14 +52,13 @@ public boolean isDoorAt(Vector2i tile) {
5252
return tile.equals(leftDoorTile) || tile.equals(rightDoorTile);
5353
}
5454

55-
public void setGhostRevivalTile(byte personality, Vector2i tile) {
56-
Validations.requireValidGhostPersonality(personality);
55+
public void setGhostRevivalTile(GhostID ghostID, Vector2i tile) {
5756
requireNonNull(tile);
58-
ghostRevivalTileMap.put(personality, tile);
57+
ghostRevivalTileMap.put(ghostID, tile);
5958
}
6059

61-
public Vector2i ghostRevivalTile(byte personality) {
62-
return ghostRevivalTileMap.get(personality);
60+
public Vector2i ghostRevivalTile(GhostID ghostID) {
61+
return ghostRevivalTileMap.get(ghostID);
6362
}
6463

6564
/**

pacman-core/src/main/java/de/amr/pacmanfx/model/actors/Ghost.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ private void updateStateEnteringHouse(GameContext gameContext) {
467467
}
468468
float speed = gameContext.game().actorSpeedControl().ghostSpeedReturningToHouse(gameContext, level, this);
469469
Vector2f position = position();
470-
Vector2f revivalPosition = house.ghostRevivalTile(id.personality()).scaled((float)TS).plus(HTS, 0);
470+
Vector2f revivalPosition = house.ghostRevivalTile(id).scaled((float)TS).plus(HTS, 0);
471471
if (position.roughlyEquals(revivalPosition, 0.5f * speed, 0.5f * speed)) {
472472
setPosition(revivalPosition);
473473
setMoveDir(UP);

pacman-ui/src/main/java/de/amr/pacmanfx/ui/_3d/GameLevel3D.java

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import java.util.function.Predicate;
5151
import java.util.stream.Collectors;
5252
import java.util.stream.IntStream;
53+
import java.util.stream.Stream;
5354

5455
import static de.amr.pacmanfx.Globals.*;
5556
import static de.amr.pacmanfx.lib.RandomNumberSupport.randomInt;
@@ -520,11 +521,15 @@ private void createMaze3D() {
520521
Logger.info("Built 3D maze with {} composite walls in {} milliseconds", wall3DCount, passedTimeMillis);
521522

522523
gameLevel.house().ifPresent(house -> {
523-
Vector2f[] ghostRevivalPositions = {
524-
house.ghostRevivalTile(CYAN_GHOST_BASHFUL).scaled((float) TS).plus(HTS, HTS),
525-
house.ghostRevivalTile(PINK_GHOST_SPEEDY) .scaled((float) TS).plus(HTS, HTS),
526-
house.ghostRevivalTile(ORANGE_GHOST_POKEY).scaled((float) TS).plus(HTS, HTS),
524+
Vector2i[] ghostRevivalTiles = {
525+
house.ghostRevivalTile(gameLevel.ghost(CYAN_GHOST_BASHFUL).id()),
526+
house.ghostRevivalTile(gameLevel.ghost(PINK_GHOST_SPEEDY).id()),
527+
house.ghostRevivalTile(gameLevel.ghost(ORANGE_GHOST_POKEY).id()),
527528
};
529+
Vector2f[] ghostRevivalPositions = Stream.of(ghostRevivalTiles)
530+
.map(tile -> tile.scaled((float) TS).plus(HTS, HTS))
531+
.toArray(Vector2f[]::new);
532+
528533
house3D = new ArcadeHouse3D(
529534
animationRegistry,
530535
house,
@@ -616,15 +621,19 @@ private void createEnergizers3D() {
616621
ghosts3D.get(ORANGE_GHOST_POKEY).ghost3D().dressMaterialNormal(),
617622
};
618623
House house = gameLevel.house().orElseThrow();
619-
Vector2f[] ghostRevivalPositionCenters = {
620-
house.ghostRevivalTile(RED_GHOST_SHADOW) .scaled((float) TS).plus(TS, HTS),
621-
house.ghostRevivalTile(PINK_GHOST_SPEEDY) .scaled((float) TS).plus(TS, HTS),
622-
house.ghostRevivalTile(CYAN_GHOST_BASHFUL).scaled((float) TS).plus(TS, HTS),
623-
house.ghostRevivalTile(ORANGE_GHOST_POKEY).scaled((float) TS).plus(TS, HTS),
624+
Vector2i[] ghostRevivalTiles = {
625+
house.ghostRevivalTile(gameLevel.ghost(RED_GHOST_SHADOW).id()),
626+
house.ghostRevivalTile(gameLevel.ghost(CYAN_GHOST_BASHFUL).id()),
627+
house.ghostRevivalTile(gameLevel.ghost(PINK_GHOST_SPEEDY).id()),
628+
house.ghostRevivalTile(gameLevel.ghost(ORANGE_GHOST_POKEY).id()),
624629
};
630+
Vector2f[] ghostRevivalCenters = Stream.of(ghostRevivalTiles)
631+
.map(tile -> tile.scaled((float) TS).plus(TS, HTS))
632+
.toArray(Vector2f[]::new);
633+
625634
energizers3D = gameLevel.tilesContainingFood()
626635
.filter(gameLevel::isEnergizerPosition)
627-
.map(tile -> createEnergizer3D(tile, radius, minScaling, maxScaling, ghostDressMaterials, ghostRevivalPositionCenters))
636+
.map(tile -> createEnergizer3D(tile, radius, minScaling, maxScaling, ghostDressMaterials, ghostRevivalCenters))
628637
.collect(Collectors.toCollection(HashSet::new));
629638
}
630639

0 commit comments

Comments
 (0)