commit
334d41441c
@ -0,0 +1,38 @@
|
||||
#include "Dave.hpp"
|
||||
|
||||
namespace pacman {
|
||||
|
||||
Dave::Dave()
|
||||
: Ghost(Atlas::Ghost::dave) {
|
||||
pos = initialPosition();
|
||||
}
|
||||
|
||||
double Dave::speed() const {
|
||||
if (state == State::Eyes)
|
||||
return 2;
|
||||
if (state == State::Frightened)
|
||||
return 0.5;
|
||||
return 0.75;
|
||||
}
|
||||
|
||||
void Dave::setTarget(Position pacManPos) {
|
||||
if (isInPen()) {
|
||||
target = penDoorPosition();
|
||||
return;
|
||||
}
|
||||
if (positionDistance(pos, pacManPos) > 8) {
|
||||
target = pacManPos;
|
||||
} else {
|
||||
target = scatterTarget();
|
||||
}
|
||||
}
|
||||
|
||||
Position Dave::initialPosition() const {
|
||||
return { 15.5, 14 };
|
||||
}
|
||||
|
||||
Position Dave::scatterTarget() const {
|
||||
return { 0, 30 };
|
||||
}
|
||||
|
||||
} // namespace pacman
|
@ -0,0 +1,41 @@
|
||||
#include "GhostState.hpp"
|
||||
#include "GameState.hpp"
|
||||
|
||||
namespace pacman {
|
||||
|
||||
void GhostState::setTarget(GridPosition pacManPosition, Direction pacManDirection) {
|
||||
blinky.setTarget(gridPositionToPosition(pacManPosition));
|
||||
pinky.setTarget(pacManPosition, pacManDirection);
|
||||
inky.setTarget(pacManPosition, pacManDirection, blinky.positionInGrid());
|
||||
dave.setTarget(gridPositionToPosition(pacManPosition));
|
||||
}
|
||||
|
||||
void GhostState::update(std::chrono::milliseconds delta) {
|
||||
blinky.update(delta);
|
||||
pinky.update(delta);
|
||||
inky.update(delta);
|
||||
dave.update(delta);
|
||||
}
|
||||
|
||||
void GhostState::checkCollision(GameState & gameState) {
|
||||
gameState.checkCollision(blinky);
|
||||
gameState.checkCollision(pinky);
|
||||
gameState.checkCollision(inky);
|
||||
gameState.checkCollision(dave);
|
||||
}
|
||||
|
||||
void GhostState::reset(void) {
|
||||
blinky.reset();
|
||||
pinky.reset();
|
||||
inky.reset();
|
||||
dave.reset();
|
||||
}
|
||||
|
||||
void GhostState::frighten(void) {
|
||||
blinky.frighten();
|
||||
pinky.frighten();
|
||||
inky.frighten();
|
||||
dave.frighten();
|
||||
}
|
||||
|
||||
} // namespace pacman
|
@ -0,0 +1,20 @@
|
||||
#pragma once
|
||||
|
||||
#include "Ghost.hpp"
|
||||
|
||||
namespace pacman {
|
||||
|
||||
class Dave final : public Ghost {
|
||||
public:
|
||||
Dave();
|
||||
void setTarget(Position pacManPos);
|
||||
|
||||
protected:
|
||||
double speed() const override;
|
||||
Position initialPosition() const override;
|
||||
|
||||
private:
|
||||
Position scatterTarget() const;
|
||||
};
|
||||
|
||||
} // namespace pacman
|
@ -0,0 +1,26 @@
|
||||
#pragma once
|
||||
|
||||
#include "Blinky.hpp"
|
||||
#include "Dave.hpp"
|
||||
#include "Inky.hpp"
|
||||
#include "Pinky.hpp"
|
||||
|
||||
namespace pacman {
|
||||
|
||||
class GameState;
|
||||
|
||||
class GhostState {
|
||||
public:
|
||||
void setTarget(GridPosition pacManPosition, Direction pacManDirection);
|
||||
void update(std::chrono::milliseconds delta);
|
||||
void checkCollision(GameState & gameState);
|
||||
void reset();
|
||||
void frighten();
|
||||
|
||||
Blinky blinky;
|
||||
Pinky pinky;
|
||||
Inky inky;
|
||||
Dave dave;
|
||||
};
|
||||
|
||||
} // namespace pacman
|
Loading…
Reference in new issue