BsScriptDebug.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Wrappers/BsScriptDebug.h"
  4. #include "BsMonoManager.h"
  5. #include "BsMonoClass.h"
  6. #include "BsMonoMethod.h"
  7. #include "BsMonoUtil.h"
  8. #include "Debug/BsDebug.h"
  9. #include "Wrappers/BsScriptLogEntry.h"
  10. namespace bs
  11. {
  12. HEvent ScriptDebug::mOnLogEntryAddedConn;
  13. ScriptDebug::OnAddedThunkDef ScriptDebug::onAddedThunk = nullptr;
  14. /** C++ version of the managed LogEntry structure. */
  15. struct ScriptLogEntryData
  16. {
  17. UINT32 type;
  18. MonoString* message;
  19. };
  20. ScriptDebug::ScriptDebug(MonoObject* instance)
  21. :ScriptObject(instance)
  22. { }
  23. void ScriptDebug::initRuntimeData()
  24. {
  25. metaData.scriptClass->addInternalCall("Internal_Log", (void*)&ScriptDebug::internal_log);
  26. metaData.scriptClass->addInternalCall("Internal_LogWarning", (void*)&ScriptDebug::internal_logWarning);
  27. metaData.scriptClass->addInternalCall("Internal_LogError", (void*)&ScriptDebug::internal_logError);
  28. metaData.scriptClass->addInternalCall("Internal_LogMessage", (void*)&ScriptDebug::internal_logMessage);
  29. metaData.scriptClass->addInternalCall("Internal_Clear", (void*)&ScriptDebug::internal_clear);
  30. metaData.scriptClass->addInternalCall("Internal_ClearType", (void*)&ScriptDebug::internal_clearType);
  31. metaData.scriptClass->addInternalCall("Internal_GetMessages", (void*)&ScriptDebug::internal_getMessages);
  32. onAddedThunk = (OnAddedThunkDef)metaData.scriptClass->getMethod("Internal_OnAdded", 2)->getThunk();
  33. }
  34. void ScriptDebug::startUp()
  35. {
  36. mOnLogEntryAddedConn = gDebug().onLogEntryAdded.connect(&ScriptDebug::onLogEntryAdded);
  37. }
  38. void ScriptDebug::shutDown()
  39. {
  40. mOnLogEntryAddedConn.disconnect();
  41. }
  42. void ScriptDebug::onLogEntryAdded(const LogEntry& entry)
  43. {
  44. MonoString* message = MonoUtil::stringToMono(entry.getMessage());
  45. MonoUtil::invokeThunk(onAddedThunk, entry.getChannel(), message);
  46. }
  47. void ScriptDebug::internal_log(MonoString* message)
  48. {
  49. gDebug().logDebug(MonoUtil::monoToString(message));
  50. }
  51. void ScriptDebug::internal_logWarning(MonoString* message)
  52. {
  53. gDebug().logWarning(MonoUtil::monoToString(message));
  54. }
  55. void ScriptDebug::internal_logError(MonoString* message)
  56. {
  57. gDebug().logError(MonoUtil::monoToString(message));
  58. }
  59. void ScriptDebug::internal_logMessage(MonoString* message, UINT32 type)
  60. {
  61. gDebug().log(MonoUtil::monoToString(message), type);
  62. }
  63. void ScriptDebug::internal_clear()
  64. {
  65. gDebug().getLog().clear();
  66. }
  67. void ScriptDebug::internal_clearType(UINT32 type)
  68. {
  69. gDebug().getLog().clear(type);
  70. }
  71. MonoArray* ScriptDebug::internal_getMessages()
  72. {
  73. Vector<LogEntry> entries = gDebug().getLog().getEntries();
  74. UINT32 numEntries = (UINT32)entries.size();
  75. ScriptArray output = ScriptArray::create<ScriptLogEntry>(numEntries);
  76. for (UINT32 i = 0; i < numEntries; i++)
  77. {
  78. MonoString* message = MonoUtil::stringToMono(entries[i].getMessage());
  79. ScriptLogEntryData scriptEntry = { entries[i].getChannel(), message };
  80. output.set(i, scriptEntry);
  81. }
  82. return output.getInternal();
  83. }
  84. }