From adbd2511beec8f1caa1752bdfd755cc2f62ba425 Mon Sep 17 00:00:00 2001
From: 3gg <3gg@shellblade.net>
Date: Sat, 9 Mar 2024 08:43:26 -0800
Subject: Make isogfx a library instead of an executable.

---
 gfx-iso/demos/CMakeLists.txt              |   2 +
 gfx-iso/demos/checkerboard/CMakeLists.txt |  15 ++++
 gfx-iso/demos/checkerboard/checkerboard.c | 114 ++++++++++++++++++++++++++++++
 gfx-iso/demos/isomap/CMakeLists.txt       |  15 ++++
 gfx-iso/demos/isomap/isomap.c             |  72 +++++++++++++++++++
 5 files changed, 218 insertions(+)
 create mode 100644 gfx-iso/demos/CMakeLists.txt
 create mode 100644 gfx-iso/demos/checkerboard/CMakeLists.txt
 create mode 100644 gfx-iso/demos/checkerboard/checkerboard.c
 create mode 100644 gfx-iso/demos/isomap/CMakeLists.txt
 create mode 100644 gfx-iso/demos/isomap/isomap.c

(limited to 'gfx-iso/demos')

diff --git a/gfx-iso/demos/CMakeLists.txt b/gfx-iso/demos/CMakeLists.txt
new file mode 100644
index 0000000..c0a4101
--- /dev/null
+++ b/gfx-iso/demos/CMakeLists.txt
@@ -0,0 +1,2 @@
+add_subdirectory(checkerboard)
+add_subdirectory(isomap)
diff --git a/gfx-iso/demos/checkerboard/CMakeLists.txt b/gfx-iso/demos/checkerboard/CMakeLists.txt
new file mode 100644
index 0000000..f178262
--- /dev/null
+++ b/gfx-iso/demos/checkerboard/CMakeLists.txt
@@ -0,0 +1,15 @@
+cmake_minimum_required(VERSION 3.0)
+
+project(checkerboard)
+
+set(CMAKE_C_STANDARD 17)
+set(CMAKE_C_STANDARD_REQUIRED On)
+set(CMAKE_C_EXTENSIONS Off)
+
+add_executable(checkerboard
+  checkerboard.c)
+
+target_link_libraries(checkerboard PRIVATE
+  isogfx-app)
+
+target_compile_options(checkerboard PRIVATE -Wall -Wextra -Wpedantic)
diff --git a/gfx-iso/demos/checkerboard/checkerboard.c b/gfx-iso/demos/checkerboard/checkerboard.c
new file mode 100644
index 0000000..9730aea
--- /dev/null
+++ b/gfx-iso/demos/checkerboard/checkerboard.c
@@ -0,0 +1,114 @@
+#include <isogfx/app.h>
+#include <isogfx/isogfx.h>
+
+#include <assert.h>
+#include <stdbool.h>
+#include <stdio.h>
+
+static const int TILE_WIDTH   = 64;
+static const int TILE_HEIGHT  = TILE_WIDTH / 2;
+static const int WORLD_WIDTH  = 20;
+static const int WORLD_HEIGHT = 20;
+
+static const TileDesc tile_set[] = {
+    {.type   = TileFromColour,
+     .width  = TILE_WIDTH,
+     .height = TILE_HEIGHT,
+     .colour = (Pixel){.r = 0x38, .g = 0x3b, .b = 0x46, .a = 0xff}},
+    {.type   = TileFromColour,
+     .width  = TILE_WIDTH,
+     .height = TILE_HEIGHT,
+     .colour = (Pixel){.r = 0xA5, .g = 0xb3, .b = 0xc0, .a = 0xff}},
+    {.type   = TileFromColour,
+     .width  = TILE_WIDTH,
+     .height = TILE_HEIGHT,
+     .colour = (Pixel){.r = 0xdc, .g = 0x76, .b = 0x84, .a = 0xff}},
+};
+
+typedef enum Colour {
+  Black,
+  White,
+  Red,
+} Colour;
+
+typedef struct IsoGfxAppState {
+  Tile red;
+  int  xpick;
+  int  ypick;
+} IsoGfxAppState;
+
+static void make_checkerboard(IsoGfx* iso, Tile black, Tile white) {
+  assert(iso);
+  for (int y = 0; y < isogfx_world_height(iso); ++y) {
+    for (int x = 0; x < isogfx_world_width(iso); ++x) {
+      const int  odd_col = x & 1;
+      const int  odd_row = y & 1;
+      const Tile value   = (odd_row ^ odd_col) == 0 ? black : white;
+      isogfx_set_tile(iso, x, y, value);
+    }
+  }
+}
+
+static bool init(
+    IsoGfxAppState* state, IsoGfx* iso, int argc, const char** argv) {
+  assert(state);
+  assert(iso);
+
+  if (!isogfx_make_world(
+          iso, &(WorldDesc){
+                   .tile_width   = TILE_WIDTH,
+                   .tile_height  = TILE_HEIGHT,
+                   .world_width  = WORLD_WIDTH,
+                   .world_height = WORLD_HEIGHT})) {
+    return false;
+  }
+
+  const Tile black = isogfx_make_tile(iso, &tile_set[Black]);
+  const Tile white = isogfx_make_tile(iso, &tile_set[White]);
+  state->red       = isogfx_make_tile(iso, &tile_set[Red]);
+  make_checkerboard(iso, black, white);
+
+  return true;
+}
+
+static void shutdown(IsoGfxAppState* state, IsoGfx* iso) {
+  assert(state);
+  assert(iso);
+}
+
+static void update(IsoGfxAppState* state, IsoGfx* iso, double t, double dt) {
+  assert(state);
+  assert(iso);
+
+  double mouse_x, mouse_y;
+  gfx_app_get_mouse_position(&mouse_x, &mouse_y);
+
+  isogfx_pick_tile(iso, mouse_x, mouse_y, &state->xpick, &state->ypick);
+
+  printf("Picked tile: (%d, %d)\n", state->xpick, state->ypick);
+}
+
+static void render(IsoGfxAppState* state, IsoGfx* iso) {
+  assert(state);
+  assert(iso);
+
+  isogfx_render(iso);
+
+  if ((state->xpick != -1) && (state->ypick != -1)) {
+    isogfx_draw_tile(iso, state->xpick, state->ypick, state->red);
+  }
+}
+
+int main(int argc, const char** argv) {
+  IsoGfxAppState state = {0};
+  iso_run(
+      argc, argv,
+      &(IsoGfxApp){
+          .state    = &state,
+          .init     = init,
+          .shutdown = shutdown,
+          .update   = update,
+          .render   = render,
+      });
+  return 0;
+}
diff --git a/gfx-iso/demos/isomap/CMakeLists.txt b/gfx-iso/demos/isomap/CMakeLists.txt
new file mode 100644
index 0000000..13edcc7
--- /dev/null
+++ b/gfx-iso/demos/isomap/CMakeLists.txt
@@ -0,0 +1,15 @@
+cmake_minimum_required(VERSION 3.0)
+
+project(isomap)
+
+set(CMAKE_C_STANDARD 17)
+set(CMAKE_C_STANDARD_REQUIRED On)
+set(CMAKE_C_EXTENSIONS Off)
+
+add_executable(isomap
+  isomap.c)
+
+target_link_libraries(isomap PRIVATE
+  isogfx-app)
+
+target_compile_options(isomap PRIVATE -Wall -Wextra -Wpedantic)
diff --git a/gfx-iso/demos/isomap/isomap.c b/gfx-iso/demos/isomap/isomap.c
new file mode 100644
index 0000000..d204d28
--- /dev/null
+++ b/gfx-iso/demos/isomap/isomap.c
@@ -0,0 +1,72 @@
+#include <isogfx/app.h>
+#include <isogfx/isogfx.h>
+
+#include <assert.h>
+#include <stdbool.h>
+
+typedef struct IsoGfxAppState {
+  int         xpick;
+  int         ypick;
+  SpriteSheet stag_sheet;
+  Sprite      stag;
+} IsoGfxAppState;
+
+static bool init(
+    IsoGfxAppState* state, IsoGfx* iso, int argc, const char** argv) {
+  assert(state);
+  assert(iso);
+
+  if (!isogfx_load_world(iso, "/home/jeanne/assets/tilemaps/demo1.tm")) {
+    return false;
+  }
+
+  if (!isogfx_load_sprite_sheet(
+          iso, "/home/jeanne/assets/tilesets/scrabling/critters/stag/stag.ss",
+          &state->stag_sheet)) {
+    return false;
+  }
+
+  state->stag = isogfx_make_sprite(iso, state->stag_sheet);
+  isogfx_set_sprite_position(iso, state->stag, 5, 4);
+
+  return true;
+}
+
+static void shutdown(IsoGfxAppState* state, IsoGfx* iso) {
+  assert(state);
+  assert(iso);
+}
+
+static void update(IsoGfxAppState* state, IsoGfx* iso, double t, double dt) {
+  assert(state);
+  assert(iso);
+
+  double mouse_x, mouse_y;
+  gfx_app_get_mouse_position(&mouse_x, &mouse_y);
+
+  isogfx_pick_tile(iso, mouse_x, mouse_y, &state->xpick, &state->ypick);
+
+  // printf("Picked tile: (%d, %d)\n", state->xpick, state->ypick);
+}
+
+static void render(IsoGfxAppState* state, IsoGfx* iso) {
+  assert(state);
+  assert(iso);
+
+  isogfx_render(iso);
+}
+
+int main(int argc, const char** argv) {
+  IsoGfxAppState state = {0};
+  iso_run(
+      argc, argv,
+      &(IsoGfxApp){
+          .pixel_scale = 2,
+          .state       = &state,
+          .init        = init,
+          .shutdown    = shutdown,
+          .update      = update,
+          .render      = render,
+      });
+  return 0;
+}
-- 
cgit v1.2.3