Skip to content

Commit f5cbb59

Browse files
author
Roberto De Ioris
committed
added support for delegate Tick(), required for 20tab#59
1 parent 3d16be6 commit f5cbb59

3 files changed

Lines changed: 31 additions & 2 deletions

File tree

‎Source/UnrealEnginePython/Private/UEPyEngine.cpp‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -456,8 +456,8 @@ PyObject *py_unreal_engine_add_ticker(PyObject * self, PyObject * args) {
456456
FTickerDelegate ticker_delegate;
457457
UPythonDelegate *py_delegate = NewObject<UPythonDelegate>();
458458
py_delegate->SetPyCallable(py_callable);
459-
// fake UFUNCTION for bypassing checks
460-
ticker_delegate.BindUFunction(py_delegate, FName("PyFakeCallable"));
459+
460+
ticker_delegate.BindUObject(py_delegate, &UPythonDelegate::Tick);
461461

462462
// avoid the delegate to be GC'ed
463463
py_delegate->AddToRoot();

‎Source/UnrealEnginePython/Public/PythonDelegate.cpp‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,17 @@ void UPythonDelegate::ProcessEvent(UFunction *function, void *Parms)
5353
unreal_engine_py_log_error();
5454
return;
5555
}
56+
// currently useless as events do not return a value
57+
/*
58+
if (signature_set) {
59+
UProperty *return_property = signature->GetReturnProperty();
60+
if (return_property && signature->ReturnValueOffset != MAX_uint16) {
61+
if (!ue_py_convert_pyobject(ret, return_property, (uint8 *)Parms)) {
62+
UE_LOG(LogPython, Error, TEXT("Invalid return value type for delegate"));
63+
}
64+
}
65+
}
66+
*/
5667
Py_DECREF(ret);
5768
}
5869

@@ -82,6 +93,22 @@ void UPythonDelegate::PyInputAxisHandler(float value)
8293
Py_DECREF(ret);
8394
}
8495

96+
bool UPythonDelegate::Tick(float DeltaTime)
97+
{
98+
FScopePythonGIL gil;
99+
PyObject *ret = PyObject_CallFunction(py_callable, (char *)"f", DeltaTime);
100+
if (!ret) {
101+
unreal_engine_py_log_error();
102+
return false;
103+
}
104+
if (PyObject_IsTrue(ret)) {
105+
Py_DECREF(ret);
106+
return true;
107+
}
108+
Py_DECREF(ret);
109+
return false;
110+
}
111+
85112
UPythonDelegate::~UPythonDelegate()
86113
{
87114
FScopePythonGIL gil;

‎Source/UnrealEnginePython/Public/PythonDelegate.h‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class UPythonDelegate : public UObject
1818
void PyInputHandler();
1919
void PyInputAxisHandler(float value);
2020

21+
bool Tick(float DeltaTime);
22+
2123
private:
2224
UFunction *signature;
2325
bool signature_set;

0 commit comments

Comments
 (0)