BsScriptDebug.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include "BsScriptDebug.h"
  2. #include "BsMonoManager.h"
  3. #include "BsMonoClass.h"
  4. #include "BsMonoMethod.h"
  5. #include "BsMonoUtil.h"
  6. #include "BsDebug.h"
  7. namespace BansheeEngine
  8. {
  9. HEvent ScriptDebug::mOnLogEntryAddedConn;
  10. ScriptDebug::OnAddedThunkDef ScriptDebug::onAddedThunk = nullptr;
  11. ScriptDebug::ScriptDebug(MonoObject* instance)
  12. :ScriptObject(instance)
  13. { }
  14. void ScriptDebug::initRuntimeData()
  15. {
  16. metaData.scriptClass->addInternalCall("Internal_Log", &ScriptDebug::internal_log);
  17. metaData.scriptClass->addInternalCall("Internal_LogWarning", &ScriptDebug::internal_logWarning);
  18. metaData.scriptClass->addInternalCall("Internal_LogError", &ScriptDebug::internal_logError);
  19. onAddedThunk = (OnAddedThunkDef)metaData.scriptClass->getMethod("Internal_OnAdded", 2)->getThunk();
  20. }
  21. void ScriptDebug::startUp()
  22. {
  23. mOnLogEntryAddedConn = gDebug().onLogEntryAdded.connect(&ScriptDebug::onLogEntryAdded);
  24. }
  25. void ScriptDebug::shutDown()
  26. {
  27. mOnLogEntryAddedConn.disconnect();
  28. }
  29. void ScriptDebug::onLogEntryAdded(const LogEntry& entry)
  30. {
  31. MonoString* message = MonoUtil::stringToMono(MonoManager::instance().getDomain(), entry.getMessage());
  32. MonoUtil::invokeThunk(onAddedThunk, entry.getChannel(), message);
  33. }
  34. void ScriptDebug::internal_log(MonoString* message)
  35. {
  36. gDebug().logDebug(MonoUtil::monoToString(message));
  37. }
  38. void ScriptDebug::internal_logWarning(MonoString* message)
  39. {
  40. gDebug().logWarning(MonoUtil::monoToString(message));
  41. }
  42. void ScriptDebug::internal_logError(MonoString* message)
  43. {
  44. gDebug().logError(MonoUtil::monoToString(message));
  45. }
  46. }