ToyScenarioHandler.h
5.89 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
//
// ToyScenarioHandler.h
// SteveMaggieCpp
//
// Created by Katarzyna Kalinowska-Górska on 23.05.2017.
//
//
#ifndef ToyScenarioHandler_h
#define ToyScenarioHandler_h
#include "json/document.h"
#include "ToyLayoutObject.h"
//#include "ToyScenarioObject.h"
#include "ToyActionParser.h"
#include "ToyTimeIndicatorInterface.h"
class ToyParentScene;
class ToyScenarioHandler : public ToyScenarioObject, public ActionParseDelegate
{
public:
static const std::string DEMO_STATE_UNINITIALIZED;
static const std::string DEMO_STATE_PLAYING;
static const std::string DEMO_STATE_FINISHED;
static const std::string DEMO_STATE_NEVER_PLAYED;
ToyScenarioHandler(ToyParentScene* scene);
virtual ~ToyScenarioHandler();
virtual void end();
virtual void loadScenarioFromJSONString(std::string jsonString, bool skipDemoActions);
virtual void loadScenarioFromJSONObject(const rapidjson::Value& jsonObject, bool skipDemoActions, bool isReplay = false);
virtual void reloadScenario(bool skipDemo, bool isReplay);
virtual void runScenario();
virtual void pauseScenario();
virtual void resumeScenario();
virtual void resetScenario(bool skipDemo, bool reloadLayout = true);
virtual std::string getDemoState(){ return _demoState; };
virtual void stopAllActions();
// sounds
void preloadSoundEffects(std::vector<rapidjson::Value*> actions);
void preloadSoundEffects(const rapidjson::Value& action);
void stopAllSoundEffects();
// timer
void startTimer(float pTimeToFinish, float step, const rapidjson::Value* actionsOnProgressStep, const rapidjson::Value* actionsOnTimeUp, bool finishScenarioAfterTimeUp, std::string timeIndicatorObjectName);
void stopTimer();
void pauseTimer();
void resumeTimer();
// review prompt
void countUpRateMePromptCounter();
// ActionParseDelegate
virtual ToyScenarioObject* getObjectByName(std::string objectName) override;
virtual ToyScenarioObject* getDefaultObjectForAction(std::string actionType) override;
virtual ToyScenarioObject* getDefaultObjectForConditionCheck() override;
virtual void addNewObject(std::string objectName, ToyScenarioObject* newObject) override;
virtual std::string getDefaultSoundsPath() override;
virtual std::string getAlternativeSoundsPath() override;
virtual std::string getToyValueStorageContainerName() override;
virtual void runAction(cocos2d::Action* action) override;
virtual void actionFinished(const rapidjson::Value& jsonActionObject) override;
virtual void runInstantly(std::function<void()> actionFunction) override;
virtual void runCompletingAction(cocos2d::Action* action) override;
virtual void cancelAllCompletingActions() override;
virtual void schedule(std::function<void(float)> callback, std::string key, float delay) override;
virtual void scheduleOnce(std::function<void(float)> callback, float delay, std::string key) override;
virtual void unschedule(std::string key) override;
virtual void newTouchHandler(std::string key, TouchHandlerFunction touchHandler, TouchHandlerType touchType) override;
virtual void removeTouchHandler(std::string key, TouchHandlerType touchType) override;
virtual long long getLastScreenTouchTime() override;
virtual int getLoopActionCounter(std::string loopId) override;
virtual int addNewLoopActionCounter(std::string loopId, int timesRepeated) override;
virtual int decrementLoopActionCounter(std::string loopId) override;
virtual void deleteLoopActionCounter(std::string loopId) override;
virtual void setLastActionIndex(int index) override;
virtual unsigned int removeStoredSoundId(std::string soundPath) override;
virtual void storeSoundId(std::string soundPath, unsigned int newSoundId) override;
// ToyScenarioObject
virtual void setProperty(std::string propertyName, const rapidjson::Value& newValue, ActionParseDelegate* parseDelegate) override;
virtual void callFunctionByName(std::string methodName, const rapidjson::Value* arguments, ActionParseDelegate* parseDelegate, std::function<void()> callback = [](){}) override;
virtual bool shouldSkipLayoutReloadOnFastForward(){return _shouldSkipLayoutReloadOnFastForward; }
protected:
ToyParentScene* _scene;
std::string _soundsResFolder;
std::string _altSoundsResFolder;
bool _shouldSkipLayoutReloadOnFastForward;
std::string _valueStorageContainerName;
std::string _cachedJSONString;
rapidjson::Document* _cachedJSONData;
std::vector<rapidjson::Value*> _actionsSequence;
std::map<std::string, rapidjson::Value*> _predefinedActions;
std::map<std::string, int> _loopActionCounters;
int _lastActionIndex;
std::vector<int> _currentCompletingActionTags;
// rapidjson::Value* _onTimerCountdownAction;
std::vector<rapidjson::Value*> _actionsOnTimerUp;
bool _scenarioPaused;
bool _scenarioBarred;
bool _scenarioFinished;
bool _timerRunning;
float _timerStep;
float _timePassed;
float _totalTimerTime;
ToyTimeIndicatorInterface* _timeSlider;
std::string _demoState;
std::map<std::string, int> _storedSoundIds;
virtual void clearSetup();
virtual void clearAllScheduledActions();
virtual void prepareAction(const rapidjson::Value* action);
virtual void trimActions(std::vector<rapidjson::Value*>& actions);
virtual void mergeSequences(std::vector<rapidjson::Value*>& actions);
void simpleCopyActionsToMainSequence(std::vector<rapidjson::Value*> actions);
};
#endif /* ToyScenarioHandler_h */