1 #ifndef __END_LEVEL_SCORE_SCREEN_H__
2 #define __END_LEVEL_SCORE_SCREEN_H__
3 
4 #include "ScoreScreenCommon.h"
5 
6 #include "../../Scene/Scene.h"
7 #include "../../SharedDefines.h"
8 
9 #include <SDL2/SDL.h>
10 
11 class Image;
12 class LevelData;
13 
14 enum ScoreScreenState
15 {
16     ScoreScreenState_None,
17     ScoreScreenState_Intro,
18     ScoreScreenState_SpawningScoreRows,
19     ScoreScreenState_Finished,
20     ScoreScreenState_Exiting,
21 };
22 
23 // This encapsulates score screen background and its children
24 class ScreenElementScoreScreen : public IScreenElement, public Scene
25 {
26 public:
27     ScreenElementScoreScreen(SDL_Renderer* pRenderer);
28     virtual ~ScreenElementScoreScreen();
29 
30     // IScreenElement implementation
VOnLostDevice()31     virtual void VOnLostDevice() { }
32     virtual void VOnUpdate(uint32 msDiff);
33     virtual void VOnRender(uint32 msDiff);
34 
VGetZOrder()35     virtual int32 VGetZOrder() const { return 0; }
VSetZOrder(int32 const zOrder)36     virtual void VSetZOrder(int32 const zOrder) { }
VIsVisible()37     virtual bool VIsVisible() { return true; }
VSetVisible(bool visible)38     virtual void VSetVisible(bool visible) { }
39 
40     virtual bool VOnEvent(SDL_Event& evt);
41 
42     bool Initialize(TiXmlElement* pScoreScreenRootElem);
43 
44 private:
45     // Delegates
46     void FinishedLoadingRowDelegate(IEventDataPtr pEventData);
47     void ScoreScreenFinishedIntroDelegate(IEventDataPtr pEventData);
48     void ScoreScreenLevelScoreAddedDelegate(IEventDataPtr pEventData);
49 
50     void LoadNextLevel();
51     void ForceNextState();
52     void QueueDelayedProcess(StrongProcessPtr pProcess, int delay);
53     void TestSpawnEverything();
54 
55     ScoreScreenState m_State;
56 
57     SDL_Renderer* m_pRenderer;
58     Point m_OriginalScale;
59 
60     shared_ptr<Image> m_pBackground;
61     shared_ptr<Image> m_pScoreBackgroundImage;
62 
63     std::vector<ScoreRowDef> m_ScoreRowList;
64 
65     int m_DisplayedLevelScore;
66     int m_DisplayedGameScore;
67 
68     ActorList m_LevelScoreNumbersList;
69     ActorList m_GameScoreNumbersList;
70 
71     int m_NextLevelNumber;
72     int m_ScorePointsOnLevelStart;
73     int m_ScorePointsCollectedInLevel;
74 
75     ProcessMgr* m_pProcessMgr;
76     std::vector<StrongProcessPtr> m_SpawnRowProcessList;
77 
78     // Internal states
79     bool m_bInScoreScreen;
80 };
81 
82 #endif