ParentScene.h 4.98 KB
//
//  ParentScene.h
//  SteveMaggieCpp
//
//  Created by Katarzyna Kalinowska-Górska on 16.05.2017.
//
//

#ifndef ParentScene_h
#define ParentScene_h

#include "SceneWithUtils.h"
//#include "ScenarioHandler.h"
#include "ui/CocosGUI.h"
#include "TouchHandlerTypes.h"
#include "ScenarioObject.h"
#include "LayoutParser.h"
#include "audio/include/AudioEngine.h"

class ParentScene : public SceneWithUtils, public ScenarioObject, public LayoutViewInterface
{
//    friend class ScenarioHandler;

    public:
    
        // create
        static ParentScene* create(std::string layoutFilePath = "", std::string scenarioFilePath = "");
    
        virtual bool initWithConfigurationFiles(std::string layoutFilePath = "", std::string scenarioFilePath = "");
    
        // overrides
        virtual void onEnter() override;
        virtual void onExit() override;
    
        // layoutViewinterface
        virtual void addLayer(cocos2d::Layer* layer) override;
        virtual void addObject(std::string objectName, cocos2d::Node* object) override;
        virtual void addScenarioObject(std::string objectName, ScenarioObject* object) override;
        virtual void setupBackgroundMusic(std::string backgroundMusicPath) override;
        virtual bool touchHandlerForWidget(std::string objectName, cocos2d::ui::Widget::TouchEventType touchEventType) override;
    
        
        // Scenario Object
    
        virtual ScenarioObject* getObjectByName(std::string objectName) override;
        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 std::string getPropertyAsString(std::string propertyName = "") override;
    
        // other
    
        virtual void addNewObject(std::string objectName, ScenarioObject* newObject);
    
        virtual void disableButton(const std::string& buttonName);
        virtual void enableButton(const std::string& buttonName);
        virtual void disableFastForwardButton();
        virtual void enableFastForwardButton();
    
        virtual long long getLastScreenTouchTime();
    
        virtual void setAlwaysSkipDemo(bool alwaysSkipDemo);
    
        virtual void addTouchHandler(std::string key, TouchHandlerFunction touchHandler, TouchHandlerType touchType);
        virtual void removeTouchHandler(std::string touchHandlerKey, TouchHandlerType touchHandlerType);
    
        virtual void setLoadFromAssets(bool loadFromAssets);
    
    protected:
    
        // configuration file paths
    
        std::string _layoutFilePath;
        std::string _scenarioFilePath;
        bool _loadFromAssets;
    
        // layout objects
    
        std::vector<cocos2d::Layer*> _layers;
        std::map<std::string, cocos2d::Node*> _objects;
        std::map<std::string, ScenarioObject*> _scenarioObjects; // other than cocos2d::Nodes
    
        // state vars
    
        bool _layoutLoaded;
    
        // scenario handling
    
        bool _alwaysSkipDemo;
//        ScenarioHandler* _scenarioHandler;
    
        // touch handling
        
        std::map<std::string, TouchHandlerFunction> _touchBeganHandlers;
        std::map<std::string, TouchHandlerFunction> _touchMovedHandlers;
        std::map<std::string, TouchHandlerFunction> _touchEndedHandlers;
    
        std::map<std::string, TouchHandlerType> _touchHandlersToRemove;
        bool _isHandlingTouches;
    
        long long _lastUserTouchEndedTime;
        long long _lastUserTouchMovedTime;
    
        bool _userTaskInteractionStarted;
        std::map<std::string, bool> _userTaskInteractionStartedMap;
        std::string _currentTask;
        bool _rightObjectTouchedAlready;
        bool isShowingLevelPicker;
    
        // methods
    
        virtual void adjustBgMusicButton(bool bgMusicPlaying);
        virtual void reloadLayoutClean();
        virtual void loadLayout(bool forceLoad);
        virtual void loadScenario(bool skipDemoActions);
    
        virtual void configureTransitionListeners();
        virtual void onGameHide(cocos2d::EventCustom* event);
        virtual void onGameShow(cocos2d::EventCustom* event);
    
        virtual void resetLastUserTouchTimes();
    
        virtual void configureTouchHandlers();
        virtual void filterTouchHandlers();
        virtual void clearTouchHandlers();
        virtual std::map<std::string, TouchHandlerFunction>* pickTouchHandlersContainer(TouchHandlerType touchHandlerType);
    
        virtual void addNewNodeToObjectLayer(cocos2d::Node* newNode);
        virtual void addTouchBlockingLayer(cocos2d::Node* layer);
        virtual void showTOSAcceptPopup(std::function<void()> onAccept);
    virtual void showLevelPickerLayer(std::function<void()> onLayerDismissed, std::function<void(int)> onLevelChanged = [](int){});
    
        virtual void repeatPickLevelPrompt();
};

#endif /* ParentScene_h */