AppStateManager.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // Copyright (c) 2008-2023 the Urho3D project
  2. // License: MIT
  3. #pragma once
  4. #include "AppState_Base.h"
  5. #include <Urho3D/Container/HashMap.h>
  6. using AppStateId = u32;
  7. inline constexpr AppStateId APPSTATEID_NULL = 0;
  8. inline constexpr AppStateId APPSTATEID_MAINSCREEN = 1;
  9. inline constexpr AppStateId APPSTATEID_RESULTSCREEN = 2;
  10. inline constexpr AppStateId APPSTATEID_BENCHMARK01 = 3;
  11. inline constexpr AppStateId APPSTATEID_BENCHMARK02 = 4;
  12. inline constexpr AppStateId APPSTATEID_BENCHMARK03 = 5;
  13. inline constexpr AppStateId APPSTATEID_BENCHMARK04 = 6;
  14. class AppStateManager : public U3D::Object
  15. {
  16. public:
  17. URHO3D_OBJECT(AppStateManager, Object);
  18. private:
  19. U3D::HashMap<AppStateId, U3D::SharedPtr<AppState_Base>> appStates_;
  20. AppStateId currentAppStateId_ = APPSTATEID_NULL;
  21. AppStateId previousAppStateId_ = APPSTATEID_NULL;
  22. AppStateId requiredAppStateId_ = APPSTATEID_NULL;
  23. public:
  24. AppStateManager(U3D::Context* context);
  25. AppStateId GetCurrentAppStateId() const { return currentAppStateId_; }
  26. AppStateId GetPreviousAppStateId() const { return previousAppStateId_; }
  27. AppStateId GetRequiredAppStateId() const { return requiredAppStateId_; }
  28. void SetRequiredAppStateId(AppStateId id) { requiredAppStateId_ = id; }
  29. // Change state if currentAppStateId_ != requiredAppStateId_
  30. void Apply();
  31. const U3D::String& GetName(AppStateId appStateId) const
  32. {
  33. auto it = appStates_.Find(appStateId);
  34. assert(it != appStates_.End());
  35. return it->second_->GetName();
  36. }
  37. const FpsCounter& GetResult(AppStateId appStateId) const
  38. {
  39. auto it = appStates_.Find(appStateId);
  40. assert(it != appStates_.End());
  41. return it->second_->GetResult();
  42. }
  43. void ClearAllResults()
  44. {
  45. for (auto& pair : appStates_)
  46. pair.second_->ClearResult();
  47. }
  48. };