AniSubGameScene.h
4.68 KB
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
//
// AniSubGameScene.h
// SteveAndMaggieGame
//
// Created by Katarzyna Kalinowska-Górska on 07/05/2019.
//
#ifndef AniSubGameScene_h
#define AniSubGameScene_h
#include "AniParentScene.h"
#include "audio/include/AudioEngine.h"
#include "AniGameLifeIndicatorView.h"
#include "AniSettingsLayer.h"
#include "AniAlertUtils.h"
class AniSubGameScene : public AniParentScene
{
public:
static AniSubGameScene* createPlain(std::string layoutFilePath);
class GameCreator {
public:
virtual AniSubGameScene* createGameScene(int gameId,std::string layoutFilePath) = 0;
};
virtual void onEnter() override;
// virtual void onExit() override;
// virtual void onEnterTransitionDidFinish() override;
virtual bool initWithConfiguration(std::string layoutFilePath);
virtual ~AniSubGameScene();
bool isPaused(){return m_pauseState == PauseState::PAUSED;}
virtual void pauseGame() { m_pauseState = PauseState::PAUSED; }
virtual void resumeGame() { m_pauseState = PauseState::RUNNING; }
virtual void presentGameResumeLayer();
enum class PauseState {
RUNNING,
PAUSED
};
protected:
enum class PlayState
{
INIT,
PRE_PLAYING,
PLAYING,
CHANGING_LEVEL,
LOST,
WON
};
enum class ItemType : int {
NONE = 0,
ONE = 1,
TWO = 2,
THREE = 3,
FOUR = 4
};
class Item {
public:
cocos2d::Sprite* sprite;
cocos2d::Rect rect;
ItemType type;
bool operator==(const Item& item2) {
if(sprite == nullptr || item2.sprite == nullptr){
return false;
}
return sprite->getTag() == item2.sprite->getTag();
}
virtual ~Item(){
if(sprite != nullptr){
sprite->removeFromParent();
}
}
};
// state variables
class GameState {
public:
PlayState playState;
bool settingsMenuShown { false};
bool resumeLayerShown { false};
bool tosAcceptMenuShown;
std::map<int, Item*> items;
int currentLevel;
int currentItemTypeIndex;
std::vector<ItemType> itemTypeOrder; //the order of the types to catch (shuffled randomly at the beginning of each level)
bool itemVanishingMode;
float timeCount;
float lossTimeCount;
bool lossHalfTime;
int wrongItemCount;
virtual ~GameState(){}
};
PauseState m_pauseState { PauseState::RUNNING };
GameState* gameState;
AniSettingsLayer* m_settingsMenu;
AniGameLifeIndicatorView* lifeIndicatorView;
virtual void prepareSettingsMenu();
virtual void showSettingsMenu(bool animated = true);
virtual void hideSettingsMenu(bool animated = true); //TODO move all these to an interface maybe?
virtual void hideSettingsMenuWithLevelReset() { hideSettingsMenu(); }
virtual void hideSettingsMenuWithTutorialReset() { hideSettingsMenu(); }
virtual void moveSettingsButtonToFront(int localZOrder);
virtual GameState* createGameState();
virtual void removeGameState();
virtual void clearGameState();
virtual void clearAllItems();
virtual bool touchHandlerForWidget(std::string objectName, cocos2d::ui::Widget::TouchEventType touchEventType) override;
virtual bool onPrevLevelButtonClicked();
virtual bool onReplayButtonClicked();
virtual bool onNextLevelButtonClicked();
virtual bool onFastForwardButtonClicked();
virtual void startGame(bool playIntro = true) {}
virtual void gameWon();
virtual void gameLost();
virtual void resetGame();
virtual void reloadLayoutClean() override;
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
cocos2d::EventListenerKeyboard* _keyboardListener;
void addBackButtonListener(){
_keyboardListener = cocos2d::EventListenerKeyboard::create();
_keyboardListener->onKeyReleased = [&](cocos2d::EventKeyboard::KeyCode keyCode, cocos2d::Event* event){
if(keyCode == cocos2d::EventKeyboard::KeyCode::KEY_BACK){
if(!gameState->settingsMenuShown && !gameState->tosAcceptMenuShown){
pauseGame();
AniAlertUtils::showAppCloseConfirmDialog([&](){
resumeGame();
});
}
}
};
cocos2d::Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(_keyboardListener, this);
}
#endif
};
#endif /* AniSubGameScene_h */