MultiplayerDebugAuditTrail.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #pragma once
  9. #include <AzCore/Component/EntityBus.h>
  10. #include <AzCore/EBus/ScheduledEvent.h>
  11. #include <AzFramework/Entity/EntityDebugDisplayBus.h>
  12. #include <Multiplayer/Components/NetworkHierarchyRootComponent.h>
  13. namespace Multiplayer
  14. {
  15. struct AuditTrailInput
  16. {
  17. AuditTrailInput(AuditCategory category, ClientInputId inputId, HostFrameId hostFrameId,
  18. const AZStd::string name, const AZStd::vector<MultiplayerAuditingElement>&& children)
  19. : m_category(category)
  20. , m_inputId(inputId)
  21. , m_hostFrameId(hostFrameId)
  22. , m_name(name)
  23. , m_children(children)
  24. {
  25. }
  26. AuditCategory m_category;
  27. ClientInputId m_inputId;
  28. HostFrameId m_hostFrameId;
  29. AZStd::string m_name;
  30. AZStd::vector<MultiplayerAuditingElement> m_children;
  31. };
  32. //! Buffer size for ImGui Search bar in Audit Trail UI
  33. const int AUDIT_SEARCH_BUFFER_SIZE = 1024;
  34. /**
  35. * /brief Provides ImGui driven UX for multiplayer audit trail
  36. */
  37. class MultiplayerDebugAuditTrail
  38. {
  39. public:
  40. static constexpr char DESYNC_TITLE[] = "Desync on %s";
  41. static constexpr char INPUT_TITLE[] = "%s Inputs";
  42. static constexpr char EVENT_TITLE[] = "DevEvent on %s";
  43. MultiplayerDebugAuditTrail();
  44. ~MultiplayerDebugAuditTrail() = default;
  45. //! Main update loop.
  46. void OnImGuiUpdate(const AZStd::deque<AuditTrailInput>& auditTrailElems);
  47. //! Draws hierarchy information over hierarchy root entities.
  48. void UpdateDebugOverlay();
  49. //! Returns if the audit trail should be pumped and resets the pump flag
  50. bool TryPumpAuditTrail();
  51. //! Gets string filter for the audit trail
  52. AZStd::string_view GetAuditTrialFilter();
  53. //! Sets string filter for the audit trail
  54. void SetAuditTrailFilter(AZStd::string filter);
  55. private:
  56. AZ::ScheduledEvent m_updateDebugOverlay;
  57. AZStd::string m_filter;
  58. AzFramework::DebugDisplayRequests* m_debugDisplay = nullptr;
  59. [[maybe_unused]] char m_inputBuffer[AUDIT_SEARCH_BUFFER_SIZE] = {};
  60. bool m_canPumpTrail = false;
  61. };
  62. }