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
127
128
129
130
131
132
133
134
135
|
#ifndef ENTITIES_H
#define ENTITIES_H
#include <common.h>
#include <Quest.h>
#include <inventory.h>
#define DEBUG
#define NPCp(n) ((NPC *)n)
#define Structurep(n) ((Structures *)n)
#define Mobp(n) ((Mob *)n)
#define PLAYER_INV_SIZE 30 // The size of the player's inventory
#define NPC_INV_SIZE 3 // Size of an NPC's inventory
enum _TYPE { //these are the main types of entities
OBJECTT = -2,
STRUCTURET = -1,
PLAYERT,
NPCT,
MOBT
};
enum GENDER{
MALE,
FEMALE,
NONE
};
enum MOB_SUB {
MS_RABBIT = 1,
MS_BIRD
};
class Entity{
public:
Inventory *inv;
float width; //width and height of the player
float height;
float speed; //speed of the play
float health;
float maxHealth;
int subtype;
_TYPE type;
//example:
//type 1(NPC)
// |(subtype)
// |-> 0 Base NPC
// |-> 1 Merchant
vec2 loc; //location and velocity of the entity
vec2 vel;
bool near;
bool right,left, canMove; //movement variables
bool alive; //the flag for whether or not the entity is alive
unsigned char ground; //variable for testing what ground the entity is on to apply certain traits
char* name;
GENDER gender;
//GLuint texture[3]; //TODO: ADD TEXTURES
Texturec* tex;
void spawn(float, float);
void draw(void);
virtual void wander(int){}
void getName();
virtual void interact(){}
int ticksToUse; //The variable for deciding how long an entity should do a certain task
private:
};
class Player : public Entity {
public:
QuestHandler qh;
Player();
void interact();
bool light = false;
};
class NPC : public Entity{
public:
std::vector<int (*)(NPC *)>aiFunc;
NPC();
void addAIFunc(int (*func)(NPC *),bool preload);
void interact();
void wander(int);
};
class Structures : public Entity{
public:
void *inWorld;
void *inside;
Structures();
unsigned int spawn(_TYPE, float, float);
};
class Mob : public Entity{
public:
float init_y;
Mob(int);
void wander(int);
};
class Object : public Entity{
public:
Object(int);
void interact();
private:
int ID;
};
#endif // ENTITIES_H
/**
ENTITY TYPES
-1 STRUCTURES
|->1 Village
|->2 Castle
|
0 PLAYERS
|->Player
|
1 NPCS
|->0 Base
|->1 Merchant
|
2 MOBS
|->1 Rabbit
|->2 Bird
**/
|