ToyActionSequenceHandler.h 2.76 KB
//
//  ToyActionSequenceHandler.h
//  SteveMaggieCpp
//
//  Created by Katarzyna Kalinowska-Górska on 29.06.2017.
//
//

#ifndef ToyActionSequenceHandler_h
#define ToyActionSequenceHandler_h

#include "ToyActionParser.h"
#include "json/document.h"
#include "ToyScenarioObject.h"

class ToyActionSequenceHandler : public ActionParseDelegate
{
    public:
    
        ToyActionSequenceHandler(ToyScenarioObject* containerNode, const rapidjson::Value& actionsArray);
        virtual ~ToyActionSequenceHandler();
    
        virtual void runNext();
        virtual void reset();
        virtual void stop();
    
        // action parse delegate
        virtual ToyScenarioObject* getObjectByName(std::string objectName);
        virtual ToyScenarioObject* getDefaultObjectForAction(std::string actionType);
        virtual ToyScenarioObject* getDefaultObjectForConditionCheck();
        virtual void addNewObject(std::string objectName, ToyScenarioObject* newObject);
        virtual std::string getDefaultSoundsPath();
        virtual std::string getAlternativeSoundsPath();
        virtual std::string getToyValueStorageContainerName();
        virtual void runAction(cocos2d::Action* action);
        virtual void actionFinished(const rapidjson::Value& jsonActionObject);
        virtual void runInstantly(std::function<void()> actionFunction);
        virtual void runCompletingAction(cocos2d::Action* action);
        virtual void cancelAllCompletingActions();
        virtual void schedule(std::function<void(float)> callback, std::string key, float delay);
        virtual void scheduleOnce(std::function<void(float)> callback, float delay, std::string key);
        virtual void unschedule(std::string key);
        virtual void newTouchHandler(std::string key, TouchHandlerFunction touchHandler, TouchHandlerType touchType);
        virtual void removeTouchHandler(std::string key, TouchHandlerType touchType);
        virtual long long getLastScreenTouchTime();
        virtual int getLoopActionCounter(std::string loopId);
        virtual int addNewLoopActionCounter(std::string loopId, int timesRepeated);
        virtual int decrementLoopActionCounter(std::string loopId);
        virtual void deleteLoopActionCounter(std::string loopId);
        virtual void setLastActionIndex(int index);
        virtual unsigned int removeStoredSoundId(std::string soundPath);
        virtual void storeSoundId(std::string soundPath, unsigned int newSoundId);
    
    protected:
    
        std::string _valueStorageContainerName;
        ToyScenarioObject* _containerNode;
        rapidjson::Document* _JSONDataStorage;
        rapidjson::Value* _actions;
        int _lastActionIndex;
        cocos2d::Action* _currentAction;
        std::function<void()> _onLastActionFinished;
};

#endif /* ToyActionSequenceHandler_h */