YAPOG
0.0.1
Yet Another Pokemon Online Game
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
GameScreenManager.cpp
Go to the documentation of this file.
1
#include "
YAPOG/Graphics/Game/GameScreenManager.hpp
"
2
#include "
YAPOG/System/Error/Exception.hpp
"
3
#include "
YAPOG/System/StringHelper.hpp
"
4
5
namespace
yap
6
{
7
const
String
GameScreenManager::GAME_EXITED_EVENT_HANDLER_NAME
=
8
"GameExitedEventHandler"
;
9
10
GameScreenManager::GameScreenManager
()
11
: currentScreenType_ ()
12
, currentScreen_ (nullptr)
13
, screens_ ()
14
{
15
}
16
17
GameScreenManager::~GameScreenManager
()
18
{
19
for
(
const
auto
& it :
screens_
)
20
delete
it.second;
21
}
22
23
bool
GameScreenManager::OnEvent
(
const
GuiEvent
& guiEvent)
24
{
25
return
currentScreen_
->
OnEvent
(guiEvent);
26
}
27
28
bool
GameScreenManager::OnPriorityEvent
(
const
GuiEvent
& guiEvent)
29
{
30
return
currentScreen_
->
OnPriorityEvent
(guiEvent);
31
}
32
33
void
GameScreenManager::Init
(
const
ScreenType
& screenType)
34
{
35
for
(
const
auto
& it :
screens_
)
36
it.second->Init ();
37
38
SetCurrentScreen
(screenType);
39
}
40
41
void
GameScreenManager::AddGameScreen
(
IGameScreen
* gameScreen)
42
{
43
gameScreen->
OnGameExitedEvent
().
AddHandler
(
44
GAME_EXITED_EVENT_HANDLER_NAME
,
45
[
this
] (
IGameScreen
& sender,
const
EmptyEventArgs
& args)
46
{
47
OnGameExited
(*
this
,
EmptyEventArgs
());
48
});
49
50
screens_
.
Add
(gameScreen->
GetType
(), gameScreen);
51
}
52
53
void
GameScreenManager::RemoveGameScreen
(
const
ScreenType
& screenType)
54
{
55
IGameScreen
& gameScreen = *
screens_
[screenType];
56
57
gameScreen.
OnGameExitedEvent
().
RemoveHandler
(
58
GAME_EXITED_EVENT_HANDLER_NAME
);
59
60
screens_
.
Remove
(screenType);
61
}
62
63
void
GameScreenManager::SetCurrentScreen
(
const
ScreenType
& screenType)
64
{
65
if
(
currentScreenType_
== screenType)
66
return
;
67
68
if
(
currentScreen_
!=
nullptr
)
69
currentScreen_
->
Deactivate
();
70
71
currentScreenType_
= screenType;
72
73
// If this screen doesn't exist
74
if
(!
screens_
.
Contains
(
currentScreenType_
))
75
{
76
YAPOG_THROW
(
"This screen doesn't exist ! (Screen name: "
+
77
currentScreenType_
+
")"
);
78
}
79
80
currentScreen_
=
screens_
[
currentScreenType_
];
81
82
currentScreen_
->
Activate
();
83
}
84
85
void
GameScreenManager::NextFrame
()
86
{
87
currentScreen_
->
NextFrame
();
88
}
89
90
void
GameScreenManager::Run
(
const
Time
& dt,
IDrawingContext
& context)
91
{
92
SetCurrentScreen
(
currentScreen_
->
Run
(dt, context));
93
}
94
95
Event<IGameScreenManager&>
&
GameScreenManager::OnGameExitedEvent
()
96
{
97
return
OnGameExited
;
98
}
99
}
// namespace yap
YAPOG
src
YAPOG
Graphics
Game
GameScreenManager.cpp
Generated on Mon Sep 17 2012 22:24:25 for YAPOG by
1.8.1.1