improve readme, rename :iterate to :members

This commit is contained in:
Redo
2025-10-01 20:36:03 -07:00
parent b5dc7988f5
commit a6d7fd2c98
2 changed files with 25 additions and 26 deletions

View File

@@ -12,7 +12,7 @@
`'print('hello world')` - Execute Lua code in the console by prepending a `'` (single quote)
`luaeval("code");` - Eval Lua code
`luacall("funcName", %args);` - Call a Lua global function
`luaexec("fileName");` - Execute a Lua file
`luaexec("fileName");` - Execute a Lua file. Path rules are the same as executing .cs files.
`luaget("varName");` - Read a Lua global variable
`luaset("varName");` - Write a Lua global variable
@@ -31,15 +31,16 @@
`object.key = value` - Associate Lua data with a Torque object
`object:method(args)` - Call a Torque object method
`object[index]` - Access a member of a Torque set or group
`for obj in object:iterate() do` - Iterate members of a Torque set or group
`for childIndex, child in object:members() do` - Iterate objects within of a Torque set or group. Indices start at 0 like in Torque.
### Advanced
`bl.schedule(function, args...)` - Schedule a Lua function to be called later
`bl.raycast(vector{startPosX,y,z}, vector{endPosX,y,z}, 'typeMask'/{'typeMasks',...}, ignoreObject...?)` - Same as containerRaycast in Torque. typeMasks are 'player', 'brick', etc
`for object in bl.boxSearch(vector{centerX,y,z}, vector{sizeX,y,z}, 'typeMask'/{'typeMasks',...}) do` - Similar to containerBoxSearch, used as an iterator
`for object in bl.radiusSearch(vector{centerX,y,z}, radius, 'typeMask'/{'typeMasks',...}) do` - Similar to containerBoxSearch, used as an iterator
`bl.servercmd('commandName', function(client, args...) code() end)` - Register a /-command on the server
`bl.clientcmd('commandName', function(args...) code() end)` - Register a client command on the client
`sched = bl.schedule(timeMs, function, args...)` - Schedule a Lua function to be called later, similar to schedule in Torque
`sched:cancel()` - Cancel a previously scheduled timer
`hitObject, hisPos, hitNormal = bl.raycast(vector{startPosX,y,z}, vector{endPosX,y,z}, 'typeMask'/{'typeMasks',...}, ignoreObject...?)` - Cast a ray in the world over objects of the specified type(s) (possibly excluding some objects), and return the object hit, the position of the hit, and the normal vector to the surface hit.
`for object in bl.boxSearch(vector{centerX,y,z}, vector{sizeX,y,z}, 'typeMask'/{'typeMasks',...}) do` - Find all objects in the world of the specified type(s) whose bounding box overlaps with a specific box
`for object in bl.radiusSearch(vector{centerX,y,z}, radius, 'typeMask'/{'typeMasks',...}) do` - Find all objects of the specified type(s) whose bounding box overlaps with a specified sphere
`bl.serverCmd('commandName', function(client, args...) code() end)` - Register a /-command on the server
`bl.clientCmd('commandName', function(args...) code() end)` - Register a client command on the client
### Packages/Hooks
`bl.hook('packageName', 'functionName', 'before'/'after'/'override', function(args...) code() end)` - Hook a Torque function with a Lua function
@@ -56,8 +57,7 @@
## Type Conversion
When a TorqueScript function is called from Lua or vice-versa, the arguments and return value must be converted between the two languages' type systems.
TorqueScript has no type information; all values in TorqueScript are strings.
So, it's necessary to make some inferences when converting values between the two languages.
TorqueScript has no type information; all values in TorqueScript are strings. So, it's necessary to make some inferences when converting values between the two languages.
### From TorqueScript to Lua
- Any numeric value becomes a Lua `number`, except as specified with `ts.type`, which may convert a value into a `boolean` or a Torque object container.
- The empty string "" becomes `nil`
@@ -74,5 +74,4 @@ So, it's necessary to make some inferences when converting values between the tw
- Tables cannot be passed and will throw an error
## Unsafe Mode
BlockLua-Unsafe.dll can be used in place of BlockLua.dll, to remove the sandboxing of Lua code.
This allows Lua code to access any file and use any library, including ffi.
BlockLua-Unsafe.dll can be used in place of BlockLua.dll, to remove the sandboxing of Lua code. This allows Lua code to access any file and use any library, including ffi.

View File

@@ -306,10 +306,10 @@ local tsObjectMeta = {
error('ts object __len: object has no getCount method', 2) end
return tonumber(_bllua_ts.callobj(t._tsObjectId, 'getCount'))
end,
-- object:iterate()
-- object:members()
-- Return an iterator for Torque objects with the getCount and getObject methods
-- for index, object in group:iterate() do ... end
iterate = function(t)
-- for index, object in group:members() do ... end
members = function(t)
if t==nil then
error('ts object method: be sure to use :func() not .func()', 2) end
if t._deleted then
@@ -317,7 +317,7 @@ local tsObjectMeta = {
if not (
tsIsFunctionNs(t._tsNamespace, 'getCount' ) and
tsIsFunctionNs(t._tsNamespace, 'getObject')) then
error('ts object :iterate() - '..
error('ts object :members() - '..
'Object does not have getCount and getObject methods', 2) end
local count = tonumber(_bllua_ts.callobj(t._tsObjectId, 'getCount'))
local idx = 0