root / proj / src / ent.c @ 201
History | View | Annotate | Download (1.93 KB)
1 | 193 | up20180642 | #include <lcom/lcf.h> |
---|---|---|---|
2 | |||
3 | #include "ent.h" |
||
4 | |||
5 | #include "graph.h" |
||
6 | |||
7 | static double scale = 1.0; |
||
8 | static int16_t x_origin = 0; |
||
9 | static int16_t y_origin = 0; |
||
10 | |||
11 | void (ent_set_scale) (double n){ scale = n; } |
||
12 | void (ent_set_origin)(double x, double y){ x_origin = x; y_origin = y; } |
||
13 | |||
14 | 194 | up20180642 | double (ent_get_scale) (void){ return scale; } |
15 | 193 | up20180642 | double (ent_get_XLength)(void){ return graph_get_XRes()/scale; } |
16 | double (ent_get_YLength)(void){ return graph_get_YRes()/scale; } |
||
17 | |||
18 | 201 | up20180642 | struct gunner{
|
19 | 193 | up20180642 | double x, y; //real position in meters |
20 | sprite_t *dude; |
||
21 | sprite_t *weapon; |
||
22 | }; |
||
23 | |||
24 | 201 | up20180642 | gunner_t* (gunner_ctor)(basic_sprite_t *dude, basic_sprite_t *weapon){ |
25 | gunner_t *ret = malloc(sizeof(gunner_t));
|
||
26 | 193 | up20180642 | if(ret == NULL) return NULL; |
27 | ret->x = 0.0; |
||
28 | ret->y = 0.0; |
||
29 | ret->dude = sprite_ctor(dude ); |
||
30 | ret->weapon = sprite_ctor(weapon); |
||
31 | if(ret->dude == NULL || ret->weapon == NULL){ |
||
32 | 201 | up20180642 | gunner_dtor(ret); |
33 | 193 | up20180642 | return NULL; |
34 | } else return ret; |
||
35 | } |
||
36 | 201 | up20180642 | void (gunner_dtor)(gunner_t *p){
|
37 | 193 | up20180642 | if(p == NULL) return; |
38 | sprite_dtor(p->dude); |
||
39 | sprite_dtor(p->weapon); |
||
40 | free(p); |
||
41 | } |
||
42 | |||
43 | 201 | up20180642 | void (gunner_set_pos) (gunner_t *p, int16_t x, int16_t y){ p->x = x; p->y = y; }
|
44 | void (gunner_set_angle)(gunner_t *p, double angle ){ |
||
45 | 193 | up20180642 | sprite_set_angle(p->dude , angle); |
46 | sprite_set_angle(p->weapon, angle); |
||
47 | } |
||
48 | |||
49 | 201 | up20180642 | double (gunner_get_x) (const gunner_t *p){ return p->x; } |
50 | double (gunner_get_y) (const gunner_t *p){ return p->y; } |
||
51 | int16_t (gunner_get_x_screen)(const gunner_t *p){ return (p->x-x_origin)*scale; } |
||
52 | int16_t (gunner_get_y_screen)(const gunner_t *p){ return (p->y-y_origin)*scale; } |
||
53 | 193 | up20180642 | |
54 | 201 | up20180642 | void (gunner_draw)(gunner_t *p){
|
55 | const int16_t x_screen = gunner_get_x_screen(p);
|
||
56 | const int16_t y_screen = gunner_get_y_screen(p);
|
||
57 | 193 | up20180642 | sprite_set_pos (p->dude , x_screen, y_screen); |
58 | sprite_set_pos (p->weapon, x_screen, y_screen); |
||
59 | sprite_set_scale(p->dude , scale); |
||
60 | sprite_set_scale(p->weapon, scale); |
||
61 | sprite_draw (p->weapon); |
||
62 | sprite_draw (p->dude ); |
||
63 | } |