-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathanimation.cpp
More file actions
96 lines (68 loc) · 1.33 KB
/
Copy pathanimation.cpp
File metadata and controls
96 lines (68 loc) · 1.33 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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include "animation.h"
ANIMATION::ANIMATION() {
loop = true;
slide = false;
hflip = false;
speed = 400;
x = 0;
y = 0;
}
void ANIMATION::load(DATAFILE* d) {
data = d;
frames = items_in_datafile(data);
step = 0;
angle = 0;
old_angle = 0;
frame_direction = 1;
played_once = false;
}
void ANIMATION::play(BITMAP* target) {
if (angle == 0) {
if (hflip)
draw_sprite_h_flip(target, (BITMAP*) data[step].dat, (int)x, (int)y);
else
draw_sprite(target, (BITMAP*) data[step].dat, (int)x, (int)y);
}
else
rotate_sprite(target, (BITMAP*) data[step].dat, (int)x, (int)y, itofix((int)angle));
if (played_once && loop == false)
return;
step += frame_direction;
if (slide) {
if (step == frames) {
reverse();
step = frames - 2;
}
if (step < 0) {
reverse();
step = 1;
played_once = true;
}
}
if (step == frames) {
played_once = true;
step = 0;
}
if (step < 0)
step = frames - 1;
}
void ANIMATION::reverse() {
frame_direction = -frame_direction;
}
CUTSCENE::CUTSCENE() {
x = 0;
y = 0;
}
void CUTSCENE::load(char* path) {
data = load_datafile(path);
frames = items_in_datafile(data);
step = 0;
}
int CUTSCENE::play(BITMAP* target) {
draw_rle_sprite(target, (RLE_SPRITE*) data[step++].dat, (int)x, (int)y);
if (step == frames) {
--step;
return 0;
} else
return 1;
}