286 lines
8.9 KiB
Markdown
286 lines
8.9 KiB
Markdown
# Lua API Documentation
|
||
|
||
This document describes the **Lua** functions, tables, and callbacks exposed by the C++ code. You can use these in your Lua scripts to interact with the engine, draw on the screen, or retrieve player data.
|
||
|
||
---
|
||
|
||
## Table of Contents
|
||
|
||
1. [Global Functions](#global-functions)
|
||
1. [GetPlayers()](#getplayers)
|
||
2. [Engine Table](#engine-table)
|
||
1. [Engine.LogDebug(message)](#enginelogdebugmessage)
|
||
2. [Engine.LogError(message)](#enginelogerrormessage)
|
||
3. [Engine.WorldToScreen(x, y, z)](#engineworldtoscreenx-y-z)
|
||
3. [Renderer Table](#renderer-table)
|
||
1. [Renderer.DrawBox(x, y, w, h, r, g, b, a)](#rendererdrawboxx-y-w-h-r-g-b-a)
|
||
2. [Renderer.DrawCircle(x, y, radius, r, g, b, a)](#rendererdrawcirclex-y-radius-r-g-b-a)
|
||
3. [Renderer.DrawLine(x1, y1, x2, y2, r, g, b, a)](#rendererdrawlinex1-y1-x2-y2-r-g-b-a)
|
||
4. [Renderer.DrawText(x, y, text, r, g, b, a)](#rendererdrawtextx-y-text-r-g-b-a)
|
||
4. [Lua Script Lifecycle](#lua-script-lifecycle)
|
||
1. [onInit()](#oninit)
|
||
2. [onTick()](#ontick)
|
||
5. [Player Table Structure](#player-table-structure)
|
||
6. [Example Lua Script](#example-lua-script)
|
||
|
||
---
|
||
|
||
## Global Functions
|
||
|
||
### GetPlayers()
|
||
|
||
```lua
|
||
players = GetPlayers()
|
||
```
|
||
|
||
- **Description**: Returns a table (array) of player objects.
|
||
- **Return Value**: A **table** where each element is a player’s sub-table containing:
|
||
- `name` (string)
|
||
- `ping` (integer)
|
||
- `health` (integer)
|
||
- `armor` (integer)
|
||
- `team` (integer)
|
||
- `distance` (number/float)
|
||
- `hasDefuser` (boolean)
|
||
- `hasHelmet` (boolean)
|
||
- `position` (table) with `x`, `y`, `z` (floats)
|
||
|
||
**Usage**:
|
||
|
||
```lua
|
||
local allPlayers = GetPlayers()
|
||
for i, player in ipairs(allPlayers) do
|
||
print("Player "..i.." name:", player.name)
|
||
print("Position x:", player.position.x, "y:", player.position.y, "z:", player.position.z)
|
||
end
|
||
```
|
||
|
||
---
|
||
|
||
## Engine Table
|
||
|
||
The `Engine` table exposes general engine-level functionalities.
|
||
|
||
### Engine.LogDebug(message)
|
||
|
||
```lua
|
||
Engine.LogDebug("Some debug message")
|
||
```
|
||
|
||
- **Description**: Logs a debug-level message to the console or in-game logger.
|
||
- **Parameters**:
|
||
- `message` (string): The message to log.
|
||
|
||
### Engine.LogError(message)
|
||
|
||
```lua
|
||
Engine.LogError("Something went wrong!")
|
||
```
|
||
|
||
- **Description**: Logs an error-level message.
|
||
- **Parameters**:
|
||
- `message` (string): The error message to log.
|
||
|
||
### Engine.WorldToScreen(x, y, z)
|
||
|
||
```lua
|
||
local success, sx, sy = Engine.WorldToScreen(worldX, worldY, worldZ)
|
||
if success then
|
||
print("Screen coordinates:", sx, sy)
|
||
else
|
||
print("Failed to project to screen.")
|
||
end
|
||
```
|
||
|
||
- **Description**: Converts 3D world coordinates (x, y, z) to 2D screen coordinates.
|
||
- **Parameters**:
|
||
- `x`, `y`, `z` (numbers/floats): The 3D position.
|
||
- **Return Values**:
|
||
1. `success` (boolean): `true` if the 3D point is visible on screen, `false` otherwise.
|
||
2. `sx`, `sy` (numbers/floats): The 2D screen coordinates if `success` is `true`.
|
||
|
||
|
||
### Engine.GetScreenSize()
|
||
|
||
```lua
|
||
local x, y = Engine.GetScreenSize()
|
||
```
|
||
|
||
- **Description**: Gets Screen Size
|
||
- **Parameters**:
|
||
- None
|
||
- **Return Values**:
|
||
1. `sx`, `sy` (numbers/floats): The Size of the active screen
|
||
|
||
---
|
||
|
||
## Renderer Table
|
||
|
||
The `Renderer` table provides drawing functions that use [ImGui](https://github.com/ocornut/imgui) behind the scenes. These functions are typically called during your script’s `onTick()` callback, and are rendered each frame.
|
||
|
||
### Renderer.DrawBox(x, y, w, h, r, g, b, a)
|
||
|
||
```lua
|
||
Renderer.DrawBox(100, 100, 200, 50, 1.0, 0.0, 0.0, 1.0)
|
||
```
|
||
|
||
- **Description**: Draws a filled rectangle at screen coordinates `(x, y)`.
|
||
- **Parameters**:
|
||
- `x`, `y`: Upper-left screen coordinates.
|
||
- `w`, `h`: Width and height.
|
||
- `r`, `g`, `b`, `a`: Color, in the range [0.0, 1.0].
|
||
|
||
### Renderer.DrawCircle(x, y, radius, r, g, b, a)
|
||
|
||
```lua
|
||
Renderer.DrawCircle(300, 300, 50, 0.0, 1.0, 0.0, 1.0)
|
||
```
|
||
|
||
- **Description**: Draws a filled circle at screen coordinates `(x, y)`.
|
||
- **Parameters**:
|
||
- `x`, `y`: Center screen coordinates.
|
||
- `radius`: Radius of the circle.
|
||
- `r`, `g`, `b`, `a`: Color, in the range [0.0, 1.0].
|
||
|
||
### Renderer.DrawLine(x1, y1, x2, y2, r, g, b, a)
|
||
|
||
```lua
|
||
Renderer.DrawLine(50, 50, 150, 150, 0.5, 0.5, 1.0, 1.0)
|
||
```
|
||
|
||
- **Description**: Draws a line from `(x1, y1)` to `(x2, y2)`.
|
||
- **Parameters**:
|
||
- `x1`, `y1`: Starting screen coordinate.
|
||
- `x2`, `y2`: Ending screen coordinate.
|
||
- `r`, `g`, `b`, `a`: Color, in the range [0.0, 1.0].
|
||
|
||
### Renderer.DrawText(x, y, text, r, g, b, a)
|
||
|
||
```lua
|
||
Renderer.DrawText(100, 200, "Hello, world!", 1.0, 1.0, 1.0, 1.0)
|
||
```
|
||
|
||
- **Description**: Draws text at screen coordinates `(x, y)`.
|
||
- **Parameters**:
|
||
- `x`, `y`: Position of the text.
|
||
- `text`: String to be displayed.
|
||
- `r`, `g`, `b`, `a`: Color, in the range [0.0, 1.0].
|
||
|
||
---
|
||
|
||
## Lua Script Lifecycle
|
||
|
||
When you load a Lua script in this system, the following callbacks are recognized:
|
||
|
||
### onInit()
|
||
|
||
- **Optional** function in your Lua script.
|
||
- Called **once** right before the first `onTick`.
|
||
- Typically used to initialize state or print a welcome message.
|
||
|
||
### onTick()
|
||
|
||
- **Required** if you want continuous updates.
|
||
- Called every frame or game update cycle.
|
||
- Useful for drawing, logic updates, or retrieving game data (e.g., players).
|
||
|
||
---
|
||
|
||
## Player Table Structure
|
||
|
||
`GetPlayers()` returns an array (1-based) of **player tables**, each containing:
|
||
|
||
- `name` (string): Player’s name
|
||
- `ping` (integer): Network ping
|
||
- `health` (integer): Health points
|
||
- `armor` (integer): Armor value
|
||
- `team` (integer): Team identifier
|
||
- `distance` (float): Distance from the local player or some reference point
|
||
- `hasDefuser` (boolean): Whether the player has a defuser kit
|
||
- `hasHelmet` (boolean): Whether the player has a helmet
|
||
- `position` (table): Sub-table with:
|
||
- `x` (float)
|
||
- `y` (float)
|
||
- `z` (float)
|
||
|
||
**Example**:
|
||
|
||
```lua
|
||
local players = GetPlayers()
|
||
for i, p in ipairs(players) do
|
||
print("---- Player "..i.." ----")
|
||
print("Name:", p.name)
|
||
print("Ping:", p.ping)
|
||
print("Health:", p.health)
|
||
print("Armor:", p.armor)
|
||
print("Team:", p.team)
|
||
print("Distance:", p.distance)
|
||
print("Has Defuser?:", p.hasDefuser)
|
||
print("Has Helmet?:", p.hasHelmet)
|
||
print("Position X:", p.position.x, "Y:", p.position.y, "Z:", p.position.z)
|
||
end
|
||
```
|
||
|
||
---
|
||
|
||
## Example Lua Script
|
||
|
||
Below is a minimal Lua script demonstrating how to use the exposed functions/tables:
|
||
|
||
```lua
|
||
-- ExampleScript.lua
|
||
|
||
-- Called once on script load
|
||
function onInit()
|
||
Engine.LogDebug("ExampleScript.lua: onInit() called!")
|
||
end
|
||
|
||
-- Called every game tick / frame update
|
||
function onTick()
|
||
-- 1) Retrieve players
|
||
local players = GetPlayers()
|
||
|
||
-- 2) Loop over players, draw name
|
||
for i, p in ipairs(players) do
|
||
-- Convert world position to screen
|
||
local success, sx, sy = Engine.WorldToScreen(p.position.x, p.position.y, p.position.z)
|
||
|
||
if success then
|
||
-- Draw the player's name in white
|
||
Renderer.DrawText(sx, sy, p.name, 1.0, 1.0, 1.0, 1.0)
|
||
|
||
-- Draw a circle around their position
|
||
Renderer.DrawCircle(sx, sy, 10, 1.0, 0.0, 0.0, 1.0)
|
||
end
|
||
end
|
||
|
||
-- 3) Draw some HUD elements
|
||
Renderer.DrawBox(10, 10, 200, 40, 0.0, 0.0, 0.0, 0.5)
|
||
Renderer.DrawText(20, 20, "HUD Title", 1.0, 1.0, 1.0, 1.0)
|
||
end
|
||
```
|
||
|
||
In this example:
|
||
|
||
1. `onInit()` logs a debug message.
|
||
2. `onTick()` retrieves all players, converts each player's 3D position to screen coordinates, and draws the player's name/circle at that position.
|
||
3. Draws a semi-transparent box (HUD) at the top-left of the screen with a title.
|
||
|
||
---
|
||
|
||
### Quick Reference
|
||
|
||
| **Function** | **Usage** |
|
||
|-------------------------------------|---------------------------------------------------------------------|
|
||
| **`GetPlayers()`** | Returns a list of player tables. |
|
||
| **`Engine.LogDebug(msg)`** | Logs a debug message. |
|
||
| **`Engine.LogError(msg)`** | Logs an error message. |
|
||
| **`Engine.WorldToScreen(x,y,z)`** | Converts world coords to screen coords. Returns `bool, sx, sy`. |
|
||
| **`Renderer.DrawBox(...)`** | Draws a filled rectangle (box). |
|
||
| **`Renderer.DrawCircle(...)`** | Draws a filled circle. |
|
||
| **`Renderer.DrawLine(...)`** | Draws a line between two points. |
|
||
| **`Renderer.DrawText(...)`** | Draws text on screen. |
|
||
| **`onInit()`** (Lua callback) | Called once when the script is loaded. |
|
||
| **`onTick()`** (Lua callback) | Called every frame or update cycle. |
|
||
|
||
Use these APIs in your Lua scripts to create overlays, debug messages, or build interactive features. |