Project

General

Profile

Statistics
| Revision:

root / proj / src / ent.c @ 193

History | View | Annotate | Download (1.81 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
double (ent_get_XLength)(void){ return graph_get_XRes()/scale; }
15
double (ent_get_YLength)(void){ return graph_get_YRes()/scale; }
16
17
struct ent{
18
    double x, y; //real position in meters
19
    sprite_t *dude;
20
    sprite_t *weapon;
21
};
22
23
ent_t* (ent_ctor)(basic_sprite_t *dude, basic_sprite_t *weapon){
24
    ent_t *ret = malloc(sizeof(ent_t));
25
    if(ret == NULL) return NULL;
26
    ret->x = 0.0;
27
    ret->y = 0.0;
28
    ret->dude   = sprite_ctor(dude  );
29
    ret->weapon = sprite_ctor(weapon);
30
    if(ret->dude == NULL || ret->weapon == NULL){
31
        ent_dtor(ret);
32
        return NULL;
33
    } else return ret;
34
}
35
void (ent_dtor)(ent_t *p){
36
    if(p == NULL) return;
37
    sprite_dtor(p->dude);
38
    sprite_dtor(p->weapon);
39
    free(p);
40
}
41
42
void (ent_set_pos)  (ent_t *p, int16_t x, int16_t y){ p->x = x; p->y = y; }
43
void (ent_set_angle)(ent_t *p, double angle        ){
44
    sprite_set_angle(p->dude  , angle);
45
    sprite_set_angle(p->weapon, angle);
46
}
47
48
double  (ent_get_x)       (const ent_t *p){ return p->x; }
49
double  (ent_get_y)       (const ent_t *p){ return p->y; }
50
int16_t (ent_get_x_screen)(const ent_t *p){ return (p->x-x_origin)*scale; }
51
int16_t (ent_get_y_screen)(const ent_t *p){ return (p->y-y_origin)*scale; }
52
53
void (ent_draw)(ent_t *p){
54
    const int16_t x_screen = ent_get_x_screen(p);
55
    const int16_t y_screen = ent_get_y_screen(p);
56
    sprite_set_pos  (p->dude  , x_screen, y_screen);
57
    sprite_set_pos  (p->weapon, x_screen, y_screen);
58
    sprite_set_scale(p->dude  , scale);
59
    sprite_set_scale(p->weapon, scale);
60
    sprite_draw     (p->weapon);
61
    sprite_draw     (p->dude  );
62
}