Skip to content

Commit e0b79b0

Browse files
authored
Rework Signal and Callable (#831)
* Improve Custom Callables and add SignalConnector (#803) * Add CallableX and MethodCallableX classes (#829)
1 parent 541b9d7 commit e0b79b0

File tree

387 files changed

+7737
-4935
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

387 files changed

+7737
-4935
lines changed

harness/tests/src/main/java/godot/tests/JavaTestClass.java

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010

1111
@RegisterClass
1212
public class JavaTestClass extends Node {
13-
@RegisterSignal
14-
public Signal0 testSignal = Signal0.create(this, "test_signal");
15-
16-
@RegisterSignal(parameters = {"param1", "param2"})
17-
public Signal2<String, String> testSignal2 = Signal2.create(this, "test_signal_2");
13+
//@RegisterSignal
14+
//public Signal0 testSignal = Signal0.create(this, "test_signal");
15+
//
16+
//@RegisterSignal(parameters = {"param1", "param2"})
17+
//public Signal2<String, String> testSignal2 = Signal2.create(this, "test_signal_2");
1818

1919
// The following should NOT work as we cannot extract parameter names. The compiler checks should catch that and throw a build error
2020
// @RegisterSignal
@@ -71,15 +71,15 @@ public String greeting() {
7171
@RegisterProperty
7272
public Dictionary<Float, String> dictionary = new Dictionary<>(Float.class, String.class);
7373

74-
public LambdaCallable<Void> lambdaCallable = LambdaCallable0.create(
75-
Void.class,
76-
() -> {
77-
System.out.println("Hello from Callable");
78-
return null;
79-
}
80-
);
81-
82-
public NativeCallable methodCallable = Callable.create(this, StringNames.asStringName("DummyName"));
74+
//public LambdaCallable<Void> lambdaCallable = LambdaCallable0.create(
75+
// Void.class,
76+
// () -> {
77+
// System.out.println("Hello from Callable");
78+
// return null;
79+
// }
80+
//);
81+
//
82+
//public NativeCallable methodCallable = Callable.create(this, StringNames.asStringName("DummyName"));
8383

8484
@RegisterFunction
8585
@Override
@@ -96,12 +96,12 @@ public void _ready() {
9696

9797
@RegisterFunction
9898
public void connectAndTriggerSignal() {
99-
connect(
100-
StringNames.asStringName("test_signal"),
101-
new NativeCallable(this, StringNames.asStringName("signal_callback")),
102-
(int) ConnectFlags.ONE_SHOT.getValue()
103-
);
104-
emitSignal(StringNames.asStringName("test_signal"));
99+
//connect(
100+
// StringNames.asStringName("test_signal"),
101+
// new NativeCallable(this, StringNames.asStringName("signal_callback")),
102+
// (int) ConnectFlags.ONE_SHOT.getId()
103+
//);
104+
//emitSignal(StringNames.asStringName("test_signal"));
105105
}
106106

107107
@NotNull

harness/tests/src/main/kotlin/godot/tests/FuncRefTest.kt

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@ import godot.annotation.RegisterFunction
66
import godot.annotation.RegisterProperty
77
import godot.annotation.RegisterSignal
88
import godot.annotation.Rpc
9+
import godot.core.callable0
10+
import godot.core.callable1
911
import godot.core.signal0
10-
import godot.extension.call
11-
import godot.extension.callDeferred
12+
import godot.extension.connectMethod
1213

1314
@RegisterClass
1415
class FuncRefTest : Node() {
@@ -30,7 +31,7 @@ class FuncRefTest : Node() {
3031

3132
@RegisterFunction
3233
override fun _ready() {
33-
test.connect(this, FuncRefTest::testSignalCallback)
34+
test.connectMethod(this, FuncRefTest::testSignalCallback)
3435
}
3536

3637
@Rpc
@@ -51,12 +52,12 @@ class FuncRefTest : Node() {
5152

5253
@RegisterFunction
5354
fun testCallWithoutParam() {
54-
call(this::withoutParamCallback)
55+
callable0(this::withoutParamCallback).call()
5556
}
5657

5758
@RegisterFunction
5859
fun testCallDeferredWithoutParam() {
59-
callDeferred(this::withoutParamCallback)
60+
callable0(this::withoutParamCallback).callDeferred()
6061
}
6162

6263
@RegisterFunction
@@ -66,11 +67,11 @@ class FuncRefTest : Node() {
6667

6768
@RegisterFunction
6869
fun testCallWithParam() {
69-
call(this::withParamCallback, true)
70+
callable1(this::withParamCallback).call(true)
7071
}
7172

7273
@RegisterFunction
7374
fun testCallDeferredWithParam() {
74-
callDeferred(this::withParamCallback, true)
75+
callable1(this::withParamCallback).callDeferred(true)
7576
}
7677
}

harness/tests/src/main/kotlin/godot/tests/GodotStaticTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package godot.tests
33
import godot.api.Node
44
import godot.api.PackedScene
55
import godot.api.ResourceLoader
6-
import godot.extension.asStatic
6+
import godot.extension.api.asStatic
77

88
object GodotStaticDelegateTest {
99
var ref = (ResourceLoader.load("res://Spatial.tscn") as PackedScene?).asStatic()

harness/tests/src/main/kotlin/godot/tests/Invocation.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,11 @@ import godot.core.Vector2
3838
import godot.core.Vector3
3939
import godot.core.dictionaryOf
4040
import godot.core.variantArrayOf
41-
import godot.extension.getNodeAs
4241
import godot.registration.Range
4342
import godot.tests.subpackage.OtherScript
4443
import godot.common.util.RealT
44+
import godot.extension.api.getNodeAs
45+
import godot.extension.connectMethod
4546
import org.joda.time.DateTime
4647

4748
enum class TestEnum {
@@ -370,7 +371,7 @@ class Invocation : Node3D() {
370371
val path = NodePath("CanvasLayer/Button")
371372
val getNode2 = getNodeAs<Button>(path)
372373

373-
(getNodeOrNull(path) as Button?)?.pressed?.connect(
374+
(getNodeOrNull(path) as Button?)?.pressed?.connectMethod(
374375
invocation,
375376
OtherScript::hookNoParam
376377
)

harness/tests/src/main/kotlin/godot/tests/LambdaCallableTest.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import godot.annotation.RegisterProperty
77
import godot.annotation.RegisterSignal
88
import godot.core.Signal3
99
import godot.core.asCallable
10-
import godot.core.connect
1110
import godot.core.signal0
1211
import godot.core.signal3
12+
import godot.extension.connectLambda
1313

1414
@RegisterClass
1515
class LambdaCallableTest : Node() {
@@ -40,11 +40,11 @@ class LambdaCallableTest : Node() {
4040

4141
@RegisterFunction
4242
override fun _ready() {
43-
signalNoParam.connect {
43+
signalNoParam.connectLambda {
4444
hasSignalNoParamBeenTriggered = true
4545
}
4646

47-
signalWithParams.connect { p0, p1, p2 ->
47+
signalWithParams.connectLambda { p0, p1, p2 ->
4848
signalString = p0
4949
signalLong = p1
5050
signalNode = p2

harness/tests/src/main/kotlin/godot/tests/callable/CallableMethodBindTest.kt

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,12 @@ import godot.api.Node
44
import godot.annotation.RegisterClass
55
import godot.annotation.RegisterFunction
66
import godot.annotation.RegisterProperty
7-
import godot.core.NativeCallable
7+
import godot.core.Callable0
8+
import godot.core.Callable1
9+
import godot.core.Callable2
10+
import godot.core.Callable3
811
import godot.core.VariantArray
12+
import godot.core.callable3
913
import godot.core.variantArrayOf
1014
import godot.global.GD
1115

@@ -16,22 +20,28 @@ class CallableMethodBindTest: Node() {
1620

1721
@RegisterFunction
1822
fun callWithMethodWithAllBinds() {
19-
NativeCallable(this, CallableMethodBindTest::readySignalMethodBindTest).bind(1, 2, 3).call()
23+
val unboundCallable: Callable3<Unit, Int, Int, Int> = callable3(CallableMethodBindTest::readySignalMethodBindTest)
24+
val boundCallable: Callable0<Unit> = unboundCallable.bind(1, 2, 3)
25+
boundCallable.call()
2026
}
2127

2228
@RegisterFunction
2329
fun callWithMethodWithTwoBinds() {
24-
NativeCallable(this, CallableMethodBindTest::readySignalMethodBindTest).bind(2, 3).call(0)
30+
val unboundCallable: Callable3<Unit, Int, Int, Int> = callable3(CallableMethodBindTest::readySignalMethodBindTest)
31+
val boundCallable: Callable1<Unit, Int> = unboundCallable.bind(5, 6)
32+
boundCallable.call(4)
2533
}
2634

2735
@RegisterFunction
2836
fun callWithMethodWithOneBind() {
29-
NativeCallable(this, CallableMethodBindTest::readySignalMethodBindTest).bind(3).call(0, 0)
37+
val unboundCallable: Callable3<Unit, Int, Int, Int> = callable3(CallableMethodBindTest::readySignalMethodBindTest)
38+
val boundCallable: Callable2<Unit, Int, Int> = unboundCallable.bind(9)
39+
boundCallable.call(7, 8)
3040
}
3141

3242
@RegisterFunction
3343
fun callWithMethodWithNoBind() {
34-
NativeCallable(this, CallableMethodBindTest::readySignalMethodBindTest).bind().call(0, 0, 0)
44+
callable3(CallableMethodBindTest::readySignalMethodBindTest).call(10, 11, 12)
3545
}
3646

3747
@RegisterFunction

harness/tests/src/main/kotlin/godot/tests/coroutine/CoroutineTest.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,7 @@ class CoroutineTest : Object() {
124124
@RegisterFunction
125125
fun asyncLoadResource() {
126126
godotCoroutine {
127-
val resource = ResourceLoader.awaitLoadAs<PackedScene>("res://Spatial.tscn") { progress ->
128-
GD.print("Resource load progress: $progress")
129-
}
127+
val resource = ResourceLoader.awaitLoadAs<PackedScene>("res://Spatial.tscn")
130128

131129
GD.print("Resource: $resource")
132130

harness/tests/src/main/kotlin/godot/tests/signal/SignalTest.kt

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ import godot.core.Signal2
1111
import godot.core.VariantArray
1212
import godot.core.Vector2
1313
import godot.core.asStringName
14-
import godot.core.connect
1514
import godot.core.signal0
1615
import godot.core.signal1
1716
import godot.core.signal2
17+
import godot.extension.connectLambda
18+
import godot.extension.connectMethod
1819
import godot.tests.subpackage.OtherScript
1920

2021
@RegisterClass
@@ -44,34 +45,34 @@ class SignalTest : Node() {
4445
@RegisterFunction
4546
override fun _ready() {
4647

47-
noParamSignalDelegate.connect(otherScript, OtherScript::hookNoParam)
48-
oneParamSignalDelegate.connect(otherScript, OtherScript::hookOneParam)
49-
twoParamSignalDelegate.connect(otherScript, OtherScript::hookTwoParam)
48+
noParamSignalDelegate.connectMethod(otherScript, OtherScript::hookNoParam)
49+
oneParamSignalDelegate.connectMethod(otherScript, OtherScript::hookOneParam)
50+
twoParamSignalDelegate.connectMethod(otherScript, OtherScript::hookTwoParam)
5051

51-
noParamSignalDelegate.connect { println("noParam signal emitted") }
52-
oneParamSignalDelegate.connect { b -> println("oneParam signal emitted with $b") }
53-
twoParamSignalDelegate.connect { p0, p1 -> println("twoParam signal emitted with $p0 and $p1") }
52+
noParamSignalDelegate.connectLambda { println("noParam signal emitted") }
53+
oneParamSignalDelegate.connectLambda { b -> println("oneParam signal emitted with $b") }
54+
twoParamSignalDelegate.connectLambda { p0, p1 -> println("twoParam signal emitted with $p0 and $p1") }
5455

5556
noParamSignalDelegate.emit()
5657
oneParamSignalDelegate.emit(false)
5758
twoParamSignalDelegate.emit("My Awesome param !", this)
5859

5960

60-
noParamSignalField.connect(otherScript, OtherScript::hookNoParam)
61-
oneParamSignalField.connect(otherScript, OtherScript::hookOneParam)
62-
twoParamSignalField.connect(otherScript, OtherScript::hookTwoParam)
61+
noParamSignalField.connectMethod(otherScript, OtherScript::hookNoParam)
62+
oneParamSignalField.connectMethod(otherScript, OtherScript::hookOneParam)
63+
twoParamSignalField.connectMethod(otherScript, OtherScript::hookTwoParam)
6364

64-
noParamSignalField.connect { println("noParam signal emitted") }
65-
oneParamSignalField.connect { b -> println("oneParam signal emitted with $b") }
66-
twoParamSignalField.connect { p0, p1 -> println("twoParam signal emitted with $p0 and $p1") }
65+
noParamSignalField.connectLambda { println("noParam signal emitted") }
66+
oneParamSignalField.connectLambda { b -> println("oneParam signal emitted with $b") }
67+
twoParamSignalField.connectLambda { p0, p1 -> println("twoParam signal emitted with $p0 and $p1") }
6768

6869
noParamSignalField.emit()
6970
oneParamSignalField.emit(false)
7071
twoParamSignalField.emit("My Awesome param !", this)
7172

7273

73-
signalWithMultipleTargets.connect(this, SignalTest::targetFunctionOne)
74-
signalWithMultipleTargets.connect(this, SignalTest::targetFunctionTwo)
74+
signalWithMultipleTargets.connectMethod(this, SignalTest::targetFunctionOne)
75+
signalWithMultipleTargets.connectMethod(this, SignalTest::targetFunctionTwo)
7576
signalWithMultipleTargets.emit(Vector2(0, 0))
7677
}
7778

harness/tests/src/main/scala/godot/tests/HelloFromScala.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import godot.core.Signal2
77
@RegisterClass
88
class HelloFromScala extends Node {
99

10-
@RegisterSignal(parameters = Array("param1", "param2"))
11-
val mySignal: Signal2[String, String] = Signal2.create(this, "test_signal_2")
10+
//@RegisterSignal(parameters = Array("param1", "param2"))
11+
//val mySignal: Signal2[String, String] = Signal2.create(this, "test_signal_2")
1212

1313
@RegisterProperty
1414
var myInt: Int = 0

harness/tests/src/main/scala/godot/tests/ScalaTestClass.scala

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@ package godot.tests
33
import godot.annotation.{Export, RegisterClass, RegisterFunction, RegisterProperty, RegisterSignal}
44
import godot.api.Object.ConnectFlags
55
import godot.api.{Button, Node, RenderingServer}
6-
import godot.core.{Callable, Dictionary, GodotNotification, LambdaCallable, LambdaCallable0, NativeCallable, Signal0, Signal2, StringNames, VariantArray}
6+
import godot.core.{Callable, Dictionary, GodotNotification, LambdaCallable, LambdaCallable0, Signal0, Signal2, StringNames, VariantArray}
77
import org.jetbrains.annotations.NotNull
88

99
@RegisterClass
1010
class ScalaTestClass extends Node {
11-
@RegisterSignal
12-
val testSignal: Signal0 = Signal0.create(this, "test_signal")
13-
14-
@RegisterSignal
15-
val testSignal2: Signal2[String, String] = Signal2.create(this, "test_signal_2")
11+
//@RegisterSignal
12+
//val testSignal: Signal0 = Signal0.create(this, "test_signal")
13+
//
14+
//@RegisterSignal
15+
//val testSignal2: Signal2[String, String] = Signal2.create(this, "test_signal_2")
1616

1717
@Export
1818
@RegisterProperty
@@ -60,13 +60,13 @@ class ScalaTestClass extends Node {
6060
@RegisterProperty
6161
var dictionary: Dictionary[Float, String] = new Dictionary[Float, String](classOf[Float], classOf[String])
6262

63-
var lambdaCallable: LambdaCallable[Void] = LambdaCallable0.create(classOf[Void], () => {
64-
System.out.println("Hello from Callable")
65-
null
66-
67-
})
68-
69-
var methodCallable: NativeCallable = Callable.create(this, StringNames.asStringName("DummyName"))
63+
//var lambdaCallable: LambdaCallable[Void] = LambdaCallable0.create(classOf[Void], () => {
64+
// System.out.println("Hello from Callable")
65+
// null
66+
//
67+
//})
68+
//
69+
//var methodCallable: NativeCallable = Callable.create(this, StringNames.asStringName("DummyName"))
7070

7171
@RegisterFunction
7272
override def _ready(): Unit = {
@@ -76,19 +76,19 @@ class ScalaTestClass extends Node {
7676
RenderingServer.getDefaultClearColor
7777
}
7878

79-
@RegisterFunction
80-
def connectAndTriggerSignal(): Unit = {
81-
connect(StringNames.asStringName("test_signal"), new NativeCallable(this, StringNames.asStringName("signal_callback")), ConnectFlags.ONE_SHOT.getId.toInt)
82-
emitSignal(StringNames.asStringName("test_signal"))
83-
}
84-
85-
@NotNull
86-
override def _notification: GodotNotification = {
87-
godotNotification(this, (myself: ScalaTestClass, notification: Integer) => {
88-
System.out.println(notification)
89-
null
90-
})
91-
}
79+
//@RegisterFunction
80+
//def connectAndTriggerSignal(): Unit = {
81+
// connect(StringNames.asStringName("test_signal"), new NativeCallable(this, StringNames.asStringName("signal_callback")), ConnectFlags.ONE_SHOT.getId.toInt)
82+
// emitSignal(StringNames.asStringName("test_signal"))
83+
//}
84+
85+
//@NotNull
86+
//override def _notification: GodotNotification = {
87+
// godotNotification(this, (myself: ScalaTestClass, notification: Integer) => {
88+
// System.out.println(notification)
89+
// null
90+
// })
91+
//}
9292

9393
@RegisterFunction
9494
def signalCallback(): Unit = {

0 commit comments

Comments
 (0)