DeveloperConsoleUiNode.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // Copyright (C) 2009-present, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma once
  6. #include <AnKi/Scene/SceneNode.h>
  7. #include <AnKi/Ui/Canvas.h>
  8. #include <AnKi/Script/ScriptEnvironment.h>
  9. namespace anki {
  10. /// @addtogroup scene
  11. /// @{
  12. /// A node that draws the developer console.
  13. class DeveloperConsoleUiNode : public SceneNode
  14. {
  15. public:
  16. DeveloperConsoleUiNode(CString name);
  17. ~DeveloperConsoleUiNode();
  18. void toggleConsole();
  19. Bool isConsoleEnabled() const
  20. {
  21. return m_enabled;
  22. }
  23. private:
  24. static constexpr U kMaxLogItems = 64;
  25. class LogItem : public IntrusiveListEnabled<LogItem>
  26. {
  27. public:
  28. const Char* m_file;
  29. const Char* m_func;
  30. const Char* m_subsystem;
  31. SceneString m_threadName;
  32. SceneString m_msg;
  33. I32 m_line;
  34. LoggerMessageType m_type;
  35. };
  36. FontPtr m_font;
  37. IntrusiveList<LogItem> m_logItems;
  38. U32 m_logItemCount = 0;
  39. Array<Char, 256> m_inputText = {};
  40. Atomic<U32> m_logItemsTimestamp = {1};
  41. U32 m_logItemsTimestampConsumed = 0;
  42. ScriptEnvironment m_scriptEnv;
  43. Bool m_enabled = false;
  44. void newLogItem(const LoggerMessageInfo& inf);
  45. static void loggerCallback(void* userData, const LoggerMessageInfo& info)
  46. {
  47. static_cast<DeveloperConsoleUiNode*>(userData)->newLogItem(info);
  48. }
  49. void draw(CanvasPtr& canvas);
  50. };
  51. /// @}
  52. } // end namespace anki