Skip to content

Commit cb10222

Browse files
Refac
1 parent d6dbbf6 commit cb10222

File tree

9 files changed

+45
-40
lines changed

9 files changed

+45
-40
lines changed

pacman-app-arcade-mspacman/src/main/java/de/amr/pacmanfx/arcade/ms_pacman/ArcadeMsPacMan_GameModel.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -299,14 +299,12 @@ public void createLevel(int levelNumber) {
299299
}
300300

301301
@Override
302-
public long pacPowerFadingTicks(GameLevel level) {
303-
// Ghost flashing animation has frame length 14 so one full flash takes 28 ticks
304-
//TODO find better solution.
305-
return level != null ? level.data().numFlashes() * 28L : 0;
302+
public double pacPowerFadingSeconds(GameLevel level) {
303+
return level != null ? level.data().numFlashes() * 0.5 : 0;
306304
}
307305

308306
@Override
309-
public boolean isPacManSafeInDemoLevel() {
307+
protected boolean isPacManSafeInDemoLevel() {
310308
float levelDurationInSec = (System.currentTimeMillis() - level.startTime()) / 1000f;
311309
if (level.isDemoLevel() && levelDurationInSec < DEMO_LEVEL_MIN_DURATION_SEC) {
312310
Logger.info("Pac-Man remains alive, demo level has just been running for {} sec", levelDurationInSec);
@@ -316,7 +314,7 @@ public boolean isPacManSafeInDemoLevel() {
316314
}
317315

318316
@Override
319-
public boolean isBonusReached() {
317+
protected boolean isBonusReached() {
320318
return level.eatenFoodCount() == 64 || level.eatenFoodCount() == 176;
321319
}
322320

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

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import de.amr.pacmanfx.GameContext;
88
import de.amr.pacmanfx.event.GameEventType;
99
import de.amr.pacmanfx.lib.Vector2i;
10+
import de.amr.pacmanfx.lib.timer.TickTimer;
1011
import de.amr.pacmanfx.model.*;
1112
import de.amr.pacmanfx.model.actors.ActorSpeedControl;
1213
import de.amr.pacmanfx.model.actors.Ghost;
@@ -15,7 +16,6 @@
1516

1617
import java.util.Optional;
1718

18-
import static de.amr.pacmanfx.Globals.NUM_TICKS_PER_SEC;
1919
import static de.amr.pacmanfx.model.actors.GhostState.FRIGHTENED;
2020
import static de.amr.pacmanfx.model.actors.GhostState.HUNTING_PAC;
2121

@@ -100,8 +100,8 @@ public MapSelector mapSelector() {
100100
// Actors
101101

102102
@Override
103-
public long pacPowerTicks(GameLevel level) {
104-
return level != null ? 60 * level.data().pacPowerSeconds() : 0;
103+
public double pacPowerSeconds(GameLevel level) {
104+
return level != null ? level.data().pacPowerSeconds() : 0;
105105
}
106106

107107
@Override
@@ -191,12 +191,13 @@ public void onEnergizerEaten(Vector2i tile) {
191191
level.victims().clear();
192192
level.ghosts(FRIGHTENED, HUNTING_PAC).forEach(Ghost::reverseAtNextOccasion);
193193

194-
long powerTicks = pacPowerTicks(level);
195-
if (powerTicks > 0) {
194+
double powerSeconds = pacPowerSeconds(level);
195+
if (powerSeconds > 0) {
196196
huntingTimer().stop();
197197
Logger.debug("Hunting stopped (Pac-Man got power)");
198-
level.pac().powerTimer().restartTicks(powerTicks);
199-
Logger.debug("Power timer restarted, {} ticks ({0.00} sec)", powerTicks, (float) powerTicks / NUM_TICKS_PER_SEC);
198+
long ticks = TickTimer.secToTicks(powerSeconds);
199+
level.pac().powerTimer().restartTicks(ticks);
200+
Logger.debug("Power timer restarted, {} ticks ({0.00} sec)", ticks, powerSeconds);
200201
level.ghosts(HUNTING_PAC).forEach(ghost -> ghost.setState(FRIGHTENED));
201202
simulationStep.pacGotPower = true;
202203
eventManager().publishEvent(GameEventType.PAC_GETS_POWER);

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -301,18 +301,17 @@ public void createLevel(int levelNumber) {
301301
}
302302

303303
@Override
304-
public boolean isPacManSafeInDemoLevel() {
304+
protected boolean isPacManSafeInDemoLevel() {
305305
return false;
306306
}
307307

308308
@Override
309-
public long pacPowerFadingTicks(GameLevel level) {
310-
// ghost flashing animation has frame length 14 so one full flash takes 28 ticks
311-
return level != null ? level.data().numFlashes() * 28L : 0;
309+
public double pacPowerFadingSeconds(GameLevel level) {
310+
return level != null ? level.data().numFlashes() * 0.5 : 0;
312311
}
313312

314313
@Override
315-
public boolean isBonusReached() {
314+
protected boolean isBonusReached() {
316315
return level.eatenFoodCount() == 70 || level.eatenFoodCount() == 170;
317316
}
318317

pacman-app-tengen-mspacman/src/main/java/de/amr/pacmanfx/tengen/ms_pacman/model/TengenMsPacMan_GameModel.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import static de.amr.pacmanfx.lib.RandomNumberSupport.randomByte;
3131
import static de.amr.pacmanfx.lib.UsefulFunctions.tileAt;
3232
import static de.amr.pacmanfx.lib.tilemap.TerrainTile.*;
33+
import static de.amr.pacmanfx.lib.timer.TickTimer.secToTicks;
3334
import static de.amr.pacmanfx.model.actors.CommonAnimationID.ANIM_GHOST_NORMAL;
3435
import static de.amr.pacmanfx.model.actors.CommonAnimationID.ANIM_PAC_MUNCHING;
3536
import static de.amr.pacmanfx.tengen.ms_pacman.rendering.TengenMsPacMan_PacAnimationMap.ANIM_MS_PAC_MAN_BOOSTER;
@@ -423,16 +424,15 @@ public void startNextLevel() {
423424
}
424425

425426
@Override
426-
public long pacPowerTicks(GameLevel level) {
427+
public double pacPowerSeconds(GameLevel level) {
427428
if (level == null) return 0;
428429
int index = level.number() <= 19 ? level.number() - 1 : 18;
429-
double seconds = POWER_PELLET_TIMES[index] / 16.0;
430-
return (long) (seconds * 60); // 60 ticks/sec
430+
return POWER_PELLET_TIMES[index] / 16.0;
431431
}
432432

433433
@Override
434-
public long pacPowerFadingTicks(GameLevel level) {
435-
return level != null ? level.data().numFlashes() * 28L : 0; // TODO check in emulator
434+
public double pacPowerFadingSeconds(GameLevel level) {
435+
return level != null ? level.data().numFlashes() * 0.5 : 0; // TODO check in emulator
436436
}
437437

438438
@Override
@@ -578,7 +578,7 @@ public void buildDemoLevel() {
578578
public int lastLevelNumber() { return LAST_LEVEL_NUMBER; }
579579

580580
@Override
581-
public boolean isPacManSafeInDemoLevel() {
581+
protected boolean isPacManSafeInDemoLevel() {
582582
float levelRunningSeconds = (System.currentTimeMillis() - level.startTime()) / 1000f;
583583
if (level.isDemoLevel() && levelRunningSeconds < DEMO_LEVEL_MIN_DURATION_SEC) {
584584
Logger.info("Pac-Man dead ignored, demo level is running since {} seconds", levelRunningSeconds);
@@ -588,7 +588,7 @@ public boolean isPacManSafeInDemoLevel() {
588588
}
589589

590590
@Override
591-
public boolean isBonusReached() {
591+
protected boolean isBonusReached() {
592592
return level.eatenFoodCount() == 64 || level.eatenFoodCount() == 176;
593593
}
594594

@@ -672,12 +672,13 @@ private void onEnergizerEaten() {
672672
scoreManager.scorePoints(ENERGIZER_VALUE);
673673
Logger.info("Scored {} points for eating energizer", ENERGIZER_VALUE);
674674
level.victims().clear();
675-
long powerTicks = pacPowerTicks(level);
675+
double powerSeconds = pacPowerSeconds(level);
676+
long powerTicks = secToTicks(powerSeconds);
676677
if (powerTicks > 0) {
677678
huntingTimer.stop();
678679
Logger.info("Hunting Pac-Man stopped as he got power");
679680
level.pac().powerTimer().restartTicks(powerTicks);
680-
Logger.info("Power timer restarted, duration={} ticks ({0.00} sec)", powerTicks, powerTicks / NUM_TICKS_PER_SEC);
681+
Logger.info("Power timer restarted, duration={} ticks ({0.00} sec)", powerTicks, powerSeconds);
681682
level.ghosts(GhostState.HUNTING_PAC).forEach(ghost -> ghost.setState(GhostState.FRIGHTENED));
682683
level.ghosts(GhostState.FRIGHTENED).forEach(Ghost::reverseAtNextOccasion);
683684
simulationStep.pacGotPower = true;

pacman-core/src/main/java/de/amr/pacmanfx/lib/timer/TickTimer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public enum State {
3030

3131
/**
3232
* @param seconds seconds
33-
* @return number of ticks corresponding to given seconds at 60Hz
33+
* @return number of ticks corresponding to given seconds at the normal frame rate (60Hz)
3434
*/
3535
public static long secToTicks(double seconds) {
3636
return Math.round(seconds * Globals.NUM_TICKS_PER_SEC);

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,8 @@ protected void checkIfPacManGetsKilled(Pac pac) {
196196
});
197197
}
198198

199+
protected abstract boolean isPacManSafeInDemoLevel();
200+
199201
protected void updatePacPower() {
200202
final TickTimer powerTimer = level.pac().powerTimer();
201203
powerTimer.doTick();
@@ -221,6 +223,8 @@ protected void checkIfGhostsKilled() {
221223

222224
protected abstract void checkIfPacManFindsFood();
223225

226+
protected abstract boolean isBonusReached();
227+
224228
protected void checkIfPacManCanEatBonus(Bonus bonus) {
225229
if (bonus.state() == BonusState.EDIBLE && actorsCollide(level.pac(), bonus)) {
226230
bonus.setEaten(120); //TODO is 2 seconds correct?

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,11 @@ public interface Game extends GameLifecycle, GameEvents {
3030
boolean isPlaying();
3131
void setPlaying(boolean playing);
3232
boolean isLevelCompleted();
33-
boolean isPacManSafeInDemoLevel();
3433
int lastLevelNumber();
35-
boolean isBonusReached();
3634
boolean canContinueOnGameOver();
3735
boolean hasPacManBeenKilled();
3836
boolean haveGhostsBeenKilled();
39-
long pacPowerFadingTicks(GameLevel gameLevel);
40-
long pacPowerTicks(GameLevel level);
37+
38+
double pacPowerFadingSeconds(GameLevel gameLevel);
39+
double pacPowerSeconds(GameLevel level);
4140
}

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
import java.util.Optional;
1717

18+
import static de.amr.pacmanfx.lib.timer.TickTimer.secToTicks;
1819
import static de.amr.pacmanfx.model.actors.CommonAnimationID.ANIM_PAC_MUNCHING;
1920
import static java.util.Objects.requireNonNull;
2021

@@ -138,15 +139,16 @@ public TickTimer powerTimer() {
138139
public boolean isPowerFading() {
139140
if (gameContext == null || gameContext.optGameLevel().isEmpty()) return false;
140141

141-
return powerTimer.isRunning()
142-
&& powerTimer.remainingTicks() <= gameContext.game().pacPowerFadingTicks(gameContext.gameLevel());
142+
long fadingTicks = secToTicks(gameContext.game().pacPowerFadingSeconds(gameContext.gameLevel()));
143+
return powerTimer.isRunning() && powerTimer.remainingTicks() <= fadingTicks;
143144
}
144145

145146
public boolean isPowerFadingStarting() {
146147
if (gameContext == null || gameContext.optGameLevel().isEmpty()) return false;
147148

148-
return powerTimer.isRunning() && powerTimer.remainingTicks() == gameContext.game().pacPowerFadingTicks(gameContext.gameLevel())
149-
|| powerTimer.durationTicks() < gameContext.game().pacPowerFadingTicks(gameContext.gameLevel()) && powerTimer.tickCount() == 1;
149+
long fadingTicks = secToTicks(gameContext.game().pacPowerFadingSeconds(gameContext.gameLevel()));
150+
return powerTimer.isRunning() && powerTimer.remainingTicks() == fadingTicks
151+
|| powerTimer.durationTicks() < fadingTicks && powerTimer.tickCount() == 1;
150152
}
151153

152154
@Override

pacman-ui/src/main/java/de/amr/pacmanfx/ui/dashboard/InfoBoxGameInfo.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,15 @@
1212
import de.amr.pacmanfx.model.HuntingTimer;
1313
import de.amr.pacmanfx.model.actors.ActorSpeedControl;
1414
import de.amr.pacmanfx.model.actors.Ghost;
15-
import de.amr.pacmanfx.ui.api.GameUI;
1615
import de.amr.pacmanfx.ui._2d.GameScene2D;
16+
import de.amr.pacmanfx.ui.api.GameUI;
1717
import de.amr.pacmanfx.uilib.assets.WorldMapColorScheme;
1818
import javafx.scene.paint.Color;
1919

2020
import java.util.Map;
2121

2222
import static de.amr.pacmanfx.Globals.*;
23+
import static de.amr.pacmanfx.lib.timer.TickTimer.secToTicks;
2324
import static de.amr.pacmanfx.lib.timer.TickTimer.ticksToString;
2425
import static de.amr.pacmanfx.uilib.Ufx.formatColorHex;
2526

@@ -161,9 +162,9 @@ private String fmtPacSpeedPowered(GameLevel level) {
161162
}
162163

163164
private String fmtPacPowerTime(GameLevel level) {
164-
return "%.2f sec (%d ticks)".formatted(
165-
ui.gameContext().game().pacPowerTicks(level) / (float) NUM_TICKS_PER_SEC,
166-
ui.gameContext().game().pacPowerTicks(level));
165+
double powerSec = ui.gameContext().game().pacPowerSeconds(level);
166+
long powerTicks = secToTicks(powerSec);
167+
return "%.2f sec (%d ticks)".formatted(powerTicks / (float) NUM_TICKS_PER_SEC, powerTicks);
167168
}
168169

169170
private String fmtNumFlashes(GameLevel level) {

0 commit comments

Comments
 (0)