diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
commit | 6352e8e3196f78388b6c771073f9e03eaa612673 (patch) | |
tree | e23772f79a7fbc41bc9108951e9e136857484bf4 /source/client/StarClientApplication.hpp | |
parent | 6741a057e5639280d85d0f88ba26f000baa58f61 (diff) |
everything everywhere
all at once
Diffstat (limited to 'source/client/StarClientApplication.hpp')
-rw-r--r-- | source/client/StarClientApplication.hpp | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/source/client/StarClientApplication.hpp b/source/client/StarClientApplication.hpp new file mode 100644 index 0000000..89f6a61 --- /dev/null +++ b/source/client/StarClientApplication.hpp @@ -0,0 +1,117 @@ +#ifndef STAR_CLIENT_APPLICATION_HPP +#define STAR_CLIENT_APPLICATION_HPP + +#include "StarUniverseServer.hpp" +#include "StarUniverseClient.hpp" +#include "StarWorldPainter.hpp" +#include "StarGameTypes.hpp" +#include "StarMainInterface.hpp" +#include "StarMainMixer.hpp" +#include "StarTitleScreen.hpp" +#include "StarErrorScreen.hpp" +#include "StarCinematic.hpp" +#include "StarKeyBindings.hpp" +#include "StarMainApplication.hpp" + +namespace Star { + +class ClientApplication : public Application { +protected: + virtual void startup(StringList const& cmdLineArgs) override; + virtual void shutdown() override; + + virtual void applicationInit(ApplicationControllerPtr appController) override; + virtual void renderInit(RendererPtr renderer) override; + + virtual void windowChanged(WindowMode windowMode, Vec2U screenSize) override; + + virtual void processInput(InputEvent const& event) override; + + virtual void update() override; + virtual void render() override; + + virtual void getAudioData(int16_t* stream, size_t len) override; + +private: + enum class MainAppState { + Quit, + Startup, + Mods, + ModsWarning, + Splash, + Error, + Title, + SinglePlayer, + MultiPlayer + }; + + struct PendingMultiPlayerConnection { + Variant<P2PNetworkingPeerId, HostAddressWithPort> server; + String account; + String password; + }; + + void changeState(MainAppState newState); + void setError(String const& error); + void setError(String const& error, std::exception const& e); + + void updateMods(); + void updateModsWarning(); + void updateSplash(); + void updateError(); + void updateTitle(); + void updateRunning(); + + bool isActionTaken(InterfaceAction action) const; + bool isActionTakenEdge(InterfaceAction action) const; + + void updateCamera(); + + RootUPtr m_root; + ThreadFunction<void> m_rootLoader; + MainAppState m_state = MainAppState::Startup; + + // Valid after applicationInit is called + MainMixerPtr m_mainMixer; + GuiContextPtr m_guiContext; + + // Valid after renderInit is called the first time + CinematicPtr m_cinematicOverlay; + ErrorScreenPtr m_errorScreen; + + // Valid if main app state >= Title + PlayerStoragePtr m_playerStorage; + StatisticsPtr m_statistics; + UniverseClientPtr m_universeClient; + TitleScreenPtr m_titleScreen; + + // Valid if main app state > Title + PlayerPtr m_player; + WorldPainterPtr m_worldPainter; + WorldRenderData m_renderData; + MainInterfacePtr m_mainInterface; + + // Valid if main app state == SinglePlayer + UniverseServerPtr m_universeServer; + + float m_cameraXOffset = 0.0f; + float m_cameraYOffset = 0.0f; + bool m_snapBackCameraOffset = false; + int m_cameraOffsetDownTicks = 0; + Vec2F m_cameraPositionSmoother; + Vec2F m_cameraSmoothDelta; + + int m_minInterfaceScale = 2; + int m_maxInterfaceScale = 3; + Vec2F m_crossoverRes; + + List<KeyDownEvent> m_heldKeyEvents; + List<KeyDownEvent> m_edgeKeyEvents; + + Maybe<PendingMultiPlayerConnection> m_pendingMultiPlayerConnection; + Maybe<HostAddressWithPort> m_currentRemoteJoin; +}; + +} + +#endif |