aboutsummaryrefslogtreecommitdiff
path: root/include/entities.h
blob: 7bd38f3f224f8e3e1e27e64bd099ca14ea41ca09 (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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#pragma once

#include "raylib.h"
#include "raytmx.h"

#include "map.h"
#include "player.h"

#define MAX_ENTITIES 120

typedef enum {
  PICKUP_COIN,
  PICKUP_POTION,
  PICKUP_BOMB,
  PICKUP_FULL_HEART,
  PICKUP_HALF_HEART,
  PICKUP_GOLD_BAR,
  PICKUP_GOLD_NUGGET
} PickupType;

static const int PICKUP_TILE_ID[] = {0, 4, 8, 12, 16, 20, 24};

typedef enum { STATE_IDLE, STATE_PATROL, STATE_CHASE, STATE_ATTACK } EnemyState;

typedef struct {
  PickupType type;
  Vector2 position;
  Rectangle bounds;
  int value;
  bool active;
  uint32_t gid;
} Pickup;

typedef struct {
  Vector2 position;
  Rectangle bounds;
  int uniqueId;
  bool active;
  uint32_t gid;
} Key;

typedef struct {
  Vector2 position;
  Rectangle bounds;
  int health;
  EnemyState state;

  TmxTileset tileset;
  int currentFrame;
  float frameTime;
  bool facingRight;

  bool active;
} Bat;

typedef struct {
  Vector2 position;
  Rectangle bounds;
  int health;
  EnemyState state;

  TmxTileset tileset;
  int currentFrame;
  float frameTime;
  bool facingRight;

  bool active;
} Slime;

typedef struct {
  Vector2 position;
  Rectangle bounds;
  int health;
  EnemyState state;

  TmxTileset tileset;
  int currentFrame;
  float frameTime;
  bool facingRight;

  bool active;
} FlyingSkull;

typedef struct {
  Vector2 position;
  Rectangle bounds;
  bool active;
} Vase;

typedef struct {
  Vector2 position;
  Rectangle bounds;
  bool active;
} Crate;

struct Entities {
  Pickup pickups[MAX_ENTITIES];
  int pickupsCount;

  Key keys[MAX_ENTITIES];
  int keysCount;

  Bat bats[MAX_ENTITIES];
  int batsCount;

  Slime slimes[MAX_ENTITIES];
  int slimesCount;

  FlyingSkull flyingSkulls[MAX_ENTITIES];
  int flyingSkullsCount;

  Vase vases[MAX_ENTITIES];
  int vasesCount;

  Crate crates[MAX_ENTITIES];
  int cratesCount;
};

void UpdateBat(Bat *bat, Player *player, Map *map);
void DrawBat(Bat *bat);

void UpdateSlime(Slime *slime, Player *player, Map *map);
void DrawSlime(Slime *slime);

void UpdateFlyingSkull(FlyingSkull *skull, Player *player, Map *map);
void DrawFlyingSkull(FlyingSkull *skull);