diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index ed9ab33..e3d8398 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -7,7 +7,7 @@ "${workspaceFolder}/raylib/src/extras" ], "windowsSdkVersion": "10.0.19041.0", - "compilerPath": "D:/mingw/mingw32/bin/gcc.exe", + "compilerPath": "D:/mingw/mingw64/bin/gcc.exe", "cStandard": "c17", "cppStandard": "c++17", "intelliSenseMode": "windows-gcc-x64", diff --git a/.vscode/workspace.code-workspace b/.vscode/workspace.code-workspace index 09875e9..5444930 100644 --- a/.vscode/workspace.code-workspace +++ b/.vscode/workspace.code-workspace @@ -15,7 +15,8 @@ "*.m": "cpp", "cstdlib": "cpp", "raylib.h": "c", - "math.h": "c" + "math.h": "c", + "raymath.h": "c" } } } \ No newline at end of file diff --git a/include/rogue.h b/include/rogue.h index f75460e..67a4fa3 100644 --- a/include/rogue.h +++ b/include/rogue.h @@ -1,5 +1,10 @@ #include "raylib.h" +static Color const ERROR_COLOR = {255, 0, 255, 255}; +static Color const FLOOR_COLOR = {255, 255, 255, 255}; +static Color const WALL_COLOR = {0, 0, 0, 255}; +static Color const PLAYER_COLOR = {64, 64, 64 + 128, 255}; + typedef struct Vector2i { int x; @@ -12,20 +17,36 @@ typedef struct Entity Color color; } Entity; +typedef struct Room +{ + int height; + int width; + Vector2i position; + Vector2i center; +} Room; + typedef struct Tile { bool walkable; Color color; } Tile; -Entity *createPlayer(Vector2i start_position); -Tile **createMapTiles(); -void freeMapTiles(Tile **map_tiles); -void renderEverything(RenderTexture2D target); +bool tryMovePlayer(Vector2i const new_position); -void initGame(); -void mainLoop(); -void endGame(); +Entity *createPlayer(Vector2i const start_position); +Tile **createMapTiles(void); +Vector2i setupMap(void); +void freeMapTiles(Tile **map_tiles); + +Room createRoom(int x, int y, int height, int width); +void addRoomToMap(Room room); +void connectRoomCenters(Vector2i centerOne, Vector2i centerTwo); + +void renderEverything(void); + +void initGame(void); +void mainLoop(void); +void endGame(void); extern unsigned int const MAP_HEIGHT; extern unsigned int const MAP_WIDTH; diff --git a/resources/3-by-5-pixel-font.ttf b/resources/3-by-5-pixel-font.ttf new file mode 100644 index 0000000..accd34e Binary files /dev/null and b/resources/3-by-5-pixel-font.ttf differ diff --git a/resources/TINY.TTF b/resources/TINY.TTF new file mode 100644 index 0000000..a447411 Binary files /dev/null and b/resources/TINY.TTF differ diff --git a/resources/bmfont64.exe b/resources/bmfont64.exe new file mode 100644 index 0000000..b9779cb Binary files /dev/null and b/resources/bmfont64.exe differ diff --git a/resources/tiny.fnt b/resources/tiny.fnt new file mode 100644 index 0000000..1ca0055 --- /dev/null +++ b/resources/tiny.fnt @@ -0,0 +1,100 @@ +info face="Tiny" size=-6 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=0 aa=1 padding=1,1,0,1 spacing=0,0 outline=0 +common lineHeight=6 base=5 scaleW=128 scaleH=128 pages=1 packed=0 alphaChnl=0 redChnl=3 greenChnl=3 blueChnl=3 +page id=0 file="tiny_0.png" +chars count=96 +char id=32 x=0 y=28 width=5 height=7 xoffset=-1 yoffset=-1 xadvance=3 page=0 chnl=15 +char id=33 x=37 y=28 width=4 height=7 xoffset=-1 yoffset=-1 xadvance=2 page=0 chnl=15 +char id=34 x=7 y=7 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=35 x=16 y=0 width=8 height=7 xoffset=-1 yoffset=-1 xadvance=6 page=0 chnl=15 +char id=36 x=13 y=7 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=37 x=70 y=0 width=7 height=7 xoffset=-1 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=38 x=77 y=0 width=7 height=7 xoffset=-1 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=39 x=25 y=28 width=4 height=7 xoffset=-1 yoffset=-1 xadvance=2 page=0 chnl=15 +char id=40 x=118 y=21 width=5 height=7 xoffset=-1 yoffset=-1 xadvance=3 page=0 chnl=15 +char id=41 x=113 y=21 width=5 height=7 xoffset=-1 yoffset=-1 xadvance=3 page=0 chnl=15 +char id=42 x=19 y=7 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=43 x=25 y=7 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=44 x=41 y=28 width=4 height=7 xoffset=-1 yoffset=-1 xadvance=2 page=0 chnl=15 +char id=45 x=37 y=7 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=46 x=57 y=28 width=4 height=7 xoffset=-1 yoffset=-1 xadvance=2 page=0 chnl=15 +char id=47 x=119 y=0 width=7 height=7 xoffset=-1 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=48 x=43 y=7 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=49 x=49 y=7 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=50 x=55 y=7 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=51 x=61 y=7 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=52 x=67 y=7 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=53 x=73 y=7 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=54 x=79 y=7 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=55 x=85 y=7 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=56 x=102 y=21 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=57 x=91 y=7 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=58 x=33 y=28 width=4 height=7 xoffset=-1 yoffset=-1 xadvance=2 page=0 chnl=15 +char id=59 x=29 y=28 width=4 height=7 xoffset=-1 yoffset=-1 xadvance=2 page=0 chnl=15 +char id=60 x=97 y=7 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=61 x=103 y=7 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=62 x=109 y=7 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=63 x=115 y=7 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=64 x=121 y=7 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=65 x=0 y=14 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=66 x=6 y=14 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=67 x=12 y=14 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=68 x=31 y=7 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=69 x=18 y=14 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=70 x=24 y=14 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=71 x=30 y=14 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=72 x=36 y=14 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=73 x=42 y=14 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=74 x=48 y=14 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=75 x=98 y=0 width=7 height=7 xoffset=-1 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=76 x=54 y=14 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=77 x=0 y=0 width=8 height=7 xoffset=-1 yoffset=-1 xadvance=6 page=0 chnl=15 +char id=78 x=91 y=0 width=7 height=7 xoffset=-1 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=79 x=105 y=0 width=7 height=7 xoffset=-1 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=80 x=90 y=14 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=81 x=63 y=0 width=7 height=7 xoffset=-1 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=82 x=66 y=14 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=83 x=72 y=14 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=84 x=78 y=14 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=85 x=56 y=0 width=7 height=7 xoffset=-1 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=86 x=48 y=0 width=8 height=7 xoffset=-1 yoffset=-1 xadvance=6 page=0 chnl=15 +char id=87 x=40 y=0 width=8 height=7 xoffset=-1 yoffset=-1 xadvance=6 page=0 chnl=15 +char id=88 x=84 y=14 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=89 x=32 y=0 width=8 height=7 xoffset=-1 yoffset=-1 xadvance=6 page=0 chnl=15 +char id=90 x=84 y=0 width=7 height=7 xoffset=-1 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=91 x=5 y=28 width=5 height=7 xoffset=-1 yoffset=-1 xadvance=3 page=0 chnl=15 +char id=92 x=112 y=0 width=7 height=7 xoffset=-1 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=93 x=15 y=28 width=5 height=7 xoffset=-1 yoffset=-1 xadvance=3 page=0 chnl=15 +char id=94 x=96 y=14 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=95 x=102 y=14 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=96 x=108 y=21 width=5 height=7 xoffset=-1 yoffset=-1 xadvance=3 page=0 chnl=15 +char id=97 x=108 y=14 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=98 x=114 y=14 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=99 x=120 y=14 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=100 x=0 y=21 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=101 x=6 y=21 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=102 x=10 y=28 width=5 height=7 xoffset=-1 yoffset=-1 xadvance=3 page=0 chnl=15 +char id=103 x=20 y=28 width=5 height=7 xoffset=-1 yoffset=-1 xadvance=3 page=0 chnl=15 +char id=104 x=18 y=21 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=105 x=45 y=28 width=4 height=7 xoffset=-1 yoffset=-1 xadvance=2 page=0 chnl=15 +char id=106 x=49 y=28 width=4 height=7 xoffset=-1 yoffset=-1 xadvance=2 page=0 chnl=15 +char id=107 x=24 y=21 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=108 x=61 y=28 width=4 height=7 xoffset=-1 yoffset=-1 xadvance=2 page=0 chnl=15 +char id=109 x=24 y=0 width=8 height=7 xoffset=-1 yoffset=-1 xadvance=6 page=0 chnl=15 +char id=110 x=30 y=21 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=111 x=36 y=21 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=112 x=42 y=21 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=113 x=48 y=21 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=114 x=123 y=21 width=5 height=7 xoffset=-1 yoffset=-1 xadvance=3 page=0 chnl=15 +char id=115 x=12 y=21 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=116 x=54 y=21 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=117 x=60 y=21 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=118 x=66 y=21 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=119 x=8 y=0 width=8 height=7 xoffset=-1 yoffset=-1 xadvance=6 page=0 chnl=15 +char id=120 x=72 y=21 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=121 x=78 y=21 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=122 x=84 y=21 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=123 x=90 y=21 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=124 x=53 y=28 width=4 height=7 xoffset=-1 yoffset=-1 xadvance=2 page=0 chnl=15 +char id=125 x=96 y=21 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=126 x=0 y=7 width=7 height=7 xoffset=-1 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=127 x=60 y=14 width=6 height=7 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 diff --git a/resources/tiny_0.png b/resources/tiny_0.png new file mode 100644 index 0000000..2900dee Binary files /dev/null and b/resources/tiny_0.png differ diff --git a/src/draw.c b/src/draw.c index f4dda0c..68b78f4 100644 --- a/src/draw.c +++ b/src/draw.c @@ -17,12 +17,8 @@ void drawEntity(Entity *entity) DrawPixel(entity->position.x, entity->position.y, entity->color); } -void renderEverything(RenderTexture2D target) +void renderEverything() { - BeginTextureMode(target); - { - drawMap(map); - drawEntity(player); - } - EndTextureMode(); + drawMap(map); + drawEntity(player); } \ No newline at end of file diff --git a/src/engine.c b/src/engine.c index ba27be0..abbcb59 100644 --- a/src/engine.c +++ b/src/engine.c @@ -1,5 +1,6 @@ #include "raylib.h" #include "rogue.h" +#include // Required for: time_t, tm, time(), localtime(), strftime() static int const PIXEL_SCALE = 10; static int const VIRTUAL_SCREEN_WIDTH = 80; @@ -22,16 +23,19 @@ void initGame() //-------------------------------------------------------------------------------------- #if defined(__DEBUG) SetTraceLogLevel(LOG_ALL); + SetRandomSeed(0); #else SetTraceLogLevel(LOG_NONE); + SetRandomSeed(time(NULL)); #endif + SetConfigFlags(0); InitWindow(REAL_SCREEN_WIDTH, REAL_SCREEN_HEIGHT, "TODO: Add a title"); virtualScreen = LoadRenderTexture(VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT); - player = createPlayer((Vector2i){VIRTUAL_SCREEN_WIDTH / 2, VIRTUAL_SCREEN_HEIGHT / 2}); map = createMapTiles(); + player = createPlayer(setupMap()); // SetTargetFPS(60); // Set our game to run at 60 frames-per-second } @@ -41,22 +45,24 @@ void update() // Update //---------------------------------------------------------------------------------- + Vector2i new_position = {player->position.x, player->position.y}; if (IsKeyPressed(KEY_RIGHT)) { - player->position.x++; + new_position.x++; } if (IsKeyPressed(KEY_LEFT)) { - player->position.x--; + new_position.x--; } if (IsKeyPressed(KEY_UP)) { - player->position.y--; + new_position.y--; } if (IsKeyPressed(KEY_DOWN)) { - player->position.y++; + new_position.y++; } + tryMovePlayer(new_position); } void draw() @@ -65,30 +71,14 @@ void draw() //---------------------------------------------------------------------------------- BeginTextureMode(virtualScreen); { - ClearBackground(BLACK); + ClearBackground(ERROR_COLOR); - DrawPixel(player->position.x, player->position.y, player->color); - - /* - for (unsigned int x = 0; x < VIRTUAL_SCREEN_WIDTH; x++) - { - for (unsigned int y = 0; y < VIRTUAL_SCREEN_HEIGHT; y++) - { - const unsigned char r = (unsigned char)floorf((float)x / (float)VIRTUAL_SCREEN_WIDTH * 255.0f); - const unsigned char b = (unsigned char)floorf((float)y / (float)VIRTUAL_SCREEN_HEIGHT * 255.0f); - const unsigned char g = 255 - (r + b) / 2; - const unsigned char a = 255; - - DrawPixel(x, y, (Color){r, g, b, a}); - } - } - */ + renderEverything(); } EndTextureMode(); BeginDrawing(); { - ClearBackground(BLACK); // Draw rendered game texture DrawTexturePro(virtualScreen.texture, virtualScreenRect, realScreenRect, (Vector2){0.0f, 0.0f}, 0.0f, WHITE); diff --git a/src/main.c b/src/main.c index d818ae2..62abc5d 100644 --- a/src/main.c +++ b/src/main.c @@ -7,6 +7,136 @@ Tile **map; int main(void) { + char chars[] = { + ' ', + '!', + '"', + '#', + '$', + '%', + '&', + '\'', + '(', + ')', + '*', + '+', + ',', + '-', + '.', + '/', + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + ':', + ';', + '<', + '=', + '>', + '?', + '@', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'L', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z', + '[', + '\\', + ']', + '^', + '_', + '`', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f', + 'g', + 'h', + 'i', + 'j', + 'k', + 'l', + 'm', + 'n', + 'o', + 'p', + 'q', + 'r', + 's', + 't', + 'u', + 'v', + 'w', + 'x', + 'y', + 'z', + '{', + '|', + '}', + '~', + 127, + }; + InitWindow(800, 600, "Font test"); + + Font tiny = LoadFont("resources/tiny.png"); + RenderTexture2D target = LoadRenderTexture(80, 60); + + static const int font_size = 6; + float const charWidth = MeasureTextEx(tiny, " ", font_size, 0).x; + + BeginTextureMode(target); + ClearBackground(BLACK); + for (unsigned char i = 0; i < 96; i++) + { + float const x = i * charWidth; + float const y = ((int)x / target.texture.width) * font_size; + char const *const text = TextFormat("%c", chars[i]); + if (y != 0) + { + TraceLog(LOG_INFO, TextFormat("i: %i, x: %f, y: %f", i, x, y)); + } + DrawTextEx(tiny, text, (Vector2){x, y}, font_size, 2, WHITE); + } + EndTextureMode(); + while (!WindowShouldClose()) + { + BeginDrawing(); + DrawTexturePro(target.texture, (Rectangle){0, 0, 80, -60}, (Rectangle){0, 0, 800, 600}, (Vector2){0, 0}, 0, WHITE); + EndDrawing(); + } + + CloseWindow(); + return 0; + /* initGame(); // Main game loop @@ -18,4 +148,5 @@ int main(void) endGame(); return 0; + */ } \ No newline at end of file diff --git a/src/map.c b/src/map.c index 73c5c04..bb4c374 100644 --- a/src/map.c +++ b/src/map.c @@ -1,6 +1,6 @@ #include "rogue.h" -Tile **createMapTiles() +Tile **createMapTiles(void) { Tile **tiles = MemAlloc(sizeof(Tile *) * MAP_WIDTH); @@ -9,7 +9,7 @@ Tile **createMapTiles() tiles[x] = MemAlloc(sizeof(Tile) * MAP_HEIGHT); for (unsigned int y = 0; y < MAP_HEIGHT; y++) { - tiles[x][y].color = WHITE; + tiles[x][y].color = WALL_COLOR; tiles[x][y].walkable = false; } } @@ -17,6 +17,44 @@ Tile **createMapTiles() return tiles; } +static const unsigned int MIN_ROOM_WIDTH = 5; +static const unsigned int MIN_ROOM_HEIGHT = 3; + +static const unsigned int MAX_ROOM_WIDTH = 20; +static const unsigned int MAX_ROOM_HEIGHT = 10; + +Vector2i setupMap(void) +{ + int y, x, height, width, n_rooms; + n_rooms = GetRandomValue(5, 15); + Vector2i start_pos; + + Room *const rooms = MemAlloc(n_rooms * sizeof(Room)); + + for (int i = 0; i < n_rooms; i++) + { + x = GetRandomValue(1, MAP_WIDTH - MAX_ROOM_WIDTH - 1U); + y = GetRandomValue(1, MAP_HEIGHT - MAX_ROOM_HEIGHT - 1U); + + width = GetRandomValue(MIN_ROOM_WIDTH, MAX_ROOM_WIDTH); + height = GetRandomValue(MIN_ROOM_HEIGHT, MAX_ROOM_HEIGHT); + + rooms[i] = createRoom(x, y, width, height); + + addRoomToMap(rooms[i]); + + if (i > 0) + { + connectRoomCenters(rooms[i - 1].center, rooms[i].center); + } + } + start_pos = (Vector2i){rooms[0].center.x, rooms[0].center.y}; + + MemFree(rooms); + + return start_pos; +} + void freeMapTiles(Tile **map_tiles) { for (unsigned int x = 0; x < MAP_WIDTH; x++) diff --git a/src/player.c b/src/player.c index 02aa8b3..69f40f4 100644 --- a/src/player.c +++ b/src/player.c @@ -6,7 +6,17 @@ Entity *createPlayer(Vector2i const start_position) Entity *const newPlayer = MemAlloc(sizeof(Entity)); newPlayer->position = start_position; - newPlayer->color = DARKBLUE; + newPlayer->color = PLAYER_COLOR; return newPlayer; } + +bool tryMovePlayer(Vector2i const new_position) +{ + if (map[new_position.x][new_position.y].walkable) + { + player->position = new_position; + return true; + } + return false; +} \ No newline at end of file diff --git a/src/room.c b/src/room.c new file mode 100644 index 0000000..86f109f --- /dev/null +++ b/src/room.c @@ -0,0 +1,63 @@ +#include "rogue.h" +#include "raymath.h" + +Room createRoom(int x, int y, int width, int height) +{ + Room newRoom = { + .position = {x, y}, + .height = height, + .width = width, + .center = { + x + (int)(width / 2), + y + (int)(height / 2), + }, + }; + + return newRoom; +} + +void addRoomToMap(Room room) +{ + for (int x = room.position.x; x < room.position.x + room.width; x++) + { + for (int y = room.position.y; y < room.position.y + room.height; y++) + { + map[x][y].color = FLOOR_COLOR; + map[x][y].walkable = true; + } + } +} + +void connectRoomCenters(Vector2i center1, Vector2i center2) +{ + Vector2i current = { + center1.x, + center1.y, + }; + while (true) + { + if (abs((current.x - 1) - center2.x) < abs(current.x - center2.x)) + { + current.x--; + } + else if (abs((current.x + 1) - center2.x) < abs(current.x - center2.x)) + { + current.x++; + } + else if (abs((current.y - 1) - center2.y) < abs(current.y - center2.y)) + { + current.y--; + } + else if (abs((current.y + 1) - center2.y) < abs(current.y - center2.y)) + { + current.y++; + } + else + { + break; + } + + map[current.x][current.y].color = FLOOR_COLOR; + map[current.x][current.y].walkable = true; + } +}