GameScreen.h to klasa z metodami wirtualnymi, dziedziczą po niej SplashScreen i MenuScreen. Jak widać niżej jest wskaźnik typu GameScreen.
#pragma once
#include <iostream>
#include <string>
#include <map>
#include"GameScreen.h"
#include "SplashScreen.h"
#include "MenuScreen.h"
class ScreenManager
{
private:
ScreenManager();
ScreenManager(ScreenManager const&);
void operator=(ScreenManager const&);
GameScreen *currentScreen;
std::map<std::string, GameScreen*> screenDirectory;
public:
~ScreenManager();
static ScreenManager &GetInstance();
void AddScreen(std::string newScreen);
void Initialize();
void LoadContent();
void UnloadContent();
void Update(ALLEGRO_EVENT ev);
void Draw(ALLEGRO_DISPLAY *display);
};
Fragment kodu który pokazuję po co dołączane są klasy okienek:
void ScreenManager::AddScreen(std::string screenName)
{
currentScreen->UnloadContent();
delete currentScreen;
currentScreen = screenDirectory[screenName];
currentScreen->LoadContent();
}
No a teraz klasa jednego z okienek, każde okienko ma podlinkowane ScreenManager.
#pragma once
#include "ScreenManager.h"
class SplashScreen : public GameScreen
{
private:
std::pair<float,float> position;
int imageNumber;
public:
SplashScreen(void);
~SplashScreen(void);
void LoadContent();
void UnloadContent();
void Update(ALLEGRO_EVENT ev);
void Draw(ALLEGRO_DISPLAY *display);
};
A podlinkowane jest po to by móc używać tego:
ScreenManager::GetInstance().AddScreen("MenuScreen");