DDraceNetwork Documentation
Loading...
Searching...
No Matches
gamecore.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_GAMECORE_H
4#define GAME_GAMECORE_H
5
6#include "prng.h"
7
8#include <base/vmath.h>
9
11
12#include <generated/protocol.h>
16#include <set>
17#include <vector>
26public:
27 void Set(int v) { m_Value = v; }
28 int Get() const { return m_Value; }
30 {
31 m_Value = (int)(v * 100.0f);
32 return *this;
33 }
35 {
36 m_Value = (int)(v * 100.0f);
37 return *this;
38 }
39 operator float() const { return m_Value / 100.0f; }
40};
44 static const char *ms_apNames[];
46public:
48 {
49#define MACRO_TUNING_PARAM(Name, ScriptName, Value, Description) m_##Name.Set((int)((Value) * 100.0f));
50#include "tuning.h"
51#undef MACRO_TUNING_PARAM
52 }
53
54#define MACRO_TUNING_PARAM(Name, ScriptName, Value, Description) CTuneParam m_##Name;
55#include "tuning.h"
56#undef MACRO_TUNING_PARAM
58 static int Num()
59 {
60 return sizeof(CTuningParams) / sizeof(int);
61 }
62 bool Set(int Index, float Value);
63 bool Set(const char *pName, float Value);
64 bool Get(int Index, float *pValue) const;
65 bool Get(const char *pName, float *pValue) const;
66 static const char *Name(int Index) { return ms_apNames[Index]; }
67 float GetWeaponFireDelay(int Weapon) const;
68
69 static const CTuningParams DEFAULT;
70};
71
72// Do not use these function unless for legacy code!
73void StrToInts(int *pInts, size_t NumInts, const char *pStr);
74bool IntsToStr(const int *pInts, size_t NumInts, char *pStr, size_t StrSize);
75
76inline vec2 CalcPos(vec2 Pos, vec2 Velocity, float Curvature, float Speed, float Time)
77{
78 vec2 n;
79 Time *= Speed;
80 n.x = Pos.x + Velocity.x * Time;
81 n.y = Pos.y + Velocity.y * Time + Curvature / 10000 * (Time * Time);
82 return n;
83}
84
85template<typename T>
86inline T SaturatedAdd(T Min, T Max, T Current, T Modifier)
87{
88 if(Modifier < 0)
89 {
90 if(Current < Min)
91 return Current;
92 Current += Modifier;
93 if(Current < Min)
94 Current = Min;
95 return Current;
96 }
97 else
98 {
99 if(Current > Max)
100 return Current;
101 Current += Modifier;
102 if(Current > Max)
103 Current = Max;
104 return Current;
105 }
106}
107
108float VelocityRamp(float Value, float Start, float Range, float Curvature);
109
110// hooking stuff
111enum
112{
119
127};
128
129// show others values - do not change them
130enum
131{
132 SHOW_OTHERS_NOT_SET = -1, // show others value before it is set
133 SHOW_OTHERS_OFF = 0, // show no other players in solo or other teams
134 SHOW_OTHERS_ON = 1, // show all other players in solo and other teams
135 SHOW_OTHERS_ONLY_TEAM = 2 // show players that are in solo and are in the same team
136};
137
146
148{
149public:
151 {
152 for(auto &pCharacter : m_apCharacters)
153 {
154 pCharacter = nullptr;
155 }
156 m_pPrng = nullptr;
157 }
158
159 int RandomOr0(int BelowThis) // NOLINT(readability-make-member-function-const)
160 {
161 if(BelowThis <= 1 || !m_pPrng)
162 {
163 return 0;
164 }
165 // This makes the random number slightly biased if `BelowThis`
166 // is not a power of two, but we have decided that this is not
167 // significant for DDNet and favored the simple implementation.
168 return m_pPrng->RandomBits() % BelowThis;
169 }
170
173
174 void InitSwitchers(int HighestSwitchNumber);
175 std::vector<SSwitchers> m_vSwitchers;
176};
177
179{
182
183public:
184 static constexpr float PhysicalSize() { return 28.0f; }
185 static constexpr vec2 PhysicalSizeVec2() { return vec2(28.0f, 28.0f); }
188
194 std::set<int> m_AttachedPlayers;
195 int HookedPlayer() const { return m_HookedPlayer; }
197
207
208 // ninja
209 struct
210 {
216
218
220 // m_JumpedTotal counts the jumps performed in the air
223
227
229
230 void Init(CWorldCore *pWorld, CCollision *pCollision, CTeamsCore *pTeams = nullptr);
231 void SetCoreWorld(CWorldCore *pWorld, CCollision *pCollision, CTeamsCore *pTeams);
232 void Reset();
233 void TickDeferred();
234 void Tick(bool UseInput, bool DoDeferredTick = true);
235 void Move();
236
237 void Read(const CNetObj_CharacterCore *pObjCore);
238 void Write(CNetObj_CharacterCore *pObjCore) const;
239 void Quantize();
240
241 // DDRace
242 int m_Id;
245
248
249 // DDNet Character
250 void SetTeamsCore(CTeamsCore *pTeams);
251 void ReadDDNet(const CNetObj_DDNetCharacter *pObjDDNet);
252 bool m_Solo;
273
274private:
278 static bool IsSwitchActiveCb(int Number, void *pUser);
279};
280
281// input count
283{
286};
287
288inline CInputCount CountInput(int Prev, int Cur)
289{
290 CInputCount c = {0, 0};
291 Prev &= INPUT_STATE_MASK;
292 Cur &= INPUT_STATE_MASK;
293 int i = Prev;
294
295 while(i != Cur)
296 {
297 i = (i + 1) & INPUT_STATE_MASK;
298 if(i & 1)
299 c.m_Presses++;
300 else
301 c.m_Releases++;
302 }
303
304 return c;
305}
306
307#endif
Definition gamecore.h:200
int m_AmmoRegenStart
Definition gamecore.h:202
int m_Ammocost
Definition gamecore.h:204
int m_Ammo
Definition gamecore.h:203
bool m_Got
Definition gamecore.h:205
Definition gamecore.h:179
int m_ActivationTick
Definition gamecore.h:212
int m_FreezeEnd
Definition gamecore.h:268
int m_Colliding
Definition gamecore.h:246
vec2 m_Vel
Definition gamecore.h:187
static bool IsSwitchActiveCb(int Number, void *pUser)
Definition gamecore.cpp:731
bool m_EndlessHook
Definition gamecore.h:255
std::set< int > m_AttachedPlayers
Definition gamecore.h:194
void TickDeferred()
Definition gamecore.cpp:458
bool m_Jetpack
Definition gamecore.h:253
bool m_LeftWall
Definition gamecore.h:247
vec2 m_HookPos
Definition gamecore.h:189
void Move()
Definition gamecore.cpp:529
bool m_Reset
Definition gamecore.h:243
CWorldCore * m_pWorld
Definition gamecore.h:180
int m_FreezeStart
Definition gamecore.h:267
int m_Direction
Definition gamecore.h:224
bool m_DeepFrozen
Definition gamecore.h:270
bool m_LiveFrozen
Definition gamecore.h:271
int m_Id
Definition gamecore.h:242
vec2 m_HookDir
Definition gamecore.h:190
static constexpr vec2 PhysicalSizeVec2()
Definition gamecore.h:185
bool m_HammerHitDisabled
Definition gamecore.h:257
int m_HookTick
Definition gamecore.h:192
void SetTeamsCore(CTeamsCore *pTeams)
Definition gamecore.cpp:726
bool m_Super
Definition gamecore.h:262
CCollision * Collision()
Definition gamecore.h:244
bool m_HasTelegunGun
Definition gamecore.h:264
bool m_IsInFreeze
Definition gamecore.h:269
int m_OldVelAmount
Definition gamecore.h:214
bool m_LaserHitDisabled
Definition gamecore.h:259
void Quantize()
Definition gamecore.cpp:693
void SetHookedPlayer(int HookedPlayer)
Definition gamecore.cpp:700
class CCharacterCore::CWeaponStat m_aWeapons[NUM_WEAPONS]
bool m_HasTelegunLaser
Definition gamecore.h:266
int m_JumpedTotal
Definition gamecore.h:221
bool m_GrenadeHitDisabled
Definition gamecore.h:258
void Tick(bool UseInput, bool DoDeferredTick=true)
Definition gamecore.cpp:189
bool m_CollisionDisabled
Definition gamecore.h:254
bool m_HasTelegunGrenade
Definition gamecore.h:265
bool m_ShotgunHitDisabled
Definition gamecore.h:260
vec2 m_HookTeleBase
Definition gamecore.h:191
void SetCoreWorld(CWorldCore *pWorld, CCollision *pCollision, CTeamsCore *pTeams)
Definition gamecore.cpp:138
void ReadDDNet(const CNetObj_DDNetCharacter *pObjDDNet)
Definition gamecore.cpp:637
int m_CurrentMoveTime
Definition gamecore.h:213
int m_Angle
Definition gamecore.h:225
bool m_Invincible
Definition gamecore.h:263
int m_TriggeredEvents
Definition gamecore.h:228
int HookedPlayer() const
Definition gamecore.h:195
static constexpr float PhysicalSize()
Definition gamecore.h:184
vec2 m_Pos
Definition gamecore.h:186
void Reset()
Definition gamecore.cpp:145
int m_ActiveWeapon
Definition gamecore.h:198
bool m_HookHitDisabled
Definition gamecore.h:261
bool m_NewHook
Definition gamecore.h:217
CTuningParams m_Tuning
Definition gamecore.h:272
int m_MoveRestrictions
Definition gamecore.h:276
int m_HookState
Definition gamecore.h:193
void Read(const CNetObj_CharacterCore *pObjCore)
Definition gamecore.cpp:619
CNetObj_PlayerInput m_Input
Definition gamecore.h:226
bool m_Solo
Definition gamecore.h:252
void Init(CWorldCore *pWorld, CCollision *pCollision, CTeamsCore *pTeams=nullptr)
Definition gamecore.cpp:129
CCollision * m_pCollision
Definition gamecore.h:181
CTeamsCore * m_pTeams
Definition gamecore.h:275
vec2 m_ActivationDir
Definition gamecore.h:211
int m_Jumps
Definition gamecore.h:222
struct CCharacterCore::@317352214054337255361032065311054004157320177367 m_Ninja
int m_Jumped
Definition gamecore.h:219
int m_HookedPlayer
Definition gamecore.h:277
bool m_EndlessJump
Definition gamecore.h:256
Definition collision.h:35
Definition prng.h:7
Definition teamscore.h:25
Definition gamecore.h:23
int Get() const
Definition gamecore.h:28
void Set(int v)
Definition gamecore.h:27
CTuneParam & operator=(int v)
Definition gamecore.h:29
int m_Value
Definition gamecore.h:24
Definition gamecore.h:43
bool Set(int Index, float Value)
Definition gamecore.cpp:22
static const char * Name(int Index)
Definition gamecore.h:66
static const char * ms_apNames[]
Definition gamecore.h:15
float GetWeaponFireDelay(int Weapon) const
Definition gamecore.cpp:55
static int Num()
Definition gamecore.h:58
CTuningParams()
Definition gamecore.h:47
static const CTuningParams DEFAULT
Definition gamecore.h:69
bool Get(int Index, float *pValue) const
Definition gamecore.cpp:30
Definition gamecore.h:148
class CCharacterCore * m_apCharacters[MAX_CLIENTS]
Definition gamecore.h:171
void InitSwitchers(int HighestSwitchNumber)
Definition gamecore.cpp:740
CPrng * m_pPrng
Definition gamecore.h:172
std::vector< SSwitchers > m_vSwitchers
Definition gamecore.h:175
CWorldCore()
Definition gamecore.h:150
int RandomOr0(int BelowThis)
Definition gamecore.h:159
T x
Definition vmath.h:19
T y
Definition vmath.h:23
Write
Definition connection_pool.h:36
@ MAX_CLIENTS
Definition protocol.h:89
vec2 CalcPos(vec2 Pos, vec2 Velocity, float Curvature, float Speed, float Time)
Definition gamecore.h:76
float VelocityRamp(float Value, float Start, float Range, float Curvature)
Definition gamecore.cpp:122
@ SHOW_OTHERS_NOT_SET
Definition gamecore.h:132
@ SHOW_OTHERS_ONLY_TEAM
Definition gamecore.h:135
@ SHOW_OTHERS_OFF
Definition gamecore.h:133
@ SHOW_OTHERS_ON
Definition gamecore.h:134
bool IntsToStr(const int *pInts, size_t NumInts, char *pStr, size_t StrSize)
Definition gamecore.cpp:91
T SaturatedAdd(T Min, T Max, T Current, T Modifier)
Definition gamecore.h:86
@ HOOK_IDLE
Definition gamecore.h:114
@ HOOK_RETRACT_END
Definition gamecore.h:116
@ COREEVENT_HOOK_HIT_NOHOOK
Definition gamecore.h:125
@ HOOK_FLYING
Definition gamecore.h:117
@ HOOK_RETRACT_START
Definition gamecore.h:115
@ COREEVENT_GROUND_JUMP
Definition gamecore.h:120
@ COREEVENT_AIR_JUMP
Definition gamecore.h:121
@ COREEVENT_HOOK_ATTACH_GROUND
Definition gamecore.h:124
@ COREEVENT_HOOK_LAUNCH
Definition gamecore.h:122
@ HOOK_RETRACTED
Definition gamecore.h:113
@ HOOK_GRABBED
Definition gamecore.h:118
@ COREEVENT_HOOK_RETRACT
Definition gamecore.h:126
@ COREEVENT_HOOK_ATTACH_PLAYER
Definition gamecore.h:123
CInputCount CountInput(int Prev, int Cur)
Definition gamecore.h:288
void StrToInts(int *pInts, size_t NumInts, const char *pStr)
Definition gamecore.cpp:71
@ NUM_WEAPONS
Definition protocol.h:1586
@ INPUT_STATE_MASK
Definition protocol.h:10
Definition gamecore.h:283
int m_Presses
Definition gamecore.h:284
int m_Releases
Definition gamecore.h:285
Definition protocol.h:498
Definition protocol.h:566
Definition protocol.h:423
Definition gamecore.h:139
int m_aType[NUM_DDRACE_TEAMS]
Definition gamecore.h:143
bool m_aStatus[NUM_DDRACE_TEAMS]
Definition gamecore.h:140
int m_aLastUpdateTick[NUM_DDRACE_TEAMS]
Definition gamecore.h:144
bool m_Initial
Definition gamecore.h:141
int m_aEndTick[NUM_DDRACE_TEAMS]
Definition gamecore.h:142
@ NUM_DDRACE_TEAMS
Definition teamscore.h:11
vector2_base< float > vec2
Definition vmath.h:161