summaryrefslogtreecommitdiff
path: root/gfx-iso/app/isogfx-demo.c
blob: 98892752707793fe50b4c33bc8773cfb29ea0076 (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
69
70
71
72
73
74
75
76
77
78
79
#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;
  SpriteSheet stag_sheet;
  Sprite      stag;
} 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;
  }

  if (!isogfx_load_sprite_sheet(
          iso, "/home/jeanne/assets/tilesets/scrabling/critters/stag/stag.ss",
          &state->stag_sheet)) {
    goto cleanup;
  }

  state->stag = isogfx_make_sprite(iso, state->stag_sheet);
  isogfx_set_sprite_position(iso, state->stag, 5, 4);

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

  return true;

cleanup:
  free(state);
  return false;
}