initial commit
This commit is contained in:
commit
ac521356cc
16 changed files with 751 additions and 0 deletions
9
demo/addons/onebit_lua/onebit_lua.gdextension
Normal file
9
demo/addons/onebit_lua/onebit_lua.gdextension
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
[configuration]
|
||||
|
||||
entry_symbol = "onebit_lua_library_init"
|
||||
compatibility_minimum = "4.6"
|
||||
|
||||
[libraries]
|
||||
|
||||
linux.debug.x86_64 = "res://addons/onebit_lua/bin/libonebit_lua.linux.template_debug.x86_64.so"
|
||||
linux.release.x86_64 = "res://addons/onebit_lua/bin/libonebit_lua.linux.template_release.x86_64.so"
|
||||
1
demo/addons/onebit_lua/onebit_lua.gdextension.uid
Normal file
1
demo/addons/onebit_lua/onebit_lua.gdextension.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://cokyuf5lvnqgw
|
||||
11
demo/project.godot
Normal file
11
demo/project.godot
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
config_version=5
|
||||
|
||||
[application]
|
||||
|
||||
config/name="OneBit Lua Runtime Demo"
|
||||
run/main_scene="res://test_runtime.tscn"
|
||||
config/features=PackedStringArray("4.6")
|
||||
|
||||
[native_extensions]
|
||||
|
||||
paths=["res://addons/onebit_lua/onebit_lua.gdextension"]
|
||||
70
demo/test_runtime.gd
Normal file
70
demo/test_runtime.gd
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
extends Node
|
||||
|
||||
|
||||
class QueryHost:
|
||||
extends RefCounted
|
||||
|
||||
func lua_query(_entity_id: int, query_name: String, params: Dictionary) -> Variant:
|
||||
print("lua_query: ", query_name, " ", params)
|
||||
match query_name:
|
||||
"sense.is_walkable":
|
||||
return params.get("x", 0) == 2 and params.get("y", 0) == 3
|
||||
"sense.find_nearest":
|
||||
return {
|
||||
"entity_id": 7,
|
||||
"distance": 4,
|
||||
"world_x": 32.0,
|
||||
"world_y": 48.0,
|
||||
"group": params.get("group", ""),
|
||||
}
|
||||
_:
|
||||
return null
|
||||
|
||||
|
||||
var query_host := QueryHost.new()
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var rt := OneBitLuaRuntime.new()
|
||||
rt.set_entity_id(42)
|
||||
rt.set_query_host(query_host)
|
||||
rt.set_instruction_budget(10000)
|
||||
|
||||
var loaded := rt.load_string("""
|
||||
return {
|
||||
api_version = 2,
|
||||
|
||||
on_update = function(ctx, state)
|
||||
state.count = (state.count or 0) + 1
|
||||
if not ctx.self.is_moving and sense.is_walkable(2, 3) then
|
||||
local nearest = sense.find_nearest("players")
|
||||
move.step(1, 0)
|
||||
log.say("tick", 1.0)
|
||||
end
|
||||
end
|
||||
}
|
||||
""")
|
||||
if not loaded.ok:
|
||||
push_error("load_string failed: " + str(loaded.error))
|
||||
get_tree().quit(1)
|
||||
return
|
||||
|
||||
var ctx := {
|
||||
"self": {
|
||||
"is_moving": false,
|
||||
},
|
||||
}
|
||||
var state := {}
|
||||
var result := rt.call_event("on_update", ctx, state, [])
|
||||
if not result.ok:
|
||||
push_error("call_event failed: " + str(result.error))
|
||||
get_tree().quit(1)
|
||||
return
|
||||
|
||||
if result.commands.size() != 1 or result.logs.size() != 1 or result.state.get("count", 0) != 1:
|
||||
push_error("unexpected result: " + str(result))
|
||||
get_tree().quit(1)
|
||||
return
|
||||
|
||||
print("OneBitLuaRuntime smoke test passed: ", result)
|
||||
get_tree().quit(0)
|
||||
1
demo/test_runtime.gd.uid
Normal file
1
demo/test_runtime.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://du60k7ew85w0j
|
||||
6
demo/test_runtime.tscn
Normal file
6
demo/test_runtime.tscn
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
[gd_scene load_steps=2 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://test_runtime.gd" id="1"]
|
||||
|
||||
[node name="TestRuntime" type="Node"]
|
||||
script = ExtResource("1")
|
||||
Loading…
Add table
Add a link
Reference in a new issue