From 5d3b1bfd0173369f50f9f772d47358cfc8e7e73a Mon Sep 17 00:00:00 2001 From: KikooDX Date: Tue, 23 Mar 2021 19:03:44 +0100 Subject: [PATCH] Level drawing and new arguments + README update --- CMakeLists.txt | 6 ++++-- README | 6 ++++++ assets/tileset.png | Bin 0 -> 1196 bytes include/conf.h | 5 ++++- include/draw.h | 8 ++++++++ include/level.h | 1 - sample.kble | Bin 518 -> 262 bytes src/draw.c | 29 +++++++++++++++++++++++++++++ src/level.c | 3 +-- src/main.c | 31 +++++++++++++++++++++---------- 10 files changed, 73 insertions(+), 16 deletions(-) create mode 100644 assets/tileset.png create mode 100644 include/draw.h create mode 100644 src/draw.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 62dde38..7720b22 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,13 +8,15 @@ include_directories(include) set(SOURCES src/main.c - src/level.c) + src/level.c + src/draw.c +) set(FLAGS -Wall -Wextra -Wshadow -Wswitch-default -Wswitch-enum -Wunreachable-code -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -Werror-implicit-function-declaration - -g -Os) + -Os) add_executable(${PROJECT_NAME} ${SOURCES} ${SOURCES_RAYLIB}) diff --git a/README b/README index 6f2868d..156f95b 100644 --- a/README +++ b/README @@ -15,6 +15,12 @@ $ mkdir sle/build && cd sle/build $ cmake .. $ make +RUN +=== +$ +Example: +$ build/sle assets/tileset.png sample.kble + LICENSE ======= Copyright (C) 2021 KikooDX diff --git a/assets/tileset.png b/assets/tileset.png new file mode 100644 index 0000000000000000000000000000000000000000..6a05fdaa233aebcfd708101bf91efe1aa801f5b3 GIT binary patch literal 1196 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$1EG)7d#7GdY=oL1SX+L~Czm zN0HY3DqV{N1zF`ImUJX7RNy)ol$r@dYhU)63icoWQC@TBQSjF^kFUS#@6TUcd9tA7gDIDL$?3Az(&=fq_vj4Wf?mWZir-d}t8{=UqxBa2VpU(}-8#}oOHuPbWGy0(zu z66bv~s#AZzw~;L_S#rr%qV<>i`RcdLZMhoxmG_=6d_J{b;RD0-)>ZYcMN-w`wX0XP zeqUHB>!-ges*3%b*@D;iF6F$9<~s3Zw%VRK4&Ge1)-TLlIO*zntK;PpVkWEaYPxIt zV*1~;-SNWh8N$j(>-GX;fV03OvY3H^?+6GpPSxg5i`c^&v)aI)Fc|WTn^|mv;dAvvJMbz=; zU2BC8*t09}{d>J(`}cc$`BiQ(q&3UNzc&VZ$+;iH&ByXdhG#Y1_y?QFYXN$*W~xUt6=anZ?O2YSp8q^ zhriMcp8X8--@SYHZ-NQK$M^dM%j-P$F`jw% + +void level_draw(struct Level level, Texture2D tileset); diff --git a/include/level.h b/include/level.h index 970cdb9..28a9476 100644 --- a/include/level.h +++ b/include/level.h @@ -1,6 +1,5 @@ /* SPDX-License-Identifier: GPL-3.0-or-later */ /* Copyright (C) 2021 KikooDX */ - #pragma once typedef unsigned int tile_t; diff --git a/sample.kble b/sample.kble index 9096459aa2422242b21b5719466406e1f02bbd9e..3c18d3bc85b8ea3921243f949b5e1f6bf30468e7 100644 GIT binary patch literal 262 zcmZQzWDo#Ctbh>&;4)wyLIlhLi$PQXnP3K#hH)7fAS?tQC;(K5WH1B54!C8w88Cy0 Kr(tH{u?7G~Gyq}% literal 518 zcmZQzVh{jAQUD_Z3}Whn$slNCH84>IxCxBN(oj)^5JWwUkII9HB8wrjVR|4oA=Dzo W5iC?UAjBzWp}U9{d~{cm +#include + +void level_draw(struct Level level, Texture2D tileset) +{ + int x; + int y; + for (x = 0; x < level.width; x += 1) { + for (y = 0; y < level.height; y += 1) { + const int tile = + level.data[x + y * level.width]; + Rectangle tile_rect = { + (int)(tile % tileset.width) * tile_width, + (int)(tile / tileset.width) * tile_width, + tile_width, tile_height}; + Vector2 tile_pos = { + x * tile_width + draw_offset_x, + y * tile_height + draw_offset_y}; + if (tile) + DrawTextureRec(tileset, tile_rect, + tile_pos, WHITE); + } + } +} diff --git a/src/level.c b/src/level.c index ea3538f..98c6c6b 100644 --- a/src/level.c +++ b/src/level.c @@ -1,12 +1,11 @@ /* SPDX-License-Identifier: GPL-3.0-or-later */ /* Copyright (C) 2021 KikooDX */ +#include "level.h" #include #include #include -#include "level.h" - static const int kble_fmt_version = 0; static char read_byte(FILE *file); diff --git a/src/main.c b/src/main.c index 8555b77..e89a4e3 100644 --- a/src/main.c +++ b/src/main.c @@ -1,23 +1,19 @@ /* SPDX-License-Identifier: GPL-3.0-or-later */ /* Copyright (C) 2021 KikooDX */ +#include "conf.h" +#include "draw.h" +#include "level.h" #include #include #include #include -#include "conf.h" -#include "level.h" - int main(int argc, char **argv) { struct Level level; level.data = NULL; - /* initialize raylib */ - InitWindow(window_width, window_height, "SLE"); - SetTargetFPS(target_fps); - /* check for argument count */ if (argc != 3) { fprintf(stderr, "ERROR: expected 2 arguments, got %d\n", @@ -25,8 +21,25 @@ int main(int argc, char **argv) return EXIT_FAILURE; }; + /* initialize raylib */ + InitWindow(window_width, window_height, "SLE"); + SetTargetFPS(target_fps); + /* load textures */ + const Texture2D tileset = LoadTexture(argv[1]); + assert(tileset.width > 0); + /* load level */ - level_read(&level, argv[1]); + level_read(&level, argv[2]); + + while (!WindowShouldClose()) { + /* draw */ + BeginDrawing(); + + ClearBackground(BLACK); + level_draw(level, tileset); + + EndDrawing(); + } /* save level */ level_write(level, argv[2]); @@ -34,8 +47,6 @@ int main(int argc, char **argv) /* deinit */ level_free(&level); - for (;;) {} - CloseWindow(); return EXIT_SUCCESS;