-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathZlatko.cpp
More file actions
80 lines (65 loc) · 3.29 KB
/
Zlatko.cpp
File metadata and controls
80 lines (65 loc) · 3.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include "Zlatko.hpp"
#include "Pacman.hpp"
#include <iostream>
Zlatko::Zlatko(Grid* grid)
: Ghost(sf::IntRect({ 464, 226 }, { 14, 14 }), { 13.5 * 24, 14.5 * 24 }, GHOST_START_SPEED, DirectionEnum::NONE, grid, & grid->getGrid()[14][14], &grid->getGrid()[5][14])
{
// BASE ANIMATION
//NONE ( Wont be used, but needs all directions defined )
Animation noneAnimation = Animation(&getSprite());
noneAnimation.addFrame({ sf::IntRect({464, 226}, {14, 14}), 0.1 });
noneAnimation.addFrame({ sf::IntRect({480, 226}, {14, 14}), 0.1 });
animationController.addStateAnimation(GhostState::BASE, DirectionEnum::NONE, noneAnimation);
animationController.addStateAnimation(GhostState::CHASE, DirectionEnum::NONE, noneAnimation);
animationController.addStateAnimation(GhostState::SCATTER, DirectionEnum::NONE, noneAnimation);
//RIGHT
Animation rightAnimation = Animation(&getSprite());
rightAnimation.addFrame({ sf::IntRect({464, 226}, {14, 14}), 0.1 });
rightAnimation.addFrame({ sf::IntRect({480, 226}, {14, 14}), 0.1 });
animationController.addStateAnimation(GhostState::BASE, DirectionEnum::RIGHT, rightAnimation);
animationController.addStateAnimation(GhostState::CHASE, DirectionEnum::RIGHT, rightAnimation);
animationController.addStateAnimation(GhostState::SCATTER, DirectionEnum::RIGHT, rightAnimation);
//LEFT
Animation leftAnimation = Animation(&getSprite());
leftAnimation.addFrame({ sf::IntRect({496, 226}, {14, 14}), 0.1 });
leftAnimation.addFrame({ sf::IntRect({512, 226}, {14, 14}), 0.1 });
animationController.addStateAnimation(GhostState::BASE, DirectionEnum::LEFT, leftAnimation);
animationController.addStateAnimation(GhostState::CHASE, DirectionEnum::LEFT, leftAnimation);
animationController.addStateAnimation(GhostState::SCATTER, DirectionEnum::LEFT, leftAnimation);
//UP
Animation upAnimation = Animation(&getSprite());
upAnimation.addFrame({ sf::IntRect({528, 226}, {14, 14}), 0.1 });
upAnimation.addFrame({ sf::IntRect({544, 226}, {14, 14}), 0.1 });
animationController.addStateAnimation(GhostState::BASE, DirectionEnum::UP, upAnimation);
animationController.addStateAnimation(GhostState::CHASE, DirectionEnum::UP, upAnimation);
animationController.addStateAnimation(GhostState::SCATTER, DirectionEnum::UP, upAnimation);
//DOWN
Animation downAnimation = Animation(&getSprite());
downAnimation.addFrame({ sf::IntRect({560, 226}, {14, 14}), 0.1 });
downAnimation.addFrame({ sf::IntRect({576, 226}, {14, 14}), 0.1 });
animationController.addStateAnimation(GhostState::BASE, DirectionEnum::DOWN, downAnimation);
animationController.addStateAnimation(GhostState::CHASE, DirectionEnum::DOWN, downAnimation);
animationController.addStateAnimation(GhostState::SCATTER, DirectionEnum::DOWN, downAnimation);
}
void Zlatko::updateTarget(Pacman& pacman, std::vector<Ghost*> ghosts)
{
Tile* newTile = targetTile, * oldTile = targetTile;
if (state == GhostState::DEAD) {
newTile = homeTile;
}
else if (state == GhostState::SCATTER) {
newTile = scatterTile;
}
else {
// Zlatkos tactic
// Target is directly atop of pacman
//newTile = pacman.getCurrentTile();
newTile = scatterTile;
}
// Apply changes only if needed
if (oldTile != newTile) {
oldTile->getRectangle().setFillColor(sf::Color::Transparent);
this->targetTile = newTile;
targetTile->getRectangle().setFillColor(sf::Color(0, 255, 0));
}
}