Monad Engine da02fba2
> Undercity Codex_
Loading...
Searching...
No Matches
Constants.h
Go to the documentation of this file.
1/**
2 * @file Constants.h
3 * @ingroup mnd_types
4 * @brief Engine-wide compile-time tunables and ANSI colour codes.
5 *
6 * Defaults that several subsystems read at startup live here so you can
7 * adjust window size, gravity, internal-resolution presets, log buffer
8 * limits and a few other knobs in one place. All values are
9 * `inline constexpr` to give every translation unit zero-cost access
10 * without ODR worries.
11 *
12 * @code
13 * engine.Init(kDefaultWindowWidth, kDefaultWindowHeight);
14 * physics.SetGravity({0.0F, kGravity, 0.0F});
15 * @endcode
16 */
17
18#pragma once
19
20#include <cstddef>
21
22#include "Types.h"
23
24// -- Window / display --------------------------------------------------------
25inline constexpr mnd::i32 kDefaultWindowWidth = 1280;
26inline constexpr mnd::i32 kDefaultWindowHeight = 720;
27inline constexpr const char *kDefaultWindowTitle = "GL Game Engine";
28
29// -- Logging -----------------------------------------------------------------
30inline constexpr std::size_t kMaxLogEntries = 1024;
31inline constexpr std::size_t kLogMessageBufSize = 1024;
32inline constexpr std::size_t kLogFullBufSize = 1280;
33inline constexpr mnd::i32 kLogPrefixBufSize = 256;
34
35// ANSI color escape codes
36inline constexpr const char *kAnsiReset = "\033[0m";
37inline constexpr const char *kAnsiInfo = "\033[32m";
38inline constexpr const char *kAnsiWarn = "\033[33m";
39inline constexpr const char *kAnsiError = "\033[31m";
40inline constexpr const char *kAnsiFatal = "\033[1;31m";
41
42// -- Renderer ----------------------------------------------------------------
43inline constexpr mnd::i32 kDefaultInternalWidth = 1920;
44inline constexpr mnd::i32 kDefaultInternalHeight = 1080;
45inline constexpr mnd::f32 kDefaultAmbient = 0.35F;
46
47inline constexpr mnd::i32 kInternalPresetTinyW = 160;
48inline constexpr mnd::i32 kInternalPresetTinyH = 120;
49inline constexpr mnd::i32 kInternalPresetLowW = 320;
50inline constexpr mnd::i32 kInternalPresetLowH = 240;
51inline constexpr mnd::i32 kInternalPresetMedW = 640;
52inline constexpr mnd::i32 kInternalPresetMedH = 480;
53inline constexpr mnd::i32 kInternalResMin = 16;
54inline constexpr mnd::i32 kInternalResMax = 4096;
55
56inline constexpr const char *kGlslVersionDirective = "#version 330 core";
57inline constexpr mnd::i32 kShaderInfoLogSize = 512;
58
59// Mesh layout: pos(3) + normal(3) + color(3) + uv(2) = 11 floats
60inline constexpr mnd::i32 kStandardVertexFloats = 11;
61inline constexpr mnd::f32 kPI = 3.14159265358979323846f;
62// -- Input -------------------------------------------------------------------
63inline constexpr mnd::i32 kMaxKeys = 512;
64inline constexpr mnd::i32 kMaxMouseButtons = 16;
65
66// -- Physics -----------------------------------------------------------------
67inline constexpr mnd::f32 kGravity = -13.81F;
68inline constexpr mnd::f32 kDefaultCapsuleRadius = 0.4F;
69inline constexpr mnd::f32 kDefaultCapsuleHeight = 1.2F;
70inline constexpr mnd::f32 kDefaultStepHeight = 0.35F;
71
72// -- Camera / controller -----------------------------------------------------
73inline constexpr mnd::f32 kPitchLimitDegrees = 90.0F;
74inline constexpr mnd::f32 kCameraFov = 60.0F;
75inline constexpr mnd::f32 kCameraNearPlane = 0.01F;
76inline constexpr mnd::f32 kCameraFarPlane = 1000.0F;
77// Mouse-look: degrees per pixel of mouse delta. Raw (no deltaTime scaling)
78// matches GoldSrc/Source — each mouse count maps to a fixed angle regardless
79// of frame rate.
80inline constexpr mnd::f32 kDefaultMouseSensitivity = 25.0F;
81// Top run speed: HL1 sv_maxspeed=320 ups ≈ 8.13 m/s. 7.5 m/s feels close
82// while reading better at 1u≈1m scenes.
83inline constexpr mnd::f32 kDefaultMoveSpeed = 7.5F;
84// Jump impulse multiplier on moveSpeed. HL1 jump = 268 ups ≈ 6.8 m/s,
85// so 7.5 * 0.9 ≈ 6.75 m/s. Reaches ~2.3 m at gravity 9.81.
86inline constexpr mnd::f32 kDefaultJumpSpeed = 0.6F;
87
88// -- HL/GoldSrc-style movement -----------------------------------------------
89// Tuned to mirror sv_accelerate / sv_airaccelerate / sv_friction / sv_stopspeed.
90inline constexpr mnd::f32 kQuakeGroundAccel = 10.0F; ///< sv_accelerate.
91inline constexpr mnd::f32 kQuakeAirAccel = 10.0F; ///< sv_airaccelerate (HL1 = 10; Q3 = 1).
92inline constexpr mnd::f32 kQuakeFriction = 4.0F; ///< sv_friction.
93inline constexpr mnd::f32 kQuakeStopSpeed = 2.5F; ///< sv_stopspeed (100 ups).
94// Per-axis wishspeed cap mid-air. HL has no cap → set above any reasonable
95// moveSpeed so the binding cap becomes moveSpeed itself. Lower it (≈ 0.76)
96// for CPMA/Q3-style strafe-jumping.
97inline constexpr mnd::f32 kQuakeAirCap = 30.0F;
98
99// -- Simulation --------------------------------------------------------------
100inline constexpr mnd::f32 kFixedTimeStep = 1.0F / 60.0F;
101inline constexpr mnd::i32 kMaxSubSteps = 4;
102
103// -- Asset paths -------------------------------------------------------------
104inline constexpr const char *kAssetsDirName = "assets";
105
106// -- Scene JSON keys ---------------------------------------------------------
107inline constexpr const char *kJsonKeyName = "name";
108inline constexpr const char *kJsonKeyType = "type";
109inline constexpr const char *kJsonKeyPath = "path";
110inline constexpr const char *kJsonKeyPosition = "position";
111inline constexpr const char *kJsonKeyRotation = "rotation";
112inline constexpr const char *kJsonKeyScale = "scale";
113inline constexpr const char *kJsonKeyComponents = "components";
114inline constexpr const char *kJsonKeyChildren = "children";
115inline constexpr const char *kJsonKeyObjects = "objects";
116inline constexpr const char *kJsonKeyCamera = "camera";
117inline constexpr const char *kJsonKeyX = "x";
118inline constexpr const char *kJsonKeyY = "y";
119inline constexpr const char *kJsonKeyZ = "z";
120inline constexpr const char *kJsonKeyW = "w";
121
122inline constexpr const char *kSceneTypeGltf = "gltf";
123inline constexpr const char *kSceneTypeFbx = "fbx";
124inline constexpr const char *kSceneTypeModel = "model";
125inline constexpr const char *kDefaultObjectName = "Object";
126inline constexpr const char *kDefaultSceneName = "noname";
127inline constexpr const char *kRootObjectLabel = "";
constexpr mnd::i32 kDefaultWindowHeight
Definition Constants.h:26
constexpr const char * kAnsiError
Definition Constants.h:39
constexpr mnd::f32 kDefaultAmbient
Definition Constants.h:45
constexpr const char * kJsonKeyCamera
Definition Constants.h:116
constexpr const char * kJsonKeyComponents
Definition Constants.h:113
constexpr mnd::f32 kQuakeAirAccel
sv_airaccelerate (HL1 = 10; Q3 = 1).
Definition Constants.h:91
constexpr const char * kJsonKeyName
Definition Constants.h:107
constexpr mnd::i32 kDefaultWindowWidth
Definition Constants.h:25
constexpr mnd::i32 kShaderInfoLogSize
Definition Constants.h:57
constexpr mnd::f32 kQuakeStopSpeed
sv_stopspeed (100 ups).
Definition Constants.h:93
constexpr mnd::i32 kStandardVertexFloats
Definition Constants.h:60
constexpr const char * kAnsiWarn
Definition Constants.h:38
constexpr const char * kAnsiFatal
Definition Constants.h:40
constexpr mnd::f32 kDefaultJumpSpeed
Definition Constants.h:86
constexpr mnd::f32 kDefaultCapsuleRadius
Definition Constants.h:68
constexpr mnd::f32 kGravity
Definition Constants.h:67
constexpr mnd::f32 kDefaultMouseSensitivity
Definition Constants.h:80
constexpr const char * kJsonKeyScale
Definition Constants.h:112
constexpr const char * kDefaultObjectName
Definition Constants.h:125
constexpr const char * kGlslVersionDirective
Definition Constants.h:56
constexpr mnd::f32 kCameraFov
Definition Constants.h:74
constexpr mnd::f32 kPI
Definition Constants.h:61
constexpr mnd::f32 kDefaultCapsuleHeight
Definition Constants.h:69
constexpr mnd::i32 kDefaultInternalHeight
Definition Constants.h:44
constexpr const char * kJsonKeyObjects
Definition Constants.h:115
constexpr mnd::f32 kDefaultMoveSpeed
Definition Constants.h:83
constexpr const char * kSceneTypeGltf
Definition Constants.h:122
constexpr const char * kDefaultSceneName
Definition Constants.h:126
constexpr mnd::f32 kFixedTimeStep
Definition Constants.h:100
constexpr mnd::i32 kMaxMouseButtons
Definition Constants.h:64
constexpr mnd::i32 kMaxSubSteps
Definition Constants.h:101
constexpr const char * kJsonKeyW
Definition Constants.h:120
constexpr const char * kJsonKeyRotation
Definition Constants.h:111
constexpr mnd::i32 kMaxKeys
Definition Constants.h:63
constexpr mnd::f32 kQuakeGroundAccel
sv_accelerate.
Definition Constants.h:90
constexpr mnd::i32 kInternalPresetMedH
Definition Constants.h:52
constexpr const char * kRootObjectLabel
Definition Constants.h:127
constexpr const char * kDefaultWindowTitle
Definition Constants.h:27
constexpr const char * kJsonKeyPath
Definition Constants.h:109
constexpr mnd::f32 kPitchLimitDegrees
Definition Constants.h:73
constexpr mnd::i32 kInternalPresetMedW
Definition Constants.h:51
constexpr const char * kJsonKeyType
Definition Constants.h:108
constexpr const char * kJsonKeyZ
Definition Constants.h:119
constexpr mnd::i32 kInternalPresetLowW
Definition Constants.h:49
constexpr const char * kJsonKeyPosition
Definition Constants.h:110
constexpr mnd::f32 kQuakeAirCap
Definition Constants.h:97
constexpr mnd::i32 kInternalResMin
Definition Constants.h:53
constexpr mnd::i32 kDefaultInternalWidth
Definition Constants.h:43
constexpr const char * kSceneTypeFbx
Definition Constants.h:123
constexpr const char * kAnsiInfo
Definition Constants.h:37
constexpr mnd::i32 kInternalPresetTinyW
Definition Constants.h:47
constexpr std::size_t kMaxLogEntries
Definition Constants.h:30
constexpr const char * kJsonKeyY
Definition Constants.h:118
constexpr mnd::f32 kDefaultStepHeight
Definition Constants.h:70
constexpr const char * kJsonKeyX
Definition Constants.h:117
constexpr mnd::i32 kInternalPresetLowH
Definition Constants.h:50
constexpr mnd::f32 kQuakeFriction
sv_friction.
Definition Constants.h:92
constexpr const char * kAssetsDirName
Definition Constants.h:104
constexpr const char * kJsonKeyChildren
Definition Constants.h:114
constexpr const char * kAnsiReset
Definition Constants.h:36
constexpr std::size_t kLogMessageBufSize
Definition Constants.h:31
constexpr mnd::i32 kLogPrefixBufSize
Definition Constants.h:33
constexpr const char * kSceneTypeModel
Definition Constants.h:124
constexpr mnd::f32 kCameraFarPlane
Definition Constants.h:76
constexpr mnd::i32 kInternalResMax
Definition Constants.h:54
constexpr mnd::i32 kInternalPresetTinyH
Definition Constants.h:48
constexpr std::size_t kLogFullBufSize
Definition Constants.h:32
constexpr mnd::f32 kCameraNearPlane
Definition Constants.h:75
Engine-wide primitive type aliases and GLM math imports.
float f32
32-bit IEEE float — the standard GL scalar type.
Definition Types.h:40
int32_t i32
Signed 32-bit integer — used for GL enums and sizes.
Definition Types.h:37