Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.17 KB | None | 0 0
  1. class FContentBrush;
  2. class FButton;
  3. class FMenu;
  4. class FMenuState;
  5.  
  6. struct FIntRect
  7. {
  8.     uint32 X;
  9.     uint32 Y;
  10.     uint32 SizeX;
  11.     uint32 SizeY;
  12. };
  13.  
  14. class FContentBrush
  15. {
  16. public:
  17.     FTexture2D *Sprite;
  18.     FColor32 OutlineColor;
  19.     FColor32 ColorAndOpacity;
  20.  
  21. public:
  22.     FContentBrush(const FColor32 &ColorAndOpacity);
  23.     FContentBrush(const FColor32 &ColorAndOpacity, const FColor32 &OutlineColor);
  24.     FContentBrush(const FColor32 &ColorAndOpacity, const FColor32 &OutlineColor, const FTexture2D *InSprite);
  25.     FContentBrush(const FColor32 &ColorAndOpacity, const FTexture2D *InSprite);
  26. };
  27.  
  28. class FButton
  29. {
  30. public:
  31.     FMenu *OwnerMenu;
  32.     FIntRect Position;
  33.  
  34.     FContentBrush DisabledBrush;
  35.     FContentBrush EnabledBrush;
  36.     FContentBrush HoveredBrush;
  37.     FContentBrush ClickedBrush;
  38.  
  39. public:
  40.     virtual void OnInitialize();
  41.     virtual void OnRelease();
  42.     virtual void OnUpdate();
  43.     virtual void OnHover();
  44.     virtual void OnClick();
  45.     virtual void OnRelease();
  46.  
  47.     virtual void Draw(); // Render Self.
  48. };
  49.  
  50. class FMenu
  51. {
  52. public:
  53.     FMenuState *OwnerMenuState;
  54.     TArray<FButton *> MenuButtons;
  55.  
  56. public:
  57.     void AddButton(FButton *InButton)
  58.     {
  59.         MenuButtons.Add(InButton);
  60.         InButton->OwnerMenu = this;
  61.     }
  62.  
  63.     void RemoveButton(FButton *InButton)
  64.     {
  65.         MenuButtons.Remove(InButton);
  66.         InButton->OwnerMenu = 0;
  67.     }
  68.  
  69.     void Update()
  70.     {
  71.         for (uint32 Index = 0; Index < MenuButtons.GetCount(); ++Index)
  72.         {
  73.             FButton *Button = MenuButtons[Index];
  74.             Button->OnUpdate();
  75.         }
  76.     }
  77.  
  78.     void Render()
  79.     {
  80.         for (uint32 Index = 0; Index < MenuButtons.GetCount(); ++Index)
  81.         {
  82.             FButton *Button = MenuButtons[Index];
  83.             Button->Draw();
  84.         }
  85.     }
  86. };
  87.  
  88. class FMenuState
  89. {
  90. public:
  91.     uint32 CurrentMenuIndex;
  92.     TArray<FMenu *> MenuCache;
  93.  
  94. public:
  95.     void AddMenu(FMenu *InMenu)
  96.     {
  97.         MenuCache.Add(InMenu);
  98.         InMenu->OwnerMenuState = this;
  99.     }
  100.  
  101.     void RemoveMenu(FMenu *InMenu)
  102.     {
  103.         MenuCache.Remove(InMenu);
  104.         InMenu->OwnerMenuState = 0;
  105.     }
  106.  
  107.     void UpdateAndRender()
  108.     {
  109.         FMenu *CurrentMenu = MenuCache[CurrentMenuIndex];
  110.         CurrentMenu->Update();
  111.         CurrentMenu->Render();
  112.     }
  113. };
  114.  
  115. class FLoginButton : public FButton
  116. {
  117. public:
  118.     virtual void OnRelease() override
  119.     {
  120.         bIsPressed = true;
  121.     }
  122.  
  123.     virtual void OnUpdate() override
  124.     {
  125.         if (bIsPressed)
  126.         {
  127.             OwnerMenu->OwnerMenuState->CurrentMenuIndex++;
  128.         }
  129.     }
  130.  
  131. private:
  132.     bool bIsPressed;
  133. };
  134.  
  135. class FLoginMenu : public FMenu
  136. {
  137. public:
  138.     FLoginMenu()
  139.     {
  140.         FButton *LoginButton;
  141.         FMenu::AddButton(LoginButton);
  142.         FButton *ExitButton;
  143.         FMenu::AddButton(ExitButton);
  144.     }
  145. };
  146.  
  147. void Main()
  148. {
  149.     FLoginButton *LoginButton;
  150.     // ->SetColor and stuff
  151.  
  152.     FButton *ExitButton;
  153.     // ->SetColor and stuff
  154.  
  155.     FButton *AccountNameButton;
  156.     // ->SetColor and stuff
  157.  
  158.     FButton *AccountPasswordButton;
  159.     // ->SetColor and stuff
  160.  
  161.     FMenu *MenuA;
  162.     MenuA->AddButton(LoginButton);
  163.     MenuA->AddButton(ExitButton);
  164.  
  165.     FMenu *MenuB;
  166.     MenuB->AddButton(AccountNameButton);
  167.     MenuB->AddButton(AccountPasswordButton);
  168.  
  169.     FMenuState *MenuState;
  170.     MenuState->AddMenu(MenuA);
  171.     MenuState->AddMenu(MenuB);
  172.  
  173.     while (bGameIsRunning)
  174.     {
  175.         MenuState->UpdateAndRender();
  176.     }
  177. }
  178.  
  179. /* - MenuA
  180. ->Login
  181. ->Exit
  182. */
  183.  
  184. /* - MenuB
  185. ->AccountName
  186. ->AccountPassword
  187. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement