/
ScreenManager.cpp
90 lines (75 loc) · 1.84 KB
/
ScreenManager.cpp
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
#include "ScreenManager.h"
ScreenManager &ScreenManager::GetInstance()
{
static ScreenManager instance;
return instance;
}
ScreenManager::ScreenManager(void)
{
}
ScreenManager::~ScreenManager(void)
{
}
void ScreenManager::AddScreen(std::string screenName)
{
transition.SetAlpha(0);
startTransition = true;
newScreen = screenDirectory[screenName];
transition.SetIsActive(true);
}
void ScreenManager::Initialize()
{
screenDirectory["SplashScreen"] = new SplashScreen();
screenDirectory["TitleScreen"] = new TitleScreen();
screenDirectory["GameplayScreen"] = new GameplayScreen();
currentScreen = screenDirectory["SplashScreen"];
}
void ScreenManager::LoadContent()
{
currentScreen->LoadContent();
transitionImage = al_load_bitmap("transitionImage.png");
std::pair<float, float> position(0, 0);
transition.LoadContent(transitionImage,"",position);
startTransition = false;
}
void ScreenManager::UnloadContent()
{
al_destroy_bitmap(transitionImage);
transition.UnloadContent();
currentScreen->UnloadContent();
std::map<std::string, GameScreen*>::iterator tempIterator;
for(tempIterator = screenDirectory.begin(); tempIterator != screenDirectory.end();
tempIterator++)
delete tempIterator->second;
screenDirectory.clear();
}
void ScreenManager::Update(ALLEGRO_EVENT ev)
{
if(!startTransition)
currentScreen->Update(ev);
else
Transition();
}
void ScreenManager::Draw(ALLEGRO_DISPLAY *display)
{
currentScreen->Draw(display);
if(startTransition)
transition.Draw(display);
}
void ScreenManager::Transition()
{
transition.Update(currentScreen->GetInput());
if(transition.GetAlpha() >= 255)
{
transition.SetAlpha(255);
currentScreen->UnloadContent();
currentScreen = newScreen;
currentScreen->LoadContent();
al_rest(1.0);
}
else if(transition.GetAlpha() <= 0)
{
startTransition = false;
transition.SetIsActive(false);
}
}