Clean animation code, could be slow AF
This commit is contained in:
parent
bae45f36ce
commit
b86f6605bf
|
@ -1,3 +1,6 @@
|
|||
#include <gint/display.h>
|
||||
|
||||
void draw_anim(int x, int y, image_t *image, int step);
|
||||
void draw_player(int x, int y);
|
||||
void draw_level(char level[], unsigned int step, char polarity, int *start_x,
|
||||
int *start_y, int tp_positions[]);
|
||||
|
|
55
src/draw.c
55
src/draw.c
|
@ -7,7 +7,7 @@
|
|||
#define DRAW_OFFSET_Y -24
|
||||
#define DRAW_OFFSET_X -27
|
||||
|
||||
extern image_t img_player; //player texture, 12x12
|
||||
extern image_t img_player; //player texture, 12x12 (NOT ANIMATED)
|
||||
extern image_t img_solid_0; //solid texture, 16x16
|
||||
extern image_t img_solid_1; //solid texture, 16x16
|
||||
extern image_t img_spike; //spike texture, 16x16
|
||||
|
@ -20,10 +20,15 @@ extern image_t img_red_dot; //off red bloc texture, 16x16
|
|||
extern image_t img_exit; //exit texture, 16x16
|
||||
extern image_t img_water; //water texture, 16x16
|
||||
extern image_t img_semi_solid; //semi solid texture, 16x16
|
||||
//animated textures (elevator)
|
||||
extern image_t img_teleporter_0; //teleporter 0 texture, 16x16
|
||||
extern image_t img_teleporter_1; //teleporter 1 texture, 16x16
|
||||
extern image_t img_elevator;
|
||||
extern image_t img_elevator; //elevator texture, 16x16
|
||||
|
||||
void draw_anim(int x, int y, image_t *image, int step)
|
||||
{
|
||||
dsubimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, image,
|
||||
((step / 2) % (image->width / 16)) * 16, 0, 16, 16, DIMAGE_NONE);
|
||||
}
|
||||
|
||||
void draw_player(int x, int y)
|
||||
{
|
||||
|
@ -33,9 +38,6 @@ void draw_player(int x, int y)
|
|||
void draw_level(char level[], unsigned int step, char polarity, int *start_x,
|
||||
int *start_y, int tp_positions[])
|
||||
{
|
||||
int const img_elevator_frame_count = img_elevator.width / 16;
|
||||
int const img_teleporter_0_frame_count = img_teleporter_0.width / 16;
|
||||
int const img_teleporter_1_frame_count = img_teleporter_1.width / 16;
|
||||
dclear(BG_COLOR);
|
||||
unsigned int i = 0;
|
||||
unsigned int x = 0;
|
||||
|
@ -45,57 +47,54 @@ int *start_y, int tp_positions[])
|
|||
switch (level[i])
|
||||
{
|
||||
case '0':
|
||||
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_solid_0);
|
||||
draw_anim(x, y, &img_solid_0, step);
|
||||
break;
|
||||
case '1':
|
||||
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_solid_1);
|
||||
draw_anim(x, y, &img_solid_1, step);
|
||||
break;
|
||||
case 'r':
|
||||
if (!polarity) dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_red);
|
||||
else dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_red_dot);
|
||||
if (!polarity) draw_anim(x, y, &img_red, step);
|
||||
else draw_anim(x, y, &img_red_dot, step);
|
||||
break;
|
||||
case 'b':
|
||||
if (polarity) dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_blue);
|
||||
else dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_blue_dot);
|
||||
if (polarity) draw_anim(x, y, &img_blue, step);
|
||||
else draw_anim(x, y, &img_blue_dot, step);
|
||||
break;
|
||||
case 'v':
|
||||
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_spike);
|
||||
draw_anim(x, y, &img_spike, step);
|
||||
break;
|
||||
case '*':
|
||||
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_bouncer);
|
||||
draw_anim(x, y, &img_bouncer, step);
|
||||
break;
|
||||
case '~':
|
||||
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_solid_0);
|
||||
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ice);
|
||||
draw_anim(x, y, &img_solid_0, step);
|
||||
draw_anim(x, y, &img_ice, step);
|
||||
break;
|
||||
case '/':
|
||||
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_semi_solid);
|
||||
draw_anim(x, y, &img_semi_solid, step);
|
||||
break;
|
||||
case '^':
|
||||
dsubimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_elevator,
|
||||
((step / 2) % img_elevator_frame_count) * 16, 0, 16, 16, DIMAGE_NONE);
|
||||
break;
|
||||
draw_anim(x, y, &img_elevator, step);
|
||||
break;
|
||||
case 'S':
|
||||
erase_tile(x, y, level);
|
||||
*start_x = x + 2;
|
||||
*start_y = y + 4;
|
||||
break;
|
||||
case 'E':
|
||||
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_exit);
|
||||
draw_anim(x, y, &img_exit, step);
|
||||
break;
|
||||
case 'w': //water
|
||||
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_water);
|
||||
draw_anim(x, y, &img_water, step);
|
||||
break;
|
||||
case 't': //teleporter 0
|
||||
dsubimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_teleporter_0,
|
||||
(step % img_teleporter_0_frame_count) * 16, 0, 16, 16, DIMAGE_NONE);
|
||||
tp_positions[0] = x + 2;
|
||||
draw_anim(x, y, &img_teleporter_0, step);
|
||||
tp_positions[0] = x + 2;
|
||||
tp_positions[1] = y + 2;
|
||||
break;
|
||||
case 'T': //teleporter 1
|
||||
dsubimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_teleporter_1,
|
||||
(step % img_teleporter_1_frame_count) * 16, 0, 16, 16, DIMAGE_NONE);
|
||||
tp_positions[2] = x + 2;
|
||||
draw_anim(x, y, &img_teleporter_1, step);
|
||||
tp_positions[2] = x + 2;
|
||||
tp_positions[3] = y + 2;
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue