root / proj / src / ent.c @ 198
History | View | Annotate | Download (1.86 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 | struct ent{
|
||
19 | double x, y; //real position in meters |
||
20 | sprite_t *dude; |
||
21 | sprite_t *weapon; |
||
22 | }; |
||
23 | |||
24 | ent_t* (ent_ctor)(basic_sprite_t *dude, basic_sprite_t *weapon){ |
||
25 | ent_t *ret = malloc(sizeof(ent_t));
|
||
26 | 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 | ent_dtor(ret); |
||
33 | return NULL; |
||
34 | } else return ret; |
||
35 | } |
||
36 | void (ent_dtor)(ent_t *p){
|
||
37 | if(p == NULL) return; |
||
38 | sprite_dtor(p->dude); |
||
39 | sprite_dtor(p->weapon); |
||
40 | free(p); |
||
41 | } |
||
42 | |||
43 | void (ent_set_pos) (ent_t *p, int16_t x, int16_t y){ p->x = x; p->y = y; }
|
||
44 | void (ent_set_angle)(ent_t *p, double angle ){ |
||
45 | sprite_set_angle(p->dude , angle); |
||
46 | sprite_set_angle(p->weapon, angle); |
||
47 | } |
||
48 | |||
49 | double (ent_get_x) (const ent_t *p){ return p->x; } |
||
50 | double (ent_get_y) (const ent_t *p){ return p->y; } |
||
51 | int16_t (ent_get_x_screen)(const ent_t *p){ return (p->x-x_origin)*scale; } |
||
52 | int16_t (ent_get_y_screen)(const ent_t *p){ return (p->y-y_origin)*scale; } |
||
53 | |||
54 | void (ent_draw)(ent_t *p){
|
||
55 | const int16_t x_screen = ent_get_x_screen(p);
|
||
56 | const int16_t y_screen = ent_get_y_screen(p);
|
||
57 | 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 | } |