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
|
/* 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 CglFont;
class CLoadScreen : public CGameController
{
public:
void SetLoadMessage(const std::string& text, bool replaceLast = false);
CLoadScreen(std::string&& mapFileName, std::string&& modFileName, 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 CreateDeleteInstance(std::string&& mapFileName, std::string&& modFileName, ILoadSaveHandler* saveFile);
static bool CreateInstance(std::string&& mapFileName, std::string&& modFileName, 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:
static CLoadScreen* singleton;
ILoadSaveHandler* saveFile;
std::vector< std::pair<std::string, bool> > loadMessages;
std::string mapFileName;
std::string modFileName;
spring::recursive_mutex mutex;
spring::thread netHeartbeatThread;
COffscreenGLThread gameLoadThread;
bool mtLoading;
spring_time lastDrawTime;
};
#define loadscreen CLoadScreen::GetInstance()
#endif // _LOAD_SCREEN_H
|