2020-02-14 18:53:59 +01:00
|
|
|
#include "../../include/SLK/SLK.h"
|
|
|
|
|
2020-05-10 21:21:10 +02:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <time.h>
|
|
|
|
|
2020-02-14 18:53:59 +01:00
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
int x;
|
|
|
|
int y;
|
|
|
|
int type;
|
|
|
|
int frame;
|
2020-04-11 17:03:26 +02:00
|
|
|
int flip;
|
2020-04-19 22:15:50 +02:00
|
|
|
}Entity;
|
2020-02-14 18:53:59 +01:00
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
2020-04-19 22:15:50 +02:00
|
|
|
Entity *entities;
|
2020-02-14 18:53:59 +01:00
|
|
|
int used;
|
|
|
|
int space;
|
2020-04-19 22:15:50 +02:00
|
|
|
}Entities;
|
2020-02-14 18:53:59 +01:00
|
|
|
|
2020-04-19 22:15:50 +02:00
|
|
|
Entities world;
|
|
|
|
SLK_Pal_sprite *dino_sprites[10][4];
|
|
|
|
SLK_RGB_sprite *dino_sprites_rgb[10][4];
|
|
|
|
SLK_RGB_sprite *gui_00;
|
|
|
|
SLK_RGB_sprite *gui_01;
|
2020-02-14 18:53:59 +01:00
|
|
|
int frame = 0;
|
|
|
|
char time_stat[48];
|
2020-04-19 22:15:50 +02:00
|
|
|
int render_mode = 0;
|
2020-04-25 17:52:18 +02:00
|
|
|
int fullscreen = 0;
|
2020-02-14 18:53:59 +01:00
|
|
|
|
2020-04-19 22:15:50 +02:00
|
|
|
void add_entity();
|
|
|
|
void load_pal_sprites();
|
|
|
|
void load_rgb_sprites();
|
|
|
|
int sort(const void *e0, const void *e1);
|
2020-02-14 18:53:59 +01:00
|
|
|
|
|
|
|
int main(int argc, char *argv[])
|
|
|
|
{
|
2020-05-10 21:21:10 +02:00
|
|
|
SLK_setup(320,240,5,"SLK Engine",0,SLK_WINDOW_MAX,0);
|
2020-04-19 22:15:50 +02:00
|
|
|
SLK_timer_set_fps(30);
|
2020-02-14 18:53:59 +01:00
|
|
|
srand(time(NULL));
|
|
|
|
|
2020-04-19 22:15:50 +02:00
|
|
|
SLK_layer_create(0,SLK_LAYER_RGB);
|
|
|
|
SLK_layer_create(1,SLK_LAYER_PAL);
|
|
|
|
SLK_layer_create(2,SLK_LAYER_RGB);
|
|
|
|
SLK_layer_create(4,SLK_LAYER_RGB);
|
|
|
|
|
|
|
|
SLK_layer_activate(0,1);
|
|
|
|
SLK_layer_activate(1,1);
|
|
|
|
SLK_layer_activate(2,1);
|
|
|
|
SLK_layer_activate(4,1);
|
|
|
|
|
2020-05-10 21:21:10 +02:00
|
|
|
//SLK_layer_set_size(0,100,100);
|
2020-04-25 17:52:18 +02:00
|
|
|
SLK_layer_set_tint(1,SLK_color_create(255,255,255,128));
|
|
|
|
SLK_layer_set_tint(2,SLK_color_create(255,255,255,128));
|
|
|
|
|
2020-05-10 21:21:10 +02:00
|
|
|
SLK_layer_set_current(0);
|
|
|
|
SLK_draw_rgb_set_changed(1);
|
|
|
|
SLK_layer_set_current(1);
|
|
|
|
|
2020-04-19 22:15:50 +02:00
|
|
|
SLK_draw_pal_set_clear_paxel(SLK_color_create_paxel(0,SLK_TRANSPARENT));
|
|
|
|
SLK_draw_pal_clear();
|
|
|
|
SLK_draw_rgb_set_clear_color(SLK_color_create(255,255,255,0));
|
|
|
|
SLK_draw_rgb_clear();
|
|
|
|
|
|
|
|
load_pal_sprites();
|
|
|
|
load_rgb_sprites();
|
|
|
|
|
2020-07-28 20:09:59 +02:00
|
|
|
SLK_draw_rgb_load_font("../../data/fonts/cursive1.png");
|
2020-04-19 22:15:50 +02:00
|
|
|
gui_00 = SLK_rgb_sprite_load("assets/gui_00.png");
|
|
|
|
gui_01 = SLK_rgb_sprite_load("assets/gui_01.png");
|
|
|
|
SLK_RGB_sprite *gui_02 = SLK_rgb_sprite_load("assets/gui_02.png");
|
|
|
|
SLK_layer_set_current(0);
|
2020-05-10 21:21:10 +02:00
|
|
|
SLK_draw_rgb_set_changed(1);
|
2020-04-19 22:15:50 +02:00
|
|
|
SLK_draw_rgb_sprite(gui_02,0,220);
|
|
|
|
SLK_draw_rgb_sprite(gui_01,206,2);
|
|
|
|
SLK_draw_rgb_string(214,10,1,"pal renderer",SLK_color_create(255,255,255,255));
|
|
|
|
SLK_rgb_sprite_destroy(gui_02);
|
|
|
|
SLK_RGB_sprite *gui_03 = SLK_rgb_sprite_load("assets/gui_03.png");
|
|
|
|
SLK_layer_set_current(4);
|
2020-05-10 21:21:10 +02:00
|
|
|
SLK_draw_rgb_set_changed(1);
|
2020-04-19 22:15:50 +02:00
|
|
|
SLK_draw_rgb_sprite(gui_03,0,0);
|
|
|
|
SLK_rgb_sprite_destroy(gui_03);
|
2020-02-14 18:53:59 +01:00
|
|
|
|
|
|
|
world.space = 100;
|
|
|
|
world.used = 0;
|
2020-04-19 22:15:50 +02:00
|
|
|
world.entities= malloc(sizeof(Entity)*world.space);
|
|
|
|
double time = 0.1f;
|
2020-04-11 17:03:26 +02:00
|
|
|
|
2020-04-19 22:15:50 +02:00
|
|
|
while(world.used<10)
|
|
|
|
add_entity();
|
2020-04-11 17:03:26 +02:00
|
|
|
|
2020-04-30 17:40:45 +02:00
|
|
|
while(SLK_core_running())
|
2020-02-14 18:53:59 +01:00
|
|
|
{
|
|
|
|
SLK_update();
|
2020-04-19 22:15:50 +02:00
|
|
|
|
|
|
|
if(render_mode==0)
|
|
|
|
{
|
|
|
|
SLK_layer_set_current(1);
|
|
|
|
SLK_draw_pal_clear();
|
|
|
|
}
|
|
|
|
else if(render_mode==1)
|
|
|
|
{
|
|
|
|
SLK_layer_set_current(2);
|
2020-05-10 21:21:10 +02:00
|
|
|
SLK_draw_rgb_set_changed(1);
|
2020-04-19 22:15:50 +02:00
|
|
|
SLK_draw_rgb_clear();
|
|
|
|
}
|
|
|
|
|
2020-02-14 18:53:59 +01:00
|
|
|
frame++;
|
2020-04-11 17:03:26 +02:00
|
|
|
int next_frame = frame%4==0;
|
2020-02-14 18:53:59 +01:00
|
|
|
|
|
|
|
clock_t start = clock();
|
|
|
|
for(int i = 0;i<world.used;i++)
|
|
|
|
{
|
|
|
|
if(next_frame)
|
|
|
|
{
|
2020-04-19 22:15:50 +02:00
|
|
|
world.entities[i].frame++;
|
|
|
|
if(world.entities[i].frame>3)
|
|
|
|
world.entities[i].frame = 0;
|
|
|
|
}
|
|
|
|
if(render_mode==0)
|
|
|
|
{
|
2020-04-22 20:12:42 +02:00
|
|
|
SLK_draw_pal_sprite_flip(dino_sprites[world.entities[i].type][world.entities[i].frame],world.entities[i].x,world.entities[i].y,world.entities[i].flip?SLK_FLIP_HORIZONTAL:SLK_FLIP_NONE);
|
2020-04-19 22:15:50 +02:00
|
|
|
}
|
|
|
|
else if(render_mode==1)
|
|
|
|
{
|
2020-04-22 20:12:42 +02:00
|
|
|
SLK_draw_rgb_sprite_flip(dino_sprites_rgb[world.entities[i].type][world.entities[i].frame],world.entities[i].x,world.entities[i].y,world.entities[i].flip?SLK_FLIP_HORIZONTAL:SLK_FLIP_NONE);
|
2020-02-14 18:53:59 +01:00
|
|
|
}
|
|
|
|
}
|
2020-04-11 17:03:26 +02:00
|
|
|
time+=((double)(clock()-start)/CLOCKS_PER_SEC);
|
|
|
|
if(next_frame)
|
2020-04-19 22:15:50 +02:00
|
|
|
sprintf(time_stat,"%08lf %04d",time/((double)frame)/*/world.used*10.0f*/,world.used);
|
2020-02-14 18:53:59 +01:00
|
|
|
|
2020-04-19 22:15:50 +02:00
|
|
|
if(SLK_key_down(SLK_KEY_SPACE)&&world.used<9999)
|
|
|
|
add_entity();
|
|
|
|
|
|
|
|
if(SLK_key_pressed(SLK_KEY_P))
|
|
|
|
{
|
|
|
|
render_mode = 0;
|
|
|
|
time = 0.0f;
|
|
|
|
frame = 0;
|
|
|
|
|
|
|
|
SLK_layer_activate(2,0);
|
|
|
|
SLK_layer_activate(1,1);
|
|
|
|
|
|
|
|
SLK_layer_set_current(0);
|
2020-05-10 21:21:10 +02:00
|
|
|
SLK_draw_rgb_set_changed(1);
|
2020-04-19 22:15:50 +02:00
|
|
|
SLK_draw_rgb_sprite(gui_01,206,2);
|
|
|
|
SLK_draw_rgb_string(214,10,1,"pal renderer",SLK_color_create(255,255,255,255));
|
|
|
|
}
|
|
|
|
if(SLK_key_pressed(SLK_KEY_R))
|
|
|
|
{
|
|
|
|
render_mode = 1;
|
|
|
|
time = 0.0f;
|
|
|
|
frame = 0;
|
|
|
|
|
|
|
|
SLK_layer_activate(2,1);
|
|
|
|
SLK_layer_activate(1,0);
|
|
|
|
|
|
|
|
SLK_layer_set_current(0);
|
2020-05-10 21:21:10 +02:00
|
|
|
SLK_draw_rgb_set_changed(1);
|
2020-04-19 22:15:50 +02:00
|
|
|
SLK_draw_rgb_sprite(gui_01,206,2);
|
|
|
|
SLK_draw_rgb_string(214,10,1,"rgb renderer",SLK_color_create(255,255,255,255));
|
|
|
|
}
|
2020-04-25 17:52:18 +02:00
|
|
|
if(SLK_key_pressed(SLK_KEY_F))
|
|
|
|
{
|
|
|
|
fullscreen = !fullscreen;
|
|
|
|
SLK_core_set_fullscreen(fullscreen);
|
|
|
|
}
|
2020-04-11 17:03:26 +02:00
|
|
|
|
2020-04-19 22:15:50 +02:00
|
|
|
|
|
|
|
SLK_layer_set_current(0);
|
2020-05-10 21:21:10 +02:00
|
|
|
SLK_draw_rgb_set_changed(1);
|
2020-04-19 22:15:50 +02:00
|
|
|
SLK_draw_rgb_sprite(gui_00,2,2);
|
|
|
|
SLK_draw_rgb_string(10,10,1,time_stat,SLK_color_create(255,255,255,255));
|
2020-02-14 18:53:59 +01:00
|
|
|
|
2020-04-19 22:15:50 +02:00
|
|
|
SLK_render_update();
|
2020-02-14 18:53:59 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2020-04-19 22:15:50 +02:00
|
|
|
void add_entity()
|
2020-02-14 18:53:59 +01:00
|
|
|
{
|
2020-04-19 22:15:50 +02:00
|
|
|
world.entities[world.used].frame = rand()%4;
|
|
|
|
world.entities[world.used].x = rand()%294+5;
|
|
|
|
world.entities[world.used].y = rand()%201+10;
|
|
|
|
world.entities[world.used].type = rand()%10;
|
|
|
|
world.entities[world.used].flip = rand()%2;
|
2020-02-14 18:53:59 +01:00
|
|
|
|
|
|
|
world.used++;
|
|
|
|
|
2020-04-19 22:15:50 +02:00
|
|
|
qsort(world.entities,world.used,sizeof(Entity),sort);
|
|
|
|
|
2020-02-14 18:53:59 +01:00
|
|
|
if(world.used>=world.space)
|
|
|
|
{
|
|
|
|
world.space+=100;
|
2020-04-19 22:15:50 +02:00
|
|
|
world.entities = realloc(world.entities,sizeof(Entity)*world.space);
|
2020-02-14 18:53:59 +01:00
|
|
|
}
|
|
|
|
}
|
2020-04-19 22:15:50 +02:00
|
|
|
|
|
|
|
void load_pal_sprites()
|
|
|
|
{
|
|
|
|
SLK_layer_set_current(1);
|
|
|
|
SLK_layer_set_palette(1,SLK_palette_load("assets/palette.pal"));
|
|
|
|
|
|
|
|
SLK_Pal_sprite *tileset = SLK_pal_sprite_load("assets/sprites.slk");
|
|
|
|
|
|
|
|
for(int y = 0;y<10;y++)
|
|
|
|
{
|
|
|
|
for(int x = 0;x<4;x++)
|
|
|
|
{
|
|
|
|
dino_sprites[y][x] = SLK_pal_sprite_create(16,24);
|
|
|
|
SLK_pal_sprite_copy_partial(dino_sprites[y][x],tileset,0,0,x*16,y*24,16,24);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
SLK_pal_sprite_destroy(tileset);
|
|
|
|
}
|
|
|
|
|
|
|
|
void load_rgb_sprites()
|
|
|
|
{
|
|
|
|
SLK_layer_set_current(2);
|
|
|
|
|
|
|
|
SLK_RGB_sprite *tileset = SLK_rgb_sprite_load("assets/sprites.png");
|
|
|
|
|
|
|
|
for(int y = 0;y<10;y++)
|
|
|
|
{
|
|
|
|
for(int x = 0;x<4;x++)
|
|
|
|
{
|
|
|
|
dino_sprites_rgb[y][x] = SLK_rgb_sprite_create(16,24);
|
|
|
|
SLK_draw_rgb_set_target(dino_sprites_rgb[y][x]);
|
|
|
|
SLK_draw_rgb_clear();
|
|
|
|
SLK_draw_rgb_sprite_partial(tileset,0,0,x*16,y*24,16,24);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
SLK_rgb_sprite_destroy(tileset);
|
|
|
|
}
|
|
|
|
|
|
|
|
int sort(const void *e0, const void *e1)
|
|
|
|
{
|
|
|
|
if(((Entity *)e0)->y<((Entity *)e1)->y)
|
|
|
|
return -1;
|
|
|
|
else if(((Entity *)e0)->y>((Entity *)e1)->y)
|
|
|
|
return 1;
|
|
|
|
else
|
|
|
|
return 0;
|
|
|
|
}
|