Skip to content

Commit 8754e58

Browse files
Refac
1 parent 20003f8 commit 8754e58

File tree

4 files changed

+74
-59
lines changed

4 files changed

+74
-59
lines changed

pacman-app-arcade-pacman/src/main/java/de/amr/pacmanfx/arcade/pacman/scenes/ArcadePacMan_PlayScene2D.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ public void drawSceneContent() {
245245
if (isDebugInfoVisible()) {
246246
actorsInZOrder.forEach(actor -> {
247247
if (actor instanceof MovingActor movingActor) {
248-
gameRenderer.drawMovingActorInfo(movingActor);
248+
gameRenderer.drawMovingActorInfo(gameRenderer.ctx(), scaling(), movingActor);
249249
}
250250
});
251251
}

pacman-app-tengen-mspacman/src/main/java/de/amr/pacmanfx/tengen/ms_pacman/scenes/TengenMsPacMan_PlayScene2D.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -495,8 +495,9 @@ protected void drawDebugInfo() {
495495
gameRenderer.ctx().setFont(debugTextFont);
496496
gameRenderer.ctx().fillText("%s %d".formatted(gameContext().gameState(), gameContext().gameState().timer().tickCount()), 0, scaled(3 * TS));
497497
if (gameContext().optGameLevel().isPresent()) {
498-
renderer().drawMovingActorInfo(gameContext().gameLevel().pac());
499-
ghostsByZ(gameContext().gameLevel()).forEach(renderer()::drawMovingActorInfo);
498+
gameRenderer.drawMovingActorInfo(gameRenderer.ctx(), scaling(), gameContext().gameLevel().pac());
499+
ghostsByZ(gameContext().gameLevel())
500+
.forEach(ghost -> gameRenderer.drawMovingActorInfo(gameRenderer.ctx(), scaling(), ghost));
500501
}
501502
gameRenderer.ctx().restore();
502503
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
Copyright (c) 2021-2025 Armin Reichert (MIT License)
3+
See file LICENSE in repository root directory for details.
4+
*/
5+
package de.amr.pacmanfx.ui._2d;
6+
7+
import de.amr.pacmanfx.lib.Vector2f;
8+
import de.amr.pacmanfx.model.actors.Actor;
9+
import de.amr.pacmanfx.model.actors.MovingActor;
10+
import de.amr.pacmanfx.model.actors.Pac;
11+
import de.amr.pacmanfx.uilib.animation.SpriteAnimationManager;
12+
import javafx.scene.canvas.GraphicsContext;
13+
import javafx.scene.paint.Color;
14+
import javafx.scene.text.Font;
15+
16+
public interface DebugInfoRenderer {
17+
18+
default void drawMovingActorInfo(GraphicsContext ctx, double scaling, MovingActor movingActor) {
19+
if (!movingActor.isVisible()) {
20+
return;
21+
}
22+
if (movingActor instanceof Pac pac) {
23+
String autopilot = pac.isUsingAutopilot() ? "autopilot" : "";
24+
String immune = pac.isImmune() ? "immune" : "";
25+
String text = "%s\n%s".formatted(autopilot, immune).trim();
26+
ctx.setFill(Color.WHITE);
27+
ctx.setFont(Font.font("Monospaced", scaling * (6)));
28+
ctx.fillText(text, scaling * (pac.x() - 4), scaling * (pac.y() + 16));
29+
}
30+
movingActor.animations()
31+
.filter(SpriteAnimationManager.class::isInstance)
32+
.map(SpriteAnimationManager.class::cast)
33+
.ifPresent(spriteAnimationMap -> {
34+
String selectedID = spriteAnimationMap.selectedID();
35+
if (selectedID != null) {
36+
drawAnimationInfo(ctx, scaling, movingActor, spriteAnimationMap, selectedID);
37+
}
38+
if (movingActor.wishDir() != null) {
39+
drawDirectionIndicator(ctx, scaling, movingActor);
40+
}
41+
});
42+
}
43+
44+
private void drawAnimationInfo(GraphicsContext ctx, double scaling, Actor actor, SpriteAnimationManager<?> spriteAnimationMap, String selectedID) {
45+
ctx.save();
46+
String text = "[%s:%d]".formatted(selectedID, spriteAnimationMap.current().frameIndex());
47+
double x = scaling * (actor.x() - 4), y = scaling * (actor.y() - 4);
48+
ctx.setFill(Color.WHITE);
49+
ctx.setFont(Font.font("Sans", scaling * (7)));
50+
ctx.fillText(text, x, y);
51+
ctx.setStroke(Color.GRAY);
52+
ctx.strokeText(text, x, y);
53+
ctx.restore();
54+
}
55+
56+
private void drawDirectionIndicator(GraphicsContext ctx, double scaling, MovingActor movingActor) {
57+
ctx.save();
58+
Vector2f center = movingActor.center();
59+
Vector2f arrowHead = center.plus(movingActor.wishDir().vector().scaled(12f)).scaled(scaling);
60+
Vector2f guyCenter = center.scaled(scaling);
61+
double radius = scaling * 2, diameter = 2 * radius;
62+
ctx.setStroke(Color.WHITE);
63+
ctx.setLineWidth(0.5);
64+
ctx.strokeLine(guyCenter.x(), guyCenter.y(), arrowHead.x(), arrowHead.y());
65+
ctx.setFill(movingActor.isNewTileEntered() ? Color.YELLOW : Color.GREEN);
66+
ctx.fillOval(arrowHead.x() - radius, arrowHead.y() - radius, diameter, diameter);
67+
ctx.restore();
68+
}
69+
}

pacman-ui/src/main/java/de/amr/pacmanfx/ui/_2d/GameRenderer.java

Lines changed: 1 addition & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,13 @@
1010
import de.amr.pacmanfx.model.GameLevel;
1111
import de.amr.pacmanfx.model.HUDData;
1212
import de.amr.pacmanfx.model.actors.Actor;
13-
import de.amr.pacmanfx.model.actors.MovingActor;
14-
import de.amr.pacmanfx.model.actors.Pac;
1513
import de.amr.pacmanfx.ui.GameAssets;
1614
import de.amr.pacmanfx.uilib.animation.SingleSpriteNoAnimation;
1715
import de.amr.pacmanfx.uilib.animation.SpriteAnimationManager;
1816
import de.amr.pacmanfx.uilib.assets.SpriteSheet;
1917
import de.amr.pacmanfx.uilib.rendering.BaseRenderer;
2018
import javafx.scene.image.Image;
2119
import javafx.scene.paint.Color;
22-
import javafx.scene.text.Font;
2320
import org.tinylog.Logger;
2421

2522
import java.util.Optional;
@@ -30,7 +27,7 @@
3027
/**
3128
* Common base class of all 2D game renderers.
3229
*/
33-
public abstract class GameRenderer extends BaseRenderer {
30+
public abstract class GameRenderer extends BaseRenderer implements DebugInfoRenderer {
3431

3532
protected final GameAssets assets;
3633

@@ -169,56 +166,4 @@ public void drawActorSpriteCentered(Actor actor, RectShort sprite) {
169166
drawSpriteScaledCenteredAt(sprite, centerX, centerY);
170167
}
171168

172-
public void drawMovingActorInfo(MovingActor movingActor) {
173-
if (!movingActor.isVisible()) {
174-
return;
175-
}
176-
if (movingActor instanceof Pac pac) {
177-
String autopilot = pac.isUsingAutopilot() ? "autopilot" : "";
178-
String immune = pac.isImmune() ? "immune" : "";
179-
String text = "%s\n%s".formatted(autopilot, immune).trim();
180-
ctx().setFill(Color.WHITE);
181-
ctx().setFont(Font.font("Monospaced", scaled(6)));
182-
ctx().fillText(text, scaled(pac.x() - 4), scaled(pac.y() + 16));
183-
}
184-
movingActor.animations()
185-
.filter(SpriteAnimationManager.class::isInstance)
186-
.map(SpriteAnimationManager.class::cast)
187-
.ifPresent(spriteAnimationMap -> {
188-
String selectedID = spriteAnimationMap.selectedID();
189-
if (selectedID != null) {
190-
drawAnimationInfo(movingActor, spriteAnimationMap, selectedID);
191-
}
192-
if (movingActor.wishDir() != null) {
193-
drawDirectionIndicator(movingActor);
194-
}
195-
});
196-
}
197-
198-
private void drawAnimationInfo(Actor actor, SpriteAnimationManager<?> spriteAnimationMap, String selectedID) {
199-
ctx().save();
200-
String text = "[%s:%d]".formatted(selectedID, spriteAnimationMap.current().frameIndex());
201-
double x = scaled(actor.x() - 4), y = scaled(actor.y() - 4);
202-
ctx().setFill(Color.WHITE);
203-
ctx().setFont(Font.font("Sans", scaled(7)));
204-
ctx().fillText(text, x, y);
205-
ctx().setStroke(Color.GRAY);
206-
ctx().strokeText(text, x, y);
207-
ctx().restore();
208-
}
209-
210-
private void drawDirectionIndicator(MovingActor movingActor) {
211-
ctx().save();
212-
double scaling = scaling();
213-
Vector2f center = movingActor.center();
214-
Vector2f arrowHead = center.plus(movingActor.wishDir().vector().scaled(12f)).scaled(scaling);
215-
Vector2f guyCenter = center.scaled(scaling);
216-
double radius = scaling * 2, diameter = 2 * radius;
217-
ctx().setStroke(Color.WHITE);
218-
ctx().setLineWidth(0.5);
219-
ctx().strokeLine(guyCenter.x(), guyCenter.y(), arrowHead.x(), arrowHead.y());
220-
ctx().setFill(movingActor.isNewTileEntered() ? Color.YELLOW : Color.GREEN);
221-
ctx().fillOval(arrowHead.x() - radius, arrowHead.y() - radius, diameter, diameter);
222-
ctx().restore();
223-
}
224169
}

0 commit comments

Comments
 (0)