// // AniAdventureScene.h // SteveMaggieCpp // // Created by Katarzyna Kalinowska-Górska on 18.06.2017. // // #ifndef AniAdventureScene_h #define AniAdventureScene_h #include "AniSubGameScene.h" #include "AniMapUtils.h" #include "AniMiscUtils.h" #include "AniMapLayer.h" #include "AniGameConfigParser.h" #include "IMapAdventureObject.h" #include "AniBasicSteveMapCharacterController.h" #include "AniSteveCharacter.h" #include "AniProgressSliderNode.h" #include "AniGardenMapController.h" #include "AniTutorialMapControl.h" #include "AniGameStaticCreator.h" class AniAdventureScene : public AniSubGameScene, public IMapLayerDelegate, public IMapLayerDataSource, AniBasicSteveMapCharacterControllerDelegate, IMapCharacterSoundSource, TutorialDataSource, TutorialDelegate { public: static std::string layoutFileForCurrentLevel(){ return AniMiscUtils::lastLevel() == AniMiscUtils::Level::CHILD ? "graphics/game_map/baby_level/scene_layout_baby.scl" : "graphics/game_map/scene_layout.scl"; } struct LevelConfig { float levelTime; }; struct FItem { int itemId; std::string mapAdvObjectName; std::string soundRequest; std::string soundConf; std::string soundNo; std::string soundTooLate; }; struct GameConfig { std::vector levelConfigs; std::vector items; }; struct AdventureGameState { std::vector itemsOrder; int currentItem; float currentTimeSeconds; int score {0}; std::vector alreadyCollectedWrongObjects; }; static AniAdventureScene* create(int pGameId, std::string layoutFilePath, std::function gameConfigParser); virtual bool initWithConfiguration(int pGameId, std::string layoutFilePath, std::function gameConfigParse); virtual void onEnter() override; virtual ~AniAdventureScene(); virtual void clearGameState() override; void markShouldReplayTutorial() { m_replayingTutorial = true; m_shouldDisplayHintForLogLadder = true; } // map layer setup & delegate virtual IMapControl* initAllocMapControl() override; virtual IMapControlCoordinator* initAllocMapControlCoordinator() override; virtual IMapAdventureObjectMapper* initAllocAdventureObjectMapper() override; virtual std::vector createAutoreleasedMapCharacters() override; virtual std::vector initAllocMapCharacterControllers() override; virtual IMapController* initAllocMapController(cocos2d::TMXTiledMap* p_map, IMapAdventureObjectMapper* p_mapper) override; virtual void onMapAdventureObjectEvent(IMapAdventureObject* p_object, IMapAdventureObjectEvent* event) override; virtual void onCharacterFinishedIntroFalling(IMapCharacter* character) override; // character controller delegate virtual bool isRightPickUpItem(MapAdventureObjectPickupItem* item) override; virtual bool isBonusPickUpItem(MapAdventureObjectPickupItem* item) override; virtual void onRightItemPickedUp(MapAdventureObjectPickupItem* item) override; virtual void onWrongItemPickUpTry(MapAdventureObjectPickupItem* item) override; virtual void onBonusItemPickUp(MapAdventureObjectPickupItem* item) override; virtual void onApproachedRotatingItem(MapAdventureObjectRotatingEnd* object) override; virtual void onFinishedRotatingItem(MapAdventureObjectRotatingEnd* object) override; virtual void onCancelledRotatingItem(MapAdventureObjectRotatingEnd* object) override; virtual bool shouldApproachItem(IMapAdventureObject* item, AniMapUtils::TileData pressedTileCoords) override; // IMapCharacterSoundSource virtual bool shouldPlayBoredSound(IMapCharacter* p_mapCharacter) override { return true; }; virtual std::string soundFilePathBored(IMapCharacter* p_mapCharacter) override; protected: AniTutorialMapControl* m_tutorialMapControl {nullptr}; AniTouchRecognizerMapControl* m_mainMapControl {nullptr}; AniGardenMapController* m_gardenMapController {nullptr}; AniBasicSteveMapCharacterController* m_characterController {nullptr}; AniSteveCharacter* m_steve {nullptr}; GameConfig gameConfig; AdventureGameState advGameState; std::vector m_stars; AniGameStaticCreator gameCreator; AniMapLayer* _mapLayer; AniProgressSliderNode* m_progressSliderNode {nullptr}; bool m_tutorialRunning {false}; bool m_shouldDisplayHintForLogLadder {false}; bool shouldPlayIntro { true}; cocos2d::Sprite* m_finger {nullptr}; virtual void initAfterLayoutLoad(); virtual void prepareBgMusicButton(); virtual void showZoomButton(); virtual void startGame(bool playIntro = true) override; virtual void startTutorial(); // void spawnSteveAndStartGame(); virtual void pauseGame() override; virtual void resumeGame() override; virtual void resetGame() override; virtual void gameLost() override; virtual bool onFastForwardButtonClicked() override; void increaseScore(int by, bool animated = true); void decreaseScore(int by, bool animated = true); void shuffleObjectsIfRequired(); void stopAnimatingStars(); void animateStars(); virtual void hideSettingsMenuWithLevelReset() override; virtual void hideSettingsMenuWithTutorialReset() override; virtual void showSettingsMenu(bool animated = true) override; virtual void hideSettingsMenu(bool animated = true) override; inline const FItem& currentItem(){ return gameConfig.items[advGameState.itemsOrder[advGameState.currentItem]];} void nextItem(); void startTimer(); void stopTimer(); void onSecondElapsed(float dt); void multipleStarAnimation(cocos2d::Vec2 startPosition, int count); void starAnimation(cocos2d::Vec2 startPosition); void basketShakeAnimation(); bool tutorialComplete(); void saveTutorialComplete(); bool logLadderTutorialComplete(); void saveLogLadderTutorialComplete(); bool m_replayingTutorial {false}; std::string tut_firstItemToFind(){ return "pickUpItem8Wolf"; }; // TutorialDataSource virtual std::string soundPathForPhaseMove(AniTutorialMapControl* p_mapControl, int& soundDurationSecs) override; virtual cocos2d::Point mapPointForMoveSteveFinger(AniTutorialMapControl* p_mapControl) override; virtual std::vector mapTilesForMoveSteveEnd(AniTutorialMapControl* p_mapControl) override; virtual std::string soundPathForPhaseTapObject(AniTutorialMapControl* p_mapControl, int& soundDurationSecs) override; virtual cocos2d::Point mapPointForTapObjectFinger(AniTutorialMapControl* p_mapControl) override; virtual std::string soundPathForPhaseJumpUp(AniTutorialMapControl* p_mapControl, int& soundDurationSecs) override; virtual std::string soundPathForPhaseJumpDown(AniTutorialMapControl* p_mapControl, int& soundDurationSecs) override; virtual std::string soundPathForPhaseJumpLeft(AniTutorialMapControl* p_mapControl, int& soundDurationSecs) override; virtual std::string soundPathForPhaseJumpRight(AniTutorialMapControl* p_mapControl, int& soundDurationSecs) override; virtual std::string soundPathForPhaseTickle(AniTutorialMapControl* p_mapControl, int& soundDurationSecs) override; virtual std::string soundPathForPhaseMoveMap(AniTutorialMapControl* p_mapControl, int& soundDurationSecs) override; virtual std::string soundPathForPhaseTapToFinishMovingMap(AniTutorialMapControl* p_mapControl, int& soundDurationSecs) override; virtual std::string soundPathForTutorialFinished(AniTutorialMapControl* p_mapControl, int& soundDurationSecs) override; virtual cocos2d::Vec2 cancelZoomButtonPosition(AniTutorialMapControl* p_mapControl) override; // TutorialDelegate virtual void tutorialFinished(AniTutorialMapControl* p_mapControl) override; virtual bool touchHandlerForWidget(std::string objectName, cocos2d::ui::Widget::TouchEventType touchEventType) override; void displayMovingHintFinger(cocos2d::Point fromPoint, cocos2d::Point toPoint, float delay); void displayMovingHintFinger(cocos2d::Point fromPoint, cocos2d::Point toPoint); void cancelMovingHintFinger(); void cancelZoomMode(); void presentEndScene(float t); }; #endif /* AniAdventureScene_h */