User:Master-athmos: Difference between revisions

From Spring
Jump to navigationJump to search
No edit summary
Replaced content with "Development < Lua Scripting < {{FULLPAGENAME}} <span class="warning">These functions are ONLY available if the graphic board supp..."
 
(8 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[Engine_Development|Development]] < [[Lua_Scripting|Lua Scripting]] < {{FULLPAGENAME}}
[[Engine_Development|Development]] < [[Lua_Scripting|Lua Scripting]] < {{FULLPAGENAME}}
=Unsynced Read=


== Replay/Spectating ==
<span class="warning">These functions are ONLY available if the graphic board supports GLSL.<br><br> Please test in your scripts if one of them exists before you use them!</span>


{{LuaCallout
|prefix = Spring.
|name = IsReplay
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} isReplay
|info =
}}


'''gl.CreateShader'''
  ({[ vertex  = "glsl code" ,]
    [ tcs      = "glsl code" ,]
    [ tes      = "glsl code" ,]
    [ geometry = "glsl code" ,]
    [ fragment = "glsl code" ,]
    [ uniform      = { uniformName = number value, ...} ,] <span class=note>(specify a Lua array as an argument to uniformName to initialize GLSL arrays)</span>
    [ uniformInt    = { uniformName = number value, ...} ,] <span class=note>(specify a Lua array as an argument to uniformName to initialize GLSL arrays)</span>
    [ uniformFloat  = { uniformName = number value, ...} ,] <span class=note>(specify a Lua array as an argument to uniformName to initialize GLSL arrays)</span>
    [ uniformMatrix = { uniformName = number value, ...} ,]
    [ geoInputType = number inType,]
    [ geoOutputType = number outType,]
    [ geoOutputVerts = number maxVerts,]
    [ definitions = "string of shader #defines", ]
  }) -> number shaderID


{{LuaCallout
* The "Vertex" or vertex-shader is your GLSL-Code as string, its written in a C-Dialect. This shader is busy deforming the geometry of a unit but it can not create new polygons. Use it for waves, wobbling surfaces etc.
|prefix = Spring.
|name = GetReplayLength
* The "Geometry" or Geometry-shader can create new vertices and vertice-stripes from points.  
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} timeInSeconds
|info = {{new|92.0}}
}}


* The "TCS" or Tesselation Control Shader controls how much tessellation a particular patch gets; it also defines the size of a patch, thus allowing it to augment data. It can also filter vertex data taken from the vertex shader. The main purpose of the TCS is to feed the tessellation levels to the Tessellation primitive generator stage, as well as to feed patch data (as its output values) to the Tessellation Evaluation Shader stage. TCS shader can be used with spring version >= 104.0.1-596 (maintenance), it's also available in develop branch of spring.


* The "TES" or Tesselation Evaluation Shader takes the abstract patch generated by the tessellation primitive generation stage, as well as the actual vertex data for the entire patch, and generates a particular vertex from it. Each TES invocation generates a single vertex. It can also take per-patch data provided by the Tessellation Control Shader. TES shader can be used with spring version >= 104.0.1-596 (maintenance), it's also available in develop branch of spring.


{{LuaCallout
* The "Fragment" or Fragment-shader (sometimes called pixel-Shader) is post processing the allready rendered picture (for example drawing stars on the sky)- remember textures are not always 2 dimensional pictures. They can contain information about the depth, or the third value marks areas and the strength at which these are processed.
|prefix = Spring.
|name = GetSpectatingState
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} spectating, {{type|bool}} fullView, {{type|bool}} fullSelect
|info =
}}


== Game/Menu Name ==
* The Uniforms are the values, you send along with the shader-program. To use them in the shader-program declare them like this:
<syntaxhighlight lang="c">uniform float frame;</syntaxhighlight>


{{LuaCallout
* From 101.0 onwards, the engine will automatically fill in an appropriately named uniform for team colour if it is declared;
|prefix = Spring.
<syntaxhighlight lang="c">uniform vec4 teamColor;</syntaxhighlight>
|name = GetGameName
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|string}} name
|info = {{new|104.0}}<br>Apparently returns {{xtaglink|Modinfo.lua|name}} .. {{xtaglink|Modinfo.lua|version}} from [[Modinfo.lua]]. E.g. "Spring: 1944 test-5640-ac2d15b".
}}


'''gl.DeleteShader'''
  ( number shaderID ) -> nil


'''gl.ActiveShader''' <font color="#55ee99">can be used in NON-drawing events (to update uniforms etc.)!</font>
  ( number shaderID, function [, arg1 [, arg2, ..]] ) -> nil


{{LuaCallout
'''gl.UseShader'''
|prefix = Spring.
  ( number shaderID ) -> boolean linked
|name = GetMenuName
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|string}} name
|info = {{new|104.0}}
}}


== ModUI ==
'''gl.GetShaderLog'''
  ( ) -> string "infoLog"


{{LuaCallout
'''gl.SetShaderParameter'''
|prefix = Spring.
<font color="#ff0000">Renamed to SetGeometryShaderParameter in spring version >= 104.0.1-596 (maintenance).</font>
|name = GetModUICtrl
<font color="#55ee99">needed by geometry shader programs (check the opengl GL_ARB_geometry_shader4 extension for glProgramParameteri)</font>
|arg1 =  
  ( number shaderID, number param, number value ) -> nil
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} ModUICtrl
|info =  
}}


== MyInfo ==
'''gl.SetTesselationShaderParameter'''
<font color="#0000ee">Available for spring versions >= 104.0.1-596 (maintenance).</font>
<font color="#55ee99">needed by tesselation shader programs (check the opengl GL_ARB_tessellation_shader extension for glProgramParameteri)</font>
  ( number param, number value ) -> nil


{{LuaCallout
'''gl.GetActiveUniforms'''
|prefix = Spring.
  ( number shaderID ) -> {  
|name = GetMyAllyTeamID
      [1] = { name = "name", type = "type", length = number length, size = number size },
|arg1 =  
      ...
|arg2 =  
    }
|arg3 =  
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} allyTeamID
|info =
}}


'''gl.GetUniformLocation'''
  ( number shaderID, name uniformName ) -> number locationID


{{LuaCallout
'''gl.Uniform'''
|prefix = Spring.
  ( number locationID, number f1 [,number f2 [,number f3 [,number f4]]] ) -> nil
|name = GetMyTeamID
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} teamID
|info =
}}


'''gl.UniformInt'''
  ( number locationID, number int1 [,number int2 [,number int3 [,number int4]]] ) -> nil


{{LuaCallout
'''gl.UniformArray''' {{new|95.0}}
|prefix = Spring.
  ( number locationID, number type, table uniforms ) -> nil
|name = GetMyPlayerID
<span class="note">type can be one of {1 = int, 2 = float, 3 = float matrix}. In 104.0 the maximum length of the uniforms table increased from 32 entries to 1024.</span>
|arg1 =  
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} playerID
|info =  
}}


== Local Player,Team,Ally ==
'''gl.UniformMatrix'''
<span class="note">Redundant same as the GetMyXYZ functions!</span>
   ( number locationID,  
 
    "shadow" |
{{LuaCallout
     "camera" |
|prefix = Spring.
    "caminv" |
|name = GetLocalPlayerID
    "camprj" |
|arg1 =
    number m1, number m2, number m3, number m4 |
|arg2 =
     number m1, ... , number m9 |
|arg3 =
    number m1, ... , number m16
|arg4 =
  ) -> nil
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} playerID
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetLocalTeamID
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} teamID
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetLocalTeamID
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} allyID
|info =
}}
 
== Team/Player Info ==
 
{{LuaCallout
|prefix = Spring.
|name = GetPlayerRoster
|arg1 = {{bracket}}{{type|number}} sortType{{rbracket}} {{pipe}} {{bracket}}{{type|number}} sortType{{rbracket}}, {{bracket}}{{type|bool}} showPathingPlayers{{rbracket}}
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|table}} playerTable
|info = "playerTable" contains:
}}
<pre>playerTable = {
            [1] = {
              string  name,
              number  playerID,
              number  teamID,
              number  allyTeamID,
              boolean spectator,
              number  cpuUsage,
              number  pingTime
            },
            etc...
          }
 
  if pingTime == -1, the player is pathfinding, in order to find the progress, use:
  cpuUsage&0x1 if it's PC or BO, cpuUsage& 0xFE to get path res, (cpuUsage>>8)*1000
  for the progress
   Sort codes:
    1 = Sort by allies  (the default)
    2 = Sort by teamID
    3 = Sort by playerName
    4 = Sort by CPU usage
    5 = Sort by ping time</pre>
 
 
{{LuaCallout
|prefix = Spring.
|name = GetTeamColor
|arg1 = {{type|number}} teamID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} r, {{type|number}} g, {{type|number}} b, {{type|number}} a
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetTeamOrigColor
|arg1 = {{type|number}} teamID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} r, {{type|number}} g, {{type|number}} b, {{type|number}} a
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetPlayerTraffic
|arg1 = {{type|number}} playerID {{bracket}}
|arg2 = {{type|number}} packetID {{rbracket}}
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} traffic
|info =
}}
 
== Sound ==
 
{{LuaCallout
|prefix = Spring.
|name = GetSoundStreamTime
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} playedTime, {{type|number}} totalTime,
|info =
}}
 
== Camera ==
 
{{LuaCallout
|prefix = Spring.
|name = GetCameraNames
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = { {{bracket|camName}} = {{type|number}} camNum, ... }
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetCameraState
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = { "name" = string, "mode" = number camIdx, state1 = number, state2 = number, ... }
|info = See [[Lua_camState]] for details about Spring.GetCameraState output.
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetCameraPosition
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} x, {{type|number}} y, {{type|number}} z
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetCameraDirection
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} forward_x, {{type|number}} forward_y, {{type|number}} forward_z
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetCameraFOV
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} vFov, {{type|number}} hFov
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetCameraVectors
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|table}} vectorTable
|info = vectorTable contains:
}}
<pre>vectorTable = {
    forward  = { [1] = number x, [2] = number y, [3] = number z },
    up        = { [1] = number x, [2] = number y, [3] = number z },
    right    = { [1] = number x, [2] = number y, [3] = number z },
    top      = { [1] = number x, [2] = number y, [3] = number z },
    bottom    = { [1] = number x, [2] = number y, [3] = number z },
     leftside  = { [1] = number x, [2] = number y, [3] = number z },
    rightside = { [1] = number x, [2] = number y, [3] = number z }
  }</pre>
 
=== Inview ===
 
{{LuaCallout
|prefix = Spring.
|name = GetVisibleUnits
|arg1 = {{bracket}}{{type|number}} teamID = -1 {{bracket}}
|arg2 = {{type|number}} radius = 30 {{bracket}}
|arg3 = {{type|bool}} Icons = true {{rbracket}}{{rbracket}}{{rbracket}}
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|table}} unitTable = { {{bracket|1}} = {{type|number}} unitID, ... }
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetVisibleFeatures
|arg1 = {{bracket}}{{type|number}} allyTeamID = -1 {{bracket}}
|arg2 = {{type|number}} radius = 30 {{bracket}}
|arg3 = {{type|bool}} Icons = true {{bracket}}
|arg4 = {{type|bool}} geos = true {{rbracket}}{{rbracket}}{{rbracket}}{{rbracket}}
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|table}} featureTable = { {{bracket|1}} = {{type|number}} featureID, ... }
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = IsAABBInView
|arg1 = {{type|number}} minX, {{type|number}} minY, {{type|number}} minZ
|arg2 = {{type|number}} maxX, {{type|number}} maxY, {{type|number}} maxZ
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} isInView
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = IsSphereInView
|arg1 = {{type|number}} x, {{type|number}} y, {{type|number}} z {{bracket}}
|arg2 = {{type|number}} radius {{rbracket}}
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} isInView
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = IsUnitIcon
|arg1 = {{type|number}} unitID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} isUnitIcon
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = IsUnitInView
|arg1 = {{type|number}} unitID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} isUnitInView
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = IsUnitVisible
|arg1 = {{type|number}} unitID {{bracket}}
|arg2 = {{type|number}} radius {{bracket}}
|arg3 = {{type|bool}} checkIcons {{rbracket}}{{rbracket}}
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} isVisible
|info =
}}
 
=== Screen Trace ===
 
 
{{LuaCallout
|prefix = Spring.
|name = WorldToScreenCoords
|arg1 = {{type|number}} x, {{type|number}} y, {{type|number}} z
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} x, {{type|number}} y, {{type|number}} z
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = TraceScreenRay
|arg1 = {{type|number}} mouseX, {{type|number}} mouseY, {{type|number}} mouseZ {{bracket}}
|arg2 = {{type|bool}} onlyCoords {{bracket}}
|arg3 = {{type|bool}} useMinimap {{bracket}}
|arg4 = {{type|bool}} includeSky {{bracket}}
|arg5 = {{type|bool}} ignoreWater {{bracket}}
|arg6 ={{type|number}} D {{rbracket}}{{rbracket}}{{rbracket}}{{rbracket}}{{rbracket}}
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|string}} unit, {{type|number}} unitID {{pipe}} {{type|string}} feature, {{type|number}} featureID {{pipe}} {{type|string}} ground, {{type|table}} coords = { {{bracket|1}} = {{type|number}} x, {{bracket|2}} = {{type|number}} y, {{bracket|3}} = {{type|number}} z }
|info = {{new|101.0}}
}}
<pre>Extended to allow a custom plane, parameters are (0, 1, 0, D=0) where D is the offset D can be specified in the third argument (if all the bools are false) or in the seventh (as shown). Intersection coordinates are returned in t[4],t[5],t[6] when the ray goes offmap and includeSky is true), or when no unit or feature is hit (or onlyCoords is true). This will only work for units & objects with the default collission sphere. Per Piece collission and custom collission objects are not supported. The unit must be selectable, to appear to a screen trace ray.
 
To get map coordinates under mouse cursor: input mouse coordinates obtained via GetMouseState() and pass true for the onlyCoords parameter. Be careful as going off map will result in nil:
  local mouseX, mouseY = Spring.GetMouseState()
  print ("Mouse coordinates: (" .. mouseX .. ", " .. mouseY .. ")")
  local desc, args = Spring.TraceScreenRay(mouseX, mouseY, true)
  if nil == desc then return end -- off map
  local x = args[1]
  local y = args[2]
  local z = args[3]
  print ("World coordinates: (" .. x .. ", " .. y .. ", " .. z .. ")")</pre>
 
 
{{LuaCallout
|prefix = Spring.
|name = GetPixelDir
|arg1 = {{type|number}} x
|arg2 = {{type|number}} y
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} dirX, {{type|number}} dirY, {{type|number}} dirZ
|info = {{New|95.0}}
}}
 
=== Screen & Window Geometry ===
 
 
{{LuaCallout
|prefix = Spring.
|name = GetViewGeometry
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} viewSizeX, {{type|number}} viewSizeY, {{type|number}} viewPosX, {{type|number}} viewPosY
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetWindowGeometry
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} winSizeX, {{type|number}} winSizeY, {{type|number}} winPosX, {{type|number}} winPosY
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetScreenGeometry
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} screenSizeX, {{type|number}} screenSizeY, {{type|number}} ZERO, {{type|number}} ZERO
|info = Is missing multiscreen support!
}}
 
== Unit ==
 
{{LuaCallout
|prefix = Spring.
|name = IsUnitAllied
|arg1 = {{type|number}} unitID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} isAllied
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetUnitViewPosition
|arg1 = {{type|number}} unitID {{bracket}}
|arg2 = {{type|bool}} midPos = false {{rbracket}}
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} x, {{type|number}} y, {{type|number}} z
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetUnitTransformMatrix
|arg1 = {{type|number}} unitID {{bracket}}
|arg2 = {{type|bool}} invert = false {{rbracket}}
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} a11, {{type|number}} a12 ..., {{type|number}} a44 (4x4 matrix)
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetUnitSelectionVolumeData
|arg1 = {{type|number}} unitID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} scaleX, {{type|number}} scaleY, {{type|number}} scaleZ, {{type|number}} offsetX, {{type|number}} offsetY, {{type|number}} offsetZ, {{type|number}} volumeType, {{type|number}} testType, {{type|number}} primaryAxis, {{type|bool}} disabled
|info =
}}
 
=== Selected Units ===
 
{{LuaCallout
|prefix = Spring.
|name = GetSelectedUnits
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = { {{bracket|1}} = {{type|number}} unitID, ... }
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetSelectedUnitsSorted
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = { {{bracket}}{{type|number}} unitDefID{{rbracket}} = { {{bracket|1}} = {{bracket}}{{type|number}} unitID{{rbracket}}, etc... }, ... }
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetSelectedUnitsCounts
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = { {{bracket}}{{type|number}} unitDefID{{rbracket}} = {{type|number}} count, etc... }
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetSelectedUnitsCount
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} count
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = IsUnitSelected
|arg1 = {{type|number}} unitID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} isSelected
|info =
}}
 
=== Unit Groups ===
 
{{LuaCallout
|prefix = Spring.
|name = GetUnitGroup
|arg1 = {{type|number}} unitID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} groupNumber
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetGroupList
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} { {{bracket|number}} = {{type|number}} unitCount, ... }
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetSelectedGroup
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} groupNumber
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetGroupAIName
|arg1 = {{type|number}} groupID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|string}} aiName
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetGroupAIList
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = { {{bracket|1}} = {{type|string}} aiName, ... }
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetGroupUnits
|arg1 = {{type|number}} groupID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} { {{bracket|1}} = {{type|number}} unitID, ... }
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetGroupUnitsSorted
|arg1 = {{type|number}} groupID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} { {{bracket}}{{type|number}} unitDefID{{rbracket}} = { {{type|number}} unitID, ... }, ... }
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetGroupUnitsCounts
|arg1 = {{type|number}} groupID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} { {{bracket}}{{type|number}} unitDefID{{rbracket}} = {{type|number}} count, ... }
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetGroupUnitsCount
|arg1 = {{type|number}} groupID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} count
|info =
}}
 
== Feature ==
 
{{LuaCallout
|prefix = Spring.
|name = GetFeatureSelectionVolumeData
|arg1 = {{type|number}} unitID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} scaleX, {{type|number}} scaleY, {{type|number}} scaleZ, {{type|number}} offsetX, {{type|number}} offsetY, {{type|number}} offsetZ, {{type|number}} volumeType, {{type|number}} testType, {{type|number}} primaryAxis, {{type|bool}} disabled
|info =
}}
 
== Projectiles ==
 
{{LuaCallout
|prefix = Spring.
|name = GetVisibleProjectiles
|arg1 = {{bracket}} {{type|number}} allyTeamID = -1 {{bracket}}
|arg2 = {{type|bool}} addSyncedProjectiles = true {{bracket}}
|arg3 = {{type|bool}} addWeaponProjectiles = true {{bracket}}
|arg4 = {{type|bool}} addPieceProjectiles = true {{rbracket}}{{rbracket}}{{rbracket}}{{rbracket}}
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} { {{bracket|1}} = {{type|number}} projectileID, ... }
|info =
}}
 
== UI ==
 
{{LuaCallout
|prefix = Spring.
|name = GetUICommands
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} { {{bracket|1}} = { command={{type|string}}, description={{type|string}}, synced={{type|bool}}, cheat={{type|bool}}}, ... }
|info = {{new|101.0}}<br>Returns a list of available [[UI commands]].
}}
 
=== GUI Settings ===
 
{{LuaCallout
|prefix = Spring.
|name = IsGUIHidden
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}}  {{type|bool}} isHidden
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = HaveShadows
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}}  {{type|bool}} haveShadows
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = HaveAdvShading
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} haveShading
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetWaterMode
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} mode, {{type|string}} mode
|info =
}}
<pre>  mode numbers:
      0 - basic
      1 - reflective
      2 - dynamic
      3 - refractive
      4 - bumpwater
      default - unknown</pre>
 
 
 
{{LuaCallout
|prefix = Spring.
|name = GetMapDrawMode
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|string}} "normal" {{pipe}} {{type|string}} "height" {{pipe}} {{type|string}} "metal" {{pipe}} {{type|string}} "pathTraversability" {{pipe}} {{type|string}} "los"
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetDrawSelectionInfo
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} drawSelectInfo
|info = Returns whether &quot;Selected units&quot; text is displayed.
}}
 
=== Unit & Feature GUI States ===
 
 
{{LuaCallout
|prefix = Spring.
|name = GetUnitLuaDraw
|arg1 = {{type|number}} unitID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} unitDraw
|info =
}}
 
 
 
{{LuaCallout
|prefix = Spring.
|name = GetUnitNoDraw
|arg1 = {{type|number}} unitID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} noDraw
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetUnitNoMinimap
|arg1 = {{type|number}} unitID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} noMinimap
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetUnitNoSelect
|arg1 = {{type|number}} unitID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} noSelect
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetFeatureLuaDraw
|arg1 = {{type|number}} featureID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} featureDraw
|info =
}}
 
 
 
{{LuaCallout
|prefix = Spring.
|name = GetFeatureNoDraw
|arg1 = {{type|number}} featureID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} noDraw
|info =
}}
 
=== Minimap ===
 
{{LuaCallout
|prefix = Spring.
|name = GetMiniMapGeometry
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} posX, {{type|number}} posY, {{type|number}} sizeX, {{type|number}} sizeY, {{type|bool}} minimized, {{type|bool}} maximized
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetMiniMapDualScreen
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} false {{pipe}} {{type|string}} "left" {{pipe}} {{type|string}} "right"
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = IsAboveMiniMap
|arg1 = {{type|number}} x
|arg2 = {{type|number}} y
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} isAbove
|info =
}}
 
=== (Build-)Menu ===
 
{{LuaCallout
|prefix = Spring.
|name = GetActiveCommand
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} index {{bracket}}, {{type|number}} cmd_id, {{type|number}} cmd_type, {{type|string}} cmd_name {{rbracket}}
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetDefaultCommand
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} index {{bracket}}, {{type|number}} cmd_id, {{type|number}} cmd_type, {{type|string}} cmd_name {{rbracket}}
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetActiveCmdDescs
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|table}} cmdDesc
|info = cmdDesc contains:
}}
<pre>cmdDesc = {
     [1] = {
      id=number,
      type=number,
      name=string,
      action=string,
      tooltip=string,
      texture=string,
      cursor=string,
      hidden=boolean,
      disabled=boolean,
      showUnique=boolean,
      onlyTexture=boolean,
      params = { [1] = string, .. }
    }, ...
  }</pre>
 
 
{{LuaCallout
|prefix = Spring.
|name = GetActiveCmdDesc
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|table}} cmdDesc
|info = cmdDesc contains:
}}
<pre>cmdDesc = {
      id=number,
      type=number,
      name=string,
      action=string,
      tooltip=string,
      texture=string,
      cursor=string,
      hidden=boolean,
      disabled=boolean,
      showUnique=boolean,
      onlyTexture=boolean,
      params = { [1] = string, .. }
  }</pre>
 
 
{{LuaCallout
|prefix = Spring.
|name = GetCmdDescIndex
|arg1 = {{type|number}} cmdID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} index
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetActivePage
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} pageNum, {{type|number}} maxPages
|info =
}}
 
=== Build Facing ===
 
{{LuaCallout
|prefix = Spring.
|name = GetBuildFacing
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} facing
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetBuildSpacing
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} spacing
|info =
}}
 
=== GatherMode & InvertQueueKey ===
 
{{LuaCallout
|prefix = Spring.
|name = GetGatherMode
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} gatherMode
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetInvertQueueKey
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} queueKey
|info =
}}
 
=== Mouse States ===
 
{{LuaCallout
|prefix = Spring.
|name = GetMouseState
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} x, {{type|number}} y, {{type|bool}} leftPressed, {{type|bool}} middlePressed, {{type|bool}} rightPressed, {{type|bool}} offscreen
|info = {{new|104.0}} Sixth return value offscreen.<br>X, Y are the screen coordinates, not world ones. This coordinate system starts in the lower left corner. For world coordinates see Spring.TraceScreenRay.
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetMouseCursor
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|string }} name, {{type|number}} scale
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetMouseStartPosition
|arg1 = {{type|number}} mouseButton
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} pressedX, {{type|number}} pressedY, {{type|number}} camPosX, {{type|number}} camPosY, {{type|number}} camPosZ, {{type|number}} dirX, {{type|number}} dirY, {{type|number}} dirZ
|info =
}}
 
=== (Hot-)Keys ===
 
{{LuaCallout
|prefix = Spring.
|name = GetKeyState
|arg1 = {{type|number}} key
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} keyState
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetModKeyState
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} alt, {{type|bool}} ctrl, {{type|bool}} meta, {{type|bool}} shift
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetPressedKeys
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = { {{bracket}}{{type|number}} code{{rbracket}} = {{type|bool}}, {{bracket}}{{type|string}} name{{rbracket}} = {{type|bool}}, ... }
|info = {{new|99.0}}: {{type|string}} name
}}
 
 
 
{{LuaCallout
|prefix = Spring.
|name = GetKeyCode
|arg1 = {{type|string}} keysym
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} keyCode
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetKeySymbol
|arg1 = {{type|number}} key
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|string}} "keysym1", {{type|string}} "keysym2"
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetKeyBindings
|arg1 = {{type|string}} keyset
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|table}} keyBindings
|info = keyBindings contains:
}}
<pre>keyBindings = {
    [1] = {
      [string actionCmd] = string actionExtra,
      command  = string actionCmd,    {{new|97}}
      boundWith = string boundWith,    {{new|97}}
      extra    = string actionExtra,  {{new|97}}
    }, ...
  }</pre>
 
 
{{LuaCallout
|prefix = Spring.
|name = GetActionHotKeys
|arg1 = {{type|string}} action
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} { {{bracket|1}} = {{type|string}} hotKey, ... }
|info =
}}
 
=== Console ===
 
 
{{LuaCallout
|prefix = Spring.
|name = GetLastMessagePositions
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} { {{bracket|1}} = { {{type|number}} x, {{type|number}} y, {{type|number}} z }, ... }
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetConsoleBuffer
|arg1 = {{bracket}}{{type|number}} maxLines{{rbracket}}
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} { {{bracket|1}} = { text = {{type|string}}, priority = {{type|number}} }, ... }
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetCurrentTooltip
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|string}} tooltip
|info =
}}
 
=== LOS Colors ===
 
{{LuaCallout
|prefix = Spring.
|name = GetLosViewColors
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|table}} always = {r,g,b}, {{type|table}} LOS = {r,g,b}, {{type|table}} radar = {r,g,b}, {{type|table}} jam = {r,g,b}, {{type|table}} radar2 = {r,g,b}
|info = {{new|100}}
}}
 
== Config ==
 
{{LuaCallout
|prefix = Spring.
|name = GetConfigParams
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|table}} configParams
|info = Same information as <code>spring --list-config-vars</code><br>configParams contains:
}}
<pre>configParams = {
    {
      name = string,
      type = string,
      [ description = string, ]
      [ defaultValue = string, ]
      [ minimumValue = string, ]
      [ maximumValue = string, ]
      [ safemodeValue = string, ]
      [ declarationFile = string, ]
      [ declarationLine = number, ]
      [ readOnly = bool, ]
    },
    ...
  }</pre>
 
 
{{LuaCallout
|prefix = Spring.
|name = GetConfigInt
|arg1 = {{type|string}} name {{bracket}}
|arg2 = {{type|number}} default {{rbracket}}
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} configInt
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetConfigFloat
|arg1 = {{type|string}} name {{bracket}}
|arg2 = {{type|number}} default {{rbracket}}
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} configFloat
|info = {{new|104.0}}
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetConfigString
|arg1 = {{type|string}} name {{bracket}}
|arg2 = {{type|number}} default {{rbracket}}
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|string}} configString
|info =
}}
 
== FPS & GetDrawFrame ==
 
 
{{LuaCallout
|prefix = Spring.
|name = GetFPS
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} fps
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetDrawFrame
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} low_16bit, {{type|number}} high_16bit
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetVideoCapturingMode
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} videoCaptureAllowed
|info = {{new|104.0}}
}}
 
== Time ==
 
{{LuaCallout
|prefix = Spring.
|name = GetGameSpeed
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} userSpeedFactor, {{type|number}} speedFactor, {{type|bool}} paused
|info = {{new|98.0}}
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetGameState
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} finishedLoading, {{type|bool}} loadedFromSave, {{type|bool}} locallyPaused, {{type|bool}} laggingWrtExpectedFromSimtime
|info = {{new|105.0}}
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetFrameTimeOffset
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} offset
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetLastUpdateSeconds
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} lastUpdateSeconds
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetHasLag
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} hasLag
|info =
}}
 
 
 
{{LuaCallout
|prefix = Spring.
|name = GetTimer
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|timer}}
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GetFrameTimer
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|timer}}
|info = {{new|102.0}}<br>Get a timer for the start of the frame, this should give better results for camera interpolations.
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = DiffTimers
|arg1 = {{type|timer}} cur
|arg2 = {{type|timer}} ago {{bracket}}
|arg3 = {{type|bool}} inMilliseconds {{rbracket}}
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} seconds
|info = {{New|95.0}}<br>Optional third argument (boolean) to return dt in milliseconds.
}}
 
== Rendering ==
 
{{LuaCallout
|prefix = Spring.
|name = GetMapSquareTexture
|arg1 = {{type|number}} texSqrX, {{type|number}} texSqrY
|arg2 = {{type|number}} texMipLvl
|arg3 = {{type|string}} luaTexName
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} success
|info =
}}
 
== Logging ==
 
{{LuaCallout
|prefix = Spring.
|name = GetLogSections
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|table}} logSections = { "KeyBindings" = LOG.INFO, "Font" = LOG.INFO, "Sound" = LOG.WARNING, ... }
|info =
}}
 
== Misc ==
 
{{LuaCallout
|prefix = Spring.
|name = GetClipboard
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|string}} text
|info = {{new|98.0}}
}}


[[category: Lua]]
[[category: Lua]]

Latest revision as of 21:51, 21 April 2021

Development < Lua Scripting < User:Master-athmos

These functions are ONLY available if the graphic board supports GLSL.

Please test in your scripts if one of them exists before you use them!


gl.CreateShader

 ({[ vertex   = "glsl code" ,]
   [ tcs      = "glsl code" ,]
   [ tes      = "glsl code" ,]
   [ geometry = "glsl code" ,]
   [ fragment = "glsl code" ,]
   [ uniform       = { uniformName = number value, ...} ,] (specify a Lua array as an argument to uniformName to initialize GLSL arrays)
   [ uniformInt    = { uniformName = number value, ...} ,] (specify a Lua array as an argument to uniformName to initialize GLSL arrays)
   [ uniformFloat  = { uniformName = number value, ...} ,] (specify a Lua array as an argument to uniformName to initialize GLSL arrays)
   [ uniformMatrix = { uniformName = number value, ...} ,]
   [ geoInputType = number inType,]
   [ geoOutputType = number outType,]
   [ geoOutputVerts = number maxVerts,]
   [ definitions = "string of shader #defines", ]
 }) -> number shaderID
  • The "Vertex" or vertex-shader is your GLSL-Code as string, its written in a C-Dialect. This shader is busy deforming the geometry of a unit but it can not create new polygons. Use it for waves, wobbling surfaces etc.
  • The "Geometry" or Geometry-shader can create new vertices and vertice-stripes from points.
  • The "TCS" or Tesselation Control Shader controls how much tessellation a particular patch gets; it also defines the size of a patch, thus allowing it to augment data. It can also filter vertex data taken from the vertex shader. The main purpose of the TCS is to feed the tessellation levels to the Tessellation primitive generator stage, as well as to feed patch data (as its output values) to the Tessellation Evaluation Shader stage. TCS shader can be used with spring version >= 104.0.1-596 (maintenance), it's also available in develop branch of spring.
  • The "TES" or Tesselation Evaluation Shader takes the abstract patch generated by the tessellation primitive generation stage, as well as the actual vertex data for the entire patch, and generates a particular vertex from it. Each TES invocation generates a single vertex. It can also take per-patch data provided by the Tessellation Control Shader. TES shader can be used with spring version >= 104.0.1-596 (maintenance), it's also available in develop branch of spring.
  • The "Fragment" or Fragment-shader (sometimes called pixel-Shader) is post processing the allready rendered picture (for example drawing stars on the sky)- remember textures are not always 2 dimensional pictures. They can contain information about the depth, or the third value marks areas and the strength at which these are processed.
  • The Uniforms are the values, you send along with the shader-program. To use them in the shader-program declare them like this:

<syntaxhighlight lang="c">uniform float frame;</syntaxhighlight>

  • From 101.0 onwards, the engine will automatically fill in an appropriately named uniform for team colour if it is declared;

<syntaxhighlight lang="c">uniform vec4 teamColor;</syntaxhighlight>

gl.DeleteShader

 ( number shaderID ) -> nil

gl.ActiveShader can be used in NON-drawing events (to update uniforms etc.)!

 ( number shaderID, function [, arg1 [, arg2, ..]] ) -> nil

gl.UseShader

 ( number shaderID ) -> boolean linked

gl.GetShaderLog

 ( ) -> string "infoLog"

gl.SetShaderParameter Renamed to SetGeometryShaderParameter in spring version >= 104.0.1-596 (maintenance). needed by geometry shader programs (check the opengl GL_ARB_geometry_shader4 extension for glProgramParameteri)

 ( number shaderID, number param, number value ) -> nil

gl.SetTesselationShaderParameter Available for spring versions >= 104.0.1-596 (maintenance). needed by tesselation shader programs (check the opengl GL_ARB_tessellation_shader extension for glProgramParameteri)

 ( number param, number value ) -> nil

gl.GetActiveUniforms

 ( number shaderID ) -> { 
     [1] = { name = "name", type = "type", length = number length, size = number size },
     ...
   }

gl.GetUniformLocation

 ( number shaderID, name uniformName ) -> number locationID

gl.Uniform

 ( number locationID, number f1 [,number f2 [,number f3 [,number f4]]] ) -> nil

gl.UniformInt

 ( number locationID, number int1 [,number int2 [,number int3 [,number int4]]] ) -> nil

gl.UniformArray New in version 95.0

 ( number locationID, number type, table uniforms ) -> nil

type can be one of {1 = int, 2 = float, 3 = float matrix}. In 104.0 the maximum length of the uniforms table increased from 32 entries to 1024.

gl.UniformMatrix

 ( number locationID, 
   "shadow" |
   "camera" |
   "caminv" |
   "camprj" |
   number m1, number m2, number m3, number m4 |
   number m1, ... , number m9 |
   number m1, ... , number m16
 ) -> nil