1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
#pragma once
#include "StarSky.hpp"
#include "StarAmbient.hpp"
#include "StarRegisteredPaneManager.hpp"
#include "StarInterfaceCursor.hpp"
#include "StarUniverseClient.hpp"
#include "StarListWidget.hpp"
namespace Star {
STAR_CLASS(Player);
STAR_CLASS(PlayerStorage);
STAR_CLASS(CharCreationPane);
STAR_CLASS(CharSelectionPane);
STAR_CLASS(OptionsMenu);
STAR_CLASS(ModsMenu);
STAR_CLASS(GuiContext);
STAR_CLASS(Pane);
STAR_CLASS(PaneManager);
STAR_CLASS(Mixer);
STAR_CLASS(EnvironmentPainter);
STAR_CLASS(CelestialMasterDatabase);
STAR_CLASS(ButtonWidget);
STAR_CLASS(TitleScreen);
enum class TitleState {
Main,
Options,
Mods,
SinglePlayerSelectCharacter,
SinglePlayerCreateCharacter,
MultiPlayerSelectCharacter,
MultiPlayerCreateCharacter,
MultiPlayerConnect,
StartSinglePlayer,
StartMultiPlayer,
Quit
};
class TitleScreen {
public:
TitleScreen(PlayerStoragePtr playerStorage, MixerPtr mixer, UniverseClientPtr client);
void renderInit(RendererPtr renderer);
void render();
bool handleInputEvent(InputEvent const& event);
void update(float dt);
bool textInputActive() const;
TitleState currentState() const;
// TitleState is StartSinglePlayer, StartMultiPlayer, or Quit
bool finishedState() const;
void resetState();
// Switches to multi player select character screen immediately, skipping the
// connection screen if 'skipConnection' is true. If the player backs out of
// the multiplayer menu, the skip connection is forgotten.
void goToMultiPlayerSelectCharacter(bool skipConnection);
void stopMusic();
PlayerPtr currentlySelectedPlayer() const;
String multiPlayerAddress() const;
void setMultiPlayerAddress(String address);
String multiPlayerPort() const;
void setMultiPlayerPort(String port);
String multiPlayerAccount() const;
void setMultiPlayerAccount(String account);
String multiPlayerPassword() const;
void setMultiPlayerPassword(String password);
bool multiPlayerForceLegacy() const;
void setMultiPlayerForceLegacy(bool const& forceLegacy);
private:
void initMainMenu();
void initCharSelectionMenu();
void initCharCreationMenu();
void initMultiPlayerMenu();
void initOptionsMenu(UniverseClientPtr client);
void initModsMenu();
void renderCursor();
void switchState(TitleState titleState);
void back();
void populateServerList(ListWidgetPtr list);
float interfaceScale() const;
unsigned windowHeight() const;
unsigned windowWidth() const;
GuiContext* m_guiContext;
RendererPtr m_renderer;
EnvironmentPainterPtr m_environmentPainter;
PanePtr m_multiPlayerMenu;
PanePtr m_serverSelectPane;
Json m_serverList;
RegisteredPaneManager<String> m_paneManager;
Vec2I m_cursorScreenPos;
InterfaceCursor m_cursor;
TitleState m_titleState;
PanePtr m_mainMenu;
List<pair<ButtonWidgetPtr, Vec2I>> m_rightAnchoredButtons;
PlayerPtr m_mainAppPlayer;
PlayerStoragePtr m_playerStorage;
bool m_skipMultiPlayerConnection;
String m_connectionAddress;
String m_connectionPort;
String m_account;
String m_password;
bool m_forceLegacy;
CelestialMasterDatabasePtr m_celestialDatabase;
MixerPtr m_mixer;
SkyPtr m_skyBackdrop;
AmbientNoisesDescriptionPtr m_musicTrack;
AudioInstancePtr m_currentMusicTrack;
AmbientManager m_musicTrackManager;
};
}
|