diff options
| -rw-r--r-- | src/editor.c | 8 | ||||
| -rw-r--r-- | src/editor.h | 5 | ||||
| -rw-r--r-- | src/main.c | 28 | ||||
| -rw-r--r-- | src/screens.c | 45 | ||||
| -rw-r--r-- | src/screens.h | 9 | ||||
| -rw-r--r-- | src/xd.c | 11 | ||||
| -rw-r--r-- | src/xd.h | 2 |
7 files changed, 83 insertions, 25 deletions
diff --git a/src/editor.c b/src/editor.c index 64f1673..65f6a32 100644 --- a/src/editor.c +++ b/src/editor.c @@ -1,13 +1,17 @@ #include "editor.h" #include "raylib.h" +#include "xd.h" void SE_DrawEditor(Editor *editor, Camera2D *camera) { Vector2 mousePos = GetScreenToWorld2D(GetMousePosition(), *camera); float zoom = camera->zoom; - for (int x = 0; x < editor->level->width; x++) { - for (int y = 0; y < editor->level->height; y++) { + XdLevel *level = editor->data->levels[editor->state.currentLevel]; + XdFloor *floor = level->floors[editor->state.currentLayer]; + + for (int x = 0; x < floor->width; x++) { + for (int y = 0; y < floor->height; y++) { float rx = x * zoom, ry = y * zoom; Color innerColor = RAYWHITE; Color borderColor = LIGHTGRAY; diff --git a/src/editor.h b/src/editor.h index ddd030f..e1981cf 100644 --- a/src/editor.h +++ b/src/editor.h @@ -2,13 +2,14 @@ #define __EDITOR_H__ #include <raylib.h> -#include "level.h" +#include "xd.h" typedef struct { + int currentLevel, currentLayer; } EditorState; typedef struct { - Level *level; + XdData *data; EditorState state; } Editor; @@ -1,19 +1,31 @@ #include <stddef.h> +#include <stdio.h> +#include <stdlib.h> #include "editor.h" -#include "level.h" #include "raylib.h" #include "screens.h" - -typedef enum GameScreen { SCREEN_MENU = 0, SCREEN_EDITOR } GameScreen; +#include "xd.h" int main() { SetConfigFlags(FLAG_WINDOW_RESIZABLE); InitWindow(800, 600, "sillyeditor"); SetTargetFPS(60); - Level *level = SE_CreateLevel(30, 30); - Editor editor = {level, {}}; + // Getting list of files + XdData* datas[] = {}; + FilePathList list = LoadDirectoryFilesEx("datas", ".xd", true); + + for (int i = 0; i < list.count; i++) { + XdData data = Xd_LoadFromFile(list.paths[i]); + printf("%s\n", data.name); + datas[i] = &data; + } + + UnloadDirectoryFiles(list); + + XdData* data = NULL; + Editor editor = {data, {0, 0}}; Camera2D camera = {0}; camera.target = (Vector2){0.0f, 0.0f}; @@ -26,11 +38,11 @@ int main() { while (!WindowShouldClose()) { switch (currentScreen) { case SCREEN_MENU: { - SE_DrawMenuScreen(); + SE_DrawMenuScreen(¤tScreen, &editor, data, datas); break; } case SCREEN_EDITOR: { - SE_DrawEditorScreen(&editor, &camera); + SE_DrawEditorScreen(¤tScreen, &editor, &camera); break; } default: @@ -38,7 +50,5 @@ int main() { } } - SE_FreeLevel(level); - return 0; } diff --git a/src/screens.c b/src/screens.c index f7bda99..03b1441 100644 --- a/src/screens.c +++ b/src/screens.c @@ -1,15 +1,56 @@ #include "screens.h" +#include <stdio.h> +#include <stdlib.h> + #include "editor.h" #include "raylib.h" +#include "xd.h" + +#define RAYGUI_IMPLEMENTATION +#include "raygui.h" + +void SE_DrawMenuScreen(GameScreen *currentScreen, Editor *editor, XdData *data, + XdData *datas[]) { + if (IsKeyPressed(KEY_N)) { + *currentScreen = SCREEN_EDITOR; + data = malloc(sizeof(XdData)); + editor->data = data; + + data->name = "xd"; + + // Creating an empty level + data->levels[0] = malloc(sizeof(XdLevel)); + data->levels[0]->floors[0] = malloc(sizeof(XdFloor)); + data->levels[0]->floors[0]->width = 30; + data->levels[0]->floors[0]->height = 30; + } -void SE_DrawMenuScreen() { BeginDrawing(); ClearBackground(RAYWHITE); + + for (int i = 0; i < sizeof(*datas) / sizeof(*datas[0]); i++) { + printf("xd\n"); + XdData *data = datas[i]; + bool button = GuiButton((Rectangle){10, 10 * i, GetScreenWidth() - 10, 40}, + data->name); + } + + GuiLabel((Rectangle){0, GetScreenHeight() - 20, GetScreenWidth(), 20}, + "Press N to create a new campaign"); EndDrawing(); } -void SE_DrawEditorScreen(Editor *editor, Camera2D *camera) { +void SE_DrawEditorScreen(GameScreen *currentScreen, Editor *editor, + Camera2D *camera) { + if (IsKeyPressed(KEY_S)) { + Xd_SaveFile("test.xd", editor->data); + *currentScreen = SCREEN_MENU; + free(editor->data); + editor->data = NULL; + return; + } + if (GetMouseWheelMove() != 0.0) { camera->zoom += (int)GetMouseWheelMove(); diff --git a/src/screens.h b/src/screens.h index 75e9616..f73df4e 100644 --- a/src/screens.h +++ b/src/screens.h @@ -1,6 +1,11 @@ #include <raylib.h> #include "editor.h" +#include "xd.h" -void SE_DrawMenuScreen(); -void SE_DrawEditorScreen(Editor *editor, Camera2D *camera); +typedef enum GameScreen { SCREEN_MENU = 0, SCREEN_EDITOR } GameScreen; + +void SE_DrawMenuScreen(GameScreen *currentScreen, Editor *editor, XdData *data, + XdData *datas[]); +void SE_DrawEditorScreen(GameScreen *currentScreen, Editor *editor, + Camera2D *camera); @@ -4,15 +4,12 @@ #include <stdio.h> #include <stdlib.h> -XdData *Xd_LoadFromFile(const char *filePath) { +XdData Xd_LoadFromFile(const char *filePath) { FILE *file = fopen(filePath, "rb"); - if (file == NULL) { - return NULL; - } - - XdData *data = malloc(sizeof(XdData)); - fread(data, sizeof(XdData), 1, file); + XdData data; + fread(&data, sizeof(XdData), 1, file); + printf("1 %s\n", data.name); fclose(file); return data; @@ -53,7 +53,7 @@ typedef struct { XdLevel *levels[]; } XdData; -XdData *Xd_LoadFromFile(const char *filePath); +XdData Xd_LoadFromFile(const char *filePath); void Xd_SaveFile(const char *filePath, XdData *xd); #endif |
