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
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
#ifndef _LOAD_SCREEN_H
#define _LOAD_SCREEN_H
#include <string>
#include "GameController.h"
#include "System/LoadSave/LoadSaveHandler.h"
#include "System/OffscreenGLContext.h"
#include "System/Misc/SpringTime.h"
#include "System/Threading/SpringThreading.h"
class CLoadScreen : public CGameController
{
public:
void SetLoadMessage(const std::string& text, bool replace_lastline = false);
CLoadScreen(const std::string& mapName, const std::string& modName, ILoadSaveHandler* saveFile);
~CLoadScreen();
bool Init(); /// split from ctor; uses GetInstance()
void Kill(); /// split from dtor
public:
// singleton can potentially be null, but only when
// accessed from Game::KillLua where we do not care
static CLoadScreen* GetInstance() { return singleton; }
static void CreateInstance(const std::string& mapName, const std::string& modName, ILoadSaveHandler* saveFile);
static void DeleteInstance();
bool Draw() override;
bool Update() override;
void ResizeEvent() override;
int KeyReleased(int k) override;
int KeyPressed(int k, bool isRepeat) override;
private:
void RandomStartPicture(const std::string& sidePref);
void LoadStartPicture(const std::string& picture);
void UnloadStartPicture();
private:
static CLoadScreen* singleton;
std::string oldLoadMessages;
std::string curLoadMessage;
std::string mapName;
std::string modName;
ILoadSaveHandler* saveFile;
spring::recursive_mutex mutex;
spring::thread* netHeartbeatThread;
COffscreenGLThread* gameLoadThread;
bool mtLoading;
bool showMessages;
unsigned int startupTexture;
float aspectRatio;
spring_time last_draw;
};
#define loadscreen CLoadScreen::GetInstance()
#endif // _LOAD_SCREEN_H
|