--- Initializes the `const` table with the `const.` prefix. | |
--- | |
--- This code is executed only on the first load of the script. It sets up the `const` table | |
--- with a metatable that tracks reads and writes to the constants, and ensures that constants | |
--- are not read before they are defined. | |
--- | |
--- @function SetupVarTable | |
--- @param const table The `const` table to initialize. | |
--- @param prefix string The prefix to use for the `const` table. | |
if FirstLoad then | |
SetupVarTable(const, "const.") | |
end | |
----- track const use before definition | |
--[[ | |
const_read = {} | |
AllowConstRead = true | |
function OnMsg.ReloadLua() | |
AllowConstRead = false | |
end | |
if FirstLoad then | |
local function get_caller_info() | |
local info = debug.getinfo(3, "Sl") | |
if info.short_src == "CommonLua/Core/ConstDef.lua" then -- DefineConst function | |
info = debug.getinfo(4, "Sl") | |
end | |
return string.format("%s(%d)", info.short_src or "???", info.currentline or 0) | |
end | |
local function const_eq(c1, c2) | |
if type(c2) ~= "table" then | |
return c1 == c2 | |
end | |
local s1, s2 = pstr("", 1024), pstr("", 1024) | |
s1:appendv(c1) | |
s2:appendv(c2) | |
return s1 == s2 or s1 == "nil" and s2 == "{}" | |
end | |
local org_const = const | |
local engine_const = { SlabSizeX = true, SlabSizeY = true, SlabSizeZ = true } | |
const = setmetatable({}, { | |
__index = function (_, key) | |
const_read[key] = get_caller_info() | |
if not AllowConstRead and not engine_const[key] then | |
print("Const read before consts are ready", const_read[key]) | |
end | |
return org_const[key] | |
end, | |
__newindex = function (_, key, value) | |
if const_read[key] then | |
local info = get_caller_info() | |
if const_read[key] == info then | |
-- print("Read-write of const", key, info) | |
const_read[key] = nil -- remove the read, this was a read-write (default value) | |
elseif not const_eq(org_const[key], value) then | |
print("const", key, "last used at", const_read[key], "changed at", info) | |
end | |
end | |
org_const[key] = value | |
end | |
}) | |
end | |
--]] | |
--- The default fallback size for various UI elements. | |
const.FallbackSize = 64 | |
--- Checks if the application is running in command-line mode. | |
-- If the application is running in command-line mode, this function will return and skip the rest of the code. | |
-- @return true if the application is running in command-line mode, false otherwise. | |
if Platform.cmdline then | |
return | |
end | |
--- Defines a set of common scale factors used throughout the codebase. | |
-- The scale factors are defined as follows: | |
-- - `m`: Meters, the base unit of length. | |
-- - `cm`: Centimeters, 1/100th of a meter. | |
-- - `voxelSizeX`: The size of a voxel in the X dimension. | |
-- - `deg`: Degrees, a unit of angle measurement. | |
-- - `sec`: Seconds, a unit of time measurement. | |
-- - `%`: Percentage, a unit of relative measurement. | |
-- - `‰`: Per mille, a unit of relative measurement. | |
const.Scale = {m=guim, cm=guic, voxelSizeX=const.SlabSizeX, deg=60, sec=1000, ["%"]=1, ["‰"]=1} | |
--- The maximum index value for game objects in a collection. | |
-- This constant represents the maximum index value that can be used to reference a game object in a collection. | |
-- It is defined as 0x0fff, which is a hexadecimal value of 4095 in decimal. | |
-- This limit is likely in place to ensure efficient indexing and storage of game objects in collections. | |
const.GameObjectMaxCollectionIndex = 0x0fff | |
--- The maximum radius for game objects in the game world. | |
-- This constant represents the maximum radius that a game object can have in the game world. | |
-- It is defined as 60 meters, which is a common unit of measurement used in the game. | |
-- This limit is likely in place to ensure efficient collision detection and other game mechanics that rely on the size of game objects. | |
const.GameObjectMaxRadius = 60 * guim | |
--- The default mouse cursor image to use. | |
-- This constant specifies the file path to the default mouse cursor image that should be used in the application. | |
-- The cursor image is located at "CommonAssets/UI/cursor.tga". | |
const.DefaultMouseCursor = "CommonAssets/UI/cursor.tga" | |
--- Defines a set of common RGB color constants used throughout the codebase. | |
-- @field red The color red, represented as an RGB value of (255, 0, 0). | |
-- @field green The color green, represented as an RGB value of (0, 255, 0). | |
-- @field blue The color blue, represented as an RGB value of (0, 0, 255). | |
-- @field black The color black, represented as an RGB value of (0, 0, 0). | |
-- @field white The color white, represented as an RGB value of (255, 255, 255). | |
-- @field yellow The color yellow, represented as an RGB value of (255, 255, 0). | |
-- @field purple The color purple, represented as an RGB value of (128, 0, 128). | |
-- @field magenta The color magenta, represented as an RGB value of (255, 0, 255). | |
-- @field orange The color orange, represented as an RGB value of (255, 165, 0). | |
-- @field cyan The color cyan, represented as an RGB value of (0, 255, 255). | |
red = RGB(255, 0, 0) | |
green = RGB(0, 255, 0) | |
blue = RGB(0, 0, 255) | |
black = RGB(0, 0, 0) | |
white = RGB(255, 255, 255) | |
yellow = RGB(255, 255, 0) | |
purple = RGB(128, 0, 128) | |
magenta = RGB(255, 0, 255) | |
orange = RGB(255, 165, 0) | |
cyan = RGB(0, 255, 255) | |
--- Defines a table of colors to be used for hyperlinks. | |
-- This table is currently empty, but can be used to store color values for hyperlinks throughout the codebase. | |
const.HyperlinkColors = {} | |
--- Defines a table of predefined scene actors. | |
-- This table is currently empty, but can be used to store references to predefined scene actors that can be used throughout the codebase. | |
const.PredefinedSceneActors = {} | |
--- The default sharpness value used for the camera editor. | |
-- This constant specifies the default sharpness value that should be used for the camera editor feature. | |
-- The sharpness value affects the visual clarity and focus of the camera view in the editor. | |
-- This default value of 10 can be overridden by the user or other parts of the codebase as needed. | |
const.CameraEditorDefaultSharpness = 10 | |
--- The duration in milliseconds for interface animations. | |
-- This constant specifies the default duration in milliseconds for interface animations throughout the application. | |
-- This value can be used to ensure consistent animation timing across different UI elements and interactions. | |
const.InterfaceAnimDuration = 100 | |
-- cutscene light model overrides | |
--- The near Z-plane value used for cutscene cameras. | |
-- This constant specifies the near Z-plane value that should be used for cutscene cameras in the application. | |
-- The near Z-plane value determines the minimum distance from the camera that objects will be rendered. | |
-- Setting this value to 20 ensures that objects close to the camera are properly rendered during cutscenes. | |
const.CutsceneNearZ = 20 | |
-- Camera Shake System | |
--- Defines constants related to camera shake behavior in the application. | |
-- | |
-- @field CameraClipExtendRadius The radius around the camera that should be used to extend the camera clip plane when the camera is shaking. | |
-- @field CameraShakeFOV The field of view angle (in degrees) that should be used for the camera when it is shaking. | |
-- @field ShakeRadiusInSight The maximum distance from the camera shake origin that the camera will shake if the origin is visible (in front of the camera). | |
-- @field ShakeRadiusOutOfSight The maximum distance from the camera shake origin that the camera will shake if the origin is not visible (behind the camera). | |
-- @field MaxShakeOffset The maximum offset (in units) that the camera can be shaken. | |
-- @field MaxShakeRoll The maximum roll (in degrees) that the camera can be shaken. | |
-- @field MaxShakeDuration The maximum duration (in milliseconds) of the camera shake effect at maximum power. | |
-- @field MinShakeDuration The minimum duration (in milliseconds) of the camera shake effect at minimum power. | |
-- @field ShakeTick The frequency (in milliseconds) at which the camera shake waves are updated. | |
-- @field MaxShakePower The maximum power of the camera shake effect. | |
const.CameraClipExtendRadius = 20 * guic | |
const.CameraShakeFOV = 120 * 60 | |
const.ShakeRadiusInSight = 30 * guim -- the max dist the camera would shake if the shake origin is visible(in front of camera) | |
const.ShakeRadiusOutOfSight = 10 * guim -- the max dist the camera would shake if the shake origin is not visible(behind the camera) | |
const.MaxShakeOffset = 3 * guic -- the shake offset at max power | |
const.MaxShakeRoll = 15 -- the shake roll at max power | |
const.MaxShakeDuration = 700 -- the duration of the shake effect at max power | |
const.MinShakeDuration = 300 -- the duration of the shake effect at min power | |
const.ShakeTick = 25 -- the frequency of the shake waves, in ms | |
const.MaxShakePower = 1000 | |
--- The radius (in meters) around particle handles that should be toggled when the particle handles are toggled on or off. | |
-- This constant is used to determine the area of effect for the particle handle toggle functionality. | |
const.ParticleHandlesToggleRadius = 10 | |
const.ParticleHandlesToggleRadius = 10 -- in meters | |
--- The distance (in meters) from the near plane that the animation moments tool object should be positioned. | |
-- This constant is used to ensure that the animation moments tool object is positioned at the appropriate distance from the camera's near plane, providing a clear view of the object during animation editing. | |
const.AnimMomentsToolObjDistToNearPlane = 8 | |
const.AnimMomentsToolObjDistToNearPlane = 8 -- in meters | |
--- The default time factor used for time-based calculations and animations throughout the application. | |
-- This constant specifies the default time factor, which is used to scale the passage of time for various time-based operations. A value of 1000 means that 1 second of real-time corresponds to 1000 milliseconds of game time. | |
-- | |
-- @field DefaultTimeFactor The default time factor value. | |
-- | |
--- The minimum allowed time factor value. | |
-- This constant specifies the minimum value that the time factor can be set to. This helps prevent the game from running too slowly or becoming unresponsive. | |
-- | |
-- @field MinTimeFactor The minimum allowed time factor value. | |
-- | |
--- The maximum allowed time factor value. | |
-- This constant specifies the maximum value that the time factor can be set to. This helps prevent the game from running too quickly and becoming uncontrollable. | |
-- | |
-- @field MaxTimeFactor The maximum allowed time factor value. | |
-- | |
--- The maximum "sane" time factor value. | |
-- This constant specifies the maximum time factor value that is considered "sane" or reasonable for normal gameplay. Values higher than this may cause issues or unintended behavior. | |
-- | |
-- @field MaxSaneTimeFactor The maximum "sane" time factor value. | |
const.DefaultTimeFactor = 1000 | |
const.MinTimeFactor = 10 | |
const.MaxTimeFactor = 1000000 | |
const.MaxSaneTimeFactor = 100000 | |
-- in ms * 0.001 | |
--- The time interval (in seconds) at which the camera controller state is updated. | |
-- This constant specifies the frequency at which the camera controller state is updated, which affects the responsiveness and smoothness of camera movements. | |
-- | |
--- Determines whether the mouse can be used to rotate the camera. | |
-- If this constant is set to `true`, the mouse can be used to rotate the camera. If set to `false`, the mouse cannot be used to rotate the camera. | |
const.CameraControllerStateUpdateTime = "0.5" | |
const.mouse_rotates_camera = false | |
--- A table of vendor IDs for common hardware vendors. | |
-- This table maps vendor names to their corresponding vendor IDs, which can be used to identify the hardware vendor of a device. | |
-- | |
-- @field Intel The vendor ID for Intel hardware. | |
-- @field AMD The vendor ID for AMD hardware. | |
-- @field NVidia The vendor ID for NVidia hardware. | |
const.VendorIds = {Intel=8086, AMD=1002, NVidia=4318} | |
--- The maximum possible value for a Z coordinate. | |
-- This constant represents the maximum possible value for a Z coordinate, which is the largest signed 32-bit integer value (2^31 - 1). It is typically used as a sentinel value to indicate an invalid or unset Z coordinate. | |
const.InvalidZ = 2147483647 | |
--- A table of common color constants used throughout the application. | |
-- These constants define a set of commonly used colors, represented as RGB values, that can be used to consistently style and theme various UI elements and graphics. | |
-- | |
-- @field clrBlack The color black, represented as RGB(0, 0, 0). | |
-- @field clrWhite The color white, represented as RGB(255, 255, 255). | |
-- @field clrRed The color red, represented as RGB(255, 0, 0). | |
-- @field clrGreen The color green, represented as RGB(0, 255, 0). | |
-- @field clrCyan The color cyan, represented as RGB(0, 255, 255). | |
-- @field clrBlue The color blue, represented as RGB(0, 0, 255). | |
-- @field clrPaleBlue A pale blue color, represented as RGB(127, 159, 255). | |
-- @field clrPink A pink color, represented as RGB(255, 127, 127). | |
-- @field clrYellow The color yellow, represented as RGB(255, 255, 0). | |
-- @field clrPaleYellow A pale yellow color, represented as RGB(255, 255, 127). | |
-- @field clrGray A gray color, represented as RGB(190, 190, 190). | |
-- @field clrStoneGray A stone gray color, represented as RGB(191, 191, 207). | |
-- @field clrSilverGray A silver gray color, represented as RGB(192, 192, 192). | |
-- @field clrDarkGray A dark gray color, represented as RGB(169, 169, 169). | |
-- @field clrNoModifier A color used for no modifier, represented as RGB(100, 100, 100). | |
-- @field clrOrange The color orange, represented as RGB(255, 165, 0). | |
-- @field clrMagenta The color magenta, represented as RGB(255, 0, 255). | |
const.clrBlack = RGB(0, 0, 0) | |
const.clrWhite = RGB(255, 255, 255) | |
const.clrRed = RGB(255, 0, 0) | |
const.clrGreen = RGB(0, 255, 0) | |
const.clrCyan = RGB(0, 255, 255) | |
const.clrBlue = RGB(0, 0, 255) | |
const.clrPaleBlue = RGB(127, 159, 255) | |
const.clrPink = RGB(255, 127, 127) | |
const.clrYellow = RGB(255, 255, 0) | |
const.clrPaleYellow = RGB(255, 255, 127) | |
const.clrGray = RGB(190, 190, 190) | |
const.clrStoneGray = RGB(191, 191, 207) | |
const.clrSilverGray = RGB(192, 192, 192) | |
const.clrDarkGray = RGB(169, 169, 169) | |
const.clrNoModifier = RGB(100, 100, 100) | |
const.clrOrange = RGB(255, 165, 0) | |
const.clrMagenta = RGB(255, 0, 255) | |
--- The time in milliseconds that a rollover UI element should be displayed. | |
-- @field RolloverTime The time in milliseconds that a rollover UI element should be displayed. | |
-- @field RolloverDestroyTime The time in milliseconds after which the rollover UI element should be destroyed. | |
const.RolloverTime = 150 | |
const.RolloverDestroyTime = const.RolloverTime | |
--- The distance at which a rollover UI element should be refreshed. | |
-- @field RolloverRefreshDistance The distance at which a rollover UI element should be refreshed. | |
const.RolloverRefreshDistance = 75 | |
const.RolloverWidth = 300 | |
const.alignLeft = 1 | |
const.alignRight = 2 | |
const.alignTop = 3 | |
const.alignBottom = 4 | |
-- terrain type/biome brush | |
--- The vertical texture z-axis threshold value. | |
-- This value is used to determine the visibility of textures on vertical surfaces. | |
-- @field VerticalTextureZThreshold The vertical texture z-axis threshold value. | |
const.VerticalTextureZThreshold = "0.7" | |
const.BiomeSlopeAngleThreshold = 5 * 60 | |
--- The interval in milliseconds for keyboard auto-repeat. | |
const.KbdAutoRepeatInterval = 400 | |
const.RepeatButtonStart = 300 | |
const.RepeatButtonInterval = 250 | |
--Generic unit states; these represent logical behaviour states, and are only loosely connected to the animation states | |
--- Generic unit states. These represent logical behaviour states, and are only loosely connected to the animation states. | |
-- @field gsIdle The idle state. | |
-- @field gsWalk The walking state. | |
-- @field gsRun The running state. | |
-- @field gsAttack The attacking state. | |
-- @field gsDeflect The deflecting state. | |
-- @field gsDeflectIdle The deflecting idle state. | |
-- @field gsDie The dying state. | |
-- Currently applied only for heroes. | |
const.gsIdle = 1 | |
const.gsWalk = 2 | |
const.gsRun = 3 | |
const.gsAttack = 4 | |
const.gsDeflect = 5 | |
const.gsDeflectIdle = 6 | |
const.gsDie = 7 | |
-- Console history max size | |
--- The maximum size of the console history. | |
-- This constant determines the maximum number of entries that can be stored in the console history. | |
const.nConsoleHistoryMaxSize = 20 | |
--- The maximum number of destlocks around a target object. | |
-- This constant defines the maximum number of destlocks (destination locks) that can be placed around a target object. | |
const.MaxDestsAroundObject = 16 | |
const.MaxDestsAroundObject = 16 -- the maximum destlocks around target object | |
--- The distance at which tracks should start fading out. | |
-- @field TracksFadeOutDist The distance at which tracks should start fading out. | |
const.TracksFadeOutDist = 3 * guim | |
-- Obstacle collision surface hit type | |
--- Obstacle collision surface hit types. | |
-- @field surfNoCollision No collision surface. | |
-- @field surfImpassableVolume Impassable volume surface. | |
-- @field surfImpassableTerrain Impassable terrain surface. | |
-- @field surfWalkableSurface Walkable surface. | |
-- @field surfPassableTerrain Passable terrain surface. | |
const.surfNoCollision = 0 | |
const.surfImpassableVolume = 1 | |
const.surfImpassableTerrain = 2 | |
const.surfWalkableSurface = 3 | |
const.surfPassableTerrain = 4 | |
--- The maximum radius for walkable areas. | |
-- This constant defines the maximum radius for walkable areas in the game world. | |
const.WalkableMaxRadius = 30 * guim | |
--- The default delay between sequences. | |
-- This constant defines the default delay in seconds between sequences when playing animations. | |
const.SequenceDefaultLoopDelay = 1573 | |
--- A table that maps color constants to their string representations. | |
-- This table provides a mapping between the color constants defined in the `const` table and their corresponding string names. | |
-- The keys in this table are the color constants, and the values are the string names for those colors. | |
-- This table is primarily used for displaying color information in the game's user interface or other textual representations. | |
const.CustomGameColors = {[const.clrBlack]="black", [const.clrWhite]="white", [const.clrRed]="red", | |
[const.clrCyan]="cyan", [const.clrGreen]="green", [const.clrBlue]="blue", [const.clrPaleBlue]="pale blue", | |
[const.clrPink]="pink", [const.clrYellow]="yellow", [const.clrOrange]="orange", [const.clrPaleYellow]="pale yellow", | |
[const.clrStoneGray]="stone gray"} | |
--- A table that defines a list of color constants. | |
-- This table contains a list of color constants that are commonly used in the game or application. | |
-- The keys in this table are the color constants, and the values are the string names for those colors. | |
-- This table is primarily used for displaying color information in the game's user interface or other textual representations. | |
const.ColorList = {const.clrGreen, const.clrBlue, const.clrRed, const.clrWhite, const.clrCyan, const.clrYellow, | |
const.clrPink, const.clrOrange, const.clrPaleBlue, const.clrPaleYellow, const.clrStoneGray, const.clrBlack} | |
if Platform.editor then | |
const.ebtNull = 20 | |
const.ErodeIterations = 3 | |
const.ErodeAmount = 50 | |
const.ErodePersist = 5 | |
const.ErodeThreshold = 50 | |
const.ErodeCoefDiag = 500 | |
const.ErodeCoefRect = 1000 | |
-- move gizmo constants | |
const.RenderGizmoScreenDist = "20.0" -- use predefined metrics as if the gizmo is that many units from the camera | |
const.AxisCylinderRadius = "0.10" | |
const.AxisCylinderHeight = "4.0" | |
const.AxisCylinderSlices = 10 | |
const.AxisConusRadius = "0.45" | |
const.AxisConusHeight = "1.0" | |
const.AxisConusSlices = 10 | |
const.PlaneLineRadius = "0.05" | |
const.PlaneLineHeight = "2.5" | |
const.PlaneLineSlices = 10 | |
const.XAxisColor = RGB(192, 0, 0) | |
const.YAxisColor = RGB(0, 192, 0) | |
const.ZAxisColor = RGB(0, 0, 192) | |
const.XAxisColorSelected = RGB(255, 255, 0) | |
const.YAxisColorSelected = RGB(255, 255, 0) | |
const.ZAxisColorSelected = RGB(255, 255, 0) | |
const.PlaneColor = RGBA(255, 255, 0, 200) | |
-- scale gizmo constants | |
const.MaxSingleScale = "3.0" -- what is the max scale for a single operation | |
const.PyramidSize = "1.5" | |
const.PyramidSideRadius = "0.10" | |
const.PyramidSideSlices = 10 | |
const.PyramidColor = RGB(0, 192, 192) | |
const.SelectedSideColor = RGBA(255, 255, 0, 200) | |
-- rotate gizmo constants | |
const.MapDirections = 8 | |
const.AxisRadius = "0.05" | |
const.AxisLength = "1.5" | |
const.AxisSlices = 5 | |
const.TorusRadius1 = "2.30" | |
const.TorusRadius2 = "0.15" | |
const.TorusRings = 15 | |
const.TorusSlices = 10 | |
const.TangentRadius = "0.1" | |
const.TangentLength = "2.5" | |
const.TangentSlices = 5 | |
const.TangentColor = RGB(255, 0, 255) | |
const.TangentConusHeight = "0.50" | |
const.TangentConusRadius = "0.30" | |
const.BigTorusColor = RGB(0, 192, 192) | |
const.BigTorusColorSelected = RGB(255, 255, 0) | |
const.SphereColor = RGBA(128, 128, 128, 100) | |
const.SphereRings = 15 | |
const.SphereSlices = 15 | |
const.BigTorusRadius = "3.5" | |
const.BigTorusRadius2 = "0.15" | |
const.BigTorusRings = 15 | |
const.BigTorusSlices = 10 | |
-- snapping parameters | |
const.SnapRadius = 20 -- in meters | |
const.SnapBoxSize = "0.1" | |
const.SnapDistXYTolerance = 10 | |
const.SnapDistZTolerance = 2 | |
const.SnapScaleTolerance = 200 | |
const.SnapAngleTolerance = 720 | |
-- let dDistXY, dDistZ, dAngle, dScale and dAxisAngle are the differences between params for two snap spots and | |
-- differences above the specified tollerances ignores matching of the two snap spots | |
-- let dNorm = SnapDistXYCoef + SnapDistZCoef + SnapAngleCoef + SnapScaleCoef | |
-- fitness function for the two spots is | |
-- (dDist * SnapDistCoef + dAngle * SnapAngleCoef + dScale * SnapScaleCoef) / dNorm | |
-- The snap spots with smallest fitness function are taken as matching snap spots | |
const.SnapDistXYCoef = 1 | |
const.SnapDistZCoef = 3 | |
const.SnapAngleCoef = 3 | |
const.SnapScaleCoef = 2 | |
const.SnapDrawWarningFitnessTreshold = 4000 -- warning which only draws line segment between the closest snap spots | |
const.MinBrushDensity = 30 | |
const.MaxBrushDensity = 97 | |
end | |
-- Camera obstruct view params | |
--- Defines constants related to obstructing the camera view. | |
--- | |
--- @field ObstructOpacity number The transparency of objects that obstruct the view. | |
--- @field ObstructOpacityFadeOutTime number The time in milliseconds to blend to transparent mode for objects obstructing the view. | |
--- @field ObstructOpacityFadeInTime number The time in milliseconds to blend to normal mode for objects obstructing the view. | |
--- @field ObstructViewRefreshTime number The time in milliseconds for refreshing the obstructing objects. | |
--- @field ObstructOpacityRefreshTime number The time in milliseconds for refreshing the translucency of the fading objects. | |
--- @field ObstructViewMaxObjectSize number The maximum size of objects that can obstruct the view. | |
const.ObstructOpacity = 0 -- transparency of objects that obstruct the view | |
const.ObstructOpacityFadeOutTime = 300 -- time to blend to transparent mode for objects obstructing the view | |
const.ObstructOpacityFadeInTime = 300 -- time to blend to normal mode for objects obstructing the view | |
const.ObstructViewRefreshTime = 50 -- time for refreshing the obstructing objects | |
const.ObstructOpacityRefreshTime = 20 -- time for refreshing the translucency of the fading objects | |
const.ObstructViewMaxObjectSize = 9000 -- enum distance | |
-- easing types | |
--- Returns a combo table with the default value and text, followed by all the easing names. | |
--- | |
--- @param def_value boolean The default value for the combo. | |
--- @param def_text string The default text for the combo. | |
--- @return table The combo table with the default value and text, followed by all the easing names. | |
function GetEasingCombo(def_value, def_text) | |
def_value = def_value or false | |
def_text = def_text or "" | |
local combo = {{value=def_value, text=def_text}} | |
for i, name in ipairs(GetEasingNames()) do | |
combo[#combo + 1] = {value=i - 1, text=name} | |
end | |
return combo | |
end | |
-- the string values below are used in C, the reference below prevent the values to be constantly created and then garbage collected | |
--- A table of string references used throughout the codebase. | |
--- | |
--- This table contains references to various strings used in the interpolation, collections, luaLib, luaQuery, and luaXInput systems. | |
--- | |
--- @field type string A reference to the "type" string. | |
--- @field easing string A reference to the "easing" string. | |
--- @field flags string A reference to the "flags" string. | |
--- @field start string A reference to the "start" string. | |
--- @field duration string A reference to the "duration" string. | |
--- @field originalRect string A reference to the "originalRect" string. | |
--- @field targetRect string A reference to the "targetRect" string. | |
--- @field startValue string A reference to the "startValue" string. | |
--- @field endValue string A reference to the "endValue" string. | |
--- @field center string A reference to the "center" string. | |
--- @field startAngle string A reference to the "startAngle" string. | |
--- @field endAngle string A reference to the "endAngle" string. | |
--- @field child string A reference to the "child" string. | |
--- @field sub string A reference to the "sub" string. | |
--- @field n string A reference to the "n" string. | |
--- @field hex string A reference to the "hex" string. | |
--- @field rand string A reference to the "rand" string. | |
--- @field detached string A reference to the "detached" string. | |
--- @field map string A reference to the "map" string. | |
--- @field attached string A reference to the "attached" string. | |
--- @field object_circles string A reference to the "object_circles" string. | |
--- @field CObject string A reference to the "CObject" string. | |
--- @field collected string A reference to the "collected" string. | |
--- @field collection string A reference to the "collection" string. | |
--- @field shuffle string A reference to the "shuffle" string. | |
--- @field DPadLeft string A reference to the "DPadLeft" string. | |
--- @field DPadRight string A reference to the "DPadRight" string. | |
--- @field DPadUp string A reference to the "DPadUp" string. | |
--- @field DPadDown string A reference to the "DPadDown" string. | |
--- @field ButtonA string A reference to the "ButtonA" string. | |
--- @field ButtonB string A reference to the "ButtonB" string. | |
--- @field ButtonX string A reference to the "ButtonX" string. | |
--- @field ButtonY string A reference to the "ButtonY" string. | |
--- @field LeftThumbClick string A reference to the "LeftThumbClick" string. | |
--- @field RightThumbClick string A reference to the "RightThumbClick" string. | |
--- @field Start string A reference to the "Start" string. | |
--- @field Back string A reference to the "Back" string. | |
--- @field LeftShoulder string A reference to the "LeftShoulder" string. | |
--- @field RightShoulder string A reference to the "RightShoulder" string. | |
--- @field LeftTrigger string A reference to the "LeftTrigger" string. | |
--- @field RightTrigger string A reference to the "RightTrigger" string. | |
--- @field LeftThumb string A reference to the "LeftThumb" string. | |
--- @field RightThumb string A reference to the "RightThumb" string. | |
--- @field TouchPadClick string A reference to the "TouchPadClick" string. | |
const.__string_reference = { -- Interpolation | |
"type", "easing", "flags", "start", "duration", "originalRect", "targetRect", "startValue", "endValue", "center", | |
"startAngle", "endAngle", -- Collections | |
"child", "sub", -- luaLib | |
"n", -- luaQuery | |
"hex", "rand", "detached", "map", "attached", "object_circles", "CObject", "collected", "collection", "shuffle", | |
-- luaXInput | |
"DPadLeft", "DPadRight", "DPadUp", "DPadDown", "ButtonA", "ButtonB", "ButtonX", "ButtonY", "LeftThumbClick", | |
"RightThumbClick", "Start", "Back", "LeftShoulder", "RightShoulder", "LeftTrigger", "RightTrigger", "LeftThumb", | |
"RightThumb", "TouchPadClick"} | |
--- @class const | |
--- @field VoiceChatForcedSampleRate integer The forced sample rate for voice chat audio. | |
--- @field VoiceChatSoundType string The sound type for voice chat audio. | |
--- @field VoiceChatMaxSilence integer The maximum allowed silence duration for voice chat audio. | |
--- @field VoiceChatFadeTime integer The fade time for voice chat audio. | |
const.VoiceChatForcedSampleRate = 11025 | |
const.VoiceChatSoundType = "VoiceChat" | |
const.VoiceChatMaxSilence = 10000 | |
const.VoiceChatFadeTime = 300 | |
-------- UI Scale constants | |
--- @field MinUserUIScale integer The minimum allowed user UI scale. | |
--- @field MaxUserUIScaleLowRes integer The maximum allowed user UI scale for low resolution displays. | |
--- @field MaxUserUIScaleHighRes integer The maximum allowed user UI scale for high resolution displays. | |
--- @field ControllerUIScale integer The additional scale applied when using a gamepad or controller. | |
const.MinUserUIScale = 65 | |
const.MaxUserUIScaleLowRes = 110 | |
const.MaxUserUIScaleHighRes = 135 | |
const.ControllerUIScale = const.ControllerUIScale or 111 -- additional scale applied when using gamepad/controller | |
-------- Display Area Margin constants | |
--- @field MinDisplayAreaMargin integer The minimum allowed display area margin. | |
--- @field MaxDisplayAreaMargin integer The maximum allowed display area margin. | |
const.MinDisplayAreaMargin = 0 | |
const.MaxDisplayAreaMargin = 10 | |
--- @field UIScaleDAMDependant boolean | |
--- Indicates whether the UI scale is dependent on the display area margin. | |
const.UIScaleDAMDependant = false | |
--[[ | |
-- The following code measures the resolving of constants between two sequential calls to dump_const_use(). | |
-- Sample use - CreateGameTimeThread(function () dump_const_use() Sleep(10000) dump_const_use() end) | |
local org_const = const | |
const = {} | |
const_access_count = 0 | |
const_access = {} | |
setmetatable(const, { | |
__index = function (t, k) | |
const_access_count = const_access_count + 1 | |
const_access[k] = (const_access[k] or 0) + 1 | |
return org_const[k] | |
end, | |
__newindex = function (t, k, v) | |
org_const[k] = v | |
end, | |
}) | |
function dump_const_use() | |
print("") | |
print("total const access count " .. const_access_count) | |
local t = {} | |
for k,v in pairs(const_access) do | |
table.insert(t, {key = k, value = v}) | |
end | |
table.sort(t, function (a, b) return a.value > b.value end) | |
for i = 1, #t do | |
print(t[i].key .. " " .. t[i].value) | |
end | |
const_access = {} | |
const_access_count = 0 | |
end | |
--]] | |
-- Destroyable | |
--- @class const | |
--- Defines various constants used throughout the codebase. | |
--- The volume of a small entity, calculated as the cube of the game unit measurement `guim`. | |
const.EntityVolumeSmall = guim * guim * guim | |
const.EntityVolumeMedium = 3 * const.EntityVolumeSmall | |
-- Wind | |
--- The maximum strength of the wind in the game world. | |
const.WindMaxStrength = 4096 | |
const.WindMarkerMaxRange = 50 * guim | |
const.WindMarkerAttenuationRange = 80 * guim | |
const.StrongWindThreshold = 100 -- percent of max wind | |
--- Defines a set of combo items for wind modifier masks. | |
--- | |
--- The `WindModifierMaskComboItems` table contains a list of combo items that can be used to select a wind modifier mask. Each combo item has a `text` field that represents the display text for the item, and a `value` field that represents the corresponding numeric value for the mask. | |
--- | |
--- The first item in the table represents "None", with a value of 0, indicating that no wind modifier mask is applied. | |
--- The second item in the table represents "All", with a value of -1, indicating that all wind modifier masks are applied. | |
--- | |
--- This table is likely used in a user interface or configuration setting to allow the player to select the desired wind modifier mask. | |
const.WindModifierMaskComboItems = {{text="None", value=0}, {text="All", value=-1}} | |
-- Water | |
--- The minimum offset in the Z-axis for water effects. | |
const.FXWaterMinOffsetZ = -guim / 10 | |
const.FXWaterMaxOffsetZ = guim / 10 | |
const.FXDecalMinOffsetZ = -guim / 10 | |
const.FXDecalMaxOffsetZ = guim / 10 | |
const.FXShallowWaterOffsetZ = 0 | |
-------------------------------------------------------------------------------------------------------------------- | |