blob: e54afd38cec02e21e725c6c0ceeb0d5efe1e77e8 (
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
|
#pragma once
#include <raylib.h>
#include <stdbool.h>
#include <stdint.h>
#include "constants.h"
#define ENTITY_ALLOCATED 1
#define ENTITY_VISIBLE (1 << 1)
#define ENTITY_PHYSICS_ACTIVE (1 << 2)
typedef enum EntityType {
Player_Entity,
Wall_Entity,
Background_Entity
} EntityType;
typedef enum DrawLayer {
Background_Layer = 0,
Foreground_Layer = 1
} DrawLayer;
typedef struct Sprite {
Texture2D texture;
DrawLayer layer;
Rectangle destRect; //Destination rectangle relative to player position
} Sprite;
typedef struct Entity {
int id;
EntityType type;
uint16_t flags;
Vector2 position;
Vector2 velocity;
//Physics information
Rectangle physicsCollider;
int numHitBoxes;
Rectangle hitBoxes[MAX_AREA_COUNT];
int numHurtBoxes;
Rectangle hurtBoxes[MAX_AREA_COUNT];
Sprite sprites[MAX_SPRITE_COUNT];
int numSprites;
#ifdef BEATEMUP_DEBUG
//Debug information
Color physicsColliderColor;
#endif
} Entity;
typedef struct Game {
bool paused;
Entity entities[MAX_ENTITY_COUNT];
Camera2D camera;
#ifdef BEATEMUP_DEBUG
//Debug information
bool enableDebugOverlay;
#endif
} Game;
void AddEntity(Entity* e);
void AddWall(float xpos, float ypos, float width, float height);
void InitGame();
void UpdateGame(float deltaTime);
void DrawGame();
static inline bool EntityAllocated(const Entity* e) {
return (e->flags & ENTITY_ALLOCATED);
}
static inline bool SameEntity(const Entity* a, const Entity* b) {
return a->id == b->id;
}
static inline void AddSpriteToEntity(Entity* e, Sprite s) {
if (e->numSprites < MAX_SPRITE_COUNT) {
e->sprites[e->numSprites++] = s;
}
}
#ifdef BEATEMUP_DEBUG
void DebugHighlights(const Entity* e);
#endif
|