Polyphase Game Engine
Loading...
Searching...
No Matches
EngineTypes.h
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4#include <string.h>
5#include <unordered_set>
6#include <unordered_map>
7#include <algorithm>
8
9#include "Constants.h"
10#include "Maths.h"
11#include "SmartPointer.h"
12
13#include "System/SystemTypes.h"
15#include "Input/InputTypes.h"
16
17#include <BulletCollision/CollisionDispatch/btCollisionWorld.h>
18
19#if LUA_ENABLED
20#include <Lua/lua.hpp>
21#endif
22
23class Level;
24class Primitive3D;
25class Light3D;
26class Node3D;
27class Node;
28
29// Platform enum moved here for use in EngineConfig
30enum class Platform : int
31{
32 Windows,
33 Linux,
34 Android,
36 Wii,
37 N3DS,
38
39 Count
40};
41
42// Bitmask form of Platform for per-asset platform-mask flags.
43// Values must mirror Platform's index order: PlatformBit::X == (1u << int(Platform::X)).
55
56inline uint32_t GetPlatformBit(Platform p)
57{
58 return (p >= Platform::Windows && p < Platform::Count) ? (1u << int(p)) : 0u;
59}
60
61class StaticMesh;
62class Material;
63
64typedef uint32_t TypeId;
65typedef uint32_t NetId;
66typedef uint32_t NodeId;
67typedef uint64_t RuntimeId;
68
69// Bullet Types
70class btDynamicsWorld;
71struct btDbvtBroadphase;
72class btDefaultCollisionConfiguration;
73class btCollisionDispatcher;
74class btSequentialImpulseConstraintSolver;
75class btDiscreteDynamicsWorld;
76class btRigidBody;
77class btCollisionShape;
78class btBvhTriangleMeshShape;
79class btTriangleIndexVertexArray;
80struct btTriangleInfoMap;
81
82enum class CollisionShape : uint32_t
83{
84 Empty,
85 Box,
86 Sphere,
87 Capsule,
92
93 Num
94};
95
96enum class ShadingModel : uint32_t
97{
98 Unlit,
99 Lit,
100 Toon,
101
102 Count
103};
104
105enum class BlendMode : uint32_t
106{
107 Opaque,
108 Masked,
110 Additive,
111
112 Count
113};
114
115enum class VertexColorMode : uint32_t
116{
117 None,
118 Modulate,
120
121 Count
122};
123
124enum class TevMode : uint32_t
125{
126 Replace,
127 Modulate,
128 Decal,
129 Add,
130 SignedAdd,
131 Subtract,
133 Pass,
134
135 Count
136};
137
138enum class CullMode : uint8_t
139{
140 None,
141 Back,
142 Front,
143
144 Count
145};
146
148{
149 Node,
150 Asset,
151 Global,
152 Count
153};
154
155enum class LightType : uint8_t
156{
157 Point,
158 Spot,
160
161 Count
162};
163
164enum class LightingDomain : uint8_t
165{
166 Static,
167 Dynamic,
168 All,
169
170 Count
171};
172
173enum class PostProcessPassId : uint8_t
174{
175 Blur,
176 Fxaa,
177 Tonemap,
178
179 Count
180};
181
182enum class SkyType : uint8_t
183{
184 None,
188
189 Count
190};
191
192struct Bounds
193{
194 glm::vec3 mCenter = { };
195 float mRadius = 1.0f;
196};
197
210
222
224{
225 StaticMesh* mMesh = nullptr;
226 Material* mMaterial = nullptr;
227 Node3D* mNode = nullptr;
228 glm::mat4 mTransform = glm::mat4(1);
229 glm::vec4 mColor = { 0.25f, 0.25f, 1.0f, 1.0f };
230 float mLife = 0.0f;
231};
232
234{
237
239 mPrimitiveA(nullptr),
240 mPrimitiveB(nullptr)
241 {
242
243 }
244
246 {
247 mPrimitiveA = compA;
248 mPrimitiveB = compB;
249 }
250
251 size_t operator()(const PrimitivePair& pairToHash) const
252 {
253 size_t hash = (size_t)pairToHash.mPrimitiveA + (size_t)pairToHash.mPrimitiveB;
254 return hash;
255 }
256
257 bool operator==(const PrimitivePair& other) const
258 {
259 return (mPrimitiveA == other.mPrimitiveA) &&
260 (mPrimitiveB == other.mPrimitiveB);
261 }
262
264 {
265 mPrimitiveA = other.mPrimitiveA;
266 mPrimitiveB = other.mPrimitiveB;
267 }
268
270 {
271 mPrimitiveA = other.mPrimitiveA;
272 mPrimitiveB = other.mPrimitiveB;
273 return *this;
274 }
275
277 {
278 mPrimitiveA = other.mPrimitiveA;
279 mPrimitiveB = other.mPrimitiveB;
280 return *this;
281 }
282};
283
285{
287 {
288
289 }
290
291 std::string mProjectName;
292
293 std::string mDefaultScene = "";
294 std::string mDefaultEditorScene = "";
295 uint32_t mGameCode = 0;
296 uint32_t mVersion = 0;
299
300 bool mFullscreen = false;
301 bool mValidateGraphics = false;
302 bool mLinearColorSpace = false;
303 bool mPackageForSteam = false;
304 bool mUseAssetRegistry = false;
305 bool mLogging = true;
306 bool mLogToFile = false;
307 bool mScriptHotReload = false;
308
309 int32_t mLqMaxTextureSize = 0;
310 bool mLqEnableMipMaps = true;
311
312 std::string mProjectPath;
313 std::string mCurrentFont;
314 std::string mWorkingDirectory;
315 std::string mEditorFont = "Default";
316
317 struct EmbeddedFile* mEmbeddedAssets = nullptr;
321 const char* mEmbeddedConfig = nullptr;
323
325 int32_t mColorScale = 2;
326
327 std::string mIconPath;
328
329 // Headless mode configuration
330 bool mHeadless = false;
331 Platform mBuildPlatform = Platform::Count; // Count = no build requested
332 bool mBuildEmbedded = false;
333};
334
335enum class ConsoleMode
336{
337 Off,
338 Overlay,
339 Full
340};
341
343{
348 uint32_t mGameCode = 0;
349 uint32_t mVersion = 0;
350 uint32_t mFrameNumber = 0;
351 std::string mProjectPath;
352 std::string mIOAssetPath;
353 std::string mProjectDirectory;
354 std::string mProjectName;
355 std::string mAssetDirectory;
356 std::string mSolutionPath;
357 int32_t mArgC = 0;
358 char** mArgV = nullptr;
359 float mGameDeltaTime = 0.0f;
360 float mRealDeltaTime = 0.0f;
361 float mGameElapsedTime = 0.0f;
362 float mRealElapsedTime = 0.0f;
363 float mTimeDilation = 1.0f;
364 float mAspectRatioScale = 1.0f;
365 bool mPaused = false;
366 bool mFrameStep = false;
367 bool mInitialized = false;
368 bool mSuspended = false;
369 FILE* mLogFile = nullptr;
370
371#if LUA_ENABLED
372 lua_State* mLua = nullptr;
373#endif
374
375 bool mConsoleMode = false;
376 bool mQuit = false;
377 bool mWindowMinimized = false;
378 bool mStandalone = false;
379
383};
384
386{
387 glm::vec3 mStart = {};
388 glm::vec3 mEnd = {};
390 glm::vec3 mHitNormal = {};
391 glm::vec3 mHitPosition = {};
392 float mHitFraction = 0.0f;
393};
394
396{
397 glm::vec3 mStart = {};
398 glm::vec3 mEnd = {};
399 uint32_t mNumHits = 0;
400 std::vector<Primitive3D*> mHitNodes;
401 std::vector<glm::vec3> mHitNormals;
402 std::vector<glm::vec3> mHitPositions;
403 std::vector<float> mHitFractions;
404};
405
407{
408 glm::vec3 mStart = {};
409 glm::vec3 mEnd = {};
411 glm::vec3 mHitNormal = {};
412 glm::vec3 mHitPosition = {};
413 float mHitFraction = 0.0f;
414};
415
416struct IgnoreRayResultCallback : btCollisionWorld::ClosestRayResultCallback
417{
418 IgnoreRayResultCallback(const btVector3& rayFromWorld, const btVector3& rayToWorld);
419 virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult & rayResult, bool normalInWorldSpace) override;
420
421 uint32_t mNumIgnoreObjects = 0;
422 btCollisionObject** mIgnoreObjects = nullptr;
424};
425
426struct IgnoreConvexResultCallback : btCollisionWorld::ClosestConvexResultCallback
427{
429 const btVector3& convexFromWorld,
430 const btVector3& convexToWorld);
431 virtual bool needsCollision(btBroadphaseProxy* proxy0) const;
432
433 uint32_t mNumIgnoreObjects = 0;
434 btCollisionObject** mIgnoreObjects = nullptr;
435};
436
437enum class FogDensityFunc : uint8_t
438{
439 Linear,
441
442 Count
443};
444
446{
447 bool mEnabled = false;
448 glm::vec4 mColor = { 0.0f, 0.0f, 0.0f, 1.0f };
450 float mNear = 0.0f;
451 float mFar = 100.0f;
452};
453
467
469{
470 Constant,
471 Linear,
472
473 Count
474};
475
476enum class NetStatus
477{
478 Local,
480 Client,
481 Server,
482
483 Count
484};
485
486typedef uint8_t NetHostId;
487
489{
490 uint32_t mIpAddress = 0;
491 uint16_t mPort = 0;
493 uint64_t mOnlineId = 0;
494};
495
497{
498 ReliablePacket(uint16_t seqNum, const char* data, uint32_t size);
499
500 float mTimeSinceSend = 0.0f;
501 uint32_t mNumSends = 0;
502
503 std::vector<char> mData;
504 uint16_t mSeq = 0;
505};
506
508{
509 static const uint32_t sSendBufferSize = 512;
510
512 float mPing = 0.0f;
513 float mTimeSinceLastMsg = 0.0f;
514 std::unordered_set<NetId> mRelevantNetIds;
515 std::vector<char> mSendBuffer;
516 std::vector<char> mReliableSendBuffer;
517 std::vector<ReliablePacket> mOutgoingPackets;
518 std::vector<ReliablePacket> mIncomingPackets;
524 bool mReady = true;
525};
526
529
531{
532 // mNode should only be used for comparisons!! If deleted, we want to fade it out, not crash.
533 Light3D* mComponent = nullptr;
535 glm::vec4 mColor = { 0.0f, 0.0f, 0.0f, 0.0f };
536 float mAlpha = 0.0f;
537
539};
#define DEFAULT_WINDOW_HEIGHT
Definition Constants.h:12
#define INVALID_HOST_ID
Definition Constants.h:44
#define DEFAULT_WINDOW_WIDTH
Definition Constants.h:11
NetHostProfile NetClient
Definition EngineTypes.h:527
FogDensityFunc
Definition EngineTypes.h:438
uint32_t NetId
Definition EngineTypes.h:65
CullMode
Definition EngineTypes.h:139
Platform
Definition EngineTypes.h:31
NetHostProfile NetServer
Definition EngineTypes.h:528
CollisionGroup
Definition EngineTypes.h:455
@ ColGroup0
Definition EngineTypes.h:456
@ ColGroup1
Definition EngineTypes.h:457
@ ColGroup2
Definition EngineTypes.h:458
@ ColGroup4
Definition EngineTypes.h:460
@ ColGroup5
Definition EngineTypes.h:461
@ ColGroupAll
Definition EngineTypes.h:465
@ ColGroup3
Definition EngineTypes.h:459
@ ColGroup7
Definition EngineTypes.h:463
@ ColGroup6
Definition EngineTypes.h:462
PropertyOwnerType
Definition EngineTypes.h:148
uint8_t NetHostId
Definition EngineTypes.h:486
ShadingModel
Definition EngineTypes.h:97
VertexColorMode
Definition EngineTypes.h:116
uint64_t RuntimeId
Definition EngineTypes.h:67
PostProcessPassId
Definition EngineTypes.h:174
AttenuationFunc
Definition EngineTypes.h:469
SkyType
Definition EngineTypes.h:183
@ RayTracedSky
ConsoleMode
Definition EngineTypes.h:336
uint32_t TypeId
Definition EngineTypes.h:64
LightType
Definition EngineTypes.h:156
uint32_t NodeId
Definition EngineTypes.h:66
PlatformBit
Definition EngineTypes.h:45
@ PlatformBit_Linux
Definition EngineTypes.h:47
@ PlatformBit_Windows
Definition EngineTypes.h:46
@ PlatformBit_N3DS
Definition EngineTypes.h:51
@ PlatformBit_All
Definition EngineTypes.h:53
@ PlatformBit_Wii
Definition EngineTypes.h:50
@ PlatformBit_GameCube
Definition EngineTypes.h:49
@ PlatformBit_Android
Definition EngineTypes.h:48
NetStatus
Definition EngineTypes.h:477
uint32_t GetPlatformBit(Platform p)
Definition EngineTypes.h:56
TevMode
Definition EngineTypes.h:125
LightingDomain
Definition EngineTypes.h:165
CollisionShape
Definition EngineTypes.h:83
BlendMode
Definition EngineTypes.h:106
Definition Light3d.h:6
Definition Material.h:48
Definition Node3d.h:14
Definition Node.h:67
Definition Primitive3d.h:46
Definition StaticMesh.h:18
Definition SmartPointer.h:312
Definition EngineTypes.h:193
glm::vec3 mCenter
Definition EngineTypes.h:194
float mRadius
Definition EngineTypes.h:195
Definition EngineTypes.h:224
glm::vec4 mColor
Definition EngineTypes.h:229
glm::mat4 mTransform
Definition EngineTypes.h:228
float mLife
Definition EngineTypes.h:230
StaticMesh * mMesh
Definition EngineTypes.h:225
Material * mMaterial
Definition EngineTypes.h:226
Node3D * mNode
Definition EngineTypes.h:227
Definition EngineTypes.h:199
TypeId mNodeType
Definition EngineTypes.h:207
float mDistance2
Definition EngineTypes.h:206
glm::vec3 mPosition
Definition EngineTypes.h:203
Bounds mBounds
Definition EngineTypes.h:204
int32_t mSortPriority
Definition EngineTypes.h:205
Node * mNode
Definition EngineTypes.h:200
BlendMode mBlendMode
Definition EngineTypes.h:202
bool mDepthless
Definition EngineTypes.h:208
Material * mMaterial
Definition EngineTypes.h:201
Definition EmbeddedFile.h:6
Definition EngineTypes.h:285
bool mLogging
Definition EngineTypes.h:305
uint32_t mEmbeddedConfigSize
Definition EngineTypes.h:322
bool mFullscreen
Definition EngineTypes.h:300
std::string mIconPath
Definition EngineTypes.h:327
bool mHeadless
Definition EngineTypes.h:330
bool mLogToFile
Definition EngineTypes.h:306
std::string mProjectPath
Definition EngineTypes.h:312
Platform mBuildPlatform
Definition EngineTypes.h:331
bool mPackageForSteam
Definition EngineTypes.h:303
bool mLinearColorSpace
Definition EngineTypes.h:302
int32_t mWindowWidth
Definition EngineTypes.h:297
std::string mWorkingDirectory
Definition EngineTypes.h:314
bool mScriptHotReload
Definition EngineTypes.h:307
std::string mDefaultEditorScene
Definition EngineTypes.h:294
std::string mEditorFont
Definition EngineTypes.h:315
struct EmbeddedFile * mEmbeddedScripts
Definition EngineTypes.h:319
int32_t mColorScale
Definition EngineTypes.h:325
uint32_t mGameCode
Definition EngineTypes.h:295
uint32_t mVersion
Definition EngineTypes.h:296
float mEditorInterfaceScale
Definition EngineTypes.h:324
bool mBuildEmbedded
Definition EngineTypes.h:332
EngineConfig()
Definition EngineTypes.h:286
uint32_t mEmbeddedAssetCount
Definition EngineTypes.h:318
struct EmbeddedFile * mEmbeddedAssets
Definition EngineTypes.h:317
int32_t mLqMaxTextureSize
Definition EngineTypes.h:309
uint32_t mEmbeddedScriptCount
Definition EngineTypes.h:320
std::string mProjectName
Definition EngineTypes.h:291
bool mUseAssetRegistry
Definition EngineTypes.h:304
const char * mEmbeddedConfig
Definition EngineTypes.h:321
std::string mCurrentFont
Definition EngineTypes.h:313
bool mLqEnableMipMaps
Definition EngineTypes.h:310
std::string mDefaultScene
Definition EngineTypes.h:293
bool mValidateGraphics
Definition EngineTypes.h:301
int32_t mWindowHeight
Definition EngineTypes.h:298
Definition EngineTypes.h:343
uint32_t mSecondWindowHeight
Definition EngineTypes.h:347
bool mWindowMinimized
Definition EngineTypes.h:377
bool mFrameStep
Definition EngineTypes.h:366
float mAspectRatioScale
Definition EngineTypes.h:364
SystemState mSystem
Definition EngineTypes.h:380
lua_State * mLua
Definition EngineTypes.h:372
float mRealDeltaTime
Definition EngineTypes.h:360
uint32_t mGameCode
Definition EngineTypes.h:348
bool mPaused
Definition EngineTypes.h:365
GraphicsState mGraphics
Definition EngineTypes.h:381
std::string mIOAssetPath
Definition EngineTypes.h:352
float mGameElapsedTime
Definition EngineTypes.h:361
std::string mSolutionPath
Definition EngineTypes.h:356
bool mInitialized
Definition EngineTypes.h:367
float mRealElapsedTime
Definition EngineTypes.h:362
uint32_t mVersion
Definition EngineTypes.h:349
float mGameDeltaTime
Definition EngineTypes.h:359
FILE * mLogFile
Definition EngineTypes.h:369
InputState mInput
Definition EngineTypes.h:382
std::string mAssetDirectory
Definition EngineTypes.h:355
uint32_t mFrameNumber
Definition EngineTypes.h:350
std::string mProjectDirectory
Definition EngineTypes.h:353
bool mConsoleMode
Definition EngineTypes.h:375
bool mStandalone
Definition EngineTypes.h:378
char ** mArgV
Definition EngineTypes.h:358
uint32_t mSecondWindowWidth
Definition EngineTypes.h:346
uint32_t mWindowWidth
Definition EngineTypes.h:344
std::string mProjectName
Definition EngineTypes.h:354
uint32_t mWindowHeight
Definition EngineTypes.h:345
float mTimeDilation
Definition EngineTypes.h:363
bool mQuit
Definition EngineTypes.h:376
std::string mProjectPath
Definition EngineTypes.h:351
bool mSuspended
Definition EngineTypes.h:368
int32_t mArgC
Definition EngineTypes.h:357
Definition EngineTypes.h:531
glm::vec4 mColor
Definition EngineTypes.h:535
FadingLight(Light3D *comp)
Definition EngineTypes.h:538
LightData mData
Definition EngineTypes.h:534
float mAlpha
Definition EngineTypes.h:536
Light3D * mComponent
Definition EngineTypes.h:533
Definition EngineTypes.h:446
float mFar
Definition EngineTypes.h:451
FogDensityFunc mDensityFunc
Definition EngineTypes.h:449
bool mEnabled
Definition EngineTypes.h:447
float mNear
Definition EngineTypes.h:450
glm::vec4 mColor
Definition EngineTypes.h:448
Definition GraphicsTypes.h:32
Definition EngineTypes.h:427
uint32_t mNumIgnoreObjects
Definition EngineTypes.h:433
btCollisionObject ** mIgnoreObjects
Definition EngineTypes.h:434
virtual bool needsCollision(btBroadphaseProxy *proxy0) const
Definition EngineTypes.cpp:46
Definition EngineTypes.h:417
btCollisionObject ** mIgnoreObjects
Definition EngineTypes.h:422
uint32_t mNumIgnoreObjects
Definition EngineTypes.h:421
virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult &rayResult, bool normalInWorldSpace) override
Definition EngineTypes.cpp:14
bool mIgnorePureOverlap
Definition EngineTypes.h:423
Definition InputTypes.h:102
Definition EngineTypes.h:212
LightType mType
Definition EngineTypes.h:213
glm::vec3 mDirection
Definition EngineTypes.h:218
float mIntensity
Definition EngineTypes.h:220
float mRadius
Definition EngineTypes.h:219
glm::vec3 mPosition
Definition EngineTypes.h:216
LightingDomain mDomain
Definition EngineTypes.h:214
uint8_t mLightingChannels
Definition EngineTypes.h:215
glm::vec4 mColor
Definition EngineTypes.h:217
Definition EngineTypes.h:508
uint16_t mIncomingReliableSeq
Definition EngineTypes.h:520
std::unordered_set< NetId > mRelevantNetIds
Definition EngineTypes.h:514
WeakPtr< Node > mPawn
Definition EngineTypes.h:523
std::vector< char > mReliableSendBuffer
Definition EngineTypes.h:516
static const uint32_t sSendBufferSize
Definition EngineTypes.h:509
bool mReady
Definition EngineTypes.h:524
float mTimeSinceLastMsg
Definition EngineTypes.h:513
std::vector< ReliablePacket > mOutgoingPackets
Definition EngineTypes.h:517
float mPing
Definition EngineTypes.h:512
NetHost mHost
Definition EngineTypes.h:511
std::vector< char > mSendBuffer
Definition EngineTypes.h:515
std::vector< ReliablePacket > mIncomingPackets
Definition EngineTypes.h:518
uint16_t mOutgoingUnreliableSeq
Definition EngineTypes.h:521
uint16_t mIncomingUnreliableSeq
Definition EngineTypes.h:522
uint16_t mOutgoingReliableSeq
Definition EngineTypes.h:519
Definition EngineTypes.h:489
uint16_t mPort
Definition EngineTypes.h:491
NetHostId mId
Definition EngineTypes.h:492
uint64_t mOnlineId
Definition EngineTypes.h:493
uint32_t mIpAddress
Definition EngineTypes.h:490
Definition EngineTypes.h:234
PrimitivePair & operator=(const PrimitivePair &other)
Definition EngineTypes.h:269
Primitive3D * mPrimitiveB
Definition EngineTypes.h:236
PrimitivePair(const PrimitivePair &other)
Definition EngineTypes.h:263
PrimitivePair(Primitive3D *compA, Primitive3D *compB)
Definition EngineTypes.h:245
PrimitivePair & operator=(PrimitivePair &&other)
Definition EngineTypes.h:276
PrimitivePair()
Definition EngineTypes.h:238
bool operator==(const PrimitivePair &other) const
Definition EngineTypes.h:257
Primitive3D * mPrimitiveA
Definition EngineTypes.h:235
size_t operator()(const PrimitivePair &pairToHash) const
Definition EngineTypes.h:251
Definition EngineTypes.h:396
std::vector< glm::vec3 > mHitNormals
Definition EngineTypes.h:401
std::vector< float > mHitFractions
Definition EngineTypes.h:403
glm::vec3 mStart
Definition EngineTypes.h:397
glm::vec3 mEnd
Definition EngineTypes.h:398
std::vector< glm::vec3 > mHitPositions
Definition EngineTypes.h:402
std::vector< Primitive3D * > mHitNodes
Definition EngineTypes.h:400
uint32_t mNumHits
Definition EngineTypes.h:399
Definition EngineTypes.h:386
Primitive3D * mHitNode
Definition EngineTypes.h:389
glm::vec3 mStart
Definition EngineTypes.h:387
float mHitFraction
Definition EngineTypes.h:392
glm::vec3 mEnd
Definition EngineTypes.h:388
glm::vec3 mHitNormal
Definition EngineTypes.h:390
glm::vec3 mHitPosition
Definition EngineTypes.h:391
Definition EngineTypes.h:497
uint32_t mNumSends
Definition EngineTypes.h:501
float mTimeSinceSend
Definition EngineTypes.h:500
std::vector< char > mData
Definition EngineTypes.h:503
uint16_t mSeq
Definition EngineTypes.h:504
Definition EngineTypes.h:407
glm::vec3 mEnd
Definition EngineTypes.h:409
glm::vec3 mHitNormal
Definition EngineTypes.h:411
Primitive3D * mHitNode
Definition EngineTypes.h:410
glm::vec3 mStart
Definition EngineTypes.h:408
glm::vec3 mHitPosition
Definition EngineTypes.h:412
float mHitFraction
Definition EngineTypes.h:413
Definition SystemTypes.h:94