YAPOG  0.0.1
Yet Another Pokemon Online Game
MapRootWidget.cpp
Go to the documentation of this file.
1 #include "Gui/MapRootWidget.hpp"
2 
4 
5 #include "World/Map/Map.hpp"
7 
8 namespace ycl
9 {
11  : yap::GameWorldWidget ()
12  , currentMap_ (nullptr)
13  {
14  }
15 
17  {
18  }
19 
21  {
22  Map* oldMap = currentMap_;
23 
24  currentMap_ = map;
25 
26  HandleSetCurrentMap (oldMap, map);
27  }
28 
30  {
31  return *currentMap_;
32  }
33 
35  {
36  MapPlayerInfoPanel* playerInfoPanel = new MapPlayerInfoPanel ();
37 
38  playerInfoPanel->Init (*player);
39 
40  playerInfoPanels_.Add (player, playerInfoPanel);
41 
42  AddGameWorldWidget (playerInfoPanel);
43  }
44 
46  {
47  MapPlayerInfoPanel* playerInfoPanel = playerInfoPanels_[player];
48 
49  RemoveGameWorldWidget (playerInfoPanel);
50 
51  playerInfoPanels_.Remove (player);
52  }
53 
55  {
56  if (oldMap != nullptr)
57  {
58  oldMap->OnPlayerAdded.RemoveHandler ("AddPlayerInfoPanelHandler");
59  oldMap->OnPlayerAdded.RemoveHandler ("RemovePlayerInfoPanelHandler");
60 
61  Clear ();
62  }
63 
65  "AddPlayerInfoPanelHandler",
66  [this] (
67  Map& sender,
68  Player& args)
69  {
70  AddPlayerInfoPanel (&args);
71  });
72 
74  "RemovePlayerInfoPanelHandler",
75  [this] (
76  Map& sender,
77  Player& args)
78  {
79  RemovePlayerInfoPanel (&args);
80  });
81  }
82 
84  {
85  yap::collection::Queue<Player*> playerInfoPanelsToRemove;
86  for (auto& playerPlayerInfoPanelPair : playerInfoPanels_)
87  playerInfoPanelsToRemove.Enqueue (playerPlayerInfoPanelPair.first);
88 
89  while (!playerInfoPanelsToRemove.IsEmpty ())
90  {
91  Player* player = playerInfoPanelsToRemove.Dequeue (player);
92 
93  RemovePlayerInfoPanel (player);
94  }
95  }
96 } // namespace ycl