Project

General

Profile

Statistics
| Revision:

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
}