Skip to content

Commit 184e915

Browse files
Refac
1 parent b6939b2 commit 184e915

File tree

1 file changed

+32
-26
lines changed
  • pacman-core/src/main/java/de/amr/pacmanfx/model/actors

1 file changed

+32
-26
lines changed

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

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -305,33 +305,39 @@ private void updateStateLocked(GameContext gameContext) {
305305
* The ghost speed is slower than outside, but I do not know the exact value.
306306
*/
307307
private void updateStateLeavingHouse(GameContext gameContext) {
308-
if (gameContext.optGameLevel().isPresent()) {
309-
GameLevel level = gameContext.gameLevel();
310-
House house = level.house().orElse(null);
311-
if (house == null) {
312-
Logger.error("No ghost house in level? WTF!");
313-
return;
314-
}
315-
float speedInsideHouse = gameContext.game().actorSpeedControl().ghostSpeedInsideHouse(gameContext, level, this);
316-
Vector2f houseEntryPosition = house.entryPosition();
317-
Vector2f position = position();
318-
if (position.y() <= houseEntryPosition.y()) {
319-
// has raised and is outside house
320-
setPosition(houseEntryPosition);
321-
setMoveDir(LEFT);
322-
setWishDir(LEFT);
323-
newTileEntered = false; // force moving left until new tile is entered
324-
if (level.pac().powerTimer().isRunning() && !level.victims().contains(this)) {
325-
setState(GhostState.FRIGHTENED);
326-
} else {
327-
setState(GhostState.HUNTING_PAC);
328-
}
329-
return;
308+
Optional<GameLevel> optGameLevel = gameContext.optGameLevel();
309+
if (optGameLevel.isEmpty()) {
310+
Logger.error("No game level? WTF!");
311+
return;
312+
}
313+
Optional<House> optHouse = optGameLevel.flatMap(GameLevel::house);
314+
if (optHouse.isEmpty()) {
315+
Logger.error("No house? WTF!");
316+
return;
317+
}
318+
GameLevel gameLevel = optGameLevel.get();
319+
House house = optHouse.get();
320+
321+
Vector2f position = position();
322+
Vector2f houseEntryPosition = house.entryPosition();
323+
if (position.y() <= houseEntryPosition.y()) {
324+
// is outside house at entry
325+
setY(houseEntryPosition.y());
326+
setMoveDir(LEFT);
327+
setWishDir(LEFT);
328+
newTileEntered = false; // don't change direction until new tile is entered
329+
if (gameLevel.pac().powerTimer().isRunning() && !gameLevel.victims().contains(this)) {
330+
setState(GhostState.FRIGHTENED);
331+
} else {
332+
setState(GhostState.HUNTING_PAC);
330333
}
331-
// move inside house
334+
}
335+
else {
336+
// still inside house
337+
float speed = gameContext.game().actorSpeedControl().ghostSpeedInsideHouse(gameContext, gameLevel, this);
332338
float centerX = position.x() + HTS;
333339
float houseCenterX = house.center().x();
334-
if (differsAtMost(0.5f * speedInsideHouse, centerX, houseCenterX)) {
340+
if (differsAtMost(0.5f * speed, centerX, houseCenterX)) {
335341
// align horizontally and raise
336342
setX(houseCenterX - HTS);
337343
setMoveDir(UP);
@@ -341,9 +347,9 @@ private void updateStateLeavingHouse(GameContext gameContext) {
341347
setMoveDir(centerX < houseCenterX ? RIGHT : LEFT);
342348
setWishDir(centerX < houseCenterX ? RIGHT : LEFT);
343349
}
344-
setSpeed(speedInsideHouse);
350+
setSpeed(speed);
345351
move();
346-
if (level.pac().powerTimer().isRunning() && !level.victims().contains(this)) {
352+
if (gameLevel.pac().powerTimer().isRunning() && !gameLevel.victims().contains(this)) {
347353
updateFrightenedAnimation(gameContext);
348354
} else {
349355
selectAnimation(ANIM_GHOST_NORMAL);

0 commit comments

Comments
 (0)