-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdrawing.cpp
More file actions
109 lines (87 loc) · 3.76 KB
/
drawing.cpp
File metadata and controls
109 lines (87 loc) · 3.76 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
97
98
99
100
101
102
103
104
105
106
107
108
109
#include "drawing.h"
//------------------------------------------------------------------------------------------------------
// draw() er en funksjon for å tegne flyvende vesen på brettet. Sprite må være tegnet mot høyre.
void draw(Flyvende *vesen, BITMAP *backbuffer){
// Forutsetter at alle framene er like brede og lagt i bredden på samme bilde
int framewidth = vesen->sprite->w / vesen->antFrames;
int heigth = vesen->sprite->h;
// Lager to hjelpebitmaps
BITMAP *source = create_bitmap(framewidth, heigth); // Skal inneholde riktig frame
BITMAP *sprite_f = create_bitmap(framewidth, heigth); // Skal inneholde flippet bilde om nødvendig
blit(vesen->sprite, source, framewidth * vesen->frame, 0, 0, 0, framewidth, heigth);
// Tegner sprite på backbuffer
if (vesen->vx < 0){
draw_sprite_h_flip(sprite_f, source, 0, 0);
draw_trans_sprite(backbuffer, sprite_f, (int)vesen->x, (int)vesen->y);
}
else {
draw_trans_sprite(backbuffer, source, (int)vesen->x, (int)vesen->y);
}
destroy_bitmap(source);
destroy_bitmap(sprite_f);
}
//------------------------------------------------------------------------------------------------------
// draw_p() tegner et prosjektil
void draw_p(Prosjektil *p, BITMAP *backbuffer){
draw_trans_sprite(backbuffer, p->sprite, (int) p->x, (int) p->y);
}
void draw_exp(Prosjektil *p, BITMAP *exp, BITMAP *backbuffer){
draw_trans_sprite(backbuffer, exp, (int) p->x - exp->w/2, (int) p->y - exp->h/2);
}
void draw_ducks(BITMAP *duck, BITMAP *backbuffer, Ducks *d){
int framewidth = d->sprite->w;
int heigth = d->sprite->h;
BITMAP *source = create_bitmap(framewidth, heigth); // Skal inneholde riktig frame
BITMAP *sprite_f = create_bitmap(framewidth, heigth); // Skal inneholde flippet bilde om nødvendig
blit(duck, source, 0, 0, 0, 0, framewidth, heigth);
if (d->dir == 2){
draw_sprite_h_flip(sprite_f, source,0 ,0 );
draw_trans_sprite(backbuffer, sprite_f, (int) d->x, d->y);
}
else {
draw_trans_sprite(backbuffer, duck, (int) d->x, d->y);
}
destroy_bitmap(source);
destroy_bitmap(sprite_f);
}
// draw_text tegner text på skjermen
void draw_text(BITMAP *source, BITMAP *backbuffer, int x, int y, int x_frame,int y_frame,char *text)
{
int spriteW = 39;
int spriteH = 55;
BITMAP *output = create_bitmap(spriteW, spriteH);
for (unsigned int i=0; i<strlen(text); i++){
int x_col, y_col;
y_col = text[i]/16; x_col = text[i]%16;
//printf("%c %d %d\n ",text[i],x_col,y_col);
masked_blit(source, output, x_col * spriteW, y_col * spriteH, 0, 0, spriteW, spriteH); //Copy right frame from source
draw_trans_sprite(backbuffer, output, x+(i*16), y);
}
destroy_bitmap(output);
}
void draw_t(Towerman *vesen, BITMAP *backbuffer){
// Forutsetter at alle framene er like brede og lagt i bredden på samme bilde
int framewidth = vesen->sprite->w / vesen->antFrames;
int heigth = vesen->sprite->h;
// Lager to hjelpebitmaps
BITMAP *source = create_bitmap(framewidth, heigth); // Skal inneholde riktig frame
BITMAP *sprite_f = create_bitmap(framewidth, heigth); // Skal inneholde flippet bilde om nødvendig
blit(vesen->sprite, source, framewidth * vesen->frame, 0, 0, 0, framewidth, heigth);
// Tegner sprite på backbuffer
if (vesen->aimAngle > 90){
draw_sprite_h_flip(sprite_f, source, 0, 0);
draw_trans_sprite(backbuffer, sprite_f, (int)vesen->x, (int)vesen->y);
}
else {
draw_trans_sprite(backbuffer, source, (int)vesen->x, (int)vesen->y);
}
destroy_bitmap(source);
destroy_bitmap(sprite_f);
}
void draw_cross(Towerman *t, BITMAP *cross, BITMAP *backbuffer){
int x0 = t->x + (t->sprite->w / (2 * t->antFrames)) - cross->w/2;
int y0 = t->y + (t->sprite->h / 2) - cross->h/2;
int x = x0 + 100 * cos(PI*t->aimAngle/180);
int y = y0 - 100 * sin(PI*t->aimAngle/180);
draw_trans_sprite(backbuffer, cross, x, y);
}