summaryrefslogtreecommitdiff
path: root/gfx-iso/app/isogfx-demo.c
blob: d463d1c3c460b814c77f480b04276c74248692fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "isogfx-demo.h"

#include <gfx/gfx_app.h>
#include <isogfx/isogfx.h>

#include <assert.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct State {
  int xpick;
  int ypick;
} State;

static void shutdown(IsoGfx* iso, void* app_state) {
  assert(iso);
  if (app_state) {
    free(app_state);
  }
}

static void update(IsoGfx* iso, void* app_state, double t, double dt) {
  assert(iso);
  assert(app_state);
  State* state = (State*)(app_state);

  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(IsoGfx* iso, void* app_state) {
  assert(iso);
  assert(app_state);
  State* state = (State*)(app_state);

  isogfx_render(iso);
}

bool make_demo_app(IsoGfx* iso, IsoGfxApp* app) {
  assert(iso);
  assert(app);

  State* state = calloc(1, sizeof(State));
  if (!state) {
    return false;
  }

  if (!isogfx_load_world(iso, "/home/jeanne/assets/tilemaps/demo1.tm")) {
    goto cleanup;
  }

  app->pixel_scale = 2;
  app->state       = state;
  app->shutdown    = shutdown;
  app->update      = update;
  app->render      = render;

  return true;

cleanup:
  free(state);
  return false;
}