-
Notifications
You must be signed in to change notification settings - Fork 1
/
komoucar.cpp
50 lines (50 loc) · 1.69 KB
/
komoucar.cpp
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
#include "ZivoBitje.h"
komoucar::komoucar() { // konstruktor se klice za vsakega ustvarjenega nasprotnika
img = new Image;
x = 0; y = 0;
w = 29, h = 64;
hitrost = 1;
dest_x = 0;
dest_y = 0;
}
komoucar::~komoucar() { // destruktor se klice na koncu vsakega nivoja
if (img != nullptr) {
delete img;
img = nullptr;
}
}
void komoucar::initImg(GameManager& igra, const char* path,
short iks, short ipsilon) // se klice da nastavimo sliko in zaceno pozicijo naprotnika
{
x = iks;
y = ipsilon;
img->init(igra, path, x, y, w, h);
}
void komoucar::updateImg(GameManager& igra, const char* path) { // se klice ob posodobitvi nasprotnikove slike
img->init(igra, path, x, y, w, h);
}
void komoucar::display(GameManager& igra) { // prikaze nasprotnika
img->display(igra.okno.ren);
}
void komoucar::zrcuniRandomDestinacijo() { // nasprotniku nastavi naklucno koordinato v zaslonu kot cilj
short ax = 0, bx = 1280 - w;
short ay = 0, by = 720 - h;
dest_x = rand() % (bx - ax) + ax;
dest_y = rand() % (by - ay) + ay;
}
bool komoucar::sprehodNaRandomDestinacijo() { // premakne nasprotika za stevilo "hitrost" pikslov proti svojemu cilju
if (ManhattanDistance(x, y, dest_x, dest_y) < 10) { // racuna razdalno med nasprotnikom in ciljem
return true; // ce je razdalja dovolj majhna se steje, kot da je ze na cilju (to popravi napako, ce je hitrost drugacna od 1)
}
else { // premakne se proti svojemu cilju
if (x != dest_x)
(x < dest_x) ? x += hitrost : x -= hitrost;
if (y != dest_y)
(y < dest_y) ? y += hitrost : y -= hitrost;
return false; // pove da se ne nahaja na cilju
}
}
void komoucar::setDest(short iks, short ipsilon) { // nastavi zeljeno koordinato kot cilj
dest_x = iks;
dest_y = ipsilon;
}