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
|
class CHARACTER;
/*
Class: Game World
Tracks all entities in the game. Propagates tick and
snap calls to all entities.
*/
class GAMEWORLD
{
void reset();
void remove_entities();
enum
{
NUM_ENT_TYPES=10, // TODO: are more exact value perhaps? :)
};
// TODO: two lists seams kinda not good, shouldn't be needed
ENTITY *first_entity;
ENTITY *first_entity_types[NUM_ENT_TYPES];
public:
bool reset_requested;
bool paused;
WORLD_CORE core;
GAMEWORLD();
~GAMEWORLD();
ENTITY *find_first() { return first_entity; }
ENTITY *find_first(int type);
/*
Function: find_entities
Finds entities close to a position and returns them in a list.
Arguments:
pos - Position.
radius - How close the entities have to be.
ents - Pointer to a list that should be filled with the pointers
to the entities.
max - Number of entities that fits into the ents array.
type - Type of the entities to find. -1 for all types.
Returns:
Number of entities found and added to the ents array.
*/
int find_entities(vec2 pos, float radius, ENTITY **ents, int max, int type = -1);
/*
Function: interserct_character
Finds the closest character that intersects the line.
Arguments:
pos0 - Start position
pos2 - End position
radius - How for from the line the character is allowed to be.
new_pos - Intersection position
notthis - Entity to ignore intersecting with
Returns:
Returns a pointer to the closest hit or NULL of there is no intersection.
*/
class CHARACTER *intersect_character(vec2 pos0, vec2 pos1, float radius, vec2 &new_pos, class ENTITY *notthis = 0);
/*
Function: closest_character
Finds the closest character to a specific point.
Arguments:
pos - The center position.
radius - How far off the character is allowed to be
notthis - Entity to ignore
Returns:
Returns a pointer to the closest character or NULL if no character is close enough.
*/
class CHARACTER *closest_character(vec2 pos, float radius, ENTITY *notthis);
/*
Function: insert_entity
Adds an entity to the world.
Arguments:
entity - Entity to add
*/
void insert_entity(ENTITY *entity);
/*
Function: remove_entity
Removes an entity from the world.
Arguments:
entity - Entity to remove
*/
void remove_entity(ENTITY *entity);
/*
Function: destroy_entity
Destroys an entity in the world.
Arguments:
entity - Entity to destroy
*/
void destroy_entity(ENTITY *entity);
/*
Function: snap
Calls snap on all the entities in the world to create
the snapshot.
Arguments:
snapping_client - ID of the client which snapshot
is being created.
*/
void snap(int snapping_client);
/*
Function: tick
Calls tick on all the entities in the world to progress
the world to the next tick.
*/
void tick();
};
|