DDraceNetwork Docs
gameworld.h
Go to the documentation of this file.
1/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
2/* If you are missing that file, acquire a complete release at teeworlds.com. */
3#ifndef GAME_CLIENT_PREDICTION_GAMEWORLD_H
4#define GAME_CLIENT_PREDICTION_GAMEWORLD_H
5
6#include <game/gamecore.h>
7#include <game/teamscore.h>
8
9#include <list>
10#include <vector>
11
12class CCollision;
13class CCharacter;
14class CEntity;
15class CMapBugs;
16
18{
19public:
20 enum
21 {
33 };
34
37
38 CGameWorld();
40
41 CEntity *FindFirst(int Type);
42 CEntity *FindLast(int Type);
43 int FindEntities(vec2 Pos, float Radius, CEntity **ppEnts, int Max, int Type);
44 CCharacter *IntersectCharacter(vec2 Pos0, vec2 Pos1, float Radius, vec2 &NewPos, const CCharacter *pNotThis = nullptr, int CollideWith = -1, const CCharacter *pThisOnly = nullptr);
45 void InsertEntity(CEntity *pEntity, bool Last = false);
46 void RemoveEntity(CEntity *pEntity);
47 void RemoveCharacter(CCharacter *pChar);
48 void Tick();
49
50 // DDRace
51 void ReleaseHooked(int ClientId);
52 std::vector<CCharacter *> IntersectedCharacters(vec2 Pos0, vec2 Pos1, float Radius, const CEntity *pNotThis = nullptr);
53
56
57 // getter for server variables
58 int GameTick() { return m_GameTick; }
61 CTeamsCore *Teams() { return &m_Teams; }
62 std::vector<SSwitchers> &Switchers() { return m_Core.m_vSwitchers; }
64 CEntity *GetEntity(int Id, int EntityType);
65 CCharacter *GetCharacterById(int Id) { return (Id >= 0 && Id < MAX_CLIENTS) ? m_apCharacters[Id] : nullptr; }
66
67 // from gamecontext
68 void CreateExplosion(vec2 Pos, int Owner, int Weapon, bool NoDamage, int ActivatedTeam, CClientMask Mask);
69
70 // for client side prediction
71 struct
72 {
75 bool m_IsFNG;
86
90
92
93 bool IsLocalTeam(int OwnerId) const;
94 void OnModified() const;
95 void NetObjBegin(CTeamsCore Teams, int LocalClientId);
96 void NetCharAdd(int ObjId, CNetObj_Character *pChar, CNetObj_DDNetCharacter *pExtended, int GameTeam, bool IsLocal);
97 void NetObjAdd(int ObjId, int ObjType, const void *pObjData, const CNetObj_EntityEx *pDataEx);
98 void NetObjEnd();
99 void CopyWorld(CGameWorld *pFrom);
100 CEntity *FindMatch(int ObjId, int ObjType, const void *pObjData);
101 void Clear();
102
105 CTuningParams *GetTuning(int i) { return &TuningList()[i]; }
106
108 bool EmulateBug(int Bug) const;
109
110private:
111 void RemoveEntities();
112
115
117};
118
120{
121public:
122 std::list<int> m_Ids; // reverse of the order in the gameworld, since entities will be inserted in reverse
124 {
125 Reset();
126 }
127 void Reset()
128 {
129 m_Ids.clear();
130 for(int i = 0; i < MAX_CLIENTS; i++)
131 m_Ids.push_back(i);
132 }
133 void GiveStrong(int c)
134 {
135 if(0 <= c && c < MAX_CLIENTS)
136 {
137 m_Ids.remove(c);
138 m_Ids.push_front(c);
139 }
140 }
141 void GiveWeak(int c)
142 {
143 if(0 <= c && c < MAX_CLIENTS)
144 {
145 m_Ids.remove(c);
146 m_Ids.push_back(c);
147 }
148 }
149 bool HasStrongAgainst(int From, int To)
150 {
151 for(int i : m_Ids)
152 {
153 if(i == To)
154 return false;
155 else if(i == From)
156 return true;
157 }
158 return false;
159 }
160};
161
162#endif
Definition: gameworld.h:120
void GiveStrong(int c)
Definition: gameworld.h:133
void Reset()
Definition: gameworld.h:127
void GiveWeak(int c)
Definition: gameworld.h:141
bool HasStrongAgainst(int From, int To)
Definition: gameworld.h:149
std::list< int > m_Ids
Definition: gameworld.h:122
CCharOrder()
Definition: gameworld.h:123
Definition: character.h:24
Definition: collision.h:34
Definition: entity.h:13
Definition: gameworld.h:18
bool m_InfiniteAmmo
Definition: gameworld.h:76
void CopyWorld(CGameWorld *pFrom)
Definition: gameworld.cpp:584
void CreateExplosion(vec2 Pos, int Owner, int Weapon, bool NoDamage, int ActivatedTeam, CClientMask Mask)
Definition: gameworld.cpp:334
CGameWorld * m_pParent
Definition: gameworld.h:88
CTuningParams * TuningList()
Definition: gameworld.h:104
bool m_IsDDRace
Definition: gameworld.h:73
void OnModified() const
Definition: gameworld.cpp:701
bool m_BugDDRaceInput
Definition: gameworld.h:83
CCharacter * IntersectCharacter(vec2 Pos0, vec2 Pos1, float Radius, vec2 &NewPos, const CCharacter *pNotThis=nullptr, int CollideWith=-1, const CCharacter *pThisOnly=nullptr)
Definition: gameworld.cpp:249
bool m_IsSolo
Definition: gameworld.h:81
bool m_UseTuneZones
Definition: gameworld.h:82
CCharacter * m_apCharacters[MAX_CLIENTS]
Definition: gameworld.h:116
CGameWorld * m_pChild
Definition: gameworld.h:89
void Clear()
Definition: gameworld.cpp:707
CTuningParams * Tuning()
Definition: gameworld.cpp:321
@ ENTTYPE_LIGHT
Definition: gameworld.h:26
@ ENTTYPE_PLASMA
Definition: gameworld.h:28
@ ENTTYPE_GUN
Definition: gameworld.h:27
@ ENTTYPE_DOOR
Definition: gameworld.h:24
@ ENTTYPE_DRAGGER
Definition: gameworld.h:25
void InsertEntity(CEntity *pEntity, bool Last=false)
Definition: gameworld.cpp:83
CTuningParams * m_pTuningList
Definition: gameworld.h:103
bool m_IsFNG
Definition: gameworld.h:75
void RemoveCharacter(CCharacter *pChar)
Definition: gameworld.cpp:162
CEntity * m_pNextTraverseEntity
Definition: gameworld.h:113
bool m_PredictWeapons
Definition: gameworld.h:79
void Tick()
Definition: gameworld.cpp:187
bool m_IsVanilla
Definition: gameworld.h:74
void RemoveEntities()
Definition: gameworld.cpp:172
int GameTickSpeed()
Definition: gameworld.h:59
CGameWorld()
Definition: gameworld.cpp:24
CEntity * FindMatch(int ObjId, int ObjType, const void *pObjData)
Definition: gameworld.cpp:639
CEntity * FindFirst(int Type)
Definition: gameworld.cpp:48
CWorldCore m_Core
Definition: gameworld.h:35
~CGameWorld()
Definition: gameworld.cpp:36
int m_PredictFreeze
Definition: gameworld.h:78
int m_GameTick
Definition: gameworld.h:54
std::vector< SSwitchers > & Switchers()
Definition: gameworld.h:62
struct CGameWorld::@166 m_WorldConfig
CEntity * FindLast(int Type)
Definition: gameworld.cpp:53
CEntity * m_apFirstEntityTypes[NUM_ENTTYPES]
Definition: gameworld.h:114
void NetObjAdd(int ObjId, int ObjType, const void *pObjData, const CNetObj_EntityEx *pDataEx)
Definition: gameworld.cpp:415
CCharacter * GetCharacterById(int Id)
Definition: gameworld.h:65
void NetCharAdd(int ObjId, CNetObj_Character *pChar, CNetObj_DDNetCharacter *pExtended, int GameTeam, bool IsLocal)
Definition: gameworld.cpp:394
CTuningParams * GetTuning(int i)
Definition: gameworld.h:105
CTeamsCore * Teams()
Definition: gameworld.h:61
CCollision * Collision()
Definition: gameworld.h:60
void NetObjBegin(CTeamsCore Teams, int LocalClientId)
Definition: gameworld.cpp:379
bool m_PredictTiles
Definition: gameworld.h:77
bool IsLocalTeam(int OwnerId) const
Definition: gameworld.cpp:374
CEntity * GetEntity(int Id, int EntityType)
Definition: gameworld.cpp:326
std::vector< CCharacter * > IntersectedCharacters(vec2 Pos0, vec2 Pos1, float Radius, const CEntity *pNotThis=nullptr)
Definition: gameworld.cpp:287
int GameTick()
Definition: gameworld.h:58
int FindEntities(vec2 Pos, float Radius, CEntity **ppEnts, int Max, int Type)
Definition: gameworld.cpp:62
bool m_IsValidCopy
Definition: gameworld.h:87
const CMapBugs * m_pMapBugs
Definition: gameworld.h:107
void NetObjEnd()
Definition: gameworld.cpp:549
@ ENTTYPE_CHARACTER
Definition: gameworld.h:31
@ NUM_ENTTYPES
Definition: gameworld.h:32
@ ENTTYPE_FLAG
Definition: gameworld.h:30
@ ENTTYPE_LASER
Definition: gameworld.h:23
@ ENTTYPE_PROJECTILE
Definition: gameworld.h:22
@ ENTTYPE_PICKUP
Definition: gameworld.h:29
CTeamsCore m_Teams
Definition: gameworld.h:36
int m_LocalClientId
Definition: gameworld.h:91
void ReleaseHooked(int ClientId)
Definition: gameworld.cpp:309
CCollision * m_pCollision
Definition: gameworld.h:55
void RemoveEntity(CEntity *pEntity)
Definition: gameworld.cpp:127
bool m_PredictDDRace
Definition: gameworld.h:80
bool m_NoWeakHookAndBounce
Definition: gameworld.h:84
bool EmulateBug(int Bug) const
Definition: gameworld.cpp:715
Definition: mapbugs.h:22
Definition: teamscore.h:25
Definition: gamecore.h:41
Definition: gamecore.h:144
std::vector< SSwitchers > m_vSwitchers
Definition: gamecore.h:172
std::bitset< MAX_CLIENTS > CClientMask
Definition: protocol.h:139
@ SERVER_TICK_SPEED
Definition: protocol.h:80
@ MAX_CLIENTS
Definition: protocol.h:88
Definition: protocol.h:455
Definition: protocol.h:513
Definition: protocol.h:661