@ -264,7 +264,7 @@ namespace EditorPythonBindings
reinterpret_cast < PythonProxyNotificationHandler * > ( userData ) - > OnEventGenericHook ( eventName , eventIndex , result , numParameters , parameters ) ;
reinterpret_cast < PythonProxyNotificationHandler * > ( userData ) - > OnEventGenericHook ( eventName , eventIndex , result , numParameters , parameters ) ;
}
}
void OnEventGenericHook ( const char * eventName , [[maybe_unused]] int eventIndex, [[maybe_unused]] AZ : : BehaviorValueParameter * result , int numParameters , AZ : : BehaviorValueParameter * parameters )
void OnEventGenericHook ( const char * eventName , [[maybe_unused]] int eventIndex , AZ : : BehaviorValueParameter * result , int numParameters , AZ : : BehaviorValueParameter * parameters )
{
{
// find the callback for the event
// find the callback for the event
const auto & callbackEntry = m_callbackMap . find ( eventName ) ;
const auto & callbackEntry = m_callbackMap . find ( eventName ) ;
@ -299,12 +299,17 @@ namespace EditorPythonBindings
// reset/prepare the stack allocator
// reset/prepare the stack allocator
m_stackVariableAllocator = { } ;
m_stackVariableAllocator = { } ;
AZ : : BehaviorValueParameter coverted ;
// Reset the result parameter
m_resultParam = { } ;
const AZ : : u32 traits = result - > m_traits ;
const AZ : : u32 traits = result - > m_traits ;
if ( Convert : : PythonToBehaviorValueParameter ( * result , pyResult , coverted , m_stackVariableAllocator ) )
if ( Convert : : PythonToBehaviorValueParameter ( * result , pyResult , m_resultParam , m_stackVariableAllocator ) )
{
{
result - > Set ( coverted ) ;
// Setting result parameter into the output parameter will not fix its pointers
result - > m_value = coverted . GetValueAddress ( ) ;
// to use output parameter's internal memory, because of this, result parameter
// needs to be a member so its memory is still valid when accessed in BehaviorEBusHandler::CallResult.
result - > Set ( m_resultParam ) ;
result - > m_value = m_resultParam . GetValueAddress ( ) ;
if ( ( traits & AZ : : BehaviorParameter : : TR_POINTER ) = = AZ : : BehaviorParameter : : TR_POINTER )
if ( ( traits & AZ : : BehaviorParameter : : TR_POINTER ) = = AZ : : BehaviorParameter : : TR_POINTER )
{
{
result - > m_value = & result - > m_value ;
result - > m_value = & result - > m_value ;
@ -323,6 +328,7 @@ namespace EditorPythonBindings
AZ : : BehaviorEBusHandler * m_handler = nullptr ;
AZ : : BehaviorEBusHandler * m_handler = nullptr ;
AZStd : : unordered_map < AZStd : : string , pybind11 : : function > m_callbackMap ;
AZStd : : unordered_map < AZStd : : string , pybind11 : : function > m_callbackMap ;
Convert : : StackVariableAllocator m_stackVariableAllocator ;
Convert : : StackVariableAllocator m_stackVariableAllocator ;
AZ : : BehaviorValueParameter m_resultParam ;
} ;
} ;
}
}