Skip to content

Commit 0bdcb08

Browse files
committed
Implement LuaScript::_get_script_signal_list
1 parent 0b165e2 commit 0bdcb08

File tree

5 files changed

+34
-10
lines changed

5 files changed

+34
-10
lines changed

src/script-language/LuaScript.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,11 @@ bool LuaScript::_has_script_signal(const StringName &p_signal) const {
169169
}
170170

171171
TypedArray<Dictionary> LuaScript::_get_script_signal_list() const {
172-
// TODO
173-
return {};
172+
TypedArray<Dictionary> signals;
173+
for (auto [name, signal] : metadata.signals) {
174+
signals.append(signal.to_dictionary());
175+
}
176+
return signals;
174177
}
175178

176179
bool LuaScript::_has_property_default_value(const StringName &p_property) const {

src/script-language/LuaScriptLanguage.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -150,15 +150,17 @@ Dictionary LuaScriptLanguage::_validate(const String &script, const String &path
150150
Dictionary result;
151151
Variant f = lua_state->load_string(script, path);
152152
if (LuaError *error = Object::cast_to<LuaError>(f)) {
153-
auto line_re = RegEx::create_from_string(R":(\d+):");
154-
auto match = line_re->search(error->get_message());
155-
Dictionary error_dict;
156-
error_dict["path"] = path;
157-
error_dict["line"] = match->get_string().to_int();
158-
error_dict["column"] = 1;
159-
error_dict["message"] = error->get_message();
153+
if (validate_errors) {
154+
auto line_re = RegEx::create_from_string(R":(\d+):");
155+
auto match = line_re->search(error->get_message());
156+
Dictionary error_dict;
157+
error_dict["path"] = path;
158+
error_dict["line"] = match->get_string().to_int();
159+
error_dict["column"] = 1;
160+
error_dict["message"] = error->get_message();
161+
result["errors"] = Array::make(error_dict);
162+
}
160163
result["valid"] = false;
161-
result["errors"] = Array::make(error_dict);
162164
}
163165
else {
164166
result["valid"] = true;

src/script-language/LuaScriptMetadata.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ void LuaScriptMetadata::setup(const sol::table& t) {
6969
is_tool = to_variant(value).booleanize();
7070
}
7171
else if (auto signal = value.as<sol::optional<LuaScriptSignal>>()) {
72+
signal->name = name;
7273
signals.insert(name, *signal);
7374
}
7475
else if (auto property = value.as<sol::optional<LuaScriptProperty>>()) {

src/script-language/LuaScriptSignal.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,19 @@
2727

2828
namespace luagdextension {
2929

30+
MethodInfo LuaScriptSignal::to_method_info() const {
31+
MethodInfo mi;
32+
mi.name = name;
33+
for (int i = 0; i < arguments.size(); i++) {
34+
mi.arguments.push_back(PropertyInfo(Variant::Type::NIL, arguments[i]));
35+
}
36+
return mi;
37+
}
38+
39+
Dictionary LuaScriptSignal::to_dictionary() const {
40+
return to_method_info();
41+
}
42+
3043
static LuaScriptSignal lua_signal(sol::variadic_args arguments) {
3144
LuaScriptSignal signal = {
3245
.arguments = VariantArguments(arguments).get_array(),

src/script-language/LuaScriptSignal.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#ifndef __LUA_SCRIPT_SIGNAL_HPP__
2323
#define __LUA_SCRIPT_SIGNAL_HPP__
2424

25+
#include <godot_cpp/core/object.hpp>
2526
#include <godot_cpp/variant/variant.hpp>
2627

2728
typedef struct lua_State lua_State;
@@ -31,8 +32,12 @@ using namespace godot;
3132
namespace luagdextension {
3233

3334
struct LuaScriptSignal {
35+
StringName name;
3436
PackedStringArray arguments;
3537

38+
MethodInfo to_method_info() const;
39+
Dictionary to_dictionary() const;
40+
3641
static void register_lua(lua_State *L);
3742
};
3843

0 commit comments

Comments
 (0)