jtmm/src/draw.c

111 lines
3.2 KiB
C
Raw Normal View History

2020-03-19 11:39:28 +01:00
#include <gint/display.h>
2020-03-17 18:01:24 +01:00
#include "draw.h"
2020-03-19 11:39:28 +01:00
#define PLAYER_H 11
2020-03-17 18:01:24 +01:00
#define PLAYER_W 11
#define BG_COLOR 0
#define LEVEL_WIDTH 28
#define DRAW_OFFSET_Y -24
#define DRAW_OFFSET_X -27
2020-03-19 11:39:28 +01:00
extern image_t img_player; //player texture, 16x12
2020-03-17 18:01:24 +01:00
extern image_t img_ground; //ground texture, 16x16
extern image_t img_spike; //spike texture, 16x16
2020-03-19 11:39:28 +01:00
extern image_t img_bouncer; //bouncer texture, 16x16
2020-03-17 18:01:24 +01:00
extern image_t img_ice; //ice texture, 16x8
2020-03-19 11:39:28 +01:00
extern image_t img_blue; //blue bloc texture, 16x16
extern image_t img_blue_dot; //off blue bloc texture, 16x16
extern image_t img_red; //red bloc texture, 16x16
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
2020-03-17 18:01:24 +01:00
//animated textures
extern image_t img_elevator1, img_elevator2, img_elevator3, img_elevator4;
extern image_t img_elevator5, img_elevator6, img_elevator7, img_elevator8;
extern image_t img_elevator9, img_elevator10, img_elevator11, img_elevator12;
extern image_t img_elevator13, img_elevator14, img_elevator15, img_elevator16;
const image_t * ani_elevator[16] = {&img_elevator1, &img_elevator2,
&img_elevator3, &img_elevator4, &img_elevator5, &img_elevator6,
&img_elevator7, &img_elevator8, &img_elevator9, &img_elevator10,
&img_elevator11, &img_elevator12, &img_elevator13, &img_elevator14,
&img_elevator15, &img_elevator16};
2020-03-19 11:39:28 +01:00
void draw_player(int x, int y)
2020-03-17 18:01:24 +01:00
{
2020-03-19 11:39:28 +01:00
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_player);
2020-03-17 18:01:24 +01:00
}
2020-03-19 11:39:28 +01:00
void draw_level(char level[], unsigned int step, char polarity, int *start_x,
int *start_y)
2020-03-17 18:01:24 +01:00
{
dclear(BG_COLOR);
unsigned int i = 0;
unsigned int x = 0;
unsigned int y = 0;
while (i != LEVEL_WIDTH*16)
{
switch (level[i])
{
case '0':
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ground);
break;
2020-03-19 11:39:28 +01:00
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);
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);
break;
2020-03-17 18:01:24 +01:00
case 'v':
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_spike);
break;
2020-03-19 11:39:28 +01:00
case '*':
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_bouncer);
break;
2020-03-17 18:01:24 +01:00
case '~':
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ground);
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ice);
break;
case 's':
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ground);
break;
case '^':
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, ani_elevator[(step/2)%16]);
break;
2020-03-19 11:39:28 +01:00
case 'S':
erase_tile(x, y, level);
*start_x = x;
*start_y = y;
break;
case 'E':
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_exit);
break;
case 'w': //water
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_water);
break;
2020-03-17 18:01:24 +01:00
}
x += 16;
if (x == 16*LEVEL_WIDTH)
{
x = 0;
y += 16;
}
i++;
}
}
void erase_tile(int x, int y, char level[])
{
x = (int)(x/16);
y = (int)(y/16);
level[x + y * LEVEL_WIDTH] = '.';
x *= 16;
y *= 16;
}
void draw_timer(unsigned int step)
{
dprint(0, 0, C_WHITE, C_BLACK, "%u.%02u", step/60, step%60);
}