AppStateManager.h 1.8 KB

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