Skip to content

Commit 212f74c

Browse files
Refac 2D rendering
1 parent ae9bc35 commit 212f74c

File tree

2 files changed

+39
-7
lines changed

2 files changed

+39
-7
lines changed

pacman-app-tengen-mspacman/src/main/java/de/amr/pacmanfx/tengen/ms_pacman/rendering/NonArcadeMapsSpriteSheet.java

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,51 @@
99
import de.amr.pacmanfx.uilib.assets.SpriteSheet;
1010
import javafx.scene.image.Image;
1111

12+
import static de.amr.pacmanfx.Globals.TS;
1213
import static de.amr.pacmanfx.lib.RectShort.rect;
1314

1415
public record NonArcadeMapsSpriteSheet(Image sourceImage) implements SpriteSheet<NonArcadeMapsSpriteSheet.MazeID> {
1516

1617
public enum MazeID {
17-
MAZE15;
18+
MAZE1, MAZE2, MAZE3, MAZE4, MAZE5, MAZE6, MAZE7, MAZE8, MAZE9, MAZE10,
19+
MAZE11, MAZE12, MAZE13, MAZE14, MAZE15, MAZE16, MAZE17, MAZE18, MAZE19,
20+
MAZE20, MAZE21, MAZE22, MAZE23, MAZE24, MAZE25, MAZE26, MAZE27, MAZE28,
21+
MAZE29, MAZE30, MAZE31, MAZE32, MAZE33, MAZE34, MAZE35, MAZE36
1822
}
1923

2024
private static final SpriteMap<MazeID> SPRITE_MAP = new SpriteMap<>(MazeID.class);
2125

26+
// Map row counts as they appear in the non-ARCADE mazes sprite sheet (row by row)
27+
private static final byte[] NON_ARCADE_MAP_ROW_COUNTS = {
28+
31, 31, 31, 31, 31, 31, 30, 31,
29+
31, 37, 31, 31, 31, 37, 31, 25,
30+
37, 31, 37, 37, 37, 37, 37, 31,
31+
37, 37, 31, 25, 31, 25, 31, 31, 37,
32+
25, 25, 25, 25,
33+
};
34+
2235
static {
23-
SPRITE_MAP.add(MazeID.MAZE15,
36+
MazeID[] ids = MazeID.values();
37+
int idNumber = 1;
38+
39+
int width = 28 * TS;
40+
int[] ys = {0, 248, 544, 840, 1136};
41+
42+
// first 4 rows
43+
for (int row = 0; row < 5; ++row) {
44+
for (int col = 0; col < 8; ++col) {
45+
int height = NON_ARCADE_MAP_ROW_COUNTS[col] * TS;
46+
if (idNumber != 32) {
47+
SPRITE_MAP.add(ids[idNumber - 1], new RectShort(col * width, ys[row], width, height));
48+
++idNumber;
49+
}
50+
if (row == 4 && col == 3) {
51+
break; // last maze in sprite sheet reached
52+
}
53+
}
54+
}
55+
// Maze #32 is special and has 3 animation frames
56+
SPRITE_MAP.add(MazeID.MAZE32,
2457
rect(1568, 840, 224, 248), rect(1568, 1088, 224, 248), rect(1568, 1336, 224, 248)
2558
);
2659
}

pacman-app-tengen-mspacman/src/main/java/de/amr/pacmanfx/tengen/ms_pacman/rendering/TengenMsPacMan_GameRenderer.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import static de.amr.pacmanfx.Globals.TS;
3636
import static de.amr.pacmanfx.model.actors.CommonAnimationID.ANIM_PAC_DYING;
3737
import static de.amr.pacmanfx.tengen.ms_pacman.TengenMsPacMan_UIConfig.nesPaletteColor;
38-
import static de.amr.pacmanfx.tengen.ms_pacman.rendering.NonArcadeMapsSpriteSheet.MazeID.MAZE15;
3938
import static java.util.Objects.requireNonNull;
4039
import static java.util.function.Predicate.not;
4140

@@ -240,10 +239,10 @@ public void drawLevel(
240239
var game = (TengenMsPacMan_GameModel) gameContext.game();
241240
int mapNumber = level.worldMap().getConfigValue("mapNumber");
242241
if (game.mapCategory() == MapCategory.STRANGE && mapNumber == 15) {
243-
int spriteIndex = strangeMap15SpriteIndex(tick);
242+
int spriteIndex = mazeAnimationSpriteIndex(tick);
244243
drawLevelWithMaze(gameContext, level,
245244
uiConfig.recoloredMazeSprites().mazeSprite().image(),
246-
uiConfig.nonArcadeMapsSpriteSheet().spriteSequence(MAZE15)[spriteIndex]);
245+
uiConfig.nonArcadeMapsSpriteSheet().spriteSequence(NonArcadeMapsSpriteSheet.MazeID.MAZE32)[spriteIndex]);
247246
} else {
248247
drawLevelWithMaze(gameContext, level,
249248
uiConfig.recoloredMazeSprites().mazeSprite().image(),
@@ -252,10 +251,10 @@ public void drawLevel(
252251
}
253252

254253
/*
255-
Strange map #15: psychedelic animation:
254+
Strange map #15 (maze #32): psychedelic animation:
256255
Frame pattern: (00000000 11111111 22222222 11111111)+, numFrames = 4, frameDuration = 8
257256
*/
258-
private int strangeMap15SpriteIndex(long tick) {
257+
private int mazeAnimationSpriteIndex(long tick) {
259258
long block = (tick % 32) / 8;
260259
return (int) (block < 3 ? block : 1);
261260
}

0 commit comments

Comments
 (0)