YAPOG  0.0.1
Yet Another Pokemon Online Game
GameScreenManager.cpp
Go to the documentation of this file.
4 
5 namespace yap
6 {
8  "GameExitedEventHandler";
9 
11  : currentScreenType_ ()
12  , currentScreen_ (nullptr)
13  , screens_ ()
14  {
15  }
16 
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 
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 
42  {
43  gameScreen->OnGameExitedEvent ().AddHandler (
45  [this] (IGameScreen& sender, const EmptyEventArgs& args)
46  {
47  OnGameExited (*this, EmptyEventArgs ());
48  });
49 
50  screens_.Add (gameScreen->GetType (), gameScreen);
51  }
52 
54  {
55  IGameScreen& gameScreen = *screens_[screenType];
56 
57  gameScreen.OnGameExitedEvent ().RemoveHandler (
59 
60  screens_.Remove (screenType);
61  }
62 
64  {
65  if (currentScreenType_ == screenType)
66  return;
67 
68  if (currentScreen_ != nullptr)
70 
71  currentScreenType_ = screenType;
72 
73  // If this screen doesn't exist
75  {
76  YAPOG_THROW("This screen doesn't exist ! (Screen name: " +
77  currentScreenType_ + ")");
78  }
79 
81 
83  }
84 
86  {
88  }
89 
90  void GameScreenManager::Run (const Time& dt, IDrawingContext& context)
91  {
92  SetCurrentScreen (currentScreen_->Run (dt, context));
93  }
94 
96  {
97  return OnGameExited;
98  }
99 } // namespace yap