-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathcar.c
69 lines (47 loc) · 1.67 KB
/
car.c
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
/***********************************************************
MEGA CAR WARS
CAR.C
***********************************************************/
#include "inc/car.h"
// LIBS ///////////////////////////////////////////////////
#include "kdebug.h"
// ASSETS /////////////////////////////////////////////////
#include "sprite.h"
// DATA ///////////////////////////////////////////////////
// Handler
struct t_car car;
// FUNCTIONS //////////////////////////////////////////////
//---------------------------------------------------------
// INIT
//---------------------------------------------------------
void Car_init(u8 posx, u8 posy, u16 angle)
{
car.posx = posx;//FIX32(posx);
car.posy = posy;//FIX32(posy);
car.angle = angle;
car.turnspeed = CAR_DEFAULT_TURNSPEED;
car.sprite = SPR_addSprite(&car_sprite, car.posx, car.posy, TILE_ATTR(CAR_DEFAULT_PALETTE, TRUE, FALSE, FALSE));
// Set the general sprites palette as PAL3
VDP_setPalette(PAL3, (u16*) car_sprite.palette->data);
}
//---------------------------------------------------------
// UPDATE
//---------------------------------------------------------
void Car_update()
{
if (car.angle > CAR_DIR_LOOP) car.angle = CAR_DIR_DOWN;
if (car.angle < CAR_DIR_DOWN) car.angle = CAR_DIR_LOOP;
fix16 cdx = sinFix16(car.angle);
fix16 cdy = - cosFix16(car.angle);
car.dirx = fix16ToInt(cdx);
car.diry = fix16ToInt(cdy);
car.posx += car.dirx;
car.posy += car.diry;
car.dirx *= 0.95;
car.diry *= 0.95;
u8 frame = CAR_ANGLE_TO_FRAME(car.angle);
KDebug_AlertNumber (car.angle);
KDebug_AlertNumber (frame);
SPR_setFrame(car.sprite, CAR_ANGLE_TO_FRAME(car.angle));
SPR_setPosition(car.sprite, car.posx, car.posy);
}