diff --git a/Drakhtar/GameObjects/Commanders/Commander.cpp b/Drakhtar/GameObjects/Commanders/Commander.cpp index 939d0abc..946748cd 100644 --- a/Drakhtar/GameObjects/Commanders/Commander.cpp +++ b/Drakhtar/GameObjects/Commanders/Commander.cpp @@ -1,13 +1,18 @@ // Copyright 2019 the Drakhtar authors. All rights reserved. MIT license. #include "Commander.h" + #include "../../GameObjects/Box.h" #include "../../Managers/TextureManager.h" +#include "Scenes/GameScene.h" +#include "Scenes/Scene.h" +#include "Scenes/TransitionScene.h" +#include "Structures/Game.h" +#include "Structures/Team.h" -Commander::Commander(Scene *scene, Texture *texture, Box *box, +Commander::Commander(Scene* scene, Texture* texture, Box* box, const UnitStats commanderStats) : Unit(scene, texture, box, commanderStats, "") { - const auto rect = box_->getRect(); commanderIcon_ = @@ -53,7 +58,17 @@ void Commander::onSelect() { } } -void Commander::moveToBox(Box *box) { +void Commander::kill() { + Unit::kill(); + int currentScene = reinterpret_cast(getScene())->getBattleInd(); + if (getTeam()->getColor() == Color::BLUE) { + Game::getSceneMachine()->changeScene(new GameScene(currentScene)); + } else { + Game::getSceneMachine()->changeScene(new TransitionScene(currentScene + 1)); + } +} + +void Commander::moveToBox(Box* box) { Unit::moveToBox(box); const auto rect = box_->getRect(); commanderIcon_->setPosition(Vector2D(rect.x, rect.y - rect.h / 3)); diff --git a/Drakhtar/GameObjects/Commanders/Commander.h b/Drakhtar/GameObjects/Commanders/Commander.h index 01ee76a8..8bd947c8 100644 --- a/Drakhtar/GameObjects/Commanders/Commander.h +++ b/Drakhtar/GameObjects/Commanders/Commander.h @@ -1,9 +1,10 @@ // Copyright 2019 the Drakhtar authors. All rights reserved. MIT license. #pragma once +#include + #include "../Skill.h" #include "../Unit.h" -#include class Scene; class Box; @@ -13,24 +14,27 @@ class Commander : public Unit { /** * \brief A vector of all the skills the commander can cast. */ - std::vector skills_; + std::vector skills_; - GameObject *commanderIcon_ = nullptr; + GameObject* commanderIcon_ = nullptr; public: - Commander(Scene *scene, Texture *texture, Box *box, UnitStats commanderStats); + Commander(Scene* scene, Texture* texture, Box* box, UnitStats commanderStats); virtual ~Commander(); void render() const override; /** * \return A vector of all the skills the commander can cast. */ - std::vector getSkills() const { return skills_; } + std::vector getSkills() const { return skills_; } /** * \brief Is called every time it's the commander's turn to lower every * skill's cooldown timer and duration timer. */ void onSelect() override; - void moveToBox(Box *box) override; + + void moveToBox(Box* box) override; + + void kill() override; }; diff --git a/Drakhtar/Scenes/GameScene.cpp b/Drakhtar/Scenes/GameScene.cpp index 224bf903..5c49d982 100644 --- a/Drakhtar/Scenes/GameScene.cpp +++ b/Drakhtar/Scenes/GameScene.cpp @@ -201,3 +201,5 @@ void GameScene::loadRedTeam(UnitFactory& factory) { } Board* GameScene::getBoard() const { return board_; } + +int GameScene::getBattleInd() { return battle_; } diff --git a/Drakhtar/Scenes/GameScene.h b/Drakhtar/Scenes/GameScene.h index 14e316e2..664e5035 100644 --- a/Drakhtar/Scenes/GameScene.h +++ b/Drakhtar/Scenes/GameScene.h @@ -22,4 +22,5 @@ class GameScene final : public Scene { void loadRedTeam(UnitFactory& factory); Board* getBoard() const; + int getBattleInd(); }; diff --git a/Drakhtar/Scenes/TransitionScene.cpp b/Drakhtar/Scenes/TransitionScene.cpp index 39927db3..ed91c7cc 100644 --- a/Drakhtar/Scenes/TransitionScene.cpp +++ b/Drakhtar/Scenes/TransitionScene.cpp @@ -21,3 +21,5 @@ void TransitionScene::preload() { addGameObject(dialog); setTransition(true); } + +int TransitionScene::getBattleInd() { return battle_; } diff --git a/Drakhtar/Scenes/TransitionScene.h b/Drakhtar/Scenes/TransitionScene.h index b3b9337c..0200b5b4 100644 --- a/Drakhtar/Scenes/TransitionScene.h +++ b/Drakhtar/Scenes/TransitionScene.h @@ -8,6 +8,8 @@ class TransitionScene final : public Scene { explicit TransitionScene(int battle); void preload() override; // void run(); + int getBattleInd(); + private: int battle_; // DialogScene dialog;