aboutsummaryrefslogtreecommitdiffstats
path: root/include/entities.h
blob: b590c8d1d7472bd2718322ca23681d2de2d601c7 (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
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
**/