// // 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 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 actionFunction) override; virtual void runCompletingAction(cocos2d::Action* action) override; virtual void cancelAllCompletingActions() override; virtual void schedule(std::function callback, std::string key, float delay) override; virtual void scheduleOnce(std::function 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 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 _actionsSequence; std::map _predefinedActions; std::map _loopActionCounters; int _lastActionIndex; std::vector _currentCompletingActionTags; // rapidjson::Value* _onTimerCountdownAction; std::vector _actionsOnTimerUp; bool _scenarioPaused; bool _scenarioBarred; bool _scenarioFinished; bool _timerRunning; float _timerStep; float _timePassed; float _totalTimerTime; ToyTimeIndicatorInterface* _timeSlider; std::string _demoState; std::map _storedSoundIds; virtual void clearSetup(); virtual void clearAllScheduledActions(); virtual void prepareAction(const rapidjson::Value* action); virtual void trimActions(std::vector& actions); virtual void mergeSequences(std::vector& actions); void simpleCopyActionsToMainSequence(std::vector actions); }; #endif /* ToyScenarioHandler_h */