Etterna 0.74.4
Loading...
Searching...
No Matches
ScreenOptions.h
1#ifndef SCREENOPTIONS_H
2#define SCREENOPTIONS_H
3
4#include "Etterna/Actor/Menus/DualScrollBar.h"
5#include "Etterna/Models/Misc/InputEventPlus.h"
6#include "Etterna/Models/Lua/LuaExpressionTransform.h"
7#include "Etterna/Actor/Menus/OptionRow.h"
8#include "Etterna/Actor/Menus/OptionsCursor.h"
9#include "RageUtil/Sound/RageSound.h"
10#include "Etterna/Screen/Others/ScreenWithMenuElements.h"
11#include "Etterna/Models/Misc/ThemeMetric.h"
12
14
15AutoScreenMessage(SM_ExportOptions);
16
18enum InputMode
19{
20 INPUTMODE_INDIVIDUAL,
21 INPUTMODE_SHARE_CURSOR,
22 NUM_InputMode,
23 InputMode_Invalid
24};
25InputMode
26StringToInputMode(const std::string& str);
27
29#define FOREACH_OptionsPlayer(pn) \
30 for (PlayerNumber pn = GetNextHumanPlayer((PlayerNumber)-1); \
31 pn != PLAYER_INVALID && \
32 (m_InputMode == INPUTMODE_INDIVIDUAL || pn == 0); \
33 pn = GetNextHumanPlayer(pn))
34
38{
39 public:
41 void Init() override;
42 void BeginScreen() override;
43 void InitMenu(const std::vector<OptionRowHandler*>& vHands);
44 ~ScreenOptions() override;
45 void Update(float fDeltaTime) override;
46 bool Input(const InputEventPlus& input) override;
47 void HandleScreenMessage(const ScreenMessage& SM) override;
48
49 void TweenOnScreen() override;
50 void TweenOffScreen() override;
51
52 // Lua
53 void PushSelf(lua_State* L) override;
54 friend class LunaScreenOptions;
55
56 protected:
57 virtual void ImportOptions(int iRow, const PlayerNumber& vpns) = 0;
58 virtual void ExportOptions(int iRow, const PlayerNumber& vpns) = 0;
59 virtual void ExportOptionsOnCancel(int iRow, const PlayerNumber& pn) = 0;
60
61 void RestartOptions();
62 void GetWidthXY(PlayerNumber pn,
63 int iRow,
64 int iChoiceOnRow,
65 int& iWidthOut,
66 int& iXOut,
67 int& iYOut) const;
68 std::string GetExplanationText(int iRow) const;
69 void RefreshIcons(int iRow, PlayerNumber pn);
70 void PositionCursor(PlayerNumber pn);
71 void PositionRows(bool bTween);
72 void TweenCursor(PlayerNumber pn);
73 void StoreFocus(PlayerNumber pn);
74
75 void BeginFadingOut();
76 virtual bool FocusedItemEndsScreen(PlayerNumber pn) const;
77 std::string GetNextScreenForFocusedItem(PlayerNumber pn) const;
78
79 void ChangeValueInRowRelative(int iRow,
80 PlayerNumber pn,
81 int iDelta,
82 bool bRepeat);
83 void ChangeValueInRowAbsolute(int iRow,
84 PlayerNumber pn,
85 int iChoiceIndex,
86 bool bRepeat);
91 virtual void AfterChangeValueInRow(int iRow, PlayerNumber pn);
92 bool MoveRowRelative(PlayerNumber pn, int iDir, bool bRepeat);
93 bool MoveRowAbsolute(PlayerNumber pn, int iRow);
98 virtual void AfterChangeRow(PlayerNumber pn);
99 virtual void AfterChangeValueOrRow(PlayerNumber pn);
100
101 bool MenuBack(const InputEventPlus& input) override;
102 bool MenuStart(const InputEventPlus& input) override;
103 virtual void ProcessMenuStart(const InputEventPlus& input);
104 bool MenuLeft(const InputEventPlus& input) override;
105 bool MenuRight(const InputEventPlus& input) override;
106 bool MenuUp(const InputEventPlus& input) override;
107 bool MenuDown(const InputEventPlus& input) override;
108 bool MenuSelect(const InputEventPlus& input) override;
109 virtual void MenuUpDown(const InputEventPlus& input,
110 int iDir); // iDir == -1 or iDir == +1
111
112 int GetCurrentRow(PlayerNumber pn = PLAYER_1) const
113 {
114 return m_iCurrentRow;
115 }
116 bool AllAreOnLastRow() const;
117 OptionRow* GetRow(int iRow) const { return m_pRows[iRow]; }
118 // void SetOptionRowFromName( const std::string& nombre );
119 int GetNumRows() const { return static_cast<int>(m_pRows.size()); }
120
121 protected: // derived classes need access to these
122 enum Navigation
123 {
124 NAV_THREE_KEY,
125 NAV_THREE_KEY_MENU,
126 NAV_THREE_KEY_ALT,
127 NAV_FIVE_KEY,
128 NAV_TOGGLE_THREE_KEY,
129 NAV_TOGGLE_FIVE_KEY
130 };
131 void SetNavigation(Navigation nav) { m_OptionsNavigation = nav; }
132 void SetInputMode(InputMode im) { m_InputMode = im; }
133
135 std::vector<OptionRow*> m_pRows;
138
139 OptionRowType m_OptionRowTypeNormal;
140 OptionRowType m_OptionRowTypeExit;
141
142 Navigation m_OptionsNavigation;
143 InputMode m_InputMode;
144
145 int m_iFocusX;
146 bool m_bWasOnExit;
147
155
156 // actors
157 ActorFrame m_frameContainer;
158 AutoActor m_sprPage;
159
160 OptionsCursor m_Cursor;
161 AutoActor m_sprLineHighlight;
162
163 BitmapText m_textExplanation;
164 BitmapText m_textExplanationTogether;
165 DualScrollBar m_ScrollBar;
166 AutoActor m_sprMore;
167
168 RageSound m_SoundChangeCol;
169 RageSound m_SoundNextRow;
170 RageSound m_SoundPrevRow;
171 RageSound m_SoundToggleOn;
172 RageSound m_SoundToggleOff;
173 RageSound m_SoundStart;
174
175 // metrics
176 ThemeMetric<int> NUM_ROWS_SHOWN;
177 ThemeMetric<apActorCommands> ROW_INIT_COMMAND;
178 ThemeMetric<apActorCommands> ROW_ON_COMMAND;
179 ThemeMetric<apActorCommands> ROW_OFF_COMMAND;
181 m_exprRowPositionTransformFunction; // params:
182 // self,offsetFromCenter,itemIndex,numItems
183 ThemeMetric<bool> SHOW_SCROLL_BAR;
184 ThemeMetric<float> SCROLL_BAR_HEIGHT;
185 ThemeMetric<float> SCROLL_BAR_TIME;
186 ThemeMetric<float> LINE_HIGHLIGHT_X;
187 ThemeMetric<bool> SHOW_EXIT_ROW;
188 ThemeMetric<bool> SEPARATE_EXIT_ROW;
189 ThemeMetric<float> SEPARATE_EXIT_ROW_Y;
190 ThemeMetric<bool> SHOW_EXPLANATIONS;
191 ThemeMetric<bool> ALLOW_REPEATING_CHANGE_VALUE_INPUT;
192 ThemeMetric<float> CURSOR_TWEEN_SECONDS;
193 ThemeMetric<bool> WRAP_VALUE_IN_ROW;
194 ThemeMetric<std::string> OPTION_ROW_NORMAL_METRICS_GROUP;
195 ThemeMetric<std::string> OPTION_ROW_EXIT_METRICS_GROUP;
196};
197
198#endif
A container for other Actors.
Definition ActorFrame.h:8
A smart pointer for Actor.
Definition AutoActor.h:13
An actor that holds a Font and draws text to the screen.
Definition BitmapText.h:11
A scrollbar with two independent thumbs.
Definition DualScrollBar.h:9
Holds a device input plus Game/Menu translations.
Definition InputEventPlus.h:9
Handle transforming a list of items.
Definition LuaExpressionTransform.h:16
Allow Lua to have access to ScreenOptions.
Definition ScreenOptions.cpp:1373
Shows PlayerOptions and SongOptions in icon form.
Definition OptionRowHandler.h:185
Definition OptionRow.h:23
Definition OptionRow.h:56
A cursor for ScreenOptions.
Definition OptionsCursor.h:9
Definition RageSound.h:130
A grid of options; the selected option is drawn with a highlight rectangle.
Definition ScreenOptions.h:38
void Init() override
This is called immediately after construction, to allow initializing after all derived classes exist.
Definition ScreenOptions.cpp:105
void BeginScreen() override
This is called immediately before the screen is used.
Definition ScreenOptions.cpp:307
virtual void AfterChangeValueInRow(int iRow, PlayerNumber pn)
Perform an action after a row has changed its value.
Definition ScreenOptions.cpp:1173
std::vector< OptionRow * > m_pRows
Map menu lines to m_OptionRow entries.
Definition ScreenOptions.h:135
virtual void AfterChangeRow(PlayerNumber pn)
Perform an action after moving to a new row.
Definition ScreenOptions.cpp:1213
bool m_bGotAtLeastOneStartPressed
True if at least one player pressed Start after selecting the song.
Definition ScreenOptions.h:154
int m_iCurrentRow
The current row each player is on.
Definition ScreenOptions.h:137
Definition ScreenWithMenuElements.h:12
The theme specific data.
Definition ThemeMetric.h:52