From 994a61f79d4f04ca0278c78e396dc8a435d83993 Mon Sep 17 00:00:00 2001 From: "C. J. Howard" Date: Tue, 19 Sep 2017 23:39:53 +0800 Subject: [PATCH] Update level select and play state transitions --- src/application.cpp | 12 ++++++------ src/game/colony.cpp | 14 ++++++++++++++ src/game/colony.hpp | 2 ++ src/states/level-select-state.cpp | 12 ++++++++++-- src/states/main-menu-state.cpp | 5 +++++ src/states/play-state.cpp | 19 +++++++++++-------- 6 files changed, 48 insertions(+), 16 deletions(-) diff --git a/src/application.cpp b/src/application.cpp index b8ff809..a83c558 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -1635,12 +1635,12 @@ void Application::selectNextLevel() selectLevel(currentLevelIndex + 1); // Setup camera tween - Vector3 difference = Vector3(ANTKEEPER_LEVEL_SPACING * currentLevelIndex, camera.getTranslation().y, camera.getTranslation().z) - camera.getTranslation(); + Vector3 difference = Vector3(ANTKEEPER_LEVEL_SPACING * currentLevelIndex, surfaceCam->getTargetFocalPoint().y, surfaceCam->getTargetFocalPoint().z) - surfaceCam->getTargetFocalPoint(); cameraTranslationTween->setTime(0.0f); cameraTranslationTween->setDuration(1.0f); - cameraTranslationTween->setStartValue(camera.getTranslation()); + cameraTranslationTween->setStartValue(surfaceCam->getTargetFocalPoint()); cameraTranslationTween->setDeltaValue(difference); - cameraTranslationTween->setUpdateCallback(std::bind(&SceneObject::setTranslation, &camera, std::placeholders::_1)); + cameraTranslationTween->setUpdateCallback(std::bind(&SurfaceCameraController::setTargetFocalPoint, surfaceCam, std::placeholders::_1)); cameraTranslationTween->start(); } } @@ -1652,12 +1652,12 @@ void Application::selectPreviousLevel() selectLevel(currentLevelIndex - 1); // Setup camera tween - Vector3 difference = Vector3(ANTKEEPER_LEVEL_SPACING * currentLevelIndex, camera.getTranslation().y, camera.getTranslation().z) - camera.getTranslation(); + Vector3 difference = Vector3(ANTKEEPER_LEVEL_SPACING * currentLevelIndex, surfaceCam->getTargetFocalPoint().y, surfaceCam->getTargetFocalPoint().z) - surfaceCam->getTargetFocalPoint(); cameraTranslationTween->setTime(0.0f); cameraTranslationTween->setDuration(1.0f); - cameraTranslationTween->setStartValue(camera.getTranslation()); + cameraTranslationTween->setStartValue(surfaceCam->getTargetFocalPoint()); cameraTranslationTween->setDeltaValue(difference); - cameraTranslationTween->setUpdateCallback(std::bind(&SceneObject::setTranslation, &camera, std::placeholders::_1)); + cameraTranslationTween->setUpdateCallback(std::bind(&SurfaceCameraController::setTargetFocalPoint, surfaceCam, std::placeholders::_1)); cameraTranslationTween->start(); } } diff --git a/src/game/colony.cpp b/src/game/colony.cpp index 3c2a5f9..8b4b1e4 100644 --- a/src/game/colony.cpp +++ b/src/game/colony.cpp @@ -35,7 +35,9 @@ Colony::Colony(): Colony::~Colony() { + killAll(); delete antOctree; + delete pheromoneOctree; } Ant* Colony::spawn(Navmesh* navmesh, Navmesh::Triangle* triangle, const Vector3& position) @@ -77,3 +79,15 @@ void Colony::queryAnts(const BoundingVolume& volume, std::list* results) { antOctree->query(volume, results); } + +void Colony::killAll() +{ + antOctree->clear(); + pheromoneOctree->clear(); + + for (Ant* ant: ants) + { + delete ant; + } + ants.clear(); +} diff --git a/src/game/colony.hpp b/src/game/colony.hpp index 2c57c38..a853f53 100644 --- a/src/game/colony.hpp +++ b/src/game/colony.hpp @@ -54,6 +54,8 @@ public: const Ant* getAnt(std::size_t index) const; Ant* getAnt(std::size_t index); + void killAll(); + const Octree* getAntOctree() const; const Octree* getPheromoneOctree() const; diff --git a/src/states/level-select-state.cpp b/src/states/level-select-state.cpp index e96ac74..097c9d5 100644 --- a/src/states/level-select-state.cpp +++ b/src/states/level-select-state.cpp @@ -21,6 +21,7 @@ #include "main-menu-state.hpp" #include "../application.hpp" #include "../configuration.hpp" +#include "../camera-controller.hpp" LevelSelectState::LevelSelectState(Application* application): ApplicationState(application) @@ -45,7 +46,6 @@ void LevelSelectState::enter() application->defaultLayer->addObject(subsurfaceInstance); } application->defaultLayer->addObject(&application->biomeFloorModelInstance); - //application->biomeFloorModelInstance.setTranslation(Vector3(0.0f, -ANTKEEPER_TERRAIN_BASE_HEIGHT, 0.0f)); application->levelIDLabel->setVisible(true); application->levelNameLabel->setVisible(true); @@ -53,7 +53,12 @@ void LevelSelectState::enter() application->selectWorld(0); application->selectLevel(0); - application->camera.lookAt(Vector3(0, 150, 200), Vector3(0, 0, 0), Vector3(0, 1, 0)); + // Setup camera controller + application->surfaceCam->setTargetFocalPoint(Vector3(0.0f)); + application->surfaceCam->setTargetFocalDistance(350.0f); + application->surfaceCam->setTargetElevation(glm::radians(85.0f)); + application->surfaceCam->setTargetAzimuth(0.0f); + application->surfaceCam->update(0.0f); } void LevelSelectState::execute() @@ -97,6 +102,9 @@ void LevelSelectState::execute() //surfaceInstance->setRotation(rotation); //subsurfaceInstance->setRotation(rotation); } + + // Update camera + application->surfaceCam->update(application->dt); } void LevelSelectState::exit() diff --git a/src/states/main-menu-state.cpp b/src/states/main-menu-state.cpp index 284896d..e0d72c2 100644 --- a/src/states/main-menu-state.cpp +++ b/src/states/main-menu-state.cpp @@ -182,6 +182,9 @@ void MainMenuState::enter() application->blackoutImage->setVisible(true); application->fadeInTween->start(); + application->backgroundLayer->addObject(&application->bgCamera); + application->backgroundLayer->addObject(&application->bgBatch); + // Add nest application->defaultLayer->addObject(&application->nestModelInstance); @@ -283,6 +286,8 @@ void MainMenuState::exit() // Clear scene application->defaultLayer->removeObject(&application->nestModelInstance); + application->backgroundLayer->removeObject(&application->bgCamera); + application->backgroundLayer->removeObject(&application->bgBatch); } void MainMenuState::mouseButtonPressed(int button, int x, int y) diff --git a/src/states/play-state.cpp b/src/states/play-state.cpp index 1b8dc6a..bcace00 100644 --- a/src/states/play-state.cpp +++ b/src/states/play-state.cpp @@ -74,14 +74,14 @@ void PlayState::enter() // Setup camera controller application->surfaceCam->setCamera(&application->camera); - application->surfaceCam->setFocalPoint(Vector3(0.0f)); - application->surfaceCam->setFocalDistance(250.0f); - application->surfaceCam->setElevation(glm::radians(35.0f)); - application->surfaceCam->setAzimuth(glm::radians(-45.0f)); - application->surfaceCam->setTargetFocalPoint(application->surfaceCam->getFocalPoint()); - application->surfaceCam->setTargetFocalDistance(application->surfaceCam->getFocalDistance()); - application->surfaceCam->setTargetElevation(application->surfaceCam->getElevation()); - application->surfaceCam->setTargetAzimuth(application->surfaceCam->getAzimuth()); + //application->surfaceCam->setFocalPoint(Vector3(0.0f)); + //application->surfaceCam->setFocalDistance(250.0f); + //application->surfaceCam->setElevation(glm::radians(35.0f)); + //application->surfaceCam->setAzimuth(glm::radians(-45.0f)); + application->surfaceCam->setTargetFocalPoint(Vector3(0.0f)); + application->surfaceCam->setTargetFocalDistance(250.0f); + application->surfaceCam->setTargetElevation(glm::radians(35.0f)); + //application->surfaceCam->setTargetAzimuth(glm::radians(-45.0f)); application->surfaceCam->update(0.0f); application->simulationPaused = false; @@ -233,6 +233,9 @@ void PlayState::exit() application->defaultLayer->removeObject(ant->getModelInstance()); } + // Kill all ants + application->colony->killAll(); + // Hide HUD application->pauseButtonImage->setVisible(false); application->pauseButtonImage->setActive(false);