MCPcopy Create free account
hub / github.com/defold/defold / CompScriptOnMessage

Function CompScriptOnMessage

engine/gameobject/src/gameobject/comp_script.cpp:377–476  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

375 }
376
377 UpdateResult CompScriptOnMessage(const ComponentOnMessageParams& params)
378 {
379 DM_PROFILE("RunScript");
380 UpdateResult result = UPDATE_RESULT_OK;
381
382 ScriptInstance* script_instance = (ScriptInstance*)*params.m_UserData;
383
384 int function_ref;
385 bool is_callback = false;
386 bool deref_function_ref = true;
387
388 dmMessage::Message* message = 0;
389 void* payload_message = 0;
390
391 if (params.m_Message->m_Descriptor != 0)
392 {
393 if (params.m_Message->m_Id == dmGameObjectDDF::ScriptMessage::m_DDFDescriptor->m_NameHash)
394 {
395 dmGameObjectDDF::ScriptMessage* script_message = (dmGameObjectDDF::ScriptMessage*)params.m_Message->m_Data;
396 uint32_t payload_message_size = 0;
397
398 const dmDDF::Descriptor* descriptor = dmDDF::GetDescriptorFromHash(script_message->m_DescriptorHash);
399 if (!descriptor)
400 {
401 dmLogWarning("Failed to get message descriptor for message type %s", dmHashReverseSafe64(script_message->m_DescriptorHash));
402 return UPDATE_RESULT_OK;
403 }
404
405 const uint8_t* packed_payload = ((uint8_t*)params.m_Message->m_Data) + sizeof(dmGameObjectDDF::ScriptMessage);
406
407 dmDDF::Result ddf_result = dmDDF::LoadMessage(packed_payload, script_message->m_PayloadSize, descriptor, &payload_message, 0, &payload_message_size);
408 if (ddf_result != dmDDF::RESULT_OK)
409 {
410 dmLogWarning("Failed to load message for type '%s'", descriptor->m_Name);
411 return UPDATE_RESULT_OK;
412 }
413
414 uint32_t new_message_size = sizeof(dmMessage::Message) + payload_message_size;
415 message = (dmMessage::Message*)malloc(new_message_size);
416
417 message->m_Sender = params.m_Message->m_Sender;
418 message->m_Receiver = params.m_Message->m_Receiver;
419 message->m_Id = descriptor->m_NameHash;
420 message->m_DataSize = payload_message_size;
421 message->m_Descriptor = (uintptr_t)descriptor;
422 message->m_UserData1 = 0; // should we copy the current m_UserData1?
423 message->m_UserData2 = 0; // deprecated (the Lua function reference)
424 message->m_Next = 0;
425
426 memcpy(&message->m_Data[0], payload_message, payload_message_size);
427
428 if (script_message->m_Function)
429 {
430 is_callback = true;
431 function_ref = script_message->m_Function + LUA_NOREF;
432 deref_function_ref = script_message->m_UnrefFunction; // Should the function be Unref'ed?
433 }
434 else

Callers

nothing calls this directly

Calls 8

GetDescriptorFromHashFunction · 0.85
dmHashReverseSafe64Function · 0.85
mallocFunction · 0.85
HandleUnrefMessageFunction · 0.85
FreeMessageFunction · 0.85
freeFunction · 0.85
HandleMessageFunction · 0.70
LoadMessageFunction · 0.50

Tested by

no test coverage detected