From f65c4a7ab3f50c3591b1ac1bf196c1145ad9c25e Mon Sep 17 00:00:00 2001 From: jansenin <59775038+jansenin@users.noreply.github.com> Date: Tue, 12 Apr 2022 22:33:21 +0300 Subject: [PATCH 01/19] Project base and demonstration of some features of that base (#1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * create basic project structure, model structure, add some graphics * improve code style * Refactored Model Added View, Controller. All necessary code moved from MainWindow to Controller. Reloaded Ticks for GameField and TowerSlot. * return to qt6 * add test mob,tower,tower slot,projectile, add resources Были добавлены тестовый моб, башня, слот для башни, самонаводящиеся пули, начато использование ресурсов(qresources) * improve code style * Refactoring Из основного: -Исходные файлы в CmakeLists были рассортированы -Некоторые пити теперь прописаны относительно корня проекта -Константы вынесены в один файл -Гуарды заменены на #pragma -PixmapLoader -Timer -VectorF * supress warning Co-authored-by: Parfenov --- .gitignore | 4 + CMakeLists.txt | 47 +++++++++ Controller/controller.cpp | 94 ++++++++++++++++++ Controller/controller.h | 31 ++++++ .../BasicObjects/Entities/Mobs/Basis/mob.cpp | 4 + .../BasicObjects/Entities/Mobs/Basis/mob.h | 12 +++ .../BasicObjects/Entities/Mobs/test_mob.cpp | 46 +++++++++ .../BasicObjects/Entities/Mobs/test_mob.h | 21 ++++ .../Projectiles/autoguided_projectile.cpp | 29 ++++++ .../Projectiles/autoguided_projectile.h | 19 ++++ .../Entities/Projectiles/test_projectile.cpp | 16 +++ .../Entities/Projectiles/test_projectile.h | 10 ++ .../Towers/TowerSlots/test_tower_slot.cpp | 29 ++++++ .../Towers/TowerSlots/test_tower_slot.h | 16 +++ .../Entities/Towers/TowerSlots/tower_slot.cpp | 22 ++++ .../Entities/Towers/TowerSlots/tower_slot.h | 16 +++ .../Entities/Towers/test_tower.cpp | 45 +++++++++ .../BasicObjects/Entities/Towers/test_tower.h | 19 ++++ .../BasicObjects/Entities/Towers/tower.cpp | 4 + .../BasicObjects/Entities/Towers/tower.h | 8 ++ .../BasicObjects/Interface/damageable.cpp | 16 +++ .../BasicObjects/Interface/damageable.h | 13 +++ GameObjects/BasicObjects/Interface/entity.cpp | 29 ++++++ GameObjects/BasicObjects/Interface/entity.h | 36 +++++++ GameObjects/BasicObjects/Interface/tickable.h | 8 ++ Resources/images/background.png | Bin 0 -> 3302 bytes Resources/images/test_bullet.png | Bin 0 -> 152 bytes Resources/images/test_mob.png | Bin 0 -> 1385 bytes Resources/images/test_tower.png | Bin 0 -> 1951 bytes Resources/images/test_tower_gun.png | Bin 0 -> 150 bytes Resources/images/test_tower_slot.png | Bin 0 -> 3127 bytes Resources/resources.qrc | 10 ++ Utilities/Resources/pixmap_loader.cpp | 19 ++++ Utilities/Resources/pixmap_loader.h | 18 ++++ Utilities/damage.cpp | 9 ++ Utilities/damage.h | 10 ++ Utilities/time.cpp | 50 ++++++++++ Utilities/time.h | 28 ++++++ Utilities/timer.cpp | 23 +++++ Utilities/timer.h | 17 ++++ Utilities/vector_f.cpp | 22 ++++ Utilities/vector_f.h | 17 ++++ constants.cpp | 30 ++++++ constants.h | 31 ++++++ game_view.cpp | 20 ++++ game_view.h | 8 ++ main.cpp | 12 +++ main_window.cpp | 9 ++ main_window.h | 9 ++ project description/Tower defence.drawio | 2 +- project description/Tower defence.drawio.png | Bin 0 -> 184617 bytes 51 files changed, 937 insertions(+), 1 deletion(-) create mode 100644 CMakeLists.txt create mode 100644 Controller/controller.cpp create mode 100644 Controller/controller.h create mode 100644 GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp create mode 100644 GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h create mode 100644 GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp create mode 100644 GameObjects/BasicObjects/Entities/Mobs/test_mob.h create mode 100644 GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.cpp create mode 100644 GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.h create mode 100644 GameObjects/BasicObjects/Entities/Projectiles/test_projectile.cpp create mode 100644 GameObjects/BasicObjects/Entities/Projectiles/test_projectile.h create mode 100644 GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp create mode 100644 GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.h create mode 100644 GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.cpp create mode 100644 GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.h create mode 100644 GameObjects/BasicObjects/Entities/Towers/test_tower.cpp create mode 100644 GameObjects/BasicObjects/Entities/Towers/test_tower.h create mode 100644 GameObjects/BasicObjects/Entities/Towers/tower.cpp create mode 100644 GameObjects/BasicObjects/Entities/Towers/tower.h create mode 100644 GameObjects/BasicObjects/Interface/damageable.cpp create mode 100644 GameObjects/BasicObjects/Interface/damageable.h create mode 100644 GameObjects/BasicObjects/Interface/entity.cpp create mode 100644 GameObjects/BasicObjects/Interface/entity.h create mode 100644 GameObjects/BasicObjects/Interface/tickable.h create mode 100644 Resources/images/background.png create mode 100644 Resources/images/test_bullet.png create mode 100644 Resources/images/test_mob.png create mode 100644 Resources/images/test_tower.png create mode 100644 Resources/images/test_tower_gun.png create mode 100644 Resources/images/test_tower_slot.png create mode 100644 Resources/resources.qrc create mode 100644 Utilities/Resources/pixmap_loader.cpp create mode 100644 Utilities/Resources/pixmap_loader.h create mode 100644 Utilities/damage.cpp create mode 100644 Utilities/damage.h create mode 100644 Utilities/time.cpp create mode 100644 Utilities/time.h create mode 100644 Utilities/timer.cpp create mode 100644 Utilities/timer.h create mode 100644 Utilities/vector_f.cpp create mode 100644 Utilities/vector_f.h create mode 100644 constants.cpp create mode 100644 constants.h create mode 100644 game_view.cpp create mode 100644 game_view.h create mode 100644 main.cpp create mode 100644 main_window.cpp create mode 100644 main_window.h create mode 100644 project description/Tower defence.drawio.png diff --git a/.gitignore b/.gitignore index f147edf..170b6f4 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,7 @@ compile_commands.json # QtCreator local machine specific files for imported projects *creator.user* + + + +/.idea/ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..c6fcf02 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,47 @@ +cmake_minimum_required(VERSION 3.20) +project(Game) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) +set(CMAKE_AUTOUIC ON) + +find_package(Qt6 COMPONENTS + Core + Gui + Widgets + REQUIRED) + +set(RESOURCES + Resources/resources.qrc) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(GAME_OBJECTS + GameObjects/BasicObjects/Interface/damageable.cpp + GameObjects/BasicObjects/Interface/entity.cpp + GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp + GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp + GameObjects/BasicObjects/Entities/Towers/tower.cpp + GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.cpp + GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp + GameObjects/BasicObjects/Entities/Towers/test_tower.cpp + GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.cpp + GameObjects/BasicObjects/Entities/Projectiles/test_projectile.cpp) + +set(UTILITIES + Utilities/damage.cpp + Utilities/time.cpp + Utilities/vector_f.cpp + Utilities/Resources/pixmap_loader.cpp + Utilities/timer.cpp) + +add_executable(Game + ${RESOURCES} + ${GAME_OBJECTS} + ${UTILITIES} + main.cpp + main_window.cpp + Controller/controller.cpp game_view.cpp game_view.h constants.cpp) + +target_link_libraries(Game Qt::Core Qt::Gui Qt::Widgets) \ No newline at end of file diff --git a/Controller/controller.cpp b/Controller/controller.cpp new file mode 100644 index 0000000..e8b5b76 --- /dev/null +++ b/Controller/controller.cpp @@ -0,0 +1,94 @@ +#include "Controller/controller.h" + +#include +#include +#include +#include + +#include "GameObjects/BasicObjects/Entities/Mobs/test_mob.h" +#include "GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.h" +#include "constants.h" + +Controller* Controller::instance; + +Controller::Controller() : + scene_(new QGraphicsScene(kSceneRect)), + view_(new GameView(scene_)), + tick_timer_(new QTimer(this)) { + SetupScene(); + LaunchTickTimer(); +} + +GameView* Controller::GetView() const { + return view_; +} + +void Controller::SetupScene() { + { // temporary code + QPushButton* close_button = new QPushButton(); + QGraphicsProxyWidget* close_button_proxy = scene_->addWidget(close_button); + close_button_proxy->setGeometry(QRectF( + scene_->sceneRect().topRight() - VectorF{100, 0}, + scene_->sceneRect().topRight() + VectorF{0, 100})); + + close_button->setText("Close"); + QObject::connect(close_button, &QPushButton::clicked, &QApplication::exit); + + Entity* entity = new TestMob(); + scene_->addItem(entity); + scene_->setFocusItem(entity); + + TestTowerSlot* test_tower_slot = new TestTowerSlot(VectorF{400, 400}); + scene_->addItem(test_tower_slot); + + QRectF sceneRect = scene_->sceneRect(); + qreal x = sceneRect.x(); + qreal y = sceneRect.y(); + qreal width = sceneRect.width(); + qreal height = sceneRect.height(); + + scene_->addLine( + x + width / 2, + y, + x + width / 2, + y + height, + QPen(Qt::blue)); + + scene_->addLine( + x, + y + 1, + x + width, + y + 1, + QPen(Qt::blue)); + + scene_->addLine( + x, + y + height / 2, + x + width, + y + height / 2, + QPen(Qt::blue)); + } // temporary code end +} + +void Controller::LaunchTickTimer() { + tick_timer_->setInterval(1000 / 30); + tick_timer_->start(); + connect(tick_timer_, &QTimer::timeout, this, &Controller::TickAllTickables); +} + +Controller* Controller::Instance() { + if (instance == nullptr) { + instance = new Controller(); + } + return instance; +} + +void Controller::TickAllTickables() { + for (QGraphicsItem* graphics_item : scene_->items()) { + if (Tickable* tickable = dynamic_cast(graphics_item)) { + // TODO(jansenin): make time dependency(it + // could have been more than 1000/30 ms) + tickable->Tick(Time(1000 / 30)); + } + } +} diff --git a/Controller/controller.h b/Controller/controller.h new file mode 100644 index 0000000..662a639 --- /dev/null +++ b/Controller/controller.h @@ -0,0 +1,31 @@ +#pragma once + +#include +#include +#include + +#include "GameObjects/BasicObjects/Interface/entity.h" +#include "game_view.h" + +class Controller : public QObject { + Q_OBJECT + public: + static Controller* Instance(); + + [[nodiscard]] GameView* GetView() const; + + public slots: + void TickAllTickables(); + + private: + static Controller* instance; + + Controller(); + + void SetupScene(); + void LaunchTickTimer(); + + QGraphicsScene* scene_; + GameView* view_; + QTimer* tick_timer_; +}; diff --git a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp new file mode 100644 index 0000000..cc15906 --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp @@ -0,0 +1,4 @@ +#include "mob.h" + +Mob::Mob(const VectorF& coordinates, QPixmap* pixmap, int health) + : Entity(coordinates, pixmap, health) {} diff --git a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h new file mode 100644 index 0000000..b9cee7f --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h @@ -0,0 +1,12 @@ +#pragma once + +#include "GameObjects/BasicObjects/Interface/entity.h" + +#include + +#include "Utilities/vector_f.h" + +class Mob : public Entity { + public: + Mob(const VectorF& coordinates, QPixmap* pixmap, int health = 0); +}; diff --git a/GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp b/GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp new file mode 100644 index 0000000..bdcfc76 --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp @@ -0,0 +1,46 @@ +#include "test_mob.h" + +#include + +#include "Utilities/Resources/pixmap_loader.h" +#include "constants.h" + +void TestMob::Tick(Time delta) { + MoveBy(VectorF{delta.seconds() * Entities::TestMob::kPassiveMoveSpeed, 0}); +} + +void TestMob::keyPressEvent(QKeyEvent* event) { + if (health_ == 0) return; + QPointF velocity_vector = mapToParent(pos() + + VectorF{0, -Entities::TestMob::kActiveMoveSpeed}) - mapToParent(pos()); + if (event->key() == Qt::Key::Key_Left) { + setRotation(rotation() - Entities::TestMob::kRotationSpeed); + } else if (event->key() == Qt::Key::Key_Right) { + setRotation(rotation() + Entities::TestMob::kRotationSpeed); + } else if (event->key() == Qt::Key::Key_Up) { + setPos(pos() + velocity_vector); + } else if (event->key() == Qt::Key::Key_Down) { + setPos(pos() - velocity_vector); + } +} + +void TestMob::mousePressEvent(QGraphicsSceneMouseEvent* event) { + scene()->addItem(new TestMob(pos() + VectorF{10, 30})); +} + +TestMob::TestMob(const VectorF& coordinates) + : Mob( + coordinates, + PixmapLoader::Pixmaps::kTestMob, + Entities::TestMob::kHealth) { + setFlag(QGraphicsItem::ItemIsFocusable, true); +} +void TestMob::paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) { + Entity::paint(painter, option, widget); + if (health_ == 0) { + painter->drawLine(-50, -50, 50, 50); + painter->drawLine(50, -50, -50, 50); + } +} diff --git a/GameObjects/BasicObjects/Entities/Mobs/test_mob.h b/GameObjects/BasicObjects/Entities/Mobs/test_mob.h new file mode 100644 index 0000000..3f483bf --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Mobs/test_mob.h @@ -0,0 +1,21 @@ +#pragma once + +#include + +#include "Basis/mob.h" +#include "Utilities/vector_f.h" + +class TestMob : public Mob { + public: + explicit TestMob(const VectorF& coordinates = VectorF{0, 0}); + + void Tick(Time delta) override; + + void paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) override; + + protected: + void keyPressEvent(QKeyEvent* event) override; + void mousePressEvent(QGraphicsSceneMouseEvent* event) override; +}; diff --git a/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.cpp b/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.cpp new file mode 100644 index 0000000..da0a0e7 --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.cpp @@ -0,0 +1,29 @@ +#include + +#include "autoguided_projectile.h" + +AutoguidedProjectile::AutoguidedProjectile( + const VectorF& coordinates, + QPixmap* pixmap, + Entity* target, + qreal speed, + Damage damage) + : Entity(coordinates, pixmap), + target_(target), speed_(speed), damage_(damage) {} + +void AutoguidedProjectile::Tick(Time delta) { + Move(delta); + + if (target_->collidesWithItem(this)) { + target_->ApplyDamage(damage_); + deleteLater(); + } +} + +void AutoguidedProjectile::Move(Time delta) { + VectorF target_point = target_->scenePos(); + VectorF delta_pos = target_point - scenePos(); + VectorF velocity = delta_pos.normalized() * speed_; + + MoveBy(velocity * delta.seconds()); +} diff --git a/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.h b/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.h new file mode 100644 index 0000000..0a70022 --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.h @@ -0,0 +1,19 @@ +#pragma once + +#include "GameObjects/BasicObjects/Interface/entity.h" + +class AutoguidedProjectile : public Entity { + public: + AutoguidedProjectile(const VectorF& coordinates, + QPixmap* pixmap, + Entity* target, qreal speed, Damage damage); + + void Tick(Time delta) override; + + protected: + void Move(Time delta); + + Entity* target_; + qreal speed_; + Damage damage_; +}; diff --git a/GameObjects/BasicObjects/Entities/Projectiles/test_projectile.cpp b/GameObjects/BasicObjects/Entities/Projectiles/test_projectile.cpp new file mode 100644 index 0000000..5037d31 --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Projectiles/test_projectile.cpp @@ -0,0 +1,16 @@ +#include "test_projectile.h" + +#include "Utilities/Resources/pixmap_loader.h" +#include "constants.h" + +TestProjectile::TestProjectile(const VectorF& coordinates, Entity* target) + : AutoguidedProjectile( + coordinates, + PixmapLoader::Pixmaps::kTestBullet, + target, + Entities::TestProjectile::kSpeed, + Entities::TestProjectile::kDamage) {} + +void TestProjectile::Tick(Time delta) { + AutoguidedProjectile::Tick(delta); +} diff --git a/GameObjects/BasicObjects/Entities/Projectiles/test_projectile.h b/GameObjects/BasicObjects/Entities/Projectiles/test_projectile.h new file mode 100644 index 0000000..d510285 --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Projectiles/test_projectile.h @@ -0,0 +1,10 @@ +#pragma once + +#include "autoguided_projectile.h" + +class TestProjectile : public AutoguidedProjectile { + public: + TestProjectile(const VectorF& coordinates, Entity* target); + + void Tick(Time delta) override; +}; diff --git a/GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp b/GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp new file mode 100644 index 0000000..2706df1 --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp @@ -0,0 +1,29 @@ +#include "test_tower_slot.h" + +#include + +#include "GameObjects/BasicObjects/Entities/Towers/test_tower.h" +#include + +TestTowerSlot::TestTowerSlot(const VectorF& coordinates) : TowerSlot( + coordinates, PixmapLoader::Pixmaps::kTestTowerSlot) {} + +void TestTowerSlot::mousePressEvent(QGraphicsSceneMouseEvent* event) { + if (event->button() != Qt::MouseButton::LeftButton) { + return TowerSlot::mousePressEvent(event); + } + if (!IsTakenUp()) { + TestTower* tower = new TestTower(scenePos()); + scene()->addItem(tower); + TakeUpArea(tower); + } + QGraphicsItem::mousePressEvent(event); +} + +void TestTowerSlot::paint( + QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) { + if (IsTakenUp()) return; + Entity::paint(painter, option, widget); +} diff --git a/GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.h b/GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.h new file mode 100644 index 0000000..a09a135 --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.h @@ -0,0 +1,16 @@ +#pragma once + +#include "tower_slot.h" + +class TestTowerSlot : public TowerSlot { + public: + explicit TestTowerSlot(const VectorF& coordinates); + + protected: + void mousePressEvent(QGraphicsSceneMouseEvent* event) override; + + public: + void paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) override; +}; diff --git a/GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.cpp b/GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.cpp new file mode 100644 index 0000000..4169abb --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.cpp @@ -0,0 +1,22 @@ +#include "tower_slot.h" + +bool TowerSlot::IsTakenUp() const { + return tower_ != nullptr; +} + +void TowerSlot::TakeUpArea(Tower* tower) { + tower_ = tower; +} + +void TowerSlot::ClearArea() { + tower_ = nullptr; +} + +TowerSlot::TowerSlot(const VectorF& coordinates, QPixmap* pixmap) + : Entity(coordinates, pixmap), tower_(nullptr) {} + +void TowerSlot::Tick(Time time) { + if (tower_ != nullptr) { + tower_->Tick(time); + } +} diff --git a/GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.h b/GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.h new file mode 100644 index 0000000..e6dff12 --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.h @@ -0,0 +1,16 @@ +#pragma once + +#include "GameObjects/BasicObjects/Entities/Towers/tower.h" +#include "GameObjects/BasicObjects/Interface/entity.h" + +class TowerSlot : public Entity { + public: + TowerSlot(const VectorF& coordinates, QPixmap* pixmap); + [[nodiscard]] bool IsTakenUp() const; + void TakeUpArea(Tower* tower); + void ClearArea(); + void Tick(Time time) override; + + protected: + Tower* tower_; +}; diff --git a/GameObjects/BasicObjects/Entities/Towers/test_tower.cpp b/GameObjects/BasicObjects/Entities/Towers/test_tower.cpp new file mode 100644 index 0000000..360398c --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Towers/test_tower.cpp @@ -0,0 +1,45 @@ +#include "test_tower.h" + +#include + +#include "GameObjects/BasicObjects/Entities/Projectiles/test_projectile.h" +#include "GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h" +#include "Utilities/Resources/pixmap_loader.h" +#include "constants.h" + +namespace { +QPolygonF CreateAttackArea(qreal range) { + const int points_count = Entities::kCircleAttackAreaApproximationPointsCount; + QList points; + for (int i = 0 ; i < points_count; ++i) { + qreal angle = i * 2 * M_PI / points_count; + points.push_back(QPointF { cos(angle), sin(angle) } * range); + } + return QPolygonF(points); +} +} // namespace + +TestTower::TestTower(const VectorF& coordinates) + : Tower(coordinates, PixmapLoader::Pixmaps::kTestTower), + attack_timer_(Time(0)), + range_(Entities::TestTower::kAttackRange), + local_attack_area_(CreateAttackArea(range_)) { + // TODO(jansenin): change it when coordinates are changed + scene_attack_area_ = local_attack_area_.translated(scenePos()); +} + +void TestTower::Tick(Time delta) { + attack_timer_.Tick(delta); + + if (attack_timer_.IsExpired()) { + QList items_in_attack_area = + scene()->items(scene_attack_area_); + for (QGraphicsItem* item : items_in_attack_area) { + if (Mob* mob = dynamic_cast(item)) { + scene()->addItem(new TestProjectile(scenePos(), mob)); + attack_timer_.Start(Entities::TestTower::kAttackCooldown); + break; + } + } + } +} diff --git a/GameObjects/BasicObjects/Entities/Towers/test_tower.h b/GameObjects/BasicObjects/Entities/Towers/test_tower.h new file mode 100644 index 0000000..fa33d7f --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Towers/test_tower.h @@ -0,0 +1,19 @@ +#pragma once + +#include "Utilities/timer.h" +#include + +#include "tower.h" + +class TestTower : public Tower { + public: + explicit TestTower(const VectorF& coordinates); + + void Tick(Time delta) override; + + protected: + qreal range_; + Timer attack_timer_; + QPolygonF local_attack_area_; + QPolygonF scene_attack_area_; +}; diff --git a/GameObjects/BasicObjects/Entities/Towers/tower.cpp b/GameObjects/BasicObjects/Entities/Towers/tower.cpp new file mode 100644 index 0000000..a5269ef --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Towers/tower.cpp @@ -0,0 +1,4 @@ +#include "tower.h" + +Tower::Tower(const VectorF& coordinates, QPixmap* pixmap, int health) + : Entity(coordinates, pixmap, health) {} diff --git a/GameObjects/BasicObjects/Entities/Towers/tower.h b/GameObjects/BasicObjects/Entities/Towers/tower.h new file mode 100644 index 0000000..81f2dd2 --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Towers/tower.h @@ -0,0 +1,8 @@ +#pragma once + +#include "GameObjects/BasicObjects/Interface/entity.h" + +class Tower : public Entity { + public: + Tower(const VectorF& coordinates, QPixmap* pixmap, int health = 0); +}; diff --git a/GameObjects/BasicObjects/Interface/damageable.cpp b/GameObjects/BasicObjects/Interface/damageable.cpp new file mode 100644 index 0000000..739c492 --- /dev/null +++ b/GameObjects/BasicObjects/Interface/damageable.cpp @@ -0,0 +1,16 @@ +#include "damageable.h" + +#include +#include + +Damageable::Damageable(int health) { + health_ = health; +} + +void Damageable::ApplyDamage(Damage damage) { + SetHealth(std::max(health_ - damage.GetDamage(), 0)); +} + +void Damageable::SetHealth(int health) { + health_ = health; +} diff --git a/GameObjects/BasicObjects/Interface/damageable.h b/GameObjects/BasicObjects/Interface/damageable.h new file mode 100644 index 0000000..53527b3 --- /dev/null +++ b/GameObjects/BasicObjects/Interface/damageable.h @@ -0,0 +1,13 @@ +#pragma once + +#include "Utilities/damage.h" + +class Damageable { + public: + explicit Damageable(int health); + virtual void ApplyDamage(Damage damage); + + protected: + int health_; + virtual void SetHealth(int health); +}; diff --git a/GameObjects/BasicObjects/Interface/entity.cpp b/GameObjects/BasicObjects/Interface/entity.cpp new file mode 100644 index 0000000..0a48275 --- /dev/null +++ b/GameObjects/BasicObjects/Interface/entity.cpp @@ -0,0 +1,29 @@ +#include "entity.h" + +Entity::Entity( + const VectorF& coordinates, + QPixmap* pixmap, + int health) + : Damageable(health), QGraphicsItem(), + pixmap(pixmap) { + setPos(coordinates); + setFlag(ItemSendsGeometryChanges); +} + +QRectF Entity::boundingRect() const { + return QRectF( + pixmap->rect().translated( + QPoint{ -pixmap->width()/2, -pixmap->height()/2 })); +} + +void Entity::paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) { + painter->save(); + painter->drawPixmap(Entity::boundingRect().toRect(), *pixmap); + painter->restore(); +} + +void Entity::MoveBy(const VectorF& delta) { + setPos(pos() + delta); +} diff --git a/GameObjects/BasicObjects/Interface/entity.h b/GameObjects/BasicObjects/Interface/entity.h new file mode 100644 index 0000000..a0efcda --- /dev/null +++ b/GameObjects/BasicObjects/Interface/entity.h @@ -0,0 +1,36 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include "tickable.h" +#include "damageable.h" +#include "Utilities/vector_f.h" + +class Entity + : public QObject, + public Tickable, + public Damageable, + public QGraphicsItem { + Q_OBJECT + public: + Entity( + const VectorF& coordinates, + QPixmap* pixmap, + int health = 0); + + [[nodiscard]] QRectF boundingRect() const override; + void paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) override; + + void MoveBy(const VectorF& delta); + + protected: + QPixmap* pixmap; +}; diff --git a/GameObjects/BasicObjects/Interface/tickable.h b/GameObjects/BasicObjects/Interface/tickable.h new file mode 100644 index 0000000..22c9f6f --- /dev/null +++ b/GameObjects/BasicObjects/Interface/tickable.h @@ -0,0 +1,8 @@ +#pragma once + +#include "Utilities/time.h" + +class Tickable { + public: + virtual void Tick(Time delta) = 0; +}; diff --git a/Resources/images/background.png b/Resources/images/background.png new file mode 100644 index 0000000000000000000000000000000000000000..06f192a435662ac5567a5d010e57bf0297877595 GIT binary patch literal 3302 zcmeAS@N?(olHy`uVBq!ia0y~yU~gbxV6k9f28u}iy;A_B7>k44ofy`glX(f`u%tWs zIx;Y9?C1WI$O`1E2l#}z${zbBdhLr<->>Mve{nwlg>HY*-0(dl_OICGudda}vlFO=v%n*=n1O-sFbFdq&tH+kz`*0->EaktaqI0>M&1Sno&y^evua;& z5b}AzEZO0FeA2bUn=H?SjsN9%^sigC16Fxn&!lf>d$__=LFrXAt=R|G&b2p8p+Bd_jT*9+AZi419+{nDKc2iWH!rgr|#Rh{WaO pgpia3fgquTfS@3T%ROB@4BUSh4R`x$hyv9xc)I$ztaD0e0szZDC_?}M literal 0 HcmV?d00001 diff --git a/Resources/images/test_mob.png b/Resources/images/test_mob.png new file mode 100644 index 0000000000000000000000000000000000000000..cc1c2c5347aa7c82f6635aba6713852d1f34b315 GIT binary patch literal 1385 zcmV-v1(y1WP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1pY}xK~#8N?VPb| z97hz!-zDc*Ne)?s3K?W_g$y#NP~m_J6*8!Bp+ZFp7YWE9h`<5`T;$J4kupULDN?#f zks^f*E>bw4B837n*g*lMFxZTxNRDK^eBaJocBQ+M=Js~Zqhx;Yc4v;&?!0-s^S;?x zB*9TL1)FxYV7%k@A-M~?XN%_*HKR2(``91An(o&igpSCHid@9L4qMHB2}I59t4GZc zwohSWSzTlYc13E#FKxA2LPlf}Hg*G-n3s21Z@`vVIA5sQgy{qQTYu66Wf`^&<85|M zP_w{>Pv|SSaHM2fcUsOcQs)FUkJ#w1^>yY1`3{kBj;y<*B1g@2Hh2WK=b}LvnQ=tO zIdjV$T^S)B_Aj|vk@sY%FeuhhzK7o&ktaws6R?9J^!m2Gak0pGfv8+kbL65@scfk_ zB9tTbPvruVNBgNq5S2S}p%tc}39>wDMqqpF?F~J2F=%HCk*eE>P`0#^W#3d8k!9G> z0-lCRn*cj9j!WLo6ic>=>{+24vB^%?Fg~5dIwHnnVJ~1K?ko|&B!`AE>G?9JyDewF zaA%1CHNUb^-y`Yy@?$Prp28xKEo$c3pk_gi_%fBtmfP-ZZxJkeR>E~e zcGgCh+KU1-Fic+PIVQ8J;Tsnh6~2K9C|lIb@j^^uy~+_^CUe=c;I8ULueVl~v^e+X z96SVt1ewkKtEV7Gn8ZSHLblAftDi|P5y_I(B6^HTEEJS2pO=s=el0?h!hz2)rd-^V z52aaZu=D4+9LW{gm3>>iDz)J!w%8rt7Oir5;1fICP$d82IT}fAzM~hD36sRoKx!$70MA`9_90T zzM(l)wwx6aCZ*;S4x6t~j`%WzYjU9oP!adB9HHhhd*quE^YN-UCR<9uIW$hdaHD_`*Aa3rCKQVzRxJ1v#<-Il}Qg2L42XY|5^_7I}l} zwUe@?Q!AG#M>yQZ;soKFn$PSa5%WOXy#9DZY|`0+js6Tda$|s*+=t%~jBD~2i~emYFggPVVsnCU0m*$u!4B^-ueWmK->(&7g$qe+BkY)L$!{&2Y#!K(A8Ycy z%vK~_9?GHIls#AT<_>PJ`z#c1tw3|+pm@(9JLA?weAWwnDcmw^?kYVI&-mIW$&uJd zj>JZCBsP*Gv5_2!jpRsdBu8Q+IT9Pmk=RI%#71%?Hj*Q;ksOJQZyo7s;&(3c~& rQaJ;4gx{%$`hQu^S|5}B4-xqX0s*6QPIh2)00000NkvXXu0mjfNd75oXgC$ zucaK7WlLhNW+csLj?hYq_^$8w`*?i+fbaY9e!X9h*AMSspRe0UFP8&Abszu$IDl|< z^c8u;Z|##3-T3)?{vs1g@O7~VP~K<=L_s1N?g<9~sCQ&`LM26cf4pm80stV_|65|O z;_5{2(iR9uxPMB>YQ_0%<b}(}O!Cc-bMnVO}%jVp}8bBXvgJQeFkO zlc{QcuOne{SoM>dE^~CUCpSf$Dn^x6fb49Syw; z<#q&GwC7F7y-TrQo%09-QQDTx`J)e>no9G1VJ{cECiohMi~iE}qP7s4yBa9Y zTqDne`~hx5>d$i9r@%rTrc|(5$~BK#cdXkp?)Mi}-KH-5*X3!S8E66kkwirj@-AQX zvhYp~rLgE_cJq)YuVujqZJBpB|GwMZQz``Uy$&$+(?TkW5X6lNuF&bhGbEk}%{=YL zE`1KV^PqL85yoC;yR!!)f<05;H;ya)sPdcJq|9qUO1;_k!k*N3l>sQ^A1H@v&cs^+ z$m4^n>0^Y%Ik!^9CKJQy_6@?=+vzq{QodzDc@7@_6~B79#OPIb z(pdvO*)B#VWMkUcDN9{Z4doh92QGY=<@kSu4A~F3j-)MyuaUlI^GmRO*5sPrm!TXt zDq+k5vt)?5&viz-js!QT^%2|f8M0J6931WXA-*rl+b?T}$wmm@_8@a0B!OMJ-Hifp zk{iaWyIINIZIs0n@0+zQSg`3>Rbhwys&s|d_Iyq4_n)q$>4`_wvpHg{VXUGt3E&$P zgrNx9LbORBpX{srmlM#l#pI>@cO8euW1+Q@#`zEA&Hm?Zs!@ zl4hrUF4ix2S0FPGQ3mgWWw^e}U9I*SwtzWrq+(MsSIF(A5zjTVnAltcj9!c8oQX|S zd&E23{#AyWo;ne}bbhm_>D6X(^WnSU+=a-vzJh-ypRL{PP9&|WcD&k>`A+QKEH2VU z@!6__;Zm_UW_SIrSG(${dCWn9#!+i)y!WR@7KXR-CH?+g{fUa{CvG3N13PV|qIa6l ztsi`0sZTmJmL2rNTdQgjhF|z~oeDBzJ-+vT<5uxcTs9dsd2&kA8P|trEI= zla@_!b`hWH!q*aYY%n*_$B@BYXdm+AsoVQyjhw}N`j8YXHoM%sF0sYPnU;@f&nuf! z8O=Ggtg`5*1N(B1j z01gohZP?=H_DZU(u^vSVOP9Nxj<{pVtpyPYPDKg_Q6$2kAh3&%q5YRj51y)vpyf6& zYoyb-W*lstaH$X>;+e0fQbLH}bhc~~ivI1u8f3-3C-|>R#unkM8}!N%!cJSIqWKi_Avxb+@5%gT$;*6{&4wE1TL-?Ua$?=)sg=JDKO>_%)r2R7=#&*=dVZs3Tk`0IEH8hCpR?ym*M%p(1%S;qnBv|mr)Z( q%Gw@#35m|@c3K^58#s&%7#MPPvg$lgPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D3(QGGK~#8N?OlJ2 z6;~BLYc}a7-RMh7EV0-?vo>38Bbe3DWD_y+2U-l6G}IVNgQ`7KjYore|8AA37Lb%%eWgQXW(VRZz%1?sKIkZDYmz?ZED@ z5eDdTPPy*t@KNiJ+QgZ^$M2EzmeuSADuR9gpnc5*+&|zdwQ*|{UAtyAodS2>9V^B4 zUs-|s=Yx9fYoREl%QE42fKK3e2WY_kkRB`D=W>i*do$FB@8&XfTc(KZI6MVnIXa@0 zprFv8U7)yilCFWi4Vr70wFO*%*xmo+PHXZharD9u3qiFO`mI-j;FV#^Bg)<>vt&Aj| z`&|?*xhF0Zi6bah#Cnjg4CcX#+%uw+ygcCj%!m0gU(fpjhg@M6*cRa0pCi5Oxq+M()lvybh#)MKKDQvso zFn0S>Q8fQ9tswT(oy5Vz%9nC)`+mA%bs3dHAxxO`%1EN9r=eYB%{g22Ow&=;%DzDvUyg^(b1Opt3 z!r6a_-0?1P4Nqhd6mra+FC(Ckeo%4q5}Lv{etBx6WRmzhuS=TFLxDz7<->VLxxthN^} zM$xKI`pVT-Nw?|}(1dd-37)s#d7XOwNX&=%g#Z<-`O=>3&UBcwX=B)BB@n-dn?UW8R;##@Lk$5R7h7^>5?_9bDeC_j}NMW0MKI-}0H+ zo0$f5a+!R_raZ6$Yhm-+vuMutV|@A;f^-SY$MRD-^STRIPTy#V z+E3>J3px1Cq%wj!e3+l*t9izqTaRHk_!=TPNslbfG+WSD;K|UaX#2Gr50OY~C z4RL-{a3MoV=4<&!(b~@%o5d^${I z2+b`TyG0%gjeQ|N{w$NmdmVq?1jq;aMbLW$cTLs^9T$Q*ajAx!Wy{$)Y;6*B);JCKgdK@w1Y^KNlT zS({mZQefJs zlct$v|BWI`AUJnNSoYqqkNL%aiM;u3jO2jyZabwH^@rksvdu$sM*42(m2=OF%(+Q_ z2mwaH?8jtx-vLd>|7}0GkzMvE9|*k=#1*N{i!e!XWCy)(Sr+t9#(f`;^M2IW7Yg!m z{J0P`1h{r`)7Gh%%BeS%^*Chg^8=a90nu+x2M?Dvdxl(g%nCjKl1Y~VG=qEdd#>Fd zT7mh4bp3fAt2K>>v=;jXJ2A0-o&j-XK&o~5nE)pAye$Q>m3b3=-dHU9Rx~fRs6sq% z%-8Z)etF>ctHKmkV6s>N?-h3UYr;7RePn3fH)$` z4Bl_~s3VNaq4R=16qWC&u_+fI7@hjM9a0Ez^yXidj6mcz99aV8c%McvGQSWpSp>sn zRkqRw%7qUl<*04tN8*B$nEzG~!;hxy%6Q&>=XE|ZhWX?f1t!5KO!F;oC@BHq*c!uy zlg5~O8x9Uz8C*R%*t&T;CEmyTL&85D!4`TZ5psP9$K1M|-ihCaU%UQ?QIV&9sI%Xb zGX!vO-8iiYAN`QX&>}k-2y|vGc)NX(J23M;X~)43QX!8ZS??-io>oj>N$ccG9^xN~I#l)&`lVU7d^Tu8~QLO+`7rW2-k;n-O8&w0dcQFwwBolI_LcE+3T%pav{?bVy%HA zE0IrO#KG1w8^PVSKld5?BA-XS^)bwx|LP8B9XKi7@(ueU+^dOk z0o?&w0}Xk)W{)qotP3eaFYHf?tZ@M}R{AxObU$=|X9oz8T`9B*$3{b@?d+Kw666>2 zXT_%BUq)rbfH3Kl^6K5KX@byWz91j}UVhKxbYQ;B-@k~PiA(lcJ+Ukw*H`L2m*JHO%m%!fYz=2f%gN51?g1TJj# zTX9g%sTPE?Tz>9RPG!V^a8oOVk2fPc;zf`>jjKo*vCy_eZ4=8n1Gwz`mFuPlrBPiv6#0+S$1FB>pp+-QR2hu5 zoia+Lj0oOk6@dNjb9c&R?Ed=Q=w`ZS(nyIaDC9@(^T4w%X&e5%bHLIXA%O0N^AlYH z(eAz^yv_$AbpKxqQlRut2)Y}tr_*k0Z<~#M{~?j<|K-sU+&|{dRRqD}vWf&+IXArL zKW?VQ!%#?h{<)wHR7D{)vs}<`slYXh{5y#nHEPtTQKLqU8Z~Ovs4*o({tt>%48dsu R;}rk^002ovPDHLkV1k|K1Kj`s literal 0 HcmV?d00001 diff --git a/Resources/resources.qrc b/Resources/resources.qrc new file mode 100644 index 0000000..40a92fc --- /dev/null +++ b/Resources/resources.qrc @@ -0,0 +1,10 @@ + + + images/background.png + images/test_bullet.png + images/test_mob.png + images/test_tower.png + images/test_tower_gun.png + images/test_tower_slot.png + + \ No newline at end of file diff --git a/Utilities/Resources/pixmap_loader.cpp b/Utilities/Resources/pixmap_loader.cpp new file mode 100644 index 0000000..15c8207 --- /dev/null +++ b/Utilities/Resources/pixmap_loader.cpp @@ -0,0 +1,19 @@ +#include "pixmap_loader.h" + +QPixmap* PixmapLoader::Pixmaps::kBackground; +QPixmap* PixmapLoader::Pixmaps::kTestBullet; +QPixmap* PixmapLoader::Pixmaps::kTestMob; +QPixmap* PixmapLoader::Pixmaps::kTestTower; +QPixmap* PixmapLoader::Pixmaps::kTestTowerGun; +QPixmap* PixmapLoader::Pixmaps::kTestTowerSlot; + +void PixmapLoader::LoadPixmaps() { + using P = PixmapLoader::Pixmaps; + + P::kBackground = new QPixmap(":images/background.png"); + P::kTestBullet = new QPixmap(":images/test_bullet.png"); + P::kTestMob = new QPixmap(":images/test_mob.png"); + P::kTestTower = new QPixmap(":images/test_tower.png"); + P::kTestTowerGun = new QPixmap(":images/test_tower_gun.png"); + P::kTestTowerSlot = new QPixmap(":images/test_tower_slot.png"); +} diff --git a/Utilities/Resources/pixmap_loader.h b/Utilities/Resources/pixmap_loader.h new file mode 100644 index 0000000..d1f3a8d --- /dev/null +++ b/Utilities/Resources/pixmap_loader.h @@ -0,0 +1,18 @@ +#pragma once + +#include + +class PixmapLoader { + public: + class Pixmaps { + public: + static QPixmap* kBackground; + static QPixmap* kTestBullet; + static QPixmap* kTestMob; + static QPixmap* kTestTower; + static QPixmap* kTestTowerGun; + static QPixmap* kTestTowerSlot; + }; + + static void LoadPixmaps(); +}; diff --git a/Utilities/damage.cpp b/Utilities/damage.cpp new file mode 100644 index 0000000..2826a1e --- /dev/null +++ b/Utilities/damage.cpp @@ -0,0 +1,9 @@ +#include "damage.h" + +Damage::Damage(int damage) { + damage_ = damage; +} + +int Damage::GetDamage() const { + return damage_; +} diff --git a/Utilities/damage.h b/Utilities/damage.h new file mode 100644 index 0000000..515b421 --- /dev/null +++ b/Utilities/damage.h @@ -0,0 +1,10 @@ +#pragma once + +class Damage { + public: + explicit Damage(int damage); + [[nodiscard]] int GetDamage() const; + + private: + int damage_ = 0; +}; diff --git a/Utilities/time.cpp b/Utilities/time.cpp new file mode 100644 index 0000000..513c71f --- /dev/null +++ b/Utilities/time.cpp @@ -0,0 +1,50 @@ +#include "time.h" + +int Time::ms() const { + return ms_; +} + +qreal Time::seconds() const { + return ms_ / 1000.0; +} + +Time::Time(int ms) : ms_(ms) {} + +bool Time::operator<(const Time& rhs) const { + return ms_ < rhs.ms_; +} + +bool Time::operator>(const Time& rhs) const { + return rhs < *this; +} + +bool Time::operator<=(const Time& rhs) const { + return !(rhs < *this); +} + +bool Time::operator>=(const Time& rhs) const { + return !(*this < rhs); +} + +Time Time::operator+(const Time& rhs) const { + return Time(ms_ + rhs.ms_); +} + +Time Time::operator-(const Time& rhs) const { + return Time(ms_ - rhs.ms_); +} + +Time& Time::operator+=(const Time& rhs) { + ms_ += rhs.ms_; + return *this; +} + +Time& Time::operator-=(const Time& rhs) { + ms_ -= rhs.ms_; + return *this; +} + +Time& Time::operator-() { + ms_ = -ms_; + return *this; +} diff --git a/Utilities/time.h b/Utilities/time.h new file mode 100644 index 0000000..bbc0a9e --- /dev/null +++ b/Utilities/time.h @@ -0,0 +1,28 @@ +#pragma once + +#include + +class Time { + public: + explicit Time(int ms); + + [[nodiscard]] int ms() const; + [[nodiscard]] qreal seconds() const; + + bool operator<(const Time& rhs) const; + bool operator>(const Time& rhs) const; + bool operator<=(const Time& rhs) const; + bool operator>=(const Time& rhs) const; + + Time operator+(const Time& rhs) const; + // there is no check for negative time + Time operator-(const Time& rhs) const; + + Time& operator+=(const Time& rhs); + Time& operator-=(const Time& rhs); + + Time& operator-(); + + private: + int ms_; +}; diff --git a/Utilities/timer.cpp b/Utilities/timer.cpp new file mode 100644 index 0000000..83e96f3 --- /dev/null +++ b/Utilities/timer.cpp @@ -0,0 +1,23 @@ +#include "timer.h" + +Timer::Timer(const Time& remaining_time) : remaining_time_(remaining_time) {} + +void Timer::Tick(const Time& delta_time) { + remaining_time_ -= delta_time; +} + +Time Timer::RemainingTime() { + return remaining_time_; +} + +bool Timer::IsExpired() { + return remaining_time_ <= Time(0); +} + +void Timer::Start(const Time& remaining_time) { + remaining_time_ = remaining_time; +} + +Time Timer::HowMuchExpired() { + return -remaining_time_; +} diff --git a/Utilities/timer.h b/Utilities/timer.h new file mode 100644 index 0000000..7e6393a --- /dev/null +++ b/Utilities/timer.h @@ -0,0 +1,17 @@ +#pragma once + +#include "time.h" + +class Timer { + public: + explicit Timer(const Time& remaining_time); + + void Tick(const Time& delta_time); + Time RemainingTime(); + bool IsExpired(); + void Start(const Time& remaining_time); + Time HowMuchExpired(); + + private: + Time remaining_time_; +}; diff --git a/Utilities/vector_f.cpp b/Utilities/vector_f.cpp new file mode 100644 index 0000000..4bcec90 --- /dev/null +++ b/Utilities/vector_f.cpp @@ -0,0 +1,22 @@ +#include "vector_f.h" + +VectorF::VectorF() {} +VectorF::VectorF(const QPoint& p) : QPointF(p) {} +VectorF::VectorF(qreal x, qreal y) : QPointF(x, y) {} +VectorF::VectorF(const QPointF& p) : QPointF(p) {} + +qreal VectorF::lengthSquared() { + return x() * x() + y() * y(); +} + +qreal VectorF::length() { + return sqrt(lengthSquared()); +} + +void VectorF::normalize() { + *this /= length(); +} + +VectorF VectorF::normalized() { + return *this / length(); +} diff --git a/Utilities/vector_f.h b/Utilities/vector_f.h new file mode 100644 index 0000000..de85928 --- /dev/null +++ b/Utilities/vector_f.h @@ -0,0 +1,17 @@ +#pragma once + +#include + +class VectorF : public QPointF { + public: + VectorF(); + explicit VectorF(const QPoint& p); + VectorF(const QPointF& p); // NOLINT + VectorF(qreal x, qreal y); + + qreal lengthSquared(); + qreal length(); + + void normalize(); + VectorF normalized(); +}; diff --git a/constants.cpp b/constants.cpp new file mode 100644 index 0000000..844d05d --- /dev/null +++ b/constants.cpp @@ -0,0 +1,30 @@ +#include "constants.h" + +const qreal kSceneWidth = 1920; +const qreal kSceneHeight = 1080; +const QRectF kSceneRect{ + -kSceneWidth/2, + -kSceneHeight/2, + kSceneWidth, + kSceneHeight}; + +namespace Entities { +const int kCircleAttackAreaApproximationPointsCount = 10; + +namespace TestTower { +const qreal kAttackRange = 200; +const Time kAttackCooldown = Time(1000); +} + +namespace TestMob { +const qreal kPassiveMoveSpeed = 5; +const qreal kActiveMoveSpeed = 100; +const qreal kRotationSpeed = 10; +const int kHealth = 30; +} + +namespace TestProjectile { +extern const Damage kDamage = Damage(10); +extern const qreal kSpeed = 100; +} +} // namespace Entities diff --git a/constants.h b/constants.h new file mode 100644 index 0000000..3fe716e --- /dev/null +++ b/constants.h @@ -0,0 +1,31 @@ +#pragma once + +#include + +#include "Utilities/time.h" +#include + +extern const qreal kSceneWidth; +extern const qreal kSceneHeight; +extern const QRectF kSceneRect; + +namespace Entities { +extern const int kCircleAttackAreaApproximationPointsCount; + +namespace TestTower { +extern const qreal kAttackRange; +extern const Time kAttackCooldown; +} + +namespace TestMob { +extern const qreal kPassiveMoveSpeed; +extern const qreal kActiveMoveSpeed; +extern const qreal kRotationSpeed; +extern const int kHealth; +} + +namespace TestProjectile { +extern const Damage kDamage; +extern const qreal kSpeed; +} +} // namespace Entities diff --git a/game_view.cpp b/game_view.cpp new file mode 100644 index 0000000..cc91884 --- /dev/null +++ b/game_view.cpp @@ -0,0 +1,20 @@ +#include "game_view.h" + +GameView::GameView(QGraphicsScene* scene, QWidget* parent) + : QGraphicsView(scene, parent) { + scale(1/devicePixelRatio(), 1/devicePixelRatio()); + setInteractive(true); + setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOff); + setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOff); + setRenderHint(QPainter::RenderHint::Antialiasing); + setOptimizationFlag( + QGraphicsView::OptimizationFlag::DontSavePainterState); + setViewportUpdateMode( + QGraphicsView::ViewportUpdateMode::FullViewportUpdate); + + setViewportMargins(0, 0, 0, 0); + setContentsMargins(0, 0, 0, 0); + setFrameStyle(QFrame::NoFrame); + + centerOn(0, 0); +} diff --git a/game_view.h b/game_view.h new file mode 100644 index 0000000..e3bc675 --- /dev/null +++ b/game_view.h @@ -0,0 +1,8 @@ +#pragma once + +#include + +class GameView : public QGraphicsView { + public: + explicit GameView(QGraphicsScene* scene, QWidget* parent = nullptr); +}; diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..f8a1f51 --- /dev/null +++ b/main.cpp @@ -0,0 +1,12 @@ +#include + +#include "main_window.h" +#include "Utilities/Resources/pixmap_loader.h" + +int main(int argc, char* argv[]) { + QApplication app(argc, argv); + PixmapLoader::LoadPixmaps(); + MainWindow window; + window.show(); + return QApplication::exec(); +} diff --git a/main_window.cpp b/main_window.cpp new file mode 100644 index 0000000..39242de --- /dev/null +++ b/main_window.cpp @@ -0,0 +1,9 @@ +#include "main_window.h" + +#include "Controller/controller.h" + +MainWindow::MainWindow() : + QMainWindow(nullptr) { + setCentralWidget(Controller::Instance()->GetView()); + showFullScreen(); +} diff --git a/main_window.h b/main_window.h new file mode 100644 index 0000000..f71d8ef --- /dev/null +++ b/main_window.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +class MainWindow : public QMainWindow { + Q_OBJECT + public: + MainWindow(); +}; diff --git a/project description/Tower defence.drawio b/project description/Tower defence.drawio index 860c26e..cf0025a 100644 --- a/project description/Tower defence.drawio +++ b/project description/Tower defence.drawio @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/project description/Tower defence.drawio.png b/project description/Tower defence.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..71281003f00340f6cd4ab7e87521a153dcf286bc GIT binary patch literal 184617 zcma%j2Ut_t7Oo;H7Dnu2$ASeELkb}lB!z?!LPAKlU?3fmKzgDy3-(@+ZUYM-2!etr zmQfG{R76w+9Yqio3!sP;-###NulKzfeBY-Ka&q?Bd+k;J^{=(FjqXjd9zJ>afB^%n z$sPp8fC0l&2Mic=#%c(7XZq$Q=)yn^gM=G!u6%0KfB~aNYu&k8g;6XE5)H6J;QL46z6fXF4J55LhQ9_6 z-1SH&vp3cph!7iyVi`|l)-XkZL8f4Z3s{Me!SKiWb4&~#Orr7!Z`i?czFz!5G0p?$ z%Xjyti-M_GC$tws%L7*^;6D%!4yI9IP-dgEJ`jx+6L?Z`fDcAw#DXgrl*vn}K==pg zbVh;+#pfG6)!rUtlZnZ|@qBsy{#XXWnGnFj3D__hi-L6b@}x4bN*s}j@G__f?o=P6 z%GXEWD$Q$tG_dS?Oe^`nbzPc$t?{qZ0*qBAGsDq8=v3 zB8~nSp-JZCq^0q-TpG{a=+E`Sq5Z{XFcc6BL5?DYU=)Ek1Os|vfLN?G1^9aDG!joF zg&!gVI!)B^5F!j!9Ec_ZSr9eOL|-qXf{CPa1M~`x*(Akd>2MSk%_k$3!Aho7uHn$I zFeXERFnDu(Q4)i}N2MTokvMcCOG)tzGz*wG0?o^S6QI2U&1i~5O;iTKgbJ!BO@h#w z5Ljd|S|fBP6J;b5cpjTZp>bW5?pPDw8%d@>a`H9!nuTd!ZE-qe5NuX4PGKTo#y}^WdA!LmU zok8)^x^uiqp56=rKG*QfS*a8;e5IbwOobQR9g7cwra`3=+`(@jES#cLLhryrFbE3KC0IctIR^@Y-~yqP zBj8J1&^$aG=LI9U(=7q~fSFsfJ%eyYWExIf8>#zgw~5~MmROiFg9 z8HDaAXCqilFrS6?0iSZ#iqTT0Tr434G7b1Z4+Yy8q*P&@loBigTt=eFh(Lngi^0cJ z*>pHg0N3G70`OrJ9j5Z}qM(W9ATN~KsNyP=RE~if$PfnLWGs=845K3re1i@zq*J|= z1TU(@s3J)SL{GGk>MIQd{*=g)QRGM^3LC&Ad;8OHQohzeqNrqeroWWM5eh_jgTjlz zk!!t-LO9Y#g=68I0G z2!^{ST0oPzU@#bxm)RYO0$1qZ3Pz#wb{BZl%`}FA#WuP4N&|eHf(a@qkqg7hkQBHR z%|(usBT3#|t&FNbkQs0VLGF(X@FqDK;aCbE%aY1e0unD+O+f|Y6&i#N6$B@f{rUc6 zE}u^(lBGfg%&6r08uVngyQjOEtk-$?dLk&)5Td8XSwRyE@f=?TSB(!uXlPO@4hiSF zdwK>SQNEteda{6KWa!`?NDn70+*j$0H2}9w#8I_yPZtkgF9idRr1BVaoDc>_$y}&n zxY|GvATaJhN-v3AhcN^Za4@2;ibn~e`NE8Plu;EzR_n+@qm&_GDe-!_H`=67A|yl# z5v}rc@*%@$JOtcZgOpQTBpxEFH&*T=_aTtDFeVwV1%?Tp4ov|3XXu@rodiJSJPlk5 zIVdhWgdC(H@O{YyI>#ByWy5eGTpvOZ)mi2(F=~)TC7yr{3^oN|wMGvgk{a9^NYzvQ zc_I>*rJ}f)SzhjB53JOOfrSOT>&ZTb5FF0a7|c=zlF$N*L@yPngAq6^3Eb#Jf}125 zRiGJXPbdBfpw9}^4Xi$jHo0}Ohlj*I~xB1=t1Ax(vpVdQ3!(O-eXc#FYi z<78e^54le3ficOE3TCi~6%+zKtx_@wPI6ypDl#hFmj#pI7#Jjmfx=<2dM@3G;YGzL zTqwbMqmHK|GN}}{94^#~F=T|6>!C2|1m1cYLKGrVLxVA$L_r}sxftmpqX!2teZclW zlUMkgNje&zt)Qrs6cNV>&F0CJPVP=jXEK+oVkm6&C9+^J#h_pigK&D9nV|-ufXF5Ic)B|w1ZZzx@Rvv? zmCzaBx=~}$VnrmDFn}Pz`(g;PV3JpWfWU#%StPVvMl!3M@IiRGrwbv_na5_jQ$6%% zPYHk}L=QO*DMOMxSiWL+COrrf;Eq6e_=g~wSUG|Tb0^WzJW40d6&lNR=h5J74-s9f6#EAo zxJpRV_y)a-g9~DE&=4FaI#UebO(9$PtUvr3A>cbb3g9A+nCz!}nr)2mm0~x^In~Y2n%t^`$qd zH(BT`&;;uNX2ylEwHS<4E2YakjDi3Ohl*qnXe=_A2n$R0Rtxk*gL4R)#qig1VSECH zYan|Qe1hQKSZ^7U1)_yA042jZ(RfH72~OyxQ}MMDo=$}10FN82C;6hBoaIKPKu^`d z=`tUh(oA-T%uybK z$L5;R5aKimf|bAz`{Lwkx<>B_xin#bLh6l|p()O0wU-g3C^#2_Fc7VgNSJsIcm={W zF$AZecmVCf1yQ}s0#mS#2S;fj5$D4tDpWiz+J)^LByo~*@M^7A@1xan@WBXY3;{&k3Rc@gW(eKyQ4Y0OUnDe?3D+Gn;8Ff)+zFqw!{dJ($iwqC_Ybd4vDrU=;Y- z`wxd9L9+IN;3-!LM{&UwoQqNHuGfk^8EPJm<*jzoi6OLucA|k>c+NzTS*)f9E1l6W z3N$LX#K-w+m;oLHt;CEpa#S281>vQ@Q=HX0r4UC`1LbCVz!Y#!fWJx(^cUxjhMUYn zZ)dX$WF81D!b3*mtG!`*7@Fn6h0)v^h&>dG}EXee>2?0QnQVaqD%WMo%OYlMlOC-Q)`3#Dd?ctDV}mR2$$4hisAxo`rG-`b2bg=9$Hs zU@s041*0;RAdC~85InvI5rw3)!JgohG*1bR<8S1k`3w^tjS-uXE+{HOgAbNTRXRD1 zg3$zH30`^>immZs!aaBf4o2zaWOmkrp{OR3+68MwQ(!uVf}-WBJi&;-n~4M13WJlk zH>5`1E?Sru8j3978qJB~Ar%YJA#9`B1pZ*d&{7f8-&;YH3$=k%vPP{8A*y6@UVu9h zjz`mwUQYgI72QnYOEqK{p-2ZXl)F}EL~uMb!3drQm&T=rNYK7!u8)A_LI@60JIOVC zC#{YTw1x;%%e@6mB2$6jAt5Bj)4H%oS_vEBXG zKAR>SUyB$sZs5)R9^7O}=k4X10sXPTbV{lP*TQwA|-DE^-dx z(b1g|H;Un#ZrKjA`hE1kjY0ND?{+*lI$WH=s;bHZZhGiw0l3s<)_;{YM zXI=R8kDY`S*_G@fzq;nOrtq%sn!>lC>pI_OSKJM4PpvbklES{9=~z=}R-N)rfUkhA zUP)MHYT23b9kFg{$jeQ68Gf&7T|4T>-j8z?e+=*XT$Hlh+0w>sz`$Sp*kDhO%;eK) z*4@JoL`3bi=bT%}I?HtOYcA`&0v32R>cX?6yyrEYcdq8|F@3DbjOjkxYz%LRdhl|& zc;gafa8Vtt4e{}nv!!s5+qSFiL!wGLuUOmWb>^+uVR$};@A>sgCpW9Jj(%{;!R?0U zQ7L0Kr@m}HQN6Fdu?~z|bUEq0Mu$W!E{l#3@wdv0F^ z8#@i7p7XV;ZpHdy3dKIj=Ju%?O)j0VrnZZHBV+Nt8?x8gxB~LzHPpD44?erU3>nhDHgyw2K4*G z?UJQc>gIRr#i7W2WMcZcSLyk$!alN_LQ=mxKD+z_XL-u%D95^LV`=r1q`cCarqIqS z?N^7~dfcnQ8)hCYBta6=R4hk-Wqqt!na2NQ&*QfaO@OEM`ru&nXy87 zcq1^lZXqAuE*HJbG4jnapXYFrOU2K6i zHa{<1p)X9+o2LF+1#Jx$o2t~3xa`^Q;74*>cDARkOul_3qjcp{QT4Or$GfLu{15y0 z+P%z;s`_gZmb|0t*CmY0`ew$(5ssJK3eeqGPG3j0f9>h~xMN+-MU~&)EuPPR=>;M; zOt4LxkXd=^Pega{74L*4$*#ioFslq!$uqlq&qVj1y?&sTA=A~jqk1>l?crd1)>&a# z;oEd&ZT|TTv!BY{-Mzt(G2~I(*Sd8dZ$V1jTzfg%{+Lga$IcnQTKog>^ux}pzb}2e z90u)uy``@H23`RVd+gD zh3%=`%hOj>zdbRTzplO35a9RaYPW0Wm6uz8t(Pu9FJFIJmZ*EgdvMz4#N+f!m$;63 z^`lm=TH<-NZK-FqftNU7r9DtzMys>3n4v>E8a zzQXQiRYOYqmz2UrT9Rvmto8k#{tW|M9hWvhkh3r;KZP3Sxnshjlcv^&2WdP+>#?>+ z=_|{c%h1mcDr$1?+&@9eerCS~-{;aJZLOGR7`K?Tsv7r+tH*VkKi`@dM~|~URg>X- z;cEDg9$Rga>#wYGfCXkekp18_>6s7C2auZX9ovWudQ4}hac8Eo)Av`eSw{uhaA@-c z7t6n_dtAO-vgaWJKJe?Kqu4#Mp7&_d2%COWfO-6n-_H^t$OUiQ9-GV^M*z z_hPR!W&LSRU3u}`u=M6A1fqY|fQ+?T3L4{qgnDi>KKYt`5GZys59Y zzTfb-uAFqFr}I%A(cv8v$F8c(h+bnp(_wCV<1?0DS@X5IrVP?Ga`&}mV}E5^HpRz) zav_5QAD*7M_)6P;=DAgv-1edw;R|c?bq8p!9dmZg&KmKz>)xApZDQd!_pz%2pIr)h zpK?9-Vx774S+1f+eD&>v<9|7wev~TWIdEbR#uYZ_*3_?i-kEsjTneiyg_h*#o8m=o zmA>!uA7GL7#1{pvVn?)p#Mx5|%*s&c&iKI?IFOX=ch2*2HX3QQ{i zy_$XSKcD(ns8oCyNO0sF)s-*orpi-$yb_kM!dl~=3xntA-TzjT76&?$IR_xcMLNh; z1U<=ecUIK}UCmlA4XYTPKD&SApuYiPgS%|3I?FoXbAos$w7qs7z%dmsJl=2rTO%xK zZVu;Ghuj(uxdu(=jfq!n?Fs-pUtsOJaayZT{HKQpIe@E-IaAQeowdMuuxtX3 z9r%?Seo=UBk|1Y@_2lAfk%N*$JHNJojVjI8z4LNYJii(`H{y>dH+zf8K@Ue=KwWy2 zuM2E?eEvil_dG7eD`wVZ!$Cw4@ z7SE2B=)$10ncdHSbSDKp&Yb!63$VM=l|Q7v|4PF)*wO9NfV!Y3VbmwR5|{DBzgS<d7H2UxErl|x{D>1i>bGg0^hLONEBx?PwiUodCi@kJU3DB*vaF(d z(jM{Uj@ZWg55*6yZ0YkYCbI)8Q+DNrzIO22H=DG(c#5h(p#0HU_`_iyEpg$&WA|vk zNJwlv@Ygm~-QGEA_EN)#g8=C}@4{z}uy{T3ci7qpptq%u&j*wiYGT*HDk?VxT)Z&2 z#i^q5!@{MI12)-QdY@J5C2dai>pshK)t1Gg8gk8F~y^&U2yk^()1uUeriXh+nZLz_{30gXEQuWc?os;E<>I@)KLPmT%@EF`2yIj4=-EUM;0r5^Z+p5s zMZixzIO99-$)%7JBd0j0rQQ5�K{lFtb!+Kr+_Hkd2z+)ga1NKX&DlyUvq65ZSQ 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 Iol`;+0CGHr$N&HU literal 0 HcmV?d00001 From 73accffef7fdc8b2e0a892d8c06b70f9f575350a Mon Sep 17 00:00:00 2001 From: parfen01 <99528469+parfen01@users.noreply.github.com> Date: Tue, 3 May 2022 20:31:20 +0300 Subject: [PATCH 02/19] Movement (#16) * Made Route and add speed to mob * Fixed CMake * Complete Base Route * Fixed style * Made system one route to any entities * Fixed cpplint * Resolved problems * Fixed cpplint * Fixed cpplint once again * Fixed cpplint last time --- CMakeLists.txt | 4 +- .../BasicObjects/Entities/Mobs/Basis/mob.cpp | 26 ++++++++++++- .../BasicObjects/Entities/Mobs/Basis/mob.h | 15 ++++++-- .../BasicObjects/Entities/Mobs/test_mob.cpp | 12 +++--- .../Entities/Towers/test_tower.cpp | 3 +- Utilities/route.cpp | 37 +++++++++++++++++++ Utilities/route.h | 24 ++++++++++++ Utilities/vector_f.cpp | 1 + 8 files changed, 110 insertions(+), 12 deletions(-) create mode 100644 Utilities/route.cpp create mode 100644 Utilities/route.h diff --git a/CMakeLists.txt b/CMakeLists.txt index c6fcf02..e4418ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,7 +34,9 @@ set(UTILITIES Utilities/time.cpp Utilities/vector_f.cpp Utilities/Resources/pixmap_loader.cpp - Utilities/timer.cpp) + Utilities/timer.cpp + Utilities/route.cpp + Utilities/route.h) add_executable(Game ${RESOURCES} diff --git a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp index cc15906..7b75d16 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp +++ b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp @@ -1,4 +1,26 @@ #include "mob.h" +#include +#include -Mob::Mob(const VectorF& coordinates, QPixmap* pixmap, int health) - : Entity(coordinates, pixmap, health) {} +std::vector + routes{Route({QPointF(50, 50), QPointF(150, 300), + QPointF(-100, -50)})}; // TODO(parfen01): move in level + +Mob::Mob(const VectorF& coordinates, + QPixmap* pixmap, + int health, + qreal speed) + : Entity(coordinates, pixmap, health), + speed_(speed) { + route_ = &routes[0]; + route_->AddEntity(this); + Entity::setPos(route_->GetStart()); +} + +qreal Mob::GetSpeed() const { + return speed_; +} + +void Mob::SetSpeed(qreal speed) { + speed_ = speed; +} diff --git a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h index b9cee7f..f5c2f14 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h +++ b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h @@ -1,12 +1,21 @@ #pragma once #include "GameObjects/BasicObjects/Interface/entity.h" +#include "Utilities/vector_f.h" +#include "Utilities/route.h" #include -#include "Utilities/vector_f.h" - class Mob : public Entity { public: - Mob(const VectorF& coordinates, QPixmap* pixmap, int health = 0); + Mob(const VectorF& coordinates, + QPixmap* pixmap, + int health, + qreal speed = 20); + [[nodiscard]] qreal GetSpeed() const; + void SetSpeed(qreal speed); + + protected: + Route* route_{nullptr}; + qreal speed_; }; diff --git a/GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp b/GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp index bdcfc76..70086f2 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp +++ b/GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp @@ -6,7 +6,9 @@ #include "constants.h" void TestMob::Tick(Time delta) { - MoveBy(VectorF{delta.seconds() * Entities::TestMob::kPassiveMoveSpeed, 0}); + if (!Mob::route_->isEnd(this)) { + Mob::route_->Move(this, Mob::speed_ * delta.seconds()); + } } void TestMob::keyPressEvent(QKeyEvent* event) { @@ -29,10 +31,10 @@ void TestMob::mousePressEvent(QGraphicsSceneMouseEvent* event) { } TestMob::TestMob(const VectorF& coordinates) - : Mob( - coordinates, - PixmapLoader::Pixmaps::kTestMob, - Entities::TestMob::kHealth) { + : Mob( + coordinates, + PixmapLoader::Pixmaps::kTestMob, + Entities::TestMob::kHealth) { setFlag(QGraphicsItem::ItemIsFocusable, true); } void TestMob::paint(QPainter* painter, diff --git a/GameObjects/BasicObjects/Entities/Towers/test_tower.cpp b/GameObjects/BasicObjects/Entities/Towers/test_tower.cpp index 360398c..5865452 100644 --- a/GameObjects/BasicObjects/Entities/Towers/test_tower.cpp +++ b/GameObjects/BasicObjects/Entities/Towers/test_tower.cpp @@ -1,6 +1,7 @@ #include "test_tower.h" #include +#include #include "GameObjects/BasicObjects/Entities/Projectiles/test_projectile.h" #include "GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h" @@ -10,7 +11,7 @@ namespace { QPolygonF CreateAttackArea(qreal range) { const int points_count = Entities::kCircleAttackAreaApproximationPointsCount; - QList points; + QVector points; for (int i = 0 ; i < points_count; ++i) { qreal angle = i * 2 * M_PI / points_count; points.push_back(QPointF { cos(angle), sin(angle) } * range); diff --git a/Utilities/route.cpp b/Utilities/route.cpp new file mode 100644 index 0000000..ec22f25 --- /dev/null +++ b/Utilities/route.cpp @@ -0,0 +1,37 @@ +#include "route.h" +#include + +bool Route::isEnd(Entity* entity) { + return entity_indexes_[entity] == points_.size() - 1; +} + +void Route::Move(Entity* entity, qreal distance) { + VectorF start(entity->pos()); + VectorF end(points_[entity_indexes_[entity] + 1]); + VectorF direction = end - start; + entity->MoveBy((direction.normalized() * distance)); + ChooseIndex(entity); +} + +void Route::ChooseIndex(Entity* entity) { + qreal square_distance = + pow((points_[entity_indexes_[entity] + 1].x() - entity->pos().x()), 2) + + pow((points_[entity_indexes_[entity] + 1].y() - entity->pos().y()), + 2); + if (square_distance <= kThreshold * kThreshold) { + ++entity_indexes_[entity]; + } +} + +void Route::AddEntity(Entity* entity) { + entity_indexes_[entity] = 0; +} + +VectorF Route::GetStart() const { + return points_[0]; +} + +void Route::RemoveEntity(Entity* entity) { + entity_indexes_.erase(entity); +} + diff --git a/Utilities/route.h b/Utilities/route.h new file mode 100644 index 0000000..f6ce593 --- /dev/null +++ b/Utilities/route.h @@ -0,0 +1,24 @@ +#pragma once +#include "../GameObjects/BasicObjects/Interface/entity.h" +#include "../Utilities/vector_f.h" +#include +#include +#include + +static constexpr qreal kThreshold = 2; + +class Route { + public: + explicit Route(const std::vector& points) : + points_(points) {} + void Move(Entity* entity, qreal distance); + void AddEntity(Entity* entity); + void RemoveEntity(Entity* entity); + bool isEnd(Entity* entity); + [[nodiscard]] VectorF GetStart() const; + + private: + void ChooseIndex(Entity* entity); + std::vector points_; + std::map entity_indexes_{}; +}; diff --git a/Utilities/vector_f.cpp b/Utilities/vector_f.cpp index 4bcec90..7bc7abc 100644 --- a/Utilities/vector_f.cpp +++ b/Utilities/vector_f.cpp @@ -1,4 +1,5 @@ #include "vector_f.h" +#include VectorF::VectorF() {} VectorF::VectorF(const QPoint& p) : QPointF(p) {} From daebbcd7a12e8721f9af5d516a824fd0a3448fd8 Mon Sep 17 00:00:00 2001 From: parfen01 <99528469+parfen01@users.noreply.github.com> Date: Wed, 18 May 2022 19:28:57 +0300 Subject: [PATCH 03/19] Wave managment (#17) * Made Wave and WaveManager * Fixed cpplint * Fixed CMake * Deleted headers from CMake * Fixed invalidation of iterators * Micro fix --- CMakeLists.txt | 3 ++- Utilities/wave.cpp | 26 ++++++++++++++++++++++++++ Utilities/wave.h | 20 ++++++++++++++++++++ wave_manager.cpp | 11 +++++++++++ wave_manager.h | 14 ++++++++++++++ 5 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 Utilities/wave.cpp create mode 100644 Utilities/wave.h create mode 100644 wave_manager.cpp create mode 100644 wave_manager.h diff --git a/CMakeLists.txt b/CMakeLists.txt index e4418ad..a4f661b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,7 +36,8 @@ set(UTILITIES Utilities/Resources/pixmap_loader.cpp Utilities/timer.cpp Utilities/route.cpp - Utilities/route.h) + Utilities/wave.cpp + wave_manager.cpp) add_executable(Game ${RESOURCES} diff --git a/Utilities/wave.cpp b/Utilities/wave.cpp new file mode 100644 index 0000000..ccddd6e --- /dev/null +++ b/Utilities/wave.cpp @@ -0,0 +1,26 @@ +#include "wave.h" + +void Wave::RemoveMobFromWave(Mob* mob) { + mobs_time_to_spawn_.erase(mob); +} + +void Wave::Tick(Time delta) { + if (IsStarted()) { + for (auto i : mobs_time_to_spawn_) { + i.second -= delta; + if (i.second.ms() <= 0) { + // TODO(parfen01): move mob to map before removing from wave + RemoveMobFromWave(i.first); + } + } + } else { + time_to_start_ -= delta; + } +} + +bool Wave::IsStarted() const { + return time_to_start_.ms() <= 0; +} +bool Wave::IsEnded() const { + return mobs_time_to_spawn_.empty(); +} diff --git a/Utilities/wave.h b/Utilities/wave.h new file mode 100644 index 0000000..116cce3 --- /dev/null +++ b/Utilities/wave.h @@ -0,0 +1,20 @@ +#pragma once +#include "GameObjects/BasicObjects/Interface/tickable.h" +#include "GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h" +#include +#include + +class Wave : public Tickable { + public: + explicit Wave(Time ms, std::map&& mobs) : time_to_start_(ms), + mobs_time_to_spawn_(std::move(mobs)) {} + void Tick(Time delta) override; + void RemoveMobFromWave(Mob*); + [[nodiscard]] bool IsStarted() const; + [[nodiscard]] bool IsEnded() const; + + private: + Time time_to_start_; + std::map mobs_time_to_spawn_; +}; + diff --git a/wave_manager.cpp b/wave_manager.cpp new file mode 100644 index 0000000..0100d40 --- /dev/null +++ b/wave_manager.cpp @@ -0,0 +1,11 @@ +#include "wave_manager.h" + +void WaveManager::Tick(Time delta) { + for (auto i = waves_.begin(); i != waves_.end(); ++i) { + i->Tick(delta); + if (i->IsEnded()) { + waves_.erase(i); + break; + } + } +} diff --git a/wave_manager.h b/wave_manager.h new file mode 100644 index 0000000..1e96720 --- /dev/null +++ b/wave_manager.h @@ -0,0 +1,14 @@ +#pragma once +#include "GameObjects/BasicObjects/Interface/tickable.h" +#include "Utilities/wave.h" +#include +#include + + +class WaveManager : public Tickable { + public: + explicit WaveManager(std::vector&& waves) : waves_(std::move(waves)) {} + void Tick(Time delta) override; + private: + std::vector waves_; +}; From cce2ffd701e2658166e2f03a1158bcb249a5f8b8 Mon Sep 17 00:00:00 2001 From: jansenin <59775038+jansenin@users.noreply.github.com> Date: Fri, 20 May 2022 18:57:47 +0300 Subject: [PATCH 04/19] make customizable base classes (#18) * add customizable base classes * add getters to scene * fix cpplint --- CMakeLists.txt | 8 +- Controller/controller.cpp | 6 +- Controller/controller.h | 4 +- .../BasicObjects/Entities/Mobs/Basis/mob.h | 6 +- .../Projectiles/autoguided_projectile.cpp | 2 +- .../Projectiles/autoguided_projectile.h | 4 +- .../Entities/Projectiles/projectile.cpp | 4 + .../Entities/Projectiles/projectile.h | 10 ++ GameObjects/BasicObjects/Interface/entity.cpp | 6 +- GameObjects/BasicObjects/Interface/entity.h | 6 +- .../BasicObjects/Interface/graphics_item.cpp | 17 ++++ .../BasicObjects/Interface/graphics_item.h | 19 ++++ game_scene.cpp | 94 +++++++++++++++++++ game_scene.h | 35 +++++++ game_view.cpp | 6 ++ game_view.h | 4 + 16 files changed, 212 insertions(+), 19 deletions(-) create mode 100644 GameObjects/BasicObjects/Entities/Projectiles/projectile.cpp create mode 100644 GameObjects/BasicObjects/Entities/Projectiles/projectile.h create mode 100644 GameObjects/BasicObjects/Interface/graphics_item.cpp create mode 100644 GameObjects/BasicObjects/Interface/graphics_item.h create mode 100644 game_scene.cpp create mode 100644 game_scene.h diff --git a/CMakeLists.txt b/CMakeLists.txt index a4f661b..90a8521 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,7 +27,9 @@ set(GAME_OBJECTS GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp GameObjects/BasicObjects/Entities/Towers/test_tower.cpp GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.cpp - GameObjects/BasicObjects/Entities/Projectiles/test_projectile.cpp) + GameObjects/BasicObjects/Entities/Projectiles/test_projectile.cpp + GameObjects/BasicObjects/Interface/graphics_item.cpp + GameObjects/BasicObjects/Entities/Projectiles/projectile.cpp) set(UTILITIES Utilities/damage.cpp @@ -45,6 +47,8 @@ add_executable(Game ${UTILITIES} main.cpp main_window.cpp - Controller/controller.cpp game_view.cpp game_view.h constants.cpp) + Controller/controller.cpp + game_view.cpp + constants.cpp game_scene.cpp game_scene.h) target_link_libraries(Game Qt::Core Qt::Gui Qt::Widgets) \ No newline at end of file diff --git a/Controller/controller.cpp b/Controller/controller.cpp index e8b5b76..1d40d80 100644 --- a/Controller/controller.cpp +++ b/Controller/controller.cpp @@ -12,7 +12,7 @@ Controller* Controller::instance; Controller::Controller() : - scene_(new QGraphicsScene(kSceneRect)), + scene_(new GameScene(kSceneRect)), view_(new GameView(scene_)), tick_timer_(new QTimer(this)) { SetupScene(); @@ -23,6 +23,10 @@ GameView* Controller::GetView() const { return view_; } +GameScene* Controller::GetScene() const { + return scene_; +} + void Controller::SetupScene() { { // temporary code QPushButton* close_button = new QPushButton(); diff --git a/Controller/controller.h b/Controller/controller.h index 662a639..0a1d680 100644 --- a/Controller/controller.h +++ b/Controller/controller.h @@ -6,6 +6,7 @@ #include "GameObjects/BasicObjects/Interface/entity.h" #include "game_view.h" +#include "game_scene.h" class Controller : public QObject { Q_OBJECT @@ -13,6 +14,7 @@ class Controller : public QObject { static Controller* Instance(); [[nodiscard]] GameView* GetView() const; + [[nodiscard]] GameScene* GetScene() const; public slots: void TickAllTickables(); @@ -25,7 +27,7 @@ class Controller : public QObject { void SetupScene(); void LaunchTickTimer(); - QGraphicsScene* scene_; + GameScene* scene_; GameView* view_; QTimer* tick_timer_; }; diff --git a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h index f5c2f14..df39368 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h +++ b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h @@ -1,17 +1,17 @@ #pragma once +#include + #include "GameObjects/BasicObjects/Interface/entity.h" #include "Utilities/vector_f.h" #include "Utilities/route.h" -#include - class Mob : public Entity { public: Mob(const VectorF& coordinates, QPixmap* pixmap, int health, - qreal speed = 20); + qreal speed = 0); [[nodiscard]] qreal GetSpeed() const; void SetSpeed(qreal speed); diff --git a/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.cpp b/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.cpp index da0a0e7..fff2f2a 100644 --- a/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.cpp +++ b/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.cpp @@ -8,7 +8,7 @@ AutoguidedProjectile::AutoguidedProjectile( Entity* target, qreal speed, Damage damage) - : Entity(coordinates, pixmap), + : Projectile(coordinates, pixmap), target_(target), speed_(speed), damage_(damage) {} void AutoguidedProjectile::Tick(Time delta) { diff --git a/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.h b/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.h index 0a70022..96b23dd 100644 --- a/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.h +++ b/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.h @@ -1,8 +1,8 @@ #pragma once -#include "GameObjects/BasicObjects/Interface/entity.h" +#include "GameObjects/BasicObjects/Entities/Projectiles/projectile.h" -class AutoguidedProjectile : public Entity { +class AutoguidedProjectile : public Projectile { public: AutoguidedProjectile(const VectorF& coordinates, QPixmap* pixmap, diff --git a/GameObjects/BasicObjects/Entities/Projectiles/projectile.cpp b/GameObjects/BasicObjects/Entities/Projectiles/projectile.cpp new file mode 100644 index 0000000..d4bd53b --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Projectiles/projectile.cpp @@ -0,0 +1,4 @@ +#include "projectile.h" + +Projectile::Projectile(const VectorF& coordinates, QPixmap* pixmap) + : Entity(coordinates, pixmap) {} diff --git a/GameObjects/BasicObjects/Entities/Projectiles/projectile.h b/GameObjects/BasicObjects/Entities/Projectiles/projectile.h new file mode 100644 index 0000000..e0299e5 --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Projectiles/projectile.h @@ -0,0 +1,10 @@ +#pragma once + +#include "GameObjects/BasicObjects/Interface/entity.h" + +class Projectile : public Entity { + public: + Projectile(const VectorF& coordinates, QPixmap* pixmap); +}; + + diff --git a/GameObjects/BasicObjects/Interface/entity.cpp b/GameObjects/BasicObjects/Interface/entity.cpp index 0a48275..11a3f85 100644 --- a/GameObjects/BasicObjects/Interface/entity.cpp +++ b/GameObjects/BasicObjects/Interface/entity.cpp @@ -4,7 +4,7 @@ Entity::Entity( const VectorF& coordinates, QPixmap* pixmap, int health) - : Damageable(health), QGraphicsItem(), + : Damageable(health), GraphicsItem(), pixmap(pixmap) { setPos(coordinates); setFlag(ItemSendsGeometryChanges); @@ -23,7 +23,3 @@ void Entity::paint(QPainter* painter, painter->drawPixmap(Entity::boundingRect().toRect(), *pixmap); painter->restore(); } - -void Entity::MoveBy(const VectorF& delta) { - setPos(pos() + delta); -} diff --git a/GameObjects/BasicObjects/Interface/entity.h b/GameObjects/BasicObjects/Interface/entity.h index a0efcda..e0fb9d6 100644 --- a/GameObjects/BasicObjects/Interface/entity.h +++ b/GameObjects/BasicObjects/Interface/entity.h @@ -1,6 +1,5 @@ #pragma once -#include #include #include #include @@ -11,12 +10,13 @@ #include "tickable.h" #include "damageable.h" #include "Utilities/vector_f.h" +#include "GameObjects/BasicObjects/Interface/graphics_item.h" class Entity : public QObject, public Tickable, public Damageable, - public QGraphicsItem { + public GraphicsItem { Q_OBJECT public: Entity( @@ -29,8 +29,6 @@ class Entity const QStyleOptionGraphicsItem* option, QWidget* widget) override; - void MoveBy(const VectorF& delta); - protected: QPixmap* pixmap; }; diff --git a/GameObjects/BasicObjects/Interface/graphics_item.cpp b/GameObjects/BasicObjects/Interface/graphics_item.cpp new file mode 100644 index 0000000..2b80d7c --- /dev/null +++ b/GameObjects/BasicObjects/Interface/graphics_item.cpp @@ -0,0 +1,17 @@ +#include "graphics_item.h" + +GraphicsItem::GraphicsItem(QGraphicsItem* parent) : QGraphicsItem(parent) {} + +GameScene* GraphicsItem::scene() { + auto result = dynamic_cast(QGraphicsItem::scene()); + assert(result != nullptr); + return result; +} + +GameView* GraphicsItem::view() { + return scene()->view(); +} + +void GraphicsItem::MoveBy(const VectorF& delta) { + setPos(pos() + delta); +} diff --git a/GameObjects/BasicObjects/Interface/graphics_item.h b/GameObjects/BasicObjects/Interface/graphics_item.h new file mode 100644 index 0000000..0255ceb --- /dev/null +++ b/GameObjects/BasicObjects/Interface/graphics_item.h @@ -0,0 +1,19 @@ +#pragma once + +#include "QGraphicsItem" + +#include "Utilities/vector_f.h" +#include "game_scene.h" +#include "game_view.h" + +class GraphicsItem : public QGraphicsItem { + public: + explicit GraphicsItem(QGraphicsItem* parent = nullptr); + + GameScene* scene(); + GameView* view(); + + void MoveBy(const VectorF& delta); +}; + + diff --git a/game_scene.cpp b/game_scene.cpp new file mode 100644 index 0000000..5d28dcd --- /dev/null +++ b/game_scene.cpp @@ -0,0 +1,94 @@ +#include "game_scene.h" + +#include "GameObjects/BasicObjects/Interface/graphics_item.h" +#include "game_view.h" +#include "GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h" +#include "GameObjects/BasicObjects/Entities/Towers/tower.h" +#include "GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.h" +#include "GameObjects/BasicObjects/Entities/Projectiles/projectile.h" + +GameScene::GameScene(const QRectF& scene_rect, QObject* parent) + : QGraphicsScene(scene_rect, parent), + mobs_(std::set()), + towers_(std::set()), + tower_slots_(std::set()), + projectiles_(std::set()) {} + +GameView* GameScene::view() { + auto result = dynamic_cast(QGraphicsScene::views().at(0)); + assert(result != nullptr); + return result; +} + +void GameScene::removeItem(GraphicsItem* item) { + auto mob = dynamic_cast(item); + if (mob != nullptr) { + mobs_.erase(mob); + } + + auto tower = dynamic_cast(item); + if (tower != nullptr) { + towers_.erase(tower); + } + + auto tower_slot = dynamic_cast(item); + if (tower_slot != nullptr) { + tower_slots_.erase(tower_slot); + } + + auto projectile = dynamic_cast(item); + if (projectile != nullptr) { + projectiles_.erase(projectile); + } + + QGraphicsScene::removeItem(item); +} + +void GameScene::clear() { + mobs_.clear(); + towers_.clear(); + tower_slots_.clear(); + projectiles_.clear(); + + QGraphicsScene::clear(); +} + +void GameScene::addItem(GraphicsItem* item) { + auto mob = dynamic_cast(item); + if (mob != nullptr) { + mobs_.erase(mob); + } + + auto tower = dynamic_cast(item); + if (tower != nullptr) { + towers_.erase(tower); + } + + auto tower_slot = dynamic_cast(item); + if (tower_slot != nullptr) { + tower_slots_.erase(tower_slot); + } + + auto projectile = dynamic_cast(item); + if (projectile != nullptr) { + projectiles_.erase(projectile); + } + + QGraphicsScene::addItem(item); +} + +const std::set& GameScene::Mobs() const { + return mobs_; +} + +const std::set& GameScene::Towers() const { + return towers_; +} + +const std::set& GameScene::TowerSlots() const { + return tower_slots_; +} + +const std::set& GameScene::Projectiles() const { + return projectiles_; +} diff --git a/game_scene.h b/game_scene.h new file mode 100644 index 0000000..28cbbd4 --- /dev/null +++ b/game_scene.h @@ -0,0 +1,35 @@ +#pragma once + +#include + +#include +#include + +class GraphicsItem; +class GameView; +class Mob; +class Tower; +class TowerSlot; +class Projectile; + +class GameScene : public QGraphicsScene { + public: + explicit GameScene(const QRectF& scene_rect, QObject* parent = nullptr); + + GameView* view(); + + void removeItem(GraphicsItem* item); + void clear(); + void addItem(GraphicsItem* item); + + [[nodiscard]] const std::set& Mobs() const; + [[nodiscard]] const std::set& Towers() const; + [[nodiscard]] const std::set& TowerSlots() const; + [[nodiscard]] const std::set& Projectiles() const; + + private: + std::set mobs_; + std::set towers_; + std::set tower_slots_; + std::set projectiles_; +}; diff --git a/game_view.cpp b/game_view.cpp index cc91884..59d7a58 100644 --- a/game_view.cpp +++ b/game_view.cpp @@ -18,3 +18,9 @@ GameView::GameView(QGraphicsScene* scene, QWidget* parent) centerOn(0, 0); } + +GameScene* GameView::scene() { + auto result = dynamic_cast(QGraphicsView::scene()); + assert(result != nullptr); + return result; +} diff --git a/game_view.h b/game_view.h index e3bc675..1cdcceb 100644 --- a/game_view.h +++ b/game_view.h @@ -2,7 +2,11 @@ #include +#include "game_scene.h" + class GameView : public QGraphicsView { public: explicit GameView(QGraphicsScene* scene, QWidget* parent = nullptr); + + GameScene* scene(); }; From b72cce7879d1eabd532d5eb7c9e67026da1f734d Mon Sep 17 00:00:00 2001 From: jansenin <59775038+jansenin@users.noreply.github.com> Date: Wed, 1 Jun 2022 13:54:39 +0300 Subject: [PATCH 05/19] Animations (#19) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add customizable base classes * add getters to scene * test use of animations, many other fixes Если кратко, то вот: 1)Тестовый моб теперь может чуть больше и у него есть анимации 2)Самонаводящиеся пули перескакивают на других мобов при смерти первоначальных --- CMakeLists.txt | 6 +- .../BasicObjects/Entities/Mobs/Basis/mob.cpp | 19 ++-- .../BasicObjects/Entities/Mobs/Basis/mob.h | 6 ++ .../BasicObjects/Entities/Mobs/test_mob.cpp | 59 ++++++++--- .../BasicObjects/Entities/Mobs/test_mob.h | 11 +- .../Projectiles/autoguided_projectile.cpp | 69 +++++++++++- .../Projectiles/autoguided_projectile.h | 6 ++ .../Entities/Projectiles/projectile.cpp | 5 +- .../Entities/Projectiles/projectile.h | 1 + .../Towers/TowerSlots/test_tower_slot.cpp | 2 - .../Entities/Towers/TowerSlots/tower_slot.cpp | 7 +- .../Entities/Towers/TowerSlots/tower_slot.h | 2 + .../Entities/Towers/test_tower.cpp | 6 +- .../BasicObjects/Entities/Towers/tower.cpp | 5 +- .../BasicObjects/Entities/Towers/tower.h | 1 + .../BasicObjects/Interface/damageable.cpp | 4 + .../BasicObjects/Interface/damageable.h | 1 + GameObjects/BasicObjects/Interface/entity.cpp | 29 +++++- GameObjects/BasicObjects/Interface/entity.h | 9 +- Resources/images/fire_totem.png | Bin 0 -> 56556 bytes Resources/images/fire_totem2.png | Bin 0 -> 46781 bytes Resources/resources.qrc | 1 + Utilities/Resources/pixmap_loader.cpp | 87 ++++++++++++++-- Utilities/Resources/pixmap_loader.h | 22 ++++ Utilities/animation.cpp | 82 +++++++++++++++ Utilities/animation.h | 35 +++++++ Utilities/route.cpp | 1 + Utilities/time.cpp | 17 +++ Utilities/time.h | 12 +++ constants.cpp | 8 +- game_scene.cpp | 98 ++++++------------ game_scene.h | 21 ++-- 32 files changed, 499 insertions(+), 133 deletions(-) create mode 100644 Resources/images/fire_totem.png create mode 100644 Resources/images/fire_totem2.png create mode 100644 Utilities/animation.cpp create mode 100644 Utilities/animation.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 90a8521..aa74e70 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,7 +39,8 @@ set(UTILITIES Utilities/timer.cpp Utilities/route.cpp Utilities/wave.cpp - wave_manager.cpp) + wave_manager.cpp + Utilities/animation.cpp) add_executable(Game ${RESOURCES} @@ -49,6 +50,7 @@ add_executable(Game main_window.cpp Controller/controller.cpp game_view.cpp - constants.cpp game_scene.cpp game_scene.h) + constants.cpp + game_scene.cpp) target_link_libraries(Game Qt::Core Qt::Gui Qt::Widgets) \ No newline at end of file diff --git a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp index 7b75d16..65d3a29 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp +++ b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp @@ -1,22 +1,29 @@ #include "mob.h" -#include + #include -std::vector - routes{Route({QPointF(50, 50), QPointF(150, 300), - QPointF(-100, -50)})}; // TODO(parfen01): move in level +std::vector routes{Route({ + QPointF(50, 50), + QPointF(300, 400), + QPointF(-100, -50)})}; // TODO(parfen01): move in level Mob::Mob(const VectorF& coordinates, - QPixmap* pixmap, + Animation* animation, int health, qreal speed) - : Entity(coordinates, pixmap, health), + : Entity(coordinates, animation, health), speed_(speed) { route_ = &routes[0]; route_->AddEntity(this); Entity::setPos(route_->GetStart()); } +Mob::Mob(const VectorF& coordinates, + QPixmap* pixmap, + int health, + qreal speed) + : Mob(coordinates, new Animation(pixmap), health, speed) {} + qreal Mob::GetSpeed() const { return speed_; } diff --git a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h index df39368..9a13d04 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h +++ b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h @@ -12,6 +12,12 @@ class Mob : public Entity { QPixmap* pixmap, int health, qreal speed = 0); + + Mob(const VectorF& coordinates, + Animation* animation, + int health, + qreal speed = 0); + [[nodiscard]] qreal GetSpeed() const; void SetSpeed(qreal speed); diff --git a/GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp b/GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp index 70086f2..583ffc0 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp +++ b/GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp @@ -1,12 +1,20 @@ #include "test_mob.h" -#include - #include "Utilities/Resources/pixmap_loader.h" #include "constants.h" void TestMob::Tick(Time delta) { - if (!Mob::route_->isEnd(this)) { + Mob::Tick(delta); + if (is_creating_ && animation_->WasEndedDuringPreviousUpdate()) { + is_creating_ = false; + animation_ = idle_animation_; + } + if (is_destroying_ && animation_->WasEndedDuringPreviousUpdate()) { + animation_->SetIndex(animation_->FrameCount() - 1); + deleteLater(); + } + + if (!is_creating_ && !Mob::route_->isEnd(this)) { Mob::route_->Move(this, Mob::speed_ * delta.seconds()); } } @@ -23,26 +31,49 @@ void TestMob::keyPressEvent(QKeyEvent* event) { setPos(pos() + velocity_vector); } else if (event->key() == Qt::Key::Key_Down) { setPos(pos() - velocity_vector); + } else if (event->key() == Qt::Key::Key_Space && !is_destroying_) { + health_ = 0; + is_destroying_ = true; + disappearing_animation_->Reset(); + animation_ = disappearing_animation_; } } void TestMob::mousePressEvent(QGraphicsSceneMouseEvent* event) { - scene()->addItem(new TestMob(pos() + VectorF{10, 30})); + scene()->addItem(new TestMob(pos() + VectorF{100, 100})); } TestMob::TestMob(const VectorF& coordinates) : Mob( - coordinates, - PixmapLoader::Pixmaps::kTestMob, - Entities::TestMob::kHealth) { + coordinates, + // TODO(jansenin): Было бы лучше инициализировать анимации отдельно + // от моба + new Animation(PixmapLoader::Pixmaps::kFireTotemAppearing, 50_ms), + Entities::TestMob::kHealth, + 100), + is_destroying_(false), + idle_animation_( + new Animation(PixmapLoader::Pixmaps::kFireTotemIdle, 50_ms)), + disappearing_animation_( + new Animation(PixmapLoader::Pixmaps::kFireTotemDisappear, 50_ms)), + appearing_animation_(animation_), + is_creating_(true) { setFlag(QGraphicsItem::ItemIsFocusable, true); + setScale(1.4); } -void TestMob::paint(QPainter* painter, - const QStyleOptionGraphicsItem* option, - QWidget* widget) { - Entity::paint(painter, option, widget); - if (health_ == 0) { - painter->drawLine(-50, -50, 50, 50); - painter->drawLine(50, -50, -50, 50); + +TestMob::~TestMob() { + delete idle_animation_; + delete disappearing_animation_; + delete appearing_animation_; +} + +void TestMob::ApplyDamage(Damage damage) { + Damageable::ApplyDamage(damage); + + if (health_ <= 0 && !is_destroying_) { + disappearing_animation_->Reset(); + is_destroying_ = true; + animation_ = disappearing_animation_; } } diff --git a/GameObjects/BasicObjects/Entities/Mobs/test_mob.h b/GameObjects/BasicObjects/Entities/Mobs/test_mob.h index 3f483bf..2cec260 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/test_mob.h +++ b/GameObjects/BasicObjects/Entities/Mobs/test_mob.h @@ -10,12 +10,17 @@ class TestMob : public Mob { explicit TestMob(const VectorF& coordinates = VectorF{0, 0}); void Tick(Time delta) override; + void ApplyDamage(Damage damage) override; - void paint(QPainter* painter, - const QStyleOptionGraphicsItem* option, - QWidget* widget) override; + ~TestMob() override; protected: void keyPressEvent(QKeyEvent* event) override; void mousePressEvent(QGraphicsSceneMouseEvent* event) override; + + bool is_destroying_; + bool is_creating_; + Animation* idle_animation_; + Animation* disappearing_animation_; + Animation* appearing_animation_; }; diff --git a/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.cpp b/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.cpp index fff2f2a..0788072 100644 --- a/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.cpp +++ b/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.cpp @@ -1,6 +1,20 @@ #include #include "autoguided_projectile.h" +#include "GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h" + +AutoguidedProjectile::AutoguidedProjectile( + const VectorF& coordinates, + Animation* animation, + Entity* target, + qreal speed, + Damage damage) + : Projectile(coordinates, animation), + target_(target), speed_(speed), damage_(damage) { + connect(target_, &Entity::destroyed, this, + &AutoguidedProjectile::FindNewTargetOrDie); +} + AutoguidedProjectile::AutoguidedProjectile( const VectorF& coordinates, @@ -8,10 +22,21 @@ AutoguidedProjectile::AutoguidedProjectile( Entity* target, qreal speed, Damage damage) - : Projectile(coordinates, pixmap), - target_(target), speed_(speed), damage_(damage) {} + : AutoguidedProjectile( + coordinates, new Animation(pixmap), target, speed, damage) {} void AutoguidedProjectile::Tick(Time delta) { + Projectile::Tick(delta); + if (target_ == nullptr) { + return; + } + if (target_->GetHealth() <= 0) { + FindNewTargetOrDie(); + } + if (target_ == nullptr) { + return; + } + Move(delta); if (target_->collidesWithItem(this)) { @@ -21,9 +46,49 @@ void AutoguidedProjectile::Tick(Time delta) { } void AutoguidedProjectile::Move(Time delta) { + if (target_ == nullptr) { + return; + } VectorF target_point = target_->scenePos(); VectorF delta_pos = target_point - scenePos(); VectorF velocity = delta_pos.normalized() * speed_; MoveBy(velocity * delta.seconds()); } + +void AutoguidedProjectile::FindNewTargetOrDie() { + if (scene()->Mobs().empty()) { + SetTarget(nullptr); + deleteLater(); + } else { + auto old_target = target_; + for (auto new_target : scene()->Mobs()) { + if (new_target != target_ && + VectorF(new_target->scenePos() - scenePos()).length() < 100) { + SetTarget(new_target); + break; + } + } + if (old_target == target_) { + SetTarget(nullptr); + deleteLater(); + } + } +} + +void AutoguidedProjectile::SetTarget(Entity* target) { + // TODO(jansenin): what if target_ is destroyed? + disconnect( + target_, + &Entity::destroyed, + this, + &AutoguidedProjectile::FindNewTargetOrDie); + target_ = target; + if (target_ != nullptr) { + connect( + target_, + &Entity::destroyed, + this, + &AutoguidedProjectile::FindNewTargetOrDie); + } +} diff --git a/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.h b/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.h index 96b23dd..75c2b9a 100644 --- a/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.h +++ b/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.h @@ -8,10 +8,16 @@ class AutoguidedProjectile : public Projectile { QPixmap* pixmap, Entity* target, qreal speed, Damage damage); + AutoguidedProjectile(const VectorF& coordinates, + Animation* animation, + Entity* target, qreal speed, Damage damage); + void SetTarget(Entity* target); + void Tick(Time delta) override; protected: void Move(Time delta); + void FindNewTargetOrDie(); Entity* target_; qreal speed_; diff --git a/GameObjects/BasicObjects/Entities/Projectiles/projectile.cpp b/GameObjects/BasicObjects/Entities/Projectiles/projectile.cpp index d4bd53b..6e3aa13 100644 --- a/GameObjects/BasicObjects/Entities/Projectiles/projectile.cpp +++ b/GameObjects/BasicObjects/Entities/Projectiles/projectile.cpp @@ -1,4 +1,7 @@ #include "projectile.h" Projectile::Projectile(const VectorF& coordinates, QPixmap* pixmap) - : Entity(coordinates, pixmap) {} + : Projectile(coordinates, new Animation(pixmap)) {} + +Projectile::Projectile(const VectorF& coordinates, Animation* animation) + : Entity(coordinates, animation) {} diff --git a/GameObjects/BasicObjects/Entities/Projectiles/projectile.h b/GameObjects/BasicObjects/Entities/Projectiles/projectile.h index e0299e5..64e1870 100644 --- a/GameObjects/BasicObjects/Entities/Projectiles/projectile.h +++ b/GameObjects/BasicObjects/Entities/Projectiles/projectile.h @@ -5,6 +5,7 @@ class Projectile : public Entity { public: Projectile(const VectorF& coordinates, QPixmap* pixmap); + Projectile(const VectorF& coordinates, Animation* animation); }; diff --git a/GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp b/GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp index 2706df1..621fea4 100644 --- a/GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp +++ b/GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp @@ -1,7 +1,5 @@ #include "test_tower_slot.h" -#include - #include "GameObjects/BasicObjects/Entities/Towers/test_tower.h" #include diff --git a/GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.cpp b/GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.cpp index 4169abb..5f158a8 100644 --- a/GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.cpp +++ b/GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.cpp @@ -13,9 +13,14 @@ void TowerSlot::ClearArea() { } TowerSlot::TowerSlot(const VectorF& coordinates, QPixmap* pixmap) - : Entity(coordinates, pixmap), tower_(nullptr) {} + : TowerSlot(coordinates, new Animation(pixmap)) {} + +TowerSlot::TowerSlot(const VectorF& coordinates, Animation* animation) + : Entity(coordinates, animation), tower_(nullptr) {} void TowerSlot::Tick(Time time) { + Entity::Tick(time); + if (tower_ != nullptr) { tower_->Tick(time); } diff --git a/GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.h b/GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.h index e6dff12..d281e4f 100644 --- a/GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.h +++ b/GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.h @@ -6,6 +6,8 @@ class TowerSlot : public Entity { public: TowerSlot(const VectorF& coordinates, QPixmap* pixmap); + TowerSlot(const VectorF& coordinates, Animation* animation); + [[nodiscard]] bool IsTakenUp() const; void TakeUpArea(Tower* tower); void ClearArea(); diff --git a/GameObjects/BasicObjects/Entities/Towers/test_tower.cpp b/GameObjects/BasicObjects/Entities/Towers/test_tower.cpp index 5865452..df287c7 100644 --- a/GameObjects/BasicObjects/Entities/Towers/test_tower.cpp +++ b/GameObjects/BasicObjects/Entities/Towers/test_tower.cpp @@ -1,6 +1,5 @@ #include "test_tower.h" -#include #include #include "GameObjects/BasicObjects/Entities/Projectiles/test_projectile.h" @@ -30,6 +29,8 @@ TestTower::TestTower(const VectorF& coordinates) } void TestTower::Tick(Time delta) { + Tower::Tick(delta); + attack_timer_.Tick(delta); if (attack_timer_.IsExpired()) { @@ -37,6 +38,9 @@ void TestTower::Tick(Time delta) { scene()->items(scene_attack_area_); for (QGraphicsItem* item : items_in_attack_area) { if (Mob* mob = dynamic_cast(item)) { + if (mob->GetHealth() <= 0) { + continue; + } scene()->addItem(new TestProjectile(scenePos(), mob)); attack_timer_.Start(Entities::TestTower::kAttackCooldown); break; diff --git a/GameObjects/BasicObjects/Entities/Towers/tower.cpp b/GameObjects/BasicObjects/Entities/Towers/tower.cpp index a5269ef..f92c0af 100644 --- a/GameObjects/BasicObjects/Entities/Towers/tower.cpp +++ b/GameObjects/BasicObjects/Entities/Towers/tower.cpp @@ -1,4 +1,7 @@ #include "tower.h" Tower::Tower(const VectorF& coordinates, QPixmap* pixmap, int health) - : Entity(coordinates, pixmap, health) {} + : Tower(coordinates, new Animation(pixmap), health) {} + +Tower::Tower(const VectorF& coordinates, Animation* animation, int health) + : Entity(coordinates, animation, health) {} diff --git a/GameObjects/BasicObjects/Entities/Towers/tower.h b/GameObjects/BasicObjects/Entities/Towers/tower.h index 81f2dd2..4a41492 100644 --- a/GameObjects/BasicObjects/Entities/Towers/tower.h +++ b/GameObjects/BasicObjects/Entities/Towers/tower.h @@ -5,4 +5,5 @@ class Tower : public Entity { public: Tower(const VectorF& coordinates, QPixmap* pixmap, int health = 0); + Tower(const VectorF& coordinates, Animation* animation, int health = 0); }; diff --git a/GameObjects/BasicObjects/Interface/damageable.cpp b/GameObjects/BasicObjects/Interface/damageable.cpp index 739c492..ebfbd77 100644 --- a/GameObjects/BasicObjects/Interface/damageable.cpp +++ b/GameObjects/BasicObjects/Interface/damageable.cpp @@ -14,3 +14,7 @@ void Damageable::ApplyDamage(Damage damage) { void Damageable::SetHealth(int health) { health_ = health; } + +int Damageable::GetHealth() const { + return health_; +} diff --git a/GameObjects/BasicObjects/Interface/damageable.h b/GameObjects/BasicObjects/Interface/damageable.h index 53527b3..2b581d9 100644 --- a/GameObjects/BasicObjects/Interface/damageable.h +++ b/GameObjects/BasicObjects/Interface/damageable.h @@ -6,6 +6,7 @@ class Damageable { public: explicit Damageable(int health); virtual void ApplyDamage(Damage damage); + [[nodiscard]] int GetHealth() const; protected: int health_; diff --git a/GameObjects/BasicObjects/Interface/entity.cpp b/GameObjects/BasicObjects/Interface/entity.cpp index 11a3f85..2376443 100644 --- a/GameObjects/BasicObjects/Interface/entity.cpp +++ b/GameObjects/BasicObjects/Interface/entity.cpp @@ -1,25 +1,44 @@ #include "entity.h" +#include + Entity::Entity( const VectorF& coordinates, QPixmap* pixmap, int health) - : Damageable(health), GraphicsItem(), - pixmap(pixmap) { + : Entity(coordinates, new Animation(pixmap), health) {} + +Entity::Entity(const VectorF& coordinates, Animation* animation, int health) + : Damageable(health), + GraphicsItem(), + animation_(animation) { + animation->Frame(); setPos(coordinates); setFlag(ItemSendsGeometryChanges); } QRectF Entity::boundingRect() const { + const QPixmap* frame = animation_->Frame(); return QRectF( - pixmap->rect().translated( - QPoint{ -pixmap->width()/2, -pixmap->height()/2 })); + frame->rect().translated( + QPoint{ -frame->width()/2, -frame->height()/2 })); } void Entity::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { painter->save(); - painter->drawPixmap(Entity::boundingRect().toRect(), *pixmap); + static QPen pen(QColor(0, 0, 255, 50)); + painter->setPen(pen); + // painter->drawRect(boundingRect()); + painter->drawPixmap(Entity::boundingRect().toRect(), *animation_->Frame()); painter->restore(); } + +void Entity::Tick(Time delta) { + QPixmap* previous_frame = animation_->Frame(); + animation_->Tick(delta); + if (previous_frame != animation_->Frame()) { + update(); + } +} diff --git a/GameObjects/BasicObjects/Interface/entity.h b/GameObjects/BasicObjects/Interface/entity.h index e0fb9d6..d6a8bc5 100644 --- a/GameObjects/BasicObjects/Interface/entity.h +++ b/GameObjects/BasicObjects/Interface/entity.h @@ -11,6 +11,7 @@ #include "damageable.h" #include "Utilities/vector_f.h" #include "GameObjects/BasicObjects/Interface/graphics_item.h" +#include "Utilities/animation.h" class Entity : public QObject, @@ -24,11 +25,17 @@ class Entity QPixmap* pixmap, int health = 0); + Entity( + const VectorF& coordinates, + Animation* animation, + int health = 0); + [[nodiscard]] QRectF boundingRect() const override; void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override; + void Tick(Time delta) override; protected: - QPixmap* pixmap; + Animation* animation_; }; diff --git a/Resources/images/fire_totem.png b/Resources/images/fire_totem.png new file mode 100644 index 0000000000000000000000000000000000000000..d0dc40a141417d65a34b71b8c604dcdec3be6159 GIT binary patch literal 56556 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 literal 0 HcmV?d00001 diff --git a/Resources/images/fire_totem2.png b/Resources/images/fire_totem2.png new file mode 100644 index 0000000000000000000000000000000000000000..014f8f228b40022b53d98ace2095cb1f51a621b2 GIT binary patch literal 46781 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/test_tower.png images/test_tower_gun.png images/test_tower_slot.png + images/fire_totem.png \ No newline at end of file diff --git a/Utilities/Resources/pixmap_loader.cpp b/Utilities/Resources/pixmap_loader.cpp index 15c8207..50f393d 100644 --- a/Utilities/Resources/pixmap_loader.cpp +++ b/Utilities/Resources/pixmap_loader.cpp @@ -1,19 +1,90 @@ #include "pixmap_loader.h" -QPixmap* PixmapLoader::Pixmaps::kBackground; -QPixmap* PixmapLoader::Pixmaps::kTestBullet; -QPixmap* PixmapLoader::Pixmaps::kTestMob; -QPixmap* PixmapLoader::Pixmaps::kTestTower; -QPixmap* PixmapLoader::Pixmaps::kTestTowerGun; -QPixmap* PixmapLoader::Pixmaps::kTestTowerSlot; +#include -void PixmapLoader::LoadPixmaps() { - using P = PixmapLoader::Pixmaps; +using P = PixmapLoader::Pixmaps; + +QPixmap* P::kBackground; +QPixmap* P::kTestBullet; +QPixmap* P::kTestMob; +QPixmap* P::kTestTower; +QPixmap* P::kTestTowerGun; +QPixmap* P::kTestTowerSlot; +QPixmap* P::kFireTotemAnimations; +std::vector P::kFireTotemIdle; +std::vector P::kFireTotemDisappear; +std::vector P::kFireTotemAppearing; + +void PixmapLoader::LoadPixmaps() { P::kBackground = new QPixmap(":images/background.png"); P::kTestBullet = new QPixmap(":images/test_bullet.png"); P::kTestMob = new QPixmap(":images/test_mob.png"); P::kTestTower = new QPixmap(":images/test_tower.png"); P::kTestTowerGun = new QPixmap(":images/test_tower_gun.png"); P::kTestTowerSlot = new QPixmap(":images/test_tower_slot.png"); + + LoadFireTotemAnimations(); +} + +std::vector PixmapLoader::CreateHorizontalFramesVector( + QPixmap* source, + int frame_width, + int frame_height, + int frames_count, + int start_x, + int y) { + std::vector result; + + for (int i = 0 ; i < frames_count ; ++i) { + int x = i * frame_width + start_x; + QPixmap* frame = new QPixmap(std::move(source->copy( + QRect(x, y, frame_width, frame_height)))); + result.push_back(frame); + } + + return result; +} + +void PixmapLoader::LoadFireTotemAnimations() { + // file size - 896x480 + // 5 frame rows, 14 frame columns + const int frame_width = 896 / 14; + const int frame_height = 480 / 5; + const int idle_animation_frames_count = 7; + const int disappear_animation_frames_count = 14; + const int appear_animation_frames_count = 8; + // row and column start from 0 + const int idle_animation_row = 1; + const int idle_animation_column = 0; + const int disappear_animation_row = 4; + const int disappear_animation_column = 0; + const int appear_animation_row = 0; + const int appear_animation_column = 0; + + P::kFireTotemAnimations = new QPixmap(":images/fire_totem.png"); + + P::kFireTotemIdle = CreateHorizontalFramesVector( + P::kFireTotemAnimations, + frame_width, + frame_height, + idle_animation_frames_count, + idle_animation_column * frame_width, + idle_animation_row * frame_height); + + P::kFireTotemDisappear = CreateHorizontalFramesVector( + P::kFireTotemAnimations, + frame_width, + frame_height, + disappear_animation_frames_count, + disappear_animation_column * frame_width, + disappear_animation_row * frame_height); + + P::kFireTotemAppearing = CreateHorizontalFramesVector( + P::kFireTotemAnimations, + frame_width, + frame_height, + appear_animation_frames_count, + appear_animation_column * frame_width, + appear_animation_row * frame_height); } diff --git a/Utilities/Resources/pixmap_loader.h b/Utilities/Resources/pixmap_loader.h index d1f3a8d..dd8eb75 100644 --- a/Utilities/Resources/pixmap_loader.h +++ b/Utilities/Resources/pixmap_loader.h @@ -1,18 +1,40 @@ #pragma once +#include + #include +#include "Utilities/animation.h" + class PixmapLoader { public: class Pixmaps { public: + // TODO(jansenin): maybe make this readonly static QPixmap* kBackground; static QPixmap* kTestBullet; static QPixmap* kTestMob; static QPixmap* kTestTower; static QPixmap* kTestTowerGun; static QPixmap* kTestTowerSlot; + + // For animations test + static QPixmap* kFireTotemAnimations; + static std::vector kFireTotemIdle; + static std::vector kFireTotemDisappear; + static std::vector kFireTotemAppearing; }; static void LoadPixmaps(); + + private: + static std::vector CreateHorizontalFramesVector( + QPixmap* source, + int frame_width, + int frame_height, + int frames_count, + int start_x, + int y); + + static void LoadFireTotemAnimations(); }; diff --git a/Utilities/animation.cpp b/Utilities/animation.cpp new file mode 100644 index 0000000..55b7a4c --- /dev/null +++ b/Utilities/animation.cpp @@ -0,0 +1,82 @@ +#include "animation.h" + +#include + +Animation::Animation(std::vector frames, Time time_between_frames) + : frames_(std::move(frames)), + time_between_frames_(time_between_frames), + time_to_next_frame_(time_between_frames), + frame_index_(0), + was_ended_during_previous_update(false) { + assert(!frames_.empty()); +} + +Animation::Animation(QPixmap* pixmap) + // doesn't matter what time between frames is, it just must be non-zero + : Animation(std::vector{pixmap}, 1_ms) {} + +void Animation::Tick(Time delta) { + time_to_next_frame_ -= delta; + if (time_to_next_frame_ < 0_ms) { + int frames_passed = + abs(time_to_next_frame_.ms() / time_between_frames_.ms()); + ++frames_passed; + time_to_next_frame_ += time_between_frames_ * frames_passed; + bool animation_ended = false; + if (frame_index_ + frames_passed >= frames_.size()) { + animation_ended = true; + } + SetIndex(frame_index_ + frames_passed); + was_ended_during_previous_update = animation_ended; + } +} + +const QPixmap* Animation::Frame() const { + return frames_.at(frame_index_); +} + +QPixmap* Animation::Frame() { + return frames_.at(frame_index_); +} + +void Animation::SetIndex(int index) { + was_ended_during_previous_update = false; + if (index >= frames_.size()) { + was_ended_during_previous_update = true; + } + frame_index_ = ((index % frames_.size()) + frames_.size()) % frames_.size(); +} + +void Animation::SetTimeBetweenFrames(Time time) { + time_between_frames_ = time; +} + +Time Animation::TimeBetweenFrames() const { + return time_between_frames_; +} + +Time Animation::TimeToNextFrame() const { + return time_to_next_frame_; +} + +int Animation::FrameIndex() const { + return frame_index_; +} + +void Animation::NextFrame() { + SetIndex(frame_index_ + 1); +} + +void Animation::Reset() { + time_to_next_frame_ = time_between_frames_; + SetIndex(0); + was_ended_during_previous_update = false; +} + +bool Animation::WasEndedDuringPreviousUpdate() const { + return was_ended_during_previous_update; +} + +int Animation::FrameCount() const { + return frames_.size(); +} diff --git a/Utilities/animation.h b/Utilities/animation.h new file mode 100644 index 0000000..b4c624e --- /dev/null +++ b/Utilities/animation.h @@ -0,0 +1,35 @@ +#pragma once + +#include + +#include + +#include "Utilities/time.h" +#include "GameObjects/BasicObjects/Interface/tickable.h" + +class Animation : public Tickable { + public: + Animation(std::vector frames, Time time_between_frames); + explicit Animation(QPixmap* pixmap); + + void Tick(Time delta) override; + QPixmap* Frame(); + [[nodiscard]] const QPixmap* Frame() const; + void SetIndex(int index); + void SetTimeBetweenFrames(Time time); + void NextFrame(); + void Reset(); + + [[nodiscard]] bool WasEndedDuringPreviousUpdate() const; + [[nodiscard]] int FrameCount() const; + [[nodiscard]] Time TimeBetweenFrames() const; + [[nodiscard]] Time TimeToNextFrame() const; + [[nodiscard]] int FrameIndex() const; + + protected: + std::vector frames_; + Time time_between_frames_; + Time time_to_next_frame_; + int frame_index_; + bool was_ended_during_previous_update; +}; diff --git a/Utilities/route.cpp b/Utilities/route.cpp index ec22f25..e0f491c 100644 --- a/Utilities/route.cpp +++ b/Utilities/route.cpp @@ -1,4 +1,5 @@ #include "route.h" + #include bool Route::isEnd(Entity* entity) { diff --git a/Utilities/time.cpp b/Utilities/time.cpp index 513c71f..d0c7b9a 100644 --- a/Utilities/time.cpp +++ b/Utilities/time.cpp @@ -48,3 +48,20 @@ Time& Time::operator-() { ms_ = -ms_; return *this; } + +Time Time::operator*(int rhs) const { + return Time(ms() * rhs); +} + +Time& Time::operator*=(int rhs) { + ms_ *= rhs; + return *this; +} + +Time operator*(int lhs, const Time& rhs) { + return rhs * lhs; +} + +Time operator "" _ms(unsigned long long int ms) { // NOLINT + return Time(ms); +} diff --git a/Utilities/time.h b/Utilities/time.h index bbc0a9e..dd2ddec 100644 --- a/Utilities/time.h +++ b/Utilities/time.h @@ -17,12 +17,24 @@ class Time { Time operator+(const Time& rhs) const; // there is no check for negative time Time operator-(const Time& rhs) const; + Time operator*(int rhs) const; Time& operator+=(const Time& rhs); Time& operator-=(const Time& rhs); + Time& operator*=(int rhs); + friend Time operator*(int lhs, const Time& rhs); Time& operator-(); private: int ms_; }; + +Time operator*(int lhs, const Time& rhs); + +// cpplint говорит, что unsigned long long int(Тип из си) нужно поменять на +// int16/int32/int64...(тип из C++), но в документации к пользовательским +// литералам сказано, что в них могут использоваться только определённые +// типы(и записи unsigned long long int в C++ я не нашёл, а это единственный +// целочисленный тип, который можно использовать для литерала) +Time operator "" _ms(unsigned long long int ms); // NOLINT diff --git a/constants.cpp b/constants.cpp index 844d05d..f8b336c 100644 --- a/constants.cpp +++ b/constants.cpp @@ -12,8 +12,8 @@ namespace Entities { const int kCircleAttackAreaApproximationPointsCount = 10; namespace TestTower { -const qreal kAttackRange = 200; -const Time kAttackCooldown = Time(1000); +const qreal kAttackRange = 300; +const Time kAttackCooldown = Time(100); } namespace TestMob { @@ -24,7 +24,7 @@ const int kHealth = 30; } namespace TestProjectile { -extern const Damage kDamage = Damage(10); -extern const qreal kSpeed = 100; +extern const Damage kDamage = Damage(3); +extern const qreal kSpeed = 500; } } // namespace Entities diff --git a/game_scene.cpp b/game_scene.cpp index 5d28dcd..a17305b 100644 --- a/game_scene.cpp +++ b/game_scene.cpp @@ -8,11 +8,7 @@ #include "GameObjects/BasicObjects/Entities/Projectiles/projectile.h" GameScene::GameScene(const QRectF& scene_rect, QObject* parent) - : QGraphicsScene(scene_rect, parent), - mobs_(std::set()), - towers_(std::set()), - tower_slots_(std::set()), - projectiles_(std::set()) {} + : QGraphicsScene(scene_rect, parent) {} GameView* GameScene::view() { auto result = dynamic_cast(QGraphicsScene::views().at(0)); @@ -20,75 +16,43 @@ GameView* GameScene::view() { return result; } -void GameScene::removeItem(GraphicsItem* item) { - auto mob = dynamic_cast(item); - if (mob != nullptr) { - mobs_.erase(mob); +std::vector GameScene::Mobs() const { + std::vector result; + for (auto item : items()) { + if (auto mob = dynamic_cast(item)) { + result.push_back(mob); + } } - - auto tower = dynamic_cast(item); - if (tower != nullptr) { - towers_.erase(tower); - } - - auto tower_slot = dynamic_cast(item); - if (tower_slot != nullptr) { - tower_slots_.erase(tower_slot); - } - - auto projectile = dynamic_cast(item); - if (projectile != nullptr) { - projectiles_.erase(projectile); - } - - QGraphicsScene::removeItem(item); -} - -void GameScene::clear() { - mobs_.clear(); - towers_.clear(); - tower_slots_.clear(); - projectiles_.clear(); - - QGraphicsScene::clear(); + return result; } -void GameScene::addItem(GraphicsItem* item) { - auto mob = dynamic_cast(item); - if (mob != nullptr) { - mobs_.erase(mob); - } - - auto tower = dynamic_cast(item); - if (tower != nullptr) { - towers_.erase(tower); +std::vector GameScene::Towers() const { + std::vector result; + for (auto item : items()) { + if (auto tower = dynamic_cast(item)) { + result.push_back(tower); + } } - - auto tower_slot = dynamic_cast(item); - if (tower_slot != nullptr) { - tower_slots_.erase(tower_slot); - } - - auto projectile = dynamic_cast(item); - if (projectile != nullptr) { - projectiles_.erase(projectile); - } - - QGraphicsScene::addItem(item); -} - -const std::set& GameScene::Mobs() const { - return mobs_; + return result; } -const std::set& GameScene::Towers() const { - return towers_; +std::vector GameScene::TowerSlots() const { + std::vector result; + for (auto item : items()) { + if (auto tower_slot = dynamic_cast(item)) { + result.push_back(tower_slot); + } + } + return result; } -const std::set& GameScene::TowerSlots() const { - return tower_slots_; +std::vector GameScene::Projectiles() const { + std::vector result; + for (auto item : items()) { + if (auto projectile = dynamic_cast(item)) { + result.push_back(projectile); + } + } + return result; } -const std::set& GameScene::Projectiles() const { - return projectiles_; -} diff --git a/game_scene.h b/game_scene.h index 28cbbd4..55adcde 100644 --- a/game_scene.h +++ b/game_scene.h @@ -1,6 +1,6 @@ #pragma once -#include +#include #include #include @@ -11,6 +11,7 @@ class Mob; class Tower; class TowerSlot; class Projectile; +class Entity; class GameScene : public QGraphicsScene { public: @@ -18,18 +19,8 @@ class GameScene : public QGraphicsScene { GameView* view(); - void removeItem(GraphicsItem* item); - void clear(); - void addItem(GraphicsItem* item); - - [[nodiscard]] const std::set& Mobs() const; - [[nodiscard]] const std::set& Towers() const; - [[nodiscard]] const std::set& TowerSlots() const; - [[nodiscard]] const std::set& Projectiles() const; - - private: - std::set mobs_; - std::set towers_; - std::set tower_slots_; - std::set projectiles_; + [[nodiscard]] std::vector Mobs() const; + [[nodiscard]] std::vector Towers() const; + [[nodiscard]] std::vector TowerSlots() const; + [[nodiscard]] std::vector Projectiles() const; }; From cbf205bdb317819480f884d84689de147c12a01c Mon Sep 17 00:00:00 2001 From: artsiom-saladukha <99528485+artsiom-saladukha@users.noreply.github.com> Date: Wed, 1 Jun 2022 17:54:38 +0300 Subject: [PATCH 06/19] Game level management (#20) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add customizable base classes * add getters to scene * fix cpplint * test use of animations, many other fixes Если кратко, то вот: 1)Тестовый моб теперь может чуть больше и у него есть анимации 2)Самонаводящиеся пули перескакивают на других мобов при смерти первоначальных * code style * more code style * fix custom literal error * Added level managing system, json-format level data storage. * Fixed cpplint. * Fixed cpplint (second time due to self-destroy of blank line). * Fixed cpplint. Co-authored-by: dzhen --- CMakeLists.txt | 8 +- Controller/controller.cpp | 54 +++++- Controller/controller.h | 5 + .../BasicObjects/Entities/Mobs/Basis/mob.cpp | 25 +-- .../BasicObjects/Entities/Mobs/Basis/mob.h | 2 + .../BasicObjects/Entities/Mobs/test_mob.cpp | 14 +- .../BasicObjects/Entities/Mobs/test_mob.h | 1 + Resources/Levels/Level1/level.json | 107 ++++++++++++ Resources/Levels/Level1/map.png | Bin 0 -> 265013 bytes Resources/resources.qrc | 2 + Utilities/Resources/pixmap_loader.cpp | 12 +- Utilities/Resources/pixmap_loader.h | 1 + Utilities/route.cpp | 1 - Utilities/route.h | 13 +- Utilities/time.cpp | 12 ++ Utilities/time.h | 5 +- Utilities/utility.cpp | 14 ++ Utilities/utility.h | 3 + Utilities/wave.cpp | 6 +- Utilities/wave.h | 8 +- constants.cpp | 22 ++- constants.h | 14 +- level.cpp | 163 ++++++++++++++++++ level.h | 49 ++++++ 24 files changed, 494 insertions(+), 47 deletions(-) create mode 100644 Resources/Levels/Level1/level.json create mode 100644 Resources/Levels/Level1/map.png create mode 100644 Utilities/utility.cpp create mode 100644 Utilities/utility.h create mode 100644 level.cpp create mode 100644 level.h diff --git a/CMakeLists.txt b/CMakeLists.txt index aa74e70..0ce4dc3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,8 +40,9 @@ set(UTILITIES Utilities/route.cpp Utilities/wave.cpp wave_manager.cpp - Utilities/animation.cpp) - + Utilities/animation.cpp + Utilities/utility.cpp) + add_executable(Game ${RESOURCES} ${GAME_OBJECTS} @@ -51,6 +52,7 @@ add_executable(Game Controller/controller.cpp game_view.cpp constants.cpp - game_scene.cpp) + game_scene.cpp + level.cpp) target_link_libraries(Game Qt::Core Qt::Gui Qt::Widgets) \ No newline at end of file diff --git a/Controller/controller.cpp b/Controller/controller.cpp index 1d40d80..dacb23b 100644 --- a/Controller/controller.cpp +++ b/Controller/controller.cpp @@ -12,9 +12,10 @@ Controller* Controller::instance; Controller::Controller() : - scene_(new GameScene(kSceneRect)), + scene_(new GameScene(Scene::kRect)), view_(new GameView(scene_)), - tick_timer_(new QTimer(this)) { + tick_timer_(new QTimer(this)), + level_(new Level(1)) { SetupScene(); LaunchTickTimer(); } @@ -27,8 +28,12 @@ GameScene* Controller::GetScene() const { return scene_; } +Level* Controller::GetLevel() const { + return level_; +} + void Controller::SetupScene() { - { // temporary code + /*{ // temporary code QPushButton* close_button = new QPushButton(); QGraphicsProxyWidget* close_button_proxy = scene_->addWidget(close_button); close_button_proxy->setGeometry(QRectF( @@ -51,6 +56,45 @@ void Controller::SetupScene() { qreal width = sceneRect.width(); qreal height = sceneRect.height(); + scene_->addLine( + x + width / 2, + y, + x + width / 2, + y + height, + QPen(Qt::blue)); + + scene_->addLine( + x, + y + 1, + x + width, + y + 1, + QPen(Qt::blue)); + + scene_->addLine( + x, + y + height / 2, + x + width, + y + height / 2, + QPen(Qt::blue)); + } // temporary code end*/ + { // temporary code + QPushButton* close_button = new QPushButton(); + QGraphicsProxyWidget* close_button_proxy = scene_->addWidget(close_button); + close_button_proxy->setGeometry(QRectF( + scene_->sceneRect().topRight() - VectorF{100, 0}, + scene_->sceneRect().topRight() + VectorF{0, 100})); + + close_button->setText("Close"); + QObject::connect(close_button, &QPushButton::clicked, &QApplication::exit); + + level_->AddObjectsToScene(scene_); + + QRectF sceneRect = scene_->sceneRect(); + qreal x = sceneRect.x(); + qreal y = sceneRect.y(); + qreal width = sceneRect.width(); + qreal height = sceneRect.height(); + scene_->addLine( x + width / 2, y, @@ -88,11 +132,13 @@ Controller* Controller::Instance() { } void Controller::TickAllTickables() { + Time delta = Time(1000 / 30); for (QGraphicsItem* graphics_item : scene_->items()) { if (Tickable* tickable = dynamic_cast(graphics_item)) { // TODO(jansenin): make time dependency(it // could have been more than 1000/30 ms) - tickable->Tick(Time(1000 / 30)); + tickable->Tick(delta); } } + level_->Tick(delta); } diff --git a/Controller/controller.h b/Controller/controller.h index 0a1d680..23cda6e 100644 --- a/Controller/controller.h +++ b/Controller/controller.h @@ -7,14 +7,18 @@ #include "GameObjects/BasicObjects/Interface/entity.h" #include "game_view.h" #include "game_scene.h" +#include "level.h" class Controller : public QObject { Q_OBJECT + public: static Controller* Instance(); [[nodiscard]] GameView* GetView() const; [[nodiscard]] GameScene* GetScene() const; + [[nodiscard]] Level* GetLevel() const; + public slots: void TickAllTickables(); @@ -30,4 +34,5 @@ class Controller : public QObject { GameScene* scene_; GameView* view_; QTimer* tick_timer_; + Level* level_; }; diff --git a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp index 65d3a29..59a315a 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp +++ b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp @@ -2,21 +2,12 @@ #include -std::vector routes{Route({ - QPointF(50, 50), - QPointF(300, 400), - QPointF(-100, -50)})}; // TODO(parfen01): move in level - Mob::Mob(const VectorF& coordinates, Animation* animation, int health, qreal speed) : Entity(coordinates, animation, health), - speed_(speed) { - route_ = &routes[0]; - route_->AddEntity(this); - Entity::setPos(route_->GetStart()); -} + speed_(speed) {} Mob::Mob(const VectorF& coordinates, QPixmap* pixmap, @@ -31,3 +22,17 @@ qreal Mob::GetSpeed() const { void Mob::SetSpeed(qreal speed) { speed_ = speed; } + +void Mob::SetRoute(Route* route) { + if (route == nullptr && route_ != nullptr) { + route_->RemoveEntity(this); + } + route_ = route; + if (route_ != nullptr) { + route_->AddEntity(this); + } +} + +void Mob::MoveToRouteStart() { + Entity::setPos(route_->GetStart()); +} diff --git a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h index 9a13d04..8a4305e 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h +++ b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h @@ -18,6 +18,8 @@ class Mob : public Entity { int health, qreal speed = 0); + virtual void SetRoute(Route* route); + void MoveToRouteStart(); [[nodiscard]] qreal GetSpeed() const; void SetSpeed(qreal speed); diff --git a/GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp b/GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp index 583ffc0..042fe5a 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp +++ b/GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp @@ -13,9 +13,10 @@ void TestMob::Tick(Time delta) { animation_->SetIndex(animation_->FrameCount() - 1); deleteLater(); } - - if (!is_creating_ && !Mob::route_->isEnd(this)) { - Mob::route_->Move(this, Mob::speed_ * delta.seconds()); + if (route_ != nullptr) { + if (!is_creating_ && !route_->isEnd(this)) { + route_->Move(this, speed_ * delta.seconds()); + } } } @@ -50,7 +51,7 @@ TestMob::TestMob(const VectorF& coordinates) // от моба new Animation(PixmapLoader::Pixmaps::kFireTotemAppearing, 50_ms), Entities::TestMob::kHealth, - 100), + 300), is_destroying_(false), idle_animation_( new Animation(PixmapLoader::Pixmaps::kFireTotemIdle, 50_ms)), @@ -77,3 +78,8 @@ void TestMob::ApplyDamage(Damage damage) { animation_ = disappearing_animation_; } } + +void TestMob::SetRoute(Route* route) { + Mob::SetRoute(route); + MoveToRouteStart(); +} diff --git a/GameObjects/BasicObjects/Entities/Mobs/test_mob.h b/GameObjects/BasicObjects/Entities/Mobs/test_mob.h index 2cec260..98fc32b 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/test_mob.h +++ b/GameObjects/BasicObjects/Entities/Mobs/test_mob.h @@ -11,6 +11,7 @@ class TestMob : public Mob { void Tick(Time delta) override; void ApplyDamage(Damage damage) override; + void SetRoute(Route* route) override; ~TestMob() override; diff --git a/Resources/Levels/Level1/level.json b/Resources/Levels/Level1/level.json new file mode 100644 index 0000000..1db7177 --- /dev/null +++ b/Resources/Levels/Level1/level.json @@ -0,0 +1,107 @@ +{ + "startMoney": 100, + "towerSlotPositions": [ + { + "x": -495, + "y": -160 + }, + { + "x": -140, + "y": 60 + } + ], + "routes": [ + { + "points": [ + { + "x": -200, + "y": -200 + }, + { + "x": 600, + "y": 0 + }, + { + "x": 100, + "y": 100 + } + ] + }, + { + "points": [ + { + "x": -1000, + "y": -10 + }, + { + "x": -640, + "y": -10 + }, + { + "x": -640, + "y": -300 + }, + { + "x": -260, + "y": -310 + }, + { + "x": -260, + "y": 110 + }, + { + "x": 250, + "y": 110 + }, + { + "x": 250, + "y": -80 + }, + { + "x": 1000, + "y": -80 + } + ] + } + ], + "waves": [ + { + "startTimeRelativeToPrevWave": 0, + "spawnEntries": [ + { + "mobType": "TestMob", + "count": 4, + "startTime": 0, + "entryDuration": 1000, + "routeIndex": 1 + }, + { + "mobType": "TestMob", + "count": 4, + "startTime": 2000, + "entryDuration": 1000, + "routeIndex": 1 + }, + { + "mobType": "TestMob", + "count": 4, + "startTime": 4000, + "entryDuration": 1000, + "routeIndex": 1 + } + ] + }, + { + "startTimeRelativeToPrevWave": 5000, + "spawnEntries": [ + { + "mobType": "TestMob", + "count": 30, + "startTime": 0, + "entryDuration": 2000, + "routeIndex": 0 + } + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Levels/Level1/map.png b/Resources/Levels/Level1/map.png new file mode 100644 index 0000000000000000000000000000000000000000..a722dd4d5707745703071f7d1f646ebdcc3dc76b GIT binary patch literal 265013 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

>&TB^8Xz0cN&@;xVnqvyKBs3+8Y*Fu5C~ zuZhKIn>t@=w7gN9z0uK`|mFo0QTZeG+*{TWn0o#tvM|Ye$P!h`a2+yM- zXfg2OJL@y6eTf>`fA99U2YHG5J**Se>tu70%@5agFF6$0p*-)sJ3>`>ln|tF0RCM} znicW29X68xLdrDH0PBHzNupO3+GbqjCwRgyz?iYkmzZh7G2MX%#(uv?KO`WH*lsQ{ z&m(SbZZS<6`~4R4%otA-QkT$gI_$SQYG_N&X1+y`R6$g1yK zx4rkdcC$rFqAnCob7m;bjAkUkvh^|=TPAD)wjV}-9_>dz`@b?E*nl4d*f0#+V_Wuk zMzkQwzzpx~W_O>nFYEGMsxthL84VCj{}ztZ z1CGZdj)x;&rWc&wUr(QLhH{*;KS}a+ zoE$FDFoc@@%qmSzHhq~H1hexdcBF|EjyEs}H7u^gBcYAh(3*TZPx7AGmL&2uo^*ws zB9#bW(`iw83M$zGd}V7+qh|D#lm1DUF}{ZB zihOJx&WQSY!Z5#5XwUq>FpF_5eW&}QBr0w6i_;>XW{eOf?^UdWDYy58c&_GeCDV{N zV3R*@wl=SGTR0E`rNNgDG`0?o@&o!OoZ{GY6}L(l!5kuDyWOP(_%e7QbnN?|)AUEG zx-!nh z_k>ET@}ThUtv>W9%L-B8TF&@1e}m)wj00v!0gi_oyuJStOTFOb-w##AgHrYZHgwwDc?t7(R|7-N`1We~FiG`xywQ0o4dHu@`VurawQ zG&q5?<6TAhdc^o5&+lJab0De_ckUd9h zGo;zdis$>O|K%qpY|K+GaaOIb{P5E=UAIFpSH$%>vpEMCUVq}qtBO2}eEkR|c3{Hp zn$+*lQPg~2mtNxEoHr(3IT-qsZAEiRWc zaHD`0oX%&608^PDQgAzehHH7j^?JhLc7k3nxLF>c0H&$5_a8z~N| zjk&AgPzKmFgUreNJJQ5>kK-oAYRq@t7=H#ZMh>nD`kg2Trd5A^|;>lN4Y1=so1k1G^zfu@4P?GY6h zVAl37Lev($Dg~;*p|rLO#f(G;9-{E3hR%#$VKMqX_OB3a4PXq_losK$Rttl3)Exds z(7<8p@A9OKgCs0{mN8%cuafsD#QetaV=j^^7OW6RPx2?AHZXS}|6t0s-#dC5RVxZw z-TSH)i>#Q@_GH2os#jUv#@Y>Bu39mn01(s^rwA*tV!?tHP+-F3uQ`G=;ft4boA77l z?n&P}GN&H#$&SjNN0~~76_m#!VKE7#O|_s@!LpH0;yb~%dMCKgBN5gL%#H|cR+f+B zZ;hz{D1zz=s~Bi8?Lo&W7MbcG#{j8E7zV2#v{uHb;dF)kK$(}j2^EqRI?m-i3nDoB zcO#JvYb2bHK#CoP*u{`x2do<2Z)%Uil~!QhATX?v^c%&hB)ydR{F)(+)*#HY48yjy z<9p_vi*FQ2IkkLm!2sAS56jPYx2;LIOHF`81xtkuxMwtV*yA8`u9)KkrckBZTuKaM zg6F3=x7+XsE)dbZm!H zDIy$|434)=I-{}}{=>+*ur&0QgJ<9a91Aigcn@P1xGzleuCm= z608>1rVXEJLFpy8MYw`6!>YFGk`eFri?4 zt%y>{HJd58CSp*)Cd}lAJvy<-8f~46oR}CVii}FERn7MyO=Vszi3I5ln_ndMGhlHe zyaz;CJP3Z9rSZxpU;h9IDB>TTDA=ns5H3{GE=~s^BBdVLCQGJ$p4`eQ@QFz+S8%Z| zY2#K=h?H$!r8#BBGj=)=b}H*_TZ?a!{Tqc1rt59rz0#JC{9K3j^%Ke_R~6O@C(VKN z%n$)nBx|-~_G1olOwT`LmmK`tGbG7@y*`UajB7Jo8lRs(jV7TQY?sE!7G)eUI4-Yb z=lT&f4Inp>b-2xB({Zwzo16PTB?jA}tnPf4c`_VUcD@X2_}@C(EV5onH)MM3fuM0_ z35adhlNaXWy@E66?PQ{cr2RKav_~-160&322GGnft5!go2mIRflH%)qXNuTP^4@`RgCCv9Br_&tsYF$V4!pu(ZCxe6J}7h-F9xs zY5P)bpW26UtHM`j9x5|gMZE9sj4LJ-ob-xYIbzl75u!;a7ra8Tso)9Vj0-9hw|eyP z6%`9A7F{4HxZ>i*?SKgvz2a7n)Ko7d(2p6rkvQYhd3eSJSDf{VTO6^XV!?_7W<1qr zELd?TH#lIzq6?}hR12=M;G$PlDDLD21>*Ic&aW8MhiBcHFrWFb37R%-kxz`vuk5Y9c8M$aE>L|lK+!Q+R zRx-i&jfbd1lKxJ4g9`vxU|Nk8gJA;V?kI}WJQ@)&-iw@)6v=Rd&OkKFuO!NmLm)vQhsuIV4eJZRA2b9RK z<+gSUTwJ%uMJb}agSR;1poez7DkdqI%8ZJN+rvGs z*QGB(k~fk|VXb8W%;j<>Q;*Gg<^~z4*rsV|-Q1-ZOZBM1=6U7~4-9WyOLQ8;;;-#u z>NR5w;{Axsh!TVMwemann1NO-T}LZ`3AKZy6)P$f6AB*jj2Sa7xM0x=#RZElILeF( z6Hd4Q5F9aM!GcBmF%txn6s%ft(FJeh&S}45#Z|9>2+q1-LB))ML!ZM*TP*7!Gghro zRaC7`-2!RHds=YO6=%8P4mY^qiYL6ZXrw4ExZ;2rkNOM+a3lS-OQ<;M1yI4GoKR{T z^G?qU9?c>OyYchfq@%y67E zxYx06T9u?P2Vlm6VncP&2i1) zM6_$ib`pKwJ|&HuJTufA?Gd_MVaLGY0L|$~C@|Hn0IiBbh{n_eG{_Uc&2*a?_F+4N z5A6?I(4Ybt*n0sdOTdn?_kA#j1H(4vX#{{VStf87Y>}He_`2v?dWp^UM}u||8O)Os zx_10YtVJItl8)d)ecSwdchaEQUXY8Dp5y$Q0n|9RESq^58(=&D(2Gx4|oHuLe(}o1@dNofMCK}SFE+R5NBt#sv$Yz zs47ml;1ix9Dmci5k9dY?!5hpt>lrG*lfIxr@qoJqxOB!v&iGazalio&dW$L*cQ~L3 z@T}*?Uvg;qU(#r`)(S1aq=KRi^h9-{(YMFE2A;~uDm*R!qcp+r96gua(t%dHWUBOj z7SjfOkNNmGd*^0UEuuLpC{9ivtdj#J2_P@T(?IHx+b z0pkY-ayB2+Z=BD>(af0Vc9(`kd7sM=v9wW%Cyg&dZ;LY-J5O16@J8>kqGHts+Ag@ZBStLv3ZLPlHZb@Wx46m$C!C=jP<)P-Yqw|vlkfEz z5W$yvixVy=TChmPxn3|&6AsdIw`#>jRzOo zre6fI4BArw>BoZr{I!>gQE_x`wc{EMWh;A6FF7wlDT2akAsnRuHm0fTD%IENYt|6rV|`BJ!;aodmEpJqfo9ZP@mQ<-A3r zbo)$r70OZ~VYId9k|n7aN*EHDQd)yJk-5;y!FY;DXO7~N{=^M}(5E{NQ`&E`qwHwx zvzCD9oI@oTQsyoc>;Drht{M8TiuL zB*)t+bdd3c7o2d$6$`9fp`zjjGd|M?Oek1n?MHsVCv6byqden1o^iy43$A#^b3f9X zaKMaJS6tN3XIAVsV;DQBT;0?}t#UoC5#t90= z5i<@t;{kVg!3ncY_=IOX;srN)z$Ahr4p>m}fLmO2!K0k;21l$|@g66fwdLr2sqgSX zp70)zxYJu)q=B;sy~PK8go@xT?(hkx7MapU%PSU~&~nZmaMP<9WxIL(7-)Oc7l31< z_srv@{~BaA8L?AmF*i#D(^^7tv7otqk_x)Zn1?0t$O4xLQ z;&mA)je-5-9@jXSrE8`uuG6jzK+71yM)K{a z#0B^C218>;EEEAz!}4a(6pi@*_}=IzmK2-+8E8MVBmhfC7rcUbrq76{N zRaSf>pYQ=sm{jn9TTD`L!s1}&iUl8V!L_b~xp{|M%suz2V8V;EU{d0_G zNS!{en?}g2?gWG^8O^B)jhb^ZY$E;4zMld>3)+if#~h6-ONK=KKa9KfFg#!RPt~I8!m(V^e$ba zt5|YO2TnFG%bNjzpXC9epgJu$7a|$K0YsCZ(7;qz4yu;N8~JmHKV%SXJ_GwyN3 zJKRH|IO_$gthmU6Ypr)e^N;H94NyVFmxqT>7YGhF*| zpg?h>cldF6kEO0CqPWNz*Sg>ZR~%4q!Gc>o;;L;8GYTH%gsK$}dfW2Fv|`c;AEZ?m z-s6Z*c!sKC#sQzp8{FgQxpmH`!ijVF7#71mM^r|$C(KH6#~ZI4lW>nLkM2i1J19Vg zkL@})G8p2n3=G)m@WB`ynyhvcI(mm`K3n8z)u8MF8n|q?7&}_DGW(BKJPylp;Mq)3o5xr9Or?W(6C6;yFj1;=lV#sjX7lfvAB4N%JUX7KH%g z(2Fd#FpiOTe5FK3KWTBbcwYE9!GbN_qVL93`-GWFauYb2=F^GV-dJDY( zr|AV#ojfvO+!UJ?XSNBdslxJRL$KjF1nGJGm++HqgQb5?yPhm)>7=G|{S5*(S_fF; zGi%Kk`*9#tp;~(sv>z4L6=z-XzC7W5dBmy}-&^0|wjOYm6&JbUWqN55stSC*9$G9) zR;=ZUleB8VORq63Xi=xge*ub4{(CzvoN?6!PqN}tC!AFARGy)tIO-AeI^lu~UdkCo z1s~-FpUMj=R@~|YXgl4$VnNl4(^~NR^LwmV@Mo5{WSz6LS3Z-9BCQVO5%uFqeIF-3#M=fsGW&rAyRa-AB zY_6a_WTc-qOqX{Dp(8g?m~ReZX{O5-CJND0+}90NFB^HVd9YcFZ5;sium^k$#0`;$ zHf<#L@QeKvwqMT==0HRO_CyLMrw)H7KZkvby=ww5`&4zfj`u&F9RPInJ0eF=Bl`SG zei*kG$^}2MGn!H>g3tUd5nUKkfvt%?2?tl9a&blK=w~3^oP@Mu<^<*p_-8gx%S&T$ z%}sa|_OjcSEQsiMv$Sw5|d~ifM=9oK8vA3aa)f#)pf78G1`!MR*;r!!7E;Vf4yvSQNG0;G%L)BMs}HlX4p3l>>% z14XHV6BgXm0{~z}#kYr#C<@%vBc9g_id^tgUNF@eFIaHFidht=a)K-e%sSy(797@s zI$u$-;#ybCYsLG+6Bb?Z)#V))t@u!$vFeJdic`6^?|l`!;`w!?3r)q#9s|Lr)>+!z!97u z;g|!k!S_u}m(Fk)=2B9<>k{5~vK7R1(ZkG)q$Sq#{^uR{@dk2iYgY&7M~7cWXJLGX z|1l`{iWL0Vm~1v}Lu|wNZBL~3NUS46?*K5}4jJikwJfCr$uPC+Pcs=4WEl^bGbiq1Rs3;aFuG(A4iuUv5 zMuQ>>)dJK8R;#Ri8Wn4)t+4Vk<7sY*>Q%Ls)n63Pdcrf#J&R1S$clqjpiVfU z)M>%_c)`u}09j_7rYq(ZsB=5cJS-Eg_ z1^1UDUe*iF^ApbHibE~z#~Sjd?bs0RnNz&aWixlvFHV%a^cDi)g0Cvv}&J z6{&qhk$oQCLYOdkBl`DiU0f(HOY^mvoC88MMLbMA0fs(*$z+Q0nLlKE!FK`uWc>zU zlt2?-&rXZbH7t9?hy0LDF~4Mfh_)X)d(?R`>~Ro_k1^BX)UXTug7c8=yygvHLv~VR z_;-7lpS71oP`wejJGCQ#BY7E#O+1)d<7C$;^@0oDvVXeVC_93@8FBAyeUAkh(_522 zI}&t|wBa_|A_>qD28NVe;==B!33<-EP_qSYxWca*!*c$7b~*Y#)_5#Jf(emtJAdcIKuY)>~8wN$L4m^vLx&)qvog`#3o!E*c3TRRk}tfT^eu#T@nUK0#^?8_hb(FtrWUH^!XPiumeR zapdr!?0=lU+gF%cC)Fs%;OuGc_2i5*=;$~`=dnAV74->5 zqg`s8jaWl#U68@uNTwaLwq567LdLz=;A*=?wtF1lcniANP;YuR4cBJ*-2UqSO5Vp! zIwjr6bK~6reg0hlI{+KETfnP7UaTYj7a=oBbTEv;leYT?5$5Ch$dBFZO!_PW7z_yW zX3K~s-BgQjq@cZ~)i1IN#x{6ORNjaV<=})jh7JalP+f3AFs~`Ex=U|Ppp4`(z*`Uu z>&+ad$dQ9Q2lj_H&t^PG;~5w-pw$dRK`n}x+jHxYlo*9K!+LLMicS?8y)BcBk55?> zY7b7&=gd|6Q9`Y#s#sMai(p=+{ysm&RTk8;qDlie6BM$xRt)R3;!s+@sYQVm_5xtV zL;$OS8O2l@=$3BYk~*DRe` zYiZ+8b48uok!2M$AT_O6yRp-0g-kK_+H-sqz)~t|Y5Y)&q89l3fV{J@D3-E%zQigO zS5!bN&bZ>I@(C5dQRWt@lZshpGOn*{4^s{VwVh9*gR|FSfr}#0fw0S#x7~odg~l^& z=|V^HndgHiWspyn?cm1|1STHexNReUB6*37|NI&36cGtY>Ye{WVz!or8$z-Wdt^q& zu}Af)WcVeOc>4@U{;Dfh%8)ZvYTmUyY{wa7|8rx&WnA;-R@ftSd+TPeLY3*}vt;ww z29m*Io4<7pSog=Xr9Y1=DV-#0hNzdocf(`6Z~QCv#GP)L0_{3f@`GUo40(>tAaiu^ zl}t3<`*676J2q#OCJ(|Yw$JPI*6(_z|DqE zlzx#dd3CrfBEz(&X`UTyGXb4Rqxy5R0x!2zB9gwocGJJML5|wgi*3v%vyQOa?341U zP2dt()wIA?kmu@>^{#IbqGuTlogU)21ObkSO>W+K)q- z30SiX=+#HJ&FsXkP@IletglIr|3(n4d%IlT9?Z*)@jA7+w1Qj;bs(t?cvb~^GfZ78 z)^$Z)Yb1HM7t~>qii1>Wl?F^uap)17743!Ar9ZPs`~PvSIL;N*q&Sq?qg5^U#P0E9 zAOS=as~8KCDiej22HLzyTaRL{DmXxKGq(i#Yc&PjXfRE!qIF&4eTtJ*tSVSkFcrmI zs`F?AY~u4NMKMb}y8u0cr(X3RiPXV96)T=fJJP(x4Zg-_xW_Gk_UfS456eJNI|^NU zPchr|l#d64R$DV46)A(pBA|Em zr31ZDB%=C^frVFcv9%$Mo~KWSmm^2%9u~#~k$km}u$y7^`el#djd9B=ZA?pUN=R@)FS`rPN((A zL*h~L%6bros7L(BfG#}PtVxohQ|7z&Q6c28*{NujIFLPkti%6#sLaTAeLx}WFGYZf zOK+0L8Ok*K9uYC~C)jY^OSCG+Xp$!#APjTkzAHjxQJX8bPix~3_-Dkpe?Vw1z8Yk8Z;0LR z2js`#%fS|_Z}Sm-?#MldOgD?sn))e;*#iQD8xXH~Pj;-jz>HfEB-hdI7ep{18A`QE;6_iET%-QlrU(2&yn2RxD=HGsGsiQ1np5Dw=K zNE1nSJ&T-J26maV4so*yqY#U>C4)O>WtW5(z8jZMV zFzbw*1&AZN&cOV`32(FU&2liUS85+x4e8klJdoO`sYLQt)}S|?kT zc9eK1HcqeW)DF&Q-wsoY)Lhr8jW57d6zkgd{2(mQ~}WP2;^Rz%;+?+XN3PJ8dyXkzDqYJY-Ui)RMqVX^sFfkLTk* zhf6lL3mQXKR;dy*^!zju8J{cb95!l%3|Rk3c*glF&iCmnNET>7QEUwxBaqGvxQw^7geHFEFRh9jnjJN29MD|c_#gN+5q(vyR zPvaM#;8r3Mc%h972_h-oqS!$b+hX=Id?|7~kUMQE6IpjY=RGF7Zu*PCVUmKd@tHn! zapGm3(<|Gl*lf}E`+-mRVvqLh%y&bVBqLeJ$S@J+QLmC7lwNc45DD;!?~F-VCxIec zBV^;}+r2bN%^IvE?{-AOj@k_6nFl?BmVu%7cGo|5_M_(*sHn6sY?v%hF#8_6S7<1M zI3P@TI6px439)@ja8g9H*exMO8r>mQj#PEj$djM6LF%Jop?$C;LpMZgg)S{*xuPAf z&HcU9YwzbX7sW#4znLp;=9c?(S_+o69V5=AfiXn`DTleDl-OgfJtAf^5n!5XduMTv zba|uSE)7N65uZR&G>qxmxv6$zDo{+N;<`rFM=2Jq5*(%#Q=iK`wP+R4ju>kPgOezv z)CMGLX5ZA0kjP)ON7|rxU!HK0E6%v!4hI~i;EF50!6RPuf_vQJjoh_Y{=CAMVLX+b z34|xK6LsLNk3H^_Rz>aWjw3>&nK(PkC__m=Bqb5e{@k-NzG6KQAY>)0bkiCNxkCf37WTt~&4lOyJH4Y^2N z_qc&-Z`HttK8zjdt&}^*=3df1v1w_-6igrmD5VwTlu6p}5)s4kh|1V%q_(eYM`g8V_{Xd_MY4G`xeJGdM?pHzV}u1%pD0 z5c6FQu2|l8=|>C$IwO2OF|CKP(zUh)52&BenuFQRR0vvj8BZ=SJFg=lO1f0}#GRuR|m|4q6o;@Jy zz$7jV4Z}qNR@&YYq@)?C9ywCcR&CdxS^KMd=F*Ptj)%2fS4#&mEz(m;yXMeyr(TwV zN|CCnXh6yos3@j+bsf|wC@4~)wP2F!$A##L=Bo;(Nn4ABqF5kUYjp3OO2u3hmvw4m zK`~DaV6BMUu1hT~`MtKRiz2Nz6ndMH%FQizygl~>N%$-ozv_Z2K+zj4y5haG_b+~i zH@KA}j$MSv9qHplUWulVwW-T(kvt!%wE3ueU?Bnl`Z@Atd~Tkb&})pMlw{*`5b&x_-pTrgKusd3ua#(7nhNKaXf!0Mvpq%~-Are)Q`ny#L99Kl{~R!_U3_ zvsl*EBRI$70YCcv{|f(~|L=c>zw%e#Vmbo4@~gXO;bd^Py3Kx%B;#GID%eIp7 zYwk`1fV}qI22}1)OJeMuCG0w48~!l+Ca>(3UDElY?mfq-D%~f9yr%_|AFruw`;+48DQDnr;f;txr52naE&yQEU{r2ZkFUub8rh z<#Tj9&o@QqeO5X}ZG3A07~Ne-m{@uHd7>h^=*cj9j%c-eR25nz%Sh75`8(m!Bs>}6 zIi!YoEb2k!RDJ1EZ!a&_09YMRDS%qz$Zwt$O9j@ov}AEJu%+ca9j69ho-PxvRaym} zL?jDn0&ydX!@TzA8pvqi%Gy0hX=|POoR+oZsz0=G3(Uc8(J7!spQa9Y4yEnku_&f# z#c7#vsnQ}?uy>BNBT-dg(SnIez->=0nX!mqB@Qi!RurpNECRe;?{TZQI8PO~dH_W6 z7I(PUo9@x@j*<*?=1yK>cV1lTw{|%z3O2|+GRVN%BMVhBr#Y}gXq+8qJ9^Df)Oc?~ zWL=U5UcDJoiZ3^ttZR%UN{Ln|s%7zagiBjq%|0_;L2YTh9OE{RkdQd#`+Z@R{)ZJa9o1 zu^eTZ9QXDL-tVbBbVQawR5JOLvY-QfNL7KSuzh5#gn3><21dH4!U_VuLf?;VC|Iue zq3I}j+}6=CN?&W5Yua?u4VL5U7gEk-G%eTU6ado8p!#M8a3BP(;W_Cz#W7q?1ok`= zT2S53NB0O)qL$3&T^Z87DcjSJW=rkdg~7P^J)rp7RA(a$ciX#4=bLp1?NRDPl~#>=$9QCt`%5&M5`woHo9~nv@`nxpwyQ9 zKKJKnKjvIjFloUqnlDnA)uxcQL zw1|>^8Xl4Ag-XM4i7AYinUF`2DPvd>pT zW@5TWXkU!49n6gDV+U)*&;u@URR!9^5s(fW#e2>&J(R<)_B!CRhH@a@~+r@1d zC&FVE6qu4jyc1hjyZF91*NqQWBQELOABg3}* z_lD9eyxN~-iqjL>?3p}|*Swt&vJn7@KSVYX=OYdYb3R86gTO5$B3fn)wapS}WY4{F z6#W>+B3c!grUp)`3eMM-ppHsinTk5NT2{e%ZE3x8ul8FB(3MhgoYu6rOSJ^{;LXF_ zn6J>9Zc0U6Lr_ZRg?2>PB37kGp+po#1ryq5w}%DSD!5j`TxvgVZ1bE-jblOZ>zVpw zEGKKA*|GF~V4}URR|j)i@Ugr=1bC}=m>~EJ51kb=FS;S;WI;=BgJ&u(1`| z8%rKHUNhil-??}T@et{9a(S@#vlmGj<(1c0FsyS#!mr3TcIcMwF&bN-#O$DiSxH3+ z1Ap-SjCzEwNwVWMGuu6`JTM#Uj`Dy5w$Yn-ro#k^2y>4~GWXxLJ@7XlAn356?e@>z zznL!sgCuVy>8Ug+mx0_CV&l(3?PbsQo}X9X1lNSxnWc{0WRRT7r1w_n@xp#RQ=2x% z7vc;Q-Xy7d-$Z9j^AfuU$>B+RJUYky zj$bmU^fBoA6#3+T*$mMXh_$nM)ZtfVIr@G)!rOosMv5bVFphU8gVG=*C|XUjlVM1qhEiS0&F#Q_y6t>Nji3Q$`a zyD8ua1#i}S-{X6^p;;-+kCn6`1>4O6<*f+K#UwzSExlHu(~*lP+GnK9-1{2kAshG+ zsylDGa#H$l|4m|sE`G_Vs2haP(==JzQ^^nYe9I7<;Q>))nSH)MSCNoU-?{H14r17C zv7_5|OihC0G8i=Qqc7h#hFhVpl8Ws>5JGj32{R>)5|wqYn{sD`P}{o2NPhO>}>nC!1_!y1~e9Z|z3*HMv=oq7JU|GZa3 zDvvuR5$^G4ie&HD>og&n7|R9Ik4-T>cHceSr{j3-D`K_t6IX9QoovT%*JZ8BHo&f% z-E&2RVcqi$yblT`(Sq!=jQ1ryVyx8T8OHfL#2!iLIV~oV-T?t8%JUNQ;Ro$y;%@UG zJ9knvO9lct!IfZ=lOte__4{TZgI5f2o3HmEL*X*hYNH#~vvaN5<{^tI`p~+ zWW^Fr;f@a_O80GDR#q3;BV;8<2yG*C#&OZxrAxFo_I24{d2$O8{jNrbhO|R^R(pA` zJ$GA)EPd~dchY?Mk7AF?z`B7idj-749=R+GV=9ndSH+ZeP)2)VLelpq^Fc(jlJR9b zG+1G=@dPMRFv$_W`7b|We))^|2fzBiglffCUw?tmKmQER&(997IAW!w3+y`sUH0!h zw`$mRT_GY^mIZ5F@bCTme+`F!dcZ&bC;xkV_45~e_Vp3C_7*T2Ik0<+c^rit|!wZ{b85=RE(w*;j z5R|WLpm)+S46G#6DdxA+GHIMg|1y8hHFue)ZaXQND*F&IixC67!WrZ8{(!6Yz^?9o zFRzTb2c`mi$DMO{9~8X`>y)GD1GsW!y<3tyN{sf1NuLOLi|%@oSj2Hxj{DeM9!gAS zzX9gBYK4#Ma!Umn7DwXPk&U^_KS%T>D8R&_X)ighh54+;`hk*YY% zEqWz@w`H*YQs~hu7h+JgT^|>UUeVW%886ok4n*tth3W2ZZ-7kvoAkYka~9OV7jKN2*SjFw#=avPagIGb-)0Hd*?XYn@fS%Dq!VB36{ zZt!3ITE(CL?0<;=;P3o(ynFWs%d$X3@a?zXI#}W(L6O!}ltGn64B4&vE&SzmD(y+&z|S=mc&Cl4vnxcJE@69U6>PT{_UrX{!ubz#_i8 zE9r~v)&xE#nvVb`gN7}*9xL739;8lI;j$_TTtTF*4A#J%v`o%Mc{+g_dFnNg;iRXB zu>9Kx*($Phi(la2(3Zl_F$b6FrzEdKn9cQ+4im}BJg;wOKQ&#kEgK0I%v?L(A>Z-Y z2*xGr6uOoMhH435)g@vo?VW?Q=Ps=k(LzCmR-iae4Ja+Ob$%~UsPywePYzd< zsjpX?f)Q;8k<-*V#TNtbwlxms6~`&wXE;wS>3&%S*R^+qpIYk%X0^2fRSQ&WN~jdH z{#jC^f!|ar6a`v)bdQRt_LzrYm=(#){vlxMJ!;t4HV@s4y$@%0`x|A!eGe6${@VPRm zb23B9}ge)bmE1!&PgqGPAsSVJB>$Gk9@?Hxzmb>)a@ zSg!g9e8^%TogH&_d{S-}@?%H9m1xq(B{N98kgJDnZAnXqnWd(@12Q3t6LZex8V1Ia zT<1yd{-oNgz;inn#y=J<=J|zr6yNu;#f7amCrnV~F{r3*$X8`QCj?6pZzrw(YDg8N%EF9T-#sxbU$TGa4lq z`w|6RKua*0GE;Km9Pb(<$;?eD{76f;$cQ8^GzQZ&PxlH)IR|+eMA^pm|Jg2D9#!dv zmcb?)t>MQ7ktJX&d)|;u1)xmuz+63IwH#JxX)P04qIsbjCF$)Zdi1I@l{Mu=&x2~O zxKTGa{VhD6h~6S%1VFVxj^m-?y0o?pBIwbp-Yvc_Xjy?{Ym9|jTl)oT2hkGgftyKj zSq0anwM{U?Ts<1r=uoRMsSa6D`6yKS9G1?{rAOdYqbkUMYQa$ps#M(Q5w7qQK(PdH z%WYv9Bg0Db2tdfkiZnR_ElPoe>|@dI9ei=_VpCx1dkFg6p2;$x#>6#@T=*l~#sv(V zToPH)^O>kS9UQ%mp_pV0sPZ#4U%~pAjD-+*%jz;oI#M`-|7OF(|0Rcv^U@l>*vsB& zhHSYw1%me1_|QIUs)=Sy5f4E@DFwgrUkLu{U-?!1m0$b?eEj$!MWO6pi&k-DYVSCZ zKePMzdp=Se^R@owfAHVK|M@@tKSJwo;;WxMpsoY2n1k-#QvlEaSph6EyBH{zA!u*{YXi=azp);k`B04qk0HS+E!%Pl7tn%;!kUV_E2C2JZhzVobh;do)nfpyQ<(QYrD7i%2M-Ew9%jxpejc=+uTaw ziYZbpS~2(IMK}5Y>YCw$Cz~rUuQTRSaMT&5HiUT8m6VR2nK(VHElA`5Sy(>|w(~(c z;}GXL^WgGHdMKadzS3gMamq(?gVF1Y4&I^xU8|W4vFZ+`p0taDAO?Z~9@&$0kyRaW zCNC-}SLabSsx+Rx)HPKnI?%SySs{e=4cV0-pv{l#Q^EGyDI#u2_~OUB}-upt9>2U@gny zAgtDkWm)i-e*Ty6|M-9Z7QXj$6Y8d|MD+F>%`-Ck!&xF5VJ?DD zvmqpDIpIBWkdwpi&Pa|+jV3Nb1`rUZxdwdP04t=iw~iFUqpbO9kO7b;kRpJ+nI+GZ z0T}2h@x#$4PVXOf*5|ze%h}4MaWZV#>JP4}5ons_xRSWaK|{J?2VN$y7uQi0vg`w0 z&!zPi7DnWtt5InVN6Hdy3oKtsByU9G@Z^nbkjiEgy~V$SsJ6fqQg=!a*znp=&czzN z=YSffsCde)LQ4}@iw$j0r-anZ4)IrFm>!*&R3KV5$bW=T@l#xpCiYdLTnAR(1w4^C z&xCVVnvse~mQK~_Q`K5B7&&X7jrnuoHTD#p*6>r%tJV}U!9iGi!E%c#nF4boNC2%W z18Vb%`|)4@ySTWuSLxKwi<1E7C1pV3~(Q#=!-)ae!j#l{3IGsgE^0Airi z@;c&Cq%b(5U~>-!^n4GAJM4X$N)1~RuyIZz-MFdzmHe4X!hKsmF?fDR&SkVHQk*nVxLq0J#vDCW7~*Z z0?Wv};I@Z!4+9165#iS|2vdrhfxta+xxEf0HRR;|Cd=;chty#`gRL4DvI)3?qj~ha zfzAmsY1}(li6Rl#onCYY2fpN^n11KR+Mk;$C(K|F!9g4tBlWg>~+)Y6{-%>JU(WZl_oZa_d$!CqZn2q&x4 z_R;2x^~CADkkYYSVxiVl(io^+#7da}TH-wEpXo4QR3dSU2={JH&W70pAP6H`5;M1d z3koLsgie)V?~*gmx!5Low1dECI!81b@lyZ7E~%u_iJM|;Fd zAfvsgGEg~jpo!2jm;ItGRi*Ck|{;X92tp#OLuNbs`UeaD7*!ZF!QHFtP^sU;CBth&o zc}^a%^cP`oyvE@#i%8d101KT$@T{1?o|8#9?$Km78R^f2p zwGg9trad&2V?>GR*_lmulw!!3YNjJ)XbpTW1J{r8v2|ba-jHmOZX1sek)Dy)5!d9> z`{?6EGk4!*XdgjfjK$eMX+T%_W5#VyJc>C}Ur_+lkqR;c3@~JrDH0D|@%i@tK zj%JNfEBg${AdU05Y~1td(t)L&a>U$6h?>oLHrC*^5BoRxtNvNG7h5n9&!AkIo$>NG zX4f=qf#j=3<1DBcB`ihX)PP*)ACnDAN)G@MppHSj31f2OsPf&OXC^iHCqvs z0F4p_hbK0F@&|cGt?{Pb=$3APHPHQ1Sf_pQNP`bXW z5sdMfjK@l58{3ganm8D9=Cb(kq&?(so}It}9n-G8YOw*bwHDkQR$Q+Q+|1G#$dyF* zE^3cx%~J!3s}_gfF-ObQ60DKJ=j&YiD`@P9ZdJh~ExNS!7fw&oyqrZ_->p>zD;?um zC7baZ$rh~t*DMvQOqAo%8>M!D!>@ozctm4t1^aPoH%8#mL&W*`!RM*WkAwLq=ONNn z`kpEIX0FVA>-dcx^+Y7IsYhqk@1R1I=I)#Y+Y0E?qpd_2hDYRtO=;P+gwS6t55R!Ea< z1kXD7#a5q>ni7Q)ddY`S-*tFJ$MC*O1gdu&q7jH~3}2#swiDwRS=3yBH(El4!$TbQ1dS@$#rP-Wfm<%kjL$RUXIA7Yj*RPx za8yOY8`osFfWxvSA!claH1CgVZw7=BrtP+m*FZpUOTDdNGlI5IZ=m+Pr;&%FD78hV zBF}0-=Dbgeo+pt#bn#L#3=y@FQ%3&kMkFa|qm4qRIxaD-CK|f-FliNt6rl8cDx0Iv zzsjfvlC)~SYfq~8 zCenQ&?bUmI^coDaR>3?~oU0~YVh|emM3Rv!Vrsh`|9*abz~|FjV5S;U-WDOnp35SG z`}%(@ug-lmI%2T)60ZFC$WF5QF{MyCjiXPG@ewlwDRsI(d&`o%QRa^rACVAkx8b#C zWaq&QkXp|Z(6x5iwn5op=9e5`oA zUa>3-PN#G0cc)gIl=GK3rzvyDNYb60Kg#*#DzD6$aAz(`{`-h&KFllmxxiT6MgV<> zr|kL+==kbT3if&E9{Vn?W$38!uw=i+{GS+K=o;hAm`mY%`UOcA6UXZ2zW{pf_29Vh zT^mfQ4=_&a5JqY|hzHA7$KHWHfd@hJ?*#-?m3 zHt9H)z*SbgIZJg8brI*Q**BzZ=}$;gNUe9ehv!ih8Ok^5c+AQ!JHT+iMFd$SlvX-I zKvwK~_%}8%6UL$g=83vg>u9C?2CiJM3bXEjvIoC;NDT|d8C|wC$!-XI zcXMZ!mYA-nv$`T@!!deCMQSwXR6!Lx%^s1j7qdfqE?LZ>uTj+Vlag>b-Nhw9&_Gh{ z^j@u9)hf6^aXU9dv}kKis-pf{98q}htybw6b6r$1LoxN&@wk7~BWH=k2HFL^l|u!j z!T+NQKD*rEaA#fZcZAk9hZ~H-A{U@2q#6mGpSVg^3ZT`F#%otn8W$5E_%XN!cnIaD zt{gd$n{)X@lz5cp=k_dU8AcP4sITpslAgh&85LL<%ZSbfNE%r^%C3>-FdDx6vrQrn zEwojpwtrj0tr&Sfo5!uW8y!)G84Am33~v- zALH3ko}!}21l1L_D%Leu5E|IBWOx9(K#vjKC`#f(g#P^l0CSB3VkfYVNdp5Kr5hX`}y zRX$fB&_`Si*J8{m#MRUSLd-n36Hf;llikjw<;2g|OdTSyATAUU$nwSLL(uW!5 zz@?)zdg(K(c2p@{kMwIz9%$e!xymDk`2ao&+_Nk%XE!l76Ms-IG-_v2RAh6 z>kejy(=o+BTM9rbJPfkwcfMe1& zGQjRMG|$&sQmDqsowJWWN;ISG1Vc~e5ywIm};+t;35#rsgX@X(p~vPk!ELm+Bjeq&Vs z1)_p=Exprxe-)3dx1z%*3E=3}djY(~wQi%U^^=@L=@mS&pB1JAx^UAGSc_oULb+;> zc8CBoVHHS>N3<)vj$ZyesE7^^N1s30-ee> z#vF|PM}+g)JFhf0@o~nJeaxDbH;IMOFOFhq{^_r+)0Zi%oBLn8N4J9`fYa8o7|q{U z5yo@aeAWT2t&fA8c4au^mAJKovsrPvJmcfjkFnG;GSX% zpPxUC%q8<&Iu5jNY))d&kZ`~^fX(Jg2eBgp5=7n+nLu|g5&APh!M6X${4$FpCWa0u5U0}Q)EJxALf*U8$e2vY*54onW9QMg(vY0EAa<{sJzO?zZ#yr zj=)MF+9Dj*wqU9giq&GO>}U5ac`M=O#iYoujl~rs0mNrP1v7nm_Zc4*=?i^Fpx)N`m#a8}2Z5y@+@lK~>;* zGvS+We;scw&(QUVdU}A=Go%PqE~xU1>!o5j%|HPTH;Q^a_9OF1SRWJEIcg;$czk@s zZ~fM9;qU(4zl*=~cm583@Pi+q){1GGaJ^pftH1iI_~l>zW&ERm^pEiA@e}Uf-C}JX zP*k9A2~J#Yl*!i#IijMYED&G!A}fzaCxdR6cl|u*hfU8W0&mVO?jY%KJ=-4y7$ESH zS8Dta)o!pkLSl_v0YWWalDzn5S?AFdko68pr91f&CP5@W!vN)AL1M@NA#5w%p&Oo> z4il9pNi9<1qqtX@j*JBOLi*GL5E&6-);TPq*&Emo|YvwZq6`i4$>7#^$Jt*%D%bpm#R7!nQ_hrvS~I)0AkR#3z)&=mj!MI-d>f=?ax|vP1_%5f|rZ zAuIhDf3qL-bb%$8+I%xKVsN=xr_X_vDIo9ihwJHwxFPIJ&oIl>-{5(Nq#o=(l zN7Ztvnv9IE$+=#yc>n%AzWCw`{DXh+5Ae7D_TR=l&-nQ96CNKw;pyoK>w3kywl_rl zjlc0X@VmeJJ6M+j)s>D-@;-Ez9O3zgqm@z?*ol?VINF#Rt#CR&+wbWVLjmhCUYrLE zxN4F#h8kl|RgPNGK1u#%yvj{6fwi{Z{6yj^ z#uQm=pLej+%Mt|&6tmp{GAX-^gyr9M$I*qk-l}^&c;I)6MI+(}+SItai z?~RMZ7_51EWW2N^O(MfGcEL=O5N8_Buzl#!VDCBD@16M}32>NM6h2)K4W@ReX-q4& zDa=0u^Msm>=Q$vX4MZ9v@k4N+gtr0=b7z-gP>x&0O1NAA)#7WlTmjGTanGdpxJWNb zarFV8^~M7km8gIfc)O~^6~z2;q{E+ObD;beExT&(R^U1?dq_?QRj|qq8oVftNbV{vWQHkKr=Bd&9n3uG8MtsKUeVKr|)sl z8H=8P!x_hiGoF6>7B3$bsJ!5Cd&Na7E-wcxXX$__fRsopO5rHr<#NHguK0U@@9*K4 z{@cHVH*X&NorWJiev6mW3zqfV^H~l!pRPFG75v-3^2_+<$NvoPzJEmNj?dVBz%+9q zN~P!(>F35?0f3B!BEM6d?*W2Kl6TH|F74Achsbz2w+u1hr_{$Ncw=D3j8FF}ct_ z8L)4AS$B>^J-{O@Cw(Tv5upL7x{=qQA46&*X*GO6glH#IGVD*R!}6&Z@TDztqkxcw ze$DKYb7r-H&Fc!KV~Z|42SbvCGUKRBDG6RWyNP@C5DTQ2P~w(fg__rDYw8>0M`ymL zSMM`0wDTXIvpPi5X~^nGg12xiLTOVCmKf1<`e%8QMUw^0?>Pf zsgDtgU~rC-z4jd!fmU^%t3{w|s8b~zCAIWo&)^r!Q}E&0?IT>lyd)BI)lRRtZjd1d z=!!~9is~BU1$!g3SxHiJM3Vp~LhE2t75R0eG1vo38~v!`XrthSV#$Y^HfJ`O*}MkT zW%F0^mb*TS94zUbKJ08Dic8w9VT`p3*1F>EO+lG}AO6?z_wQPs<8?V>y1!t) zT_E#<>q&r{6HtKVli+%u02R!$U^=uJtShiCil?VXeD>Mr`1^nVe~dr(=l?7|J$}Ha zPajaL;^q7iOFdy-fb;buv>s8f6Rztsw4Cu5e(@{(+CRI+x-6J(rY=gx5CNK$y6_$~og#@5kts8HKMjD;+sOt3yimMV+7{O_SOA%uM@Fs%^xtRPhr!^iH z0vx`M#ESWNTxkw=1`^RJO3EhtC!^!xQ5lY@kh{;|h-jZw9f7Uvi1N|*@D)px=>}St zRciV}ed-P!C$aOM0LpP9#} zP}Bm{DbTib1fU>p@5h(5Qlfv?R_v9MYKSP4Ge!exw$|&l-FKAM?Ojm&`wb=0$IX}w z%c5TEU_LJxQy2&X|<(Sgld70?y)E%1ZCFyVSRL)RHoDR}t)GuCs#bf_&#eE^OM zoIVQbQgA&hmIXN6D`ZyawN0vOM8(S#Y^N;-XK$ zI^nuL;kv#+*E8fX`!MQyW^Z#&jS5nlTwBGj znqy@S0!-g0h>es}Dlsn;2!1lhh>9}sGM*hQp!n{SgVFEtWAjMMh+S9uow%{fk_^t9 z%`JLgfv~4+mYfX_dsXz2(!E<#xcSr8l9R?+@3?@Y4rDUFI)gTvBSj}emC`wyYUDEx zC@vpQCwLU#%V-?XVAtjZY!kmPxlV!X)A$=|xmj$3_{*O8U!eA57x9OC+|U4q~eyv8L6zx(hQru0fq{w?RWHo@G12XQ)S4e0&=TvR4XK}wv zV$)TtgA{12+ZY4*+8U^wTE_vlZ)@N4Yf&6UF_qF@2rHRLI&!dcUVtdIua7!L^j zs)VTmp-2ZXzKE`Pq;Hre#tho7rJ|x4$K;E}8EEXD;YQXKES=+z1Mxo2;Bi|1PIe4z ztd>_|`E*hRWhr2Ga!+d@Emx6pm9EdlpEG#D8eot?RW(yqs6mRdG19c^vK6B&$^kN6P|E_y73=k;LD5=V|EZv# z0`OkDH7EPfL5zVMt5WlA4W9D)wJzIyyj(P7J)E2Nq@tlALjn*dCy5t`$BEa&aOV@8 zSf6x9$|8>9|2A_ufFFOLSzx&0(BXTpIW>AXpoG6p#4Ge{E-a0#TiM^Fo#4}m6y+Z! z&A_r`$zvSFxshHV?TzA6rW%;;F&J30tZQJ`vn%?eytI2qKHnzr(J zB~LqTU}6X|GAY?XqQ{DRR|b~soqchCpV^H;g_*aS)1u@{O0 zQn4-oaLC+lp>3P6u><82HN6?&!GP}u77#MBNKlF_?Z{UYFLY2j5$NO`m=bg~t_E#A z`Sl!tLwNeMX!36wj}eUU1%+m@BfW}v&Ys@bMt#hf(Um0U0krz_MaghvAT_d_>rp#u zcSj`e2S+axh(;u4r)p?((zq&9q|1A(XO{L}Och`v9#^2hC_TWbq}>U=ss1f+xE1KN zVim=F01h{T<*JZXG2bcfX2moCW$HSsw#L8HEI2&TD*5>_e};_t{#iuPvZ;f#1|lYue0YB0tyhm{PtDVpv8SNopc z7aGTTg=EtJWCwITLS0i4OD39)7625nM`48fpZvX~Eo6!1TP@Q9U4~sB6N)kiLH7ia z$0nc5uBxwG%eo=Aq%n|7ve++Vn;1WQ>_-%{k2nd{*VFeWRhLnY8yyMfzz{Kb$|+Lu zBIo4ZIE~f!#*I9mvAdDwN{-+d zAl^6cD0w-?qZ-Pi??;or&X^X<9%SFP(wroQqAmhMh$GF1Jxd3$K?Yy7} z`tpx`ZsV#bY9V97$0r21Jom>QMGlPrrb6EnCl4VSHvObyiOcEQbo58y+If#E+L&5~ z@y6|;v;muQp;GtlQAryys`+BJTO*!sY5T1_FIL7eKOy1c%CRk+Y=kXJg&$qcCwm{K zUm7`hNwkR=1?@O+K9u(UQ575~!OdNNujjBY=+0G}TfvWiNAcnG>kuebtXSl+zr6t{ z^SNzL6=+$2TClDK>sm3Fisf3c=m~OIA*Ey>OqE^CKLLNkrWl%G9VSFa3^Z@Ug&`da zsQ66|Tq*80(RkAN2_(bHqSZ8|k-Lh2mK2sdBevks37G>D69Y)u#Vz_zg($R&&JN;0 zFZ3DlUkVYoZ{tWT<`Gq@p=T_2%YlRIpB!=8t3r$bzqU0nN%~rYERZFZY`r>z6xTG0wJA|V6vGszCs7X8&%r21fozkFxd>obvr@CU z?m-!YFcj?}RSBGMx< z8n2UaK!RS@Z>P8oBM;dBOA4H133_t~_V}r#8AgABhzM3NP!xI9` zo!u!XRee6+Ndg$d7DY?9VyX2+#!bysO2RkKj^EeikrDTD zEvL+;);}i%q&+{)^8<|jE(nr}31F=*k~{^=hHlA~jjRc_{%9CAfQmrOxN<~#G)_<& zA!yFOrwjpm2DOIp#ASMb4Bt8Qu{A4yPIC&f#kH_pt!(~8h&~k6W14Vqz8%ANp{^F$ zs@=JWK7)gsmOvV-2mszt*BT02Rh37o736SM&zE`lyyBaWzlFP-&mectZNFI#C?4H&8aQyy(bI4eg2xH>_PfcR7>u%%4g&c$ zR79f&&h)KPSTsIWlo@9mcrw8uwd!nPew#a?;unPWlW-;&&~HG+#(>gZ^M_$CoY#4U zr|tN{l%E-|_fZG}N3iioHxt4-evM*D-fvib7-PuX6V?H^y$C5eDa%9hDY0!y0_ zAZ&CaO1p0B{bdI%6&!?Hl=WTcVy^=2j|gBj5QF!#|2}WO-*fFcmks$=tfXUsK)h(E zLV75x8E|8o3XvY2fVSVg^*0g9Jqx2am(6dzR_=!DCBA}Y2|Ge>idI};?AmzU3iG6f zq_K6a07_Gi*J;68E2?VCLFkCs6WzCzGq6F*HqqKE-o$n7wvvpFk|=3b{7%}OQG?Piacs;-;jfwifJyN3X~om~E581j8S~Ve19$Qir$P`mqW_vGC?E}CJSQ6V!j9x@?>pO-u3sZ< zVc5eCYP`Cbc+~hbT?pPuL5&UgBXu!2N%OWoXXnQiZ#QrK>E>mq*2rm~vtp@RFCiOBTd-z6uyC)K zO6J~BF)2@w?ab+jGM)dzqcjn=Bu(DIOXQo0Yp|AYQo-JQ>ldZa4i=ZPVy!hw=sn(_ zbBUtO!6=*>YuN#}=2+PuLiD%rWT^j8Tv7$H7XQpVXSEk4^?A9X;+JoB%GG|X!6x7K zPwglV2HLpHn0U&M&4Mfa9tpwa;#NPh5)u%Xj4*Ge$WrD`@>%JGw){{iAndP#_ef(^HKDD*J18w-o7I|W2)c$W}&_-zYek9JT+5QgyQsB4Ny ziX7SzgBl;%-Z-Bo4h(M9c>a!R&2)Corj^UU<08Al&kc8g~aOnz~@E8M*|x=RI+`vZF`RizFv^ zZ(D1Y^{QCcD|7{Jj)Gbh6)S2jSk8jSj|-*=xIGkHUfLsm@aGQr?5iojdS)u;-C_~M z0qnY*+COwG;^2TCOybB&7Y+3ouxxCL#VA!7@Sbgc=z*3(5Tew+3+<%AR|;~(LYFas zbA72aQ^_|eqJ}J4dlG8qOHv8(jM3OTK~qd7<+)~l=J{p}!5`*a7=Ti=pqK#5v|w4UfF3hicE%ap6#+KyR-|=}JE6lBntnGpMNI1qCMb*L zcu6QTXC4heDA=3?S}Tk!h;c^mM#YmX0}OHq*Au7t0$3j<^EN|56{Y88XjfJS#5sL6 z#>=}W&I4J=_3q9Nwt{v+_nrV9VaRNZO=yJ-ejg%02jw{sGTsHxNl}sd9*|O$m1mET z0h%9~*KTYJf*w8+`Q(zH8*7bYn*?0RdPJ2lO$`2a(@=<%n__&xcc#7U8j+KagE)eO zP$|Nb2|?2t!+B|q_E#OA)n!C7#}8XIa9}`l``bV-x4q%w0n3ePeXzEmZ|={p047*f za~r2>d(nJxl38_}(E_o*4t&}%@=6qsm&phYN5SV`cliJyD0uVGUc6oa+}-*xWu761P1nTUkf#Q!kJAjYfXs)1=nxLh#vSXt z-znupcjM!)47utssTSXe5Ul*-3pcR9dUA5=%a|br3xkwU+J&b2v;r+oI+8TZ0 z`vkf){hEO0pl;Gn%1fsC@OB%~IXBd?u)BJ+_^$wF-m4`+5qESQ83g8IM zz;#2;q$2MfmDGX{A)+#h4UkoxSzn;qnK6z>0>K-TCIAXc(6;Xe>7qrb@q_XnkagIB zjvJxq&kEiUx0AdxGVFmJkC-Cl9gMJUZ*V%efgbuL!WUm>K1x)HV-Q>W=x{JFXGep7 zQn(p(OJDPt@Q@XcI<3(w58HhjYqMukVML5aN+Gd(2L0)PWE1OWjhw-h?~Vacu3ROs zllyclcVOM^>Iw zw08;3I*YaHh#e9DYu5>EERBtd^g<(IGSd*H({5tjEe%AWKj$z1!WUDaFC6y>xi0{cc^m({n}0v8MolvycodANic2mu+1m zU}GTDWjyIH(uR?%+vWalBn?=tLDcA#GW zkyrjmPMGnVZ0Db^AJCuEPxHcHydVUa+9FaO;Rx7h-Htnm4qPjpoQn303VXqWn3ePY z+d!1+OPS>&g(e-7P+OdDSnWAB0mfRCsC#h=XoBT-{6q=7RJj&_s^ys|%_&~t(^u4^ zWmZ+k3}W7h>1GGT-2+wjXD62e*(n-q+F*{5 zz@(@@!?BY9T6!-YP3ht>`SdI*Ikwz5U%DwJXNY#S<+W)~f|b&}+MvHfiNTxjc`&du zchC39fRj3SY{z%vyx^6Q%6!-#CgdkkwV@R^w2ztZ0xZ;S5YPd$Qi`B2L$_vy7uPM(%>2A7X%2&@c=em@sU8h5fK~k7|Tiy2&N<%9YJ7l@^>lAEq2yC3Rj|}JeruDtpHY)Y~w49O*Hod5izi5wk5uUh90WObB`xSb#CN_ z1>YxfFfic3B>v=s8o!t9#^5h?%MMrDZo7EP7<7|u+e1liC)v)}REN*_7oO*M-A39a zR6*gv{GNQ5n!`a%Cj6xnH}=H&l9|#9-tubmgl%3n1!8h8CX%!UN~|3-Z5kt5IX!uN zn%F8PYtQS7+w*(E-nkf5Atoau$GfsgMlx*ICv36+61vF|Kbk+WjsMpc;|57?TN z78%tbq@nCOV=2edwYT6%+yZ_nuknEG8?zqi<&C`_p-eIc#7XIB!4!1zzJrIeN7esJ zSd}%V`2X_L`R*}wo#&U5%J+Dj9I3d|^1A|n$Ft%;iCi*{8!H$o%Cc>7#{4Y4j*N?Q zP=W-n?3TC#!B^y?)=bg(|1b`be47`v)x;7EpT@S)wDY%#x*aXrvn*|(fg%Q4{RT%% zO*go@(7dbpH^o6(eqXvu*`sIh8o($FybTqeq0>0&c5{kK20R8Gy$DE?Oaq#L6wrZ@ zSwc{%gez?c^P=dluNviJlnVs-NpiU32<>blm-e@7Lq|EU>{Q34YhL5r!E>{`XSSWA zqvYl=@mXBsV2Fo*#S_bRCbPq4ii4dq02Qq~*!3jI@`r?8N)lHXMRo~e-D*H9>CCP4 zZgjc~be2r+Rz(;|Bmok}rTaAomj^>*?-%fBg3WmVZi-~Mx!lwk-G~}}Kf1Da!BLti zu!Y?1A*MJjtmoa^`%)^=T&bu!D`26yAwY=2s{?BnLYaaboJXI=>FklbjYN6!Unv(%q6c!XZJkx4d|n3CVO~}$X^acJUdln4fh$V|4zQ6ERY^dMpM6d& zGy>ls;~^ePNofz2ms}~ud0@ei85nzB0|89liEF8-61<=aloE;T&0a(bvmFDccMpzb zK^Tk?oprs_>&ftHO4<=smaWwPr&$Qrbs=8+`Wfgy$-G_8fvSzlogzQ)L7yc|U{4wtJg) zS%668;6frY16`KwWW#yD^@9zj!}vAkqWL(^)fFlBNSUB~J|c=mNCd5+?6~VfL-G!% zSB%=)*l;@`I|UQDQn}FX5ndRko!n5~RGK4yH}WZu&A`m|z@?W#RvLpNdQp_c6`|g} zh#o4W&pEN312UypZmHFzQVw>GOSLxJ_+YUBO=3VJ9>;wN$5Bcqk{x8Zccqmv@2+@j{te8 zp~p~F;~33yn|KqLqJw~Jjm4JrMSvi1`?s191Ax{RZ6q+l!W8pWI)%$>Etb@UPsO8) z23(j!JUMW<4~RU6j-it0(>zW?t5LpaWbvp29ZBRY$VQNnYP?1vaB7HvUoxF}Ya=~? z0E=94nooG6x2RfRU6flSz(73lSE8Z&8iT z;-d4~!CoCAmsYmE5oz0#R2;%b9&94EKcT)yaPV5aY!LqSh|<3r@Y!DXU4SRw{ax4Z z!PwWXOIM9*CXF_@xN0CCtq^4`m{!5OOqkZGzwo_x~XR<&3Biei=8!)pP)?Beka3xMhG zsBGn9O6GEtLj|{IX!1~0A+=yy3+83Q@j5{k!Fs4z=ia|YrJu0#5xT_&;rgl;pcZr3 z``aHdHQLnBm(wbkmV!F96O@2%wBKR?!X!!d%1}L$9mPPl-#l8DM{}S#<04mIkIhh+F% zG*i@QYT|WsE%@@o9gfRHdVk-M+?V0k9GjghRiPEATCrBex~#1^FLCk4j>+DGWb}K~ zhcL~Z-mLB$GDe)b=WZpC9EH;G1_N}(+Pq4{1j;^jT$WX<@`9A7!0v|4Uz{GCVC_dk z1{iFpejg)iPfVm#Rp*Ehf$c7l$LKh7n0S4^3 zLnvLo3~(`U?cQo2*bw$)_NfRWs{hy<)13xZv0SV2NbUm7BaWov6Q;ZINj%>M4lige z6{qQfS`7plF?z(#+1!v@_+wEFL2gjGf?0`7hEQ)X-&T{L>YuGsMV(t>nCE676m{fG zGEnKG4J6Bugs$HJ#1Sm^wddD8q^sGv7{UCjWBNRD&e7H#*oy?Sc8Z=vvEIEl6nisb zu#;WQ?NS*SvPYcUl|lc-zT3PKwZn!10Oret`==Y+pKmbhgn6AYX^9B0&CEd$kY3u; z2dbqykDC$m@^nhxMsG(`xh#(Li~!epb%0g+|D_g`TGCG1Z3eJbS+PtN%e>$^S1i+t zIyLYo(mUNJOx}x&$f1j|8}KVte9fgcgI+qQIxchn|AfOjVL~qfKiT@@IRVaMuL7v3 zufuYG6%80@{|wRq=G=j>0kO2*w8iXt^UE4g@&No%s+bbd^2MxS>I*YpK76{&~H~9SK7W1*V1O3`D=AJ|+rKYc_I1=ev zE7n@EE-S9G;wlSfvX&_++Xoe3d~X*cSTi!3W}r;Dtw-WS7DPvweqS{sr$aaph=!J- z#1f)*?G~27o+GxW=4}zED$DNJ6Bwl0Z8 zNpeP7S-v>SJ)hF?QT$Fo*qp#&zyL`t5X%t<96&Jn>nX-n&&Su&v5(OHQCr3 z8V-PIb4zAi0XE7Nie*}nUuJD6%M^*^ZE&V}EqX*+KSs+-perLCB;>d!4i$1b}jZVH92 z3S9s_HN$zG7ObUWk=nsPI1Uj(OT=@&Gd)$RVA6s~1(Qygw4gvR)d>>>MWn51l0>q6 zoS)Yd%jMueU(evI=L*37jF}lNE@05_k^Yj@MB)XWoFJM(gYQpej>z=(#Qrw#iU5e{ z;B;b#F@C{R3PtEUSn3Y9be$-(vEksnP-uU{r6XYBA~xrj;2UUP>l#?21zE^p?*A7N zlp>f=P!6Txm++bXSU)=cVf?My!Bxdo&`%o*X7}q;6_167t+heduo`|AYh3;(wRJ znb~D061ww?GK|YYjazRI|Do*gNN5dJobgYBEd3s1eoN5j{vi_4VS=U+KN?G&4H$L6 zNra4(+pmCAi+Po;A;TXIzDPIUl948@xEBgzQ)ZI8;_+@ee5eg z``@#qBu8^JLS60NJsu-1j0L2q3fF*BsF- zgOZ+M`Yn+%A*+2Z^GH4eHy^sV4ozUu_=@!k?O&3suJNKvKRw-jD%*E+c$9oL9iByw z7zCIHcf%vnf@vxNu?a=ruLh_a>BVzp z{}5BjlmA1aF^gW6S|ROxwKeSZBf^m?LN~ zR`%G~7>k6U!Brx5GvU0@(|SWcv6#+1vb;-zc_* zSZw5oZIlgs?V_<)3C#2i?UasWH10Q;*JMX($)@@ZK{J#R3{UIdf9^Th--QIm z0ef!r-a((Ed6aFA>2=1&rlD}ic!+)J7Rbgl8rm^L7*Nr%ijx`GejSdg*kE~rRF0;l zy(BZPz52qP52+5A!YFAv-c57ajIG3cw6R78HRZ!HVPwkB@I6=KWit|jF~pVlCy`9t z*o>0O=0CB?2C&&RC&%4SWoRZpUCD^#@Oe)c)K-sCDr*Cjj3vzk+D zGNphWeMdDPTuvk&oRgew9SjD$lWEbn;yl(~OCEfXa=I{`LWCV{B|Xz^9;zaj4-O9Z?<=W}-QsI{Q14FcDyn5Gq_lm@Uy z!o-VA+Yw%@p@aYw_P$Ix8?hK~lmBPJ6k9T=SGL0p9QJBXY&;f^8k-^2vKu0r)jll-5RyS6@l_!j_NgR`tN~v0WmGlO7Ut0npBDieGxlBUl%*sm zH7?^sPP@moUF^bu=$mfo6sIGobd-w-fip-9TE@_l);orl2lMM%1p)Gj+Kle9t?$al zk!Dm+Zu~2X_2(!Bch_Mz)&A4!T#_0|#%Kf$5_xHUY?~Vj*wY)%iB=&tH|;qT(E>w> zF8~yZQA#{vS5c;q0)Xl;pAApgajFn7WA1kxn~%=OjyoAy?#It~ib_|-ipKt0TD2Wx^F*$e>5+9{>JDpE85Y`yVC;>#|hKi0G5=9*tD(+C5=*|A(+p^ zjszW0rRrIpXx3czQzYJfn0AUL&nX4rRA^e1Lt%4fJD_rC-<_FV=aR|nph}YNHlGtt zA8~7A--$P~h-^FtESc{JAaYf+ft?*KW^^o2I(6~(!~}#)p6spl5eaKUm`%twAOUGU zx*WKOO>lBE2BfmrSuIE61_>a&E3Yv6Ye@)y&`&ysw$CGCD=Q+-b#@SC3eS;!X?Fss7BY71wrM7?@%4zE!v8|Nsp6h1vNmx|7HN7p{r*{S9uS-ZF#aL%8we`J~ z06NhzpMiS-Poq{WQS;EW7Cs%qWeTpTketRZ7D%2l}Ns$>x)N8pWp@ ze6#b}G!;y9Y0;}mP^2Uf(S9lY^{3&vI|y;TNHdfzwPeu$?aKJOj1y%2m=+mF`g~l$ z$5qll@cI?Em>CvlDiP31hJbVh=^^QBDxEXZ@-%dnSH|1A3r}hb5;yypNS2+NJo`PD zLI6x5heR@l;?bOTgEIr}lX-B>Sn_6h+X$6G9tJ*40ITeLC%e~1gi&4{a~r)MX_~Lw z{{7u@%C83+KN|vk-#NcO%8&Ny?ot#|w1F$MJg}Kd;-#M#vwjkIj1z-Qn z&*I_c9e((e-@@V332)_1@2{dRD9KQyT6HC`WyA`PnMuz)@9h|daC7*s<`r{_T_Hj$ zq0Lco$6v-96;_5nUK%@OYDcu-X1Q??>hyEm(?&KxweexqpC{SCIDNBnIDuB|KBYZRv8M0gn zh{QKzqChexWR3h?b(_^1ZKLeo`8Zu6JHN-@$)=~Z1sz61JPud7H(W}K$g~riU^GiK zE?p?SAW8D~Mwf7A$QW%1964Ue_z!wXI=FKWzHh!$pMaiYc~*UzIWrYXdBIQe8hmc# zOF2*n&Aywmh!)9K4r7wcW8+nYKG!6#JZ}SZ2|!TJ+peE5e4aRJkS#X+V|^+EF#FYb zd#`{|oi1Hg*a5Wp%E;5>&+8y+oc|tZX$k7%cS8XJFN6iu|Fz`I@R0-#Mp`CDudVI$N9jV z6PrAPpeQ7<0t4nbmzM+*GSJx1iX<}le$zEn3_>lO)6eUAH9H2|yV$Ww%s22&r;8nh zy8#UF8izy!_&|saweoBoLul-G$AhFFJn@a4*jw^wI`@Azi1ETG^QufD>qdt7+&mIW+H#tAPMzuw- zq!fr0NGX`1y*o7l6;rGN!Kpsu>mU3XeD8~&!OP_lbzShyr{BS0zQJGk^S^-K`t4uG zr*EI|Rvu8HSW&U+f~V;PrA!FsR!mpmR&RTlJB}bhz{osDR)j(fZOt#Y6$@b)lO01B zEQa#R8875*8Mq>MXT*g7pd~uc7cD3#uy=E1Pl-1)xLBBb_L##NBWM!2*=F22!mfyS zbO{+_QLM+PG>f6bc=*yf3J)FP2nwcjlL;j78A_vrl;QlBeY{FC~?839m~Ym_r(^O-@f4ip4^$J&zo0Rr;bfQ0^vIdIZ&nkR!XOKw-iTGp2Q z&Y{5m@Z>eacp=Xz7f3QKVkfMhQm_ic2&MIm(If+87_K1-q^*l0gV-Al+Bu1J_>PAe z=HMVBI3+BW@hQP-KQcl%S6%?oE)HAIaBw)}H=~JNc8s-1n#zubVA`SU6vMj^huc3Q+ntG7tg) zHl8WYeY^meKxe-Wccyfhgi)LyZF_CGD|`Nkof7QjEz?-VddjNo43h2|crx?nzv_?t zH(-9Pim*95Mb_35q(_x!wK8`TdQ<2SSQ~=V^$E}Ck67yhK=E{bk2mrquIG>V;>$1a zd*|Q5{5;_z7hG;v+}z&c-Tjw%c=HyA=?2I77R$2WN5B8uI4@V6-+#mr2i(>hOqihk zIT58`s}O0%n}l;$y!H=O^$qcju_Bqx7?{s2gk~r;x)lsri%5j_DA;d`tOeD2jL2ZZ=oHBC{z^$2TK8cas(pB z@ZfvtkpRX8zD-<5$a_adGJlosh#(`UruVC;NzLe>bL$78wZg0+ZvyQ@h>_#iI z=*COxb4a;vMibo{XHB29e`~3zQ|J4DrG50Wxoh_)Z2*I(_>ISnWwmEmBtjDpSc{Mh zw8N3gd&)c(*XzziDO_(r$mJpU-T{)(TxdV|D8P?|-7rU$sY+ba8?-RN5JzDo$}T^n z%oBmA=J8NwZ4qBsf4|%B~jXh+VY3{Y}}*#FV82& zU_WaAe!P1BpUnJBKUt6^`fiCxYc#68;pe3+xE!xQ2P8!VI906YM|^x%91jner(2w^ zPq-}4IA32-O2N&|4L&ZBdWeEH@rZjQGAfOTCuGp{HU@N+-==dr8{UcP$9G#&7h zAO1E@rzbpI?=aWNok=r_sY)faVu-cJ5sRWqf1Qal8+l&H)n(~8N;$GHR-p|LNpeKM zB3Q9E;|2+V3TlPmCOv?Q3A#jfcI1ui7~%v_D(DMKZI8K_^-m|5znc zHn9O*$qymfv3*njEDUo#dKcf@4q%f`)O_K%)jpdHy7M0)KQ0YSf5KA6ESxq7T8Che zC+6vdEjpKr0mvN=Cnw5}8fn>^Q!*yS5Q%Us2)Ghwr$~$kK$V33_XLpa_^>ZN02EE8 zl*BB8;>SuH{WU33bJ_^?iiHj`T7Utk79BC*Fgm5S>sinFh>5xSbwgKO*Q~M+e%#0G z^s)C{JGd(3ybxdo|ISW`DM{Xb13vwNlmM;<$_ITrGC6-OJO_SvZpfY&nP|+<<)8R5 zc`WHip<1&2{nz?4!0rLK|55M%lbWB%`2TjnTtu;A#ZT}JzWkY=!S}!TIV{TsfTENc zzyISO;+t=NjN7{-mi1dq(-GI@jCnd@Dihwn|A6%h{JFpI^C$vb*9$&9{}jjh7SETD zxIcc@dTBsW$^nP@7N^S-9-ls7ofhC;@y+u`+$=LbTizybGZ|X)8bRS~|E!C8<sCp`bE7`Ny#14f1kuFwb zMEw6|Xf(!h&stgOwKb?z2t)F%%adXhmS5*bCrJ^<5WII$Fwm8-V-Pb;Chr9GQsO0h zr(x|AFb0o_9Yt8FV$d!og=|Jvm|rX!GX5CI5(2ne9qYizB+#2G5j`AWEAgyRFb1+y zU{!5dVMg16bZzjSS>vGB2+TKS>A@A5?1}nmb@8c#$4rm32t(vRB(ZNM4hIg=okU|T zgg#oVI_u}MfAAvy=zJ=Q+mS~f@C)4)07pXKSxzbFpy6^gyU%cYH{lMfO9&c{HM6Cl`1tLQagZ68^BMQo zBSa^t0&fbhK)c~I#nXFnfjv}lCE1#^z?sAhCBqdrls<0GqlgVLk*e-8x#2Z1!I}lY ztdr-I!Dc2LmJj|7+!x0Tg!5<(O&K;lr!33vsoB3)C@7%{0Voca3G;cvdbbjAVWud{~U7($3WpMZg6(AI5fL$7g<&2t1YJ|+Srbp;}* zgk30dC>oWB6o2>q>INZ$kTKjaAS|Pug!k)T2``Qn7{H9co}=S4supydoIp-zO_LX% zv~->(kDE{7yStwE-0x>cW&6WmjArn>G1&^sfYykSCKthtM#C4lqz(2s8;7OEAcY@8g+a12(em{k+)I$lRnnhSMoP z4r4%DmsR8mF;j}|x)W{##z29Y*hUy=8{~n&V2T31_Ot7`>;sDoievBMv_}%Z262Xw z%sJlud3~;$90S?Wal}jHO#RV-)*u6ag7afXP^9|teQVS3rr-zP{~lhhAMkW~kGFSU z0RU=Uu+%Hodd9=s1Ag+8NBs0B-{R}Gx4&#+#cjaF}kf zu2(<`F6S$L_@m!z4KJUrxWkNt3hwp3tBbDmHGqsOBIU-5!C988(GnJgSLfcMhnzW# z;!YHM=S1j!kG#$H_#9?|Z>QPm>>$7Y<{d?e69 ztYM?T$&Vy=Y^nwGX~LZb21rKS6QSvfG9gSDq zVmndeC^(~S2jbr10@}N~2j9D43IvawJCrQ|0}ZHWR6%_|^KoI0HI0xveovmb3|DB~ z7@18ex`#&?G)t_NXvpAdL;ZAr{w|)GJ^Zx3r$9({d-8!)p_pLX zt_~TQy8qiNl#PcQ%M3uz{~NO7ZwKMruW|gb4bmTGUVBp=kVyVpUb*Lw{Fr~`pMM?m z8;=ex4{Mfr#ZTV<5ckJ-_~PC7QS}Pdio zfOmJ_!*RaHVLIaDrw{n;-~COzeRzk5`?olq&sbj;e63$#GG%R<#;$4IKcnLSIHR%= zF@dpnxEWGcDM5bexR)AOK!*50C_BYscLmzXc0kShHIlZ>QAJPost23BLm z8@|#6DMCVoyk$0cq~alFgkr_pxBwja_lovybf-fA80Dwio{!7dem-Auj0OS|@i#9JGz4&^raFj~w9_x;a19K2f^f z0HN~^GB|8@S<>dDoFxa%0bF0r@3a3XEh{C1ldLdSA;*dLH%LPddZnSTgHN+LMARr7 zaS9R-29ROCl73CP)Wnr!)r32e{YyK)ccakS@8f4=KSHXsWC z=9lL)-k$I9i1&E@_zcw*3PlxQSr&Zt)z`SLFZle6x0vP$^Nr%e`zO@8;{E%Nc>C}c zPxuB^e+q%%c)Y<6e(-(V-M+=UhcEE?XP@KSkKf|yn-91@-C%-X)z;2I08D7FGZ2*4 z4OL3Wr27G#fhk-a#ZLqt(3&;+v6gaK>ETQw`1hLGa3F63t1V$Uh@U2Lolgxnj8(q0xt z?Gp_c7V`}KC4En_MRLW%=0)PVl+%?+7kjr+mi?mWu1<3{!~%J} z*_LF3>ije61_Q8r3BUvH->|6@G=3jrCrt#@{Ru&9$>Bv8!h=Z|a%;a}G!Wx+T0=@S z+mBvw-kXfy^Gw}INCdVAky8?%neorTmW_uw5Oj!hZAB_yy@Q<%{G>Ec*#d`*kF#B9 zJR=^hid7S*XPiI$WZE;^Nzxa8FqkoCmvaG=3fO&a>~YwcY@ha@^@p3&pZ>i5Grv3E z;~sZ_0`*fx)rxP+N8Eq?7C-mZ&*Ay}0aH;xD%Q2)^t|A+ckiIG;PK-#rrQO_!x8PE z0VvYm#q;syhq$g!c)0xn-}~xk@Wtm};zz&zJ9v6}#&kTO94B0_m)54C09Y0rZ*Q?& zR$SLJW}Q$M#f%AubsB`LqUDX4+k!TK>!)K)*NkaN^2|H*sD-vLd$5ryGXbX=wA0trzv+ym|HP5E657Qf= zudq zpY^?8rDC<0(I#56f*toxO|R#kZ8E~HXx14`KXV@8zykeqbzriq8WV!|UE6?oW0~0h z{+V)gO*d5YVL5ce0Rq+ZlVfGR6(+KBkH8)rcPd%J-3PB-5oQF`C`PR23E zM0-YE_Cx7TQT5$vteTeXd3FAm>BYQvbajBSSEEKg)x<)cD?=UlkTwZ zyYAn*>JxHGB+be1Oua-1cnV+Q5N^X%qrOOvgywmr(`nf-S9`{&j}veoc0&Z~ia-7N zWBkl_^#&^{CMkH46Ha#v?j9cS_T4=`z5EnKCOq7Hj>~$&H$QogHxKVH->y(Cc)0lz zKl<_S;@#VOeE)kt!0GY{f(eKD7Vqx9hv&;je0uo_*1F>1_H%siXMcd-{GDINS6_V( z_qT6wy1ZbXCP)F+x}s`r)rHRsYOPr6ilZJdOM4|vD8}pqxo$8+4}hDADiqRRJL0z7 zz3*;J=y;3o_sSN_J?M%=dTvATYm8;yNHHbPAcCR|9A(%y)$yb0KMnlxw;q}Kj`L&> z5PNQvDTodPxXK7dYKlsD*By->cT_6A1e*!H)ykbJ)Mn&RuA_kaVxn0>VLuRKD)?X@<$GUlDWLLkm$FP6m|~H zcov~ri@bB-hqF#HxM$i&-cp)pN^gkBx5=A>7pinj$)eja@7AH|KvRCsKlIW&r5j1GhXf&{NT_00N3>i%X-D_ z;T;}sKEuoP6AES=54X6zKj72L2OQ^H+}#%3-QMGJx!`wy?|1O#;T~Up{#93K6>smq zhCpz-JmT^EEr3tBIUaDnyx{Kc2q_nwmld@Ff*C*k@egsYcX+4oP%kTF4TP zw?Lg*I|XQr>eir8y9A32MDam4G93{5b=IGY=9+*OeHzLmuhRQmZ8V2c z^hc83A+)&#UHw0nRP5~@)ZkW)8TEy@uk5)|W||bMR9wm>d5ktu_uc`DfH9U-;sZuE zF>O=c!3&b-m-c=5Y>X^)U>J*tO2!S1bi5}k-Hq)Pi?K+OCmw7JcI!VchLGc61~j2X4uQ3X19Q^nnQy*i1}9P+E5Qmh=(pk^m|JveX$V z_%5BSGLHntjt5kZ0%{5xWga9BX5BKbcz-$hh%xoQ((Omc&$GX`^1(P=+QwvWUudq$$5vMD5?aJ7Ea4T5 z{x}K6&?=yJT062mQ1Zmc(~2lq-z%l(O3Y%EylJB>KaiE1Xo({Po99lXC4Q0YC7V$vJ`sAJa5&2; z7FBwDETbFuHTKNs;yh8aL$FJ_PIDR0K1PN$r6_$B1E|YJMG8V771sGANZ-m%)Fo?#W3^xZi7$s+8e5 zfN5@~GWM9-x^+#T81EEY@8)V2_yn;zG(-E+X(kHP;7zBGARny~gL*-VBAh0Qm_-!N z&@`>kogU)ZjP#tjIS+CdQfN3~s!^n4eCA+=1S?w`W4Jh3ap%-@rY7q~6AfnlZn(n? zRWUY=mf;%rA57jxN9<33{*XTwwGxuW_V+vict1Vi?H6C5>IDzCU*KkbK-Cqe>qn?6 zK74q@$8SI2=Jo)Y3PdK9QlO}Kc(}vU;}bsn{4Kux>I*zQJ>fTh?_Xk`j<~rwV44dc z6@nShA1lh##QgooZ*e`n052=rpG`4YGOhEdGo^&<5u_lkPZ? zTR!QatyDXnwnism=u_m2j?2>+NraT5X*uV`D1!m)GRB4#aW4gjx!iN8y{F>6ahX_dP2j+eA0m8JK5qs?r)KR{#^j zsfpE*gCUaF%RZbp#2vx*sAq=e5h+(^h#nD0=;(4AdEsht_Ccu~2|J0{P-FvBVbKEg ztr%ON#OZ{#qG%$7A6F)wPe;_mhx!`F_Hh!9B#|4>^E7{%=;^;vdz|5$@xe*QnR5_) zI2KUp-aj_Ad`tc(}v;&1aa(5zBgoqT+nI z;N{aZ&fk8*o!(%nSKQ18RIIoxC(LEWBr~q-2``sVD41|v7C;oYcSlIMLZ^y1w_oD^ z<{d7V3!YEUczJojPrvyw=5@wr*Eg8B?wGhhDQaN}>DefThckvbT{zPh-JA1JbpMnh zRx${K=N>u8lCH2Su9M>V_<~!#!Ca#mX6ijjx`?0Q)gS#L%MHm8k}Z!ws;R*2B5^`^ z@^t#cEV2|Hy7)x-6($ZcC>JTHK@{K6nxC7)BYrd@q#p>3ishI{^gWCA3hI2oxfmh= zyQ2D$NS5}o&psJJ3Ggvub_P)W-wMHs)vHV4CXb93RTw4E$!th8$h1?B7>>tm!c!J$ zxqsCfrA7}cj_}wqujED1pkdswGoRqX_E#lfy1^1IwgG07ky66_xv-Iz5Eec9Qh6*!MJQ7BS2QZIbNW&V7X5r}9$7Ea? zsPy;26~)KfCp@foxRFEa#U(v*m0UqMcmfU8HU;q4n)qC(Y?pPNDRIrR6YU$EOl=H* zl?^E=dY+4>DOJBj0@Sz)EwTO~I*|1=MN&Y<%W2GDD@V^l&#D{A)Rd8`gM__aZ^us0 zMcfz1KO=OdBU5BuJFs2LQR}p?Dwu(Y_ObIq-mo&*rSG^u)y7aKiUyxL7!tGymIJ+L zKM>r*kYJ=ffvC<4DThw^%C0nw^?jh=OHc4l$aaXN3`SqaXbUs9&m-0lI%^Ax2dDu9 z({?ba%&m&ujn=+_3B1^xXlxilOk5RZ&+Xq@pUphNo=5iN<|g*9B{1wCW@1e z$SFC}*M!TrbEkX#fPLJBKH$W}U#%Lx1H2Rbyr)PDY)#J(c|4+_Q`Ip!D`5(>i(dV;Iekq_Zm;EgHg@ zk7m73mh<6gZqX1?GZ^$h09j_nOSXq(CwVIxjk1j8XUE09SBlIxv|^?`x8Fc|4$>)+ zR|W^UNE^hQMnjYm^eMSJMVM02f{Z(yI1=!VC;pf!fYK`%d|pDYj}n{aHh(B|#1^FZ zkt6qw5WZ_bR+4{rRWjn~?)0UqY`YecS~+AW+8iF)e5vugoyFzcp%MAnr90G#?H%?v zyQ;h1*Pf9c%?;hRZMzeENCst)-BFImzp?p_IDA_}VNpbig!MEOJF%6$ecH<pVS8`_D zIVLpKsW+4*KHJl{o|qe;)C`|TFvW1N0$RW?wI+xcG(uAhQu?Z;1FW?WHHVruTC2P^ zT?mbzpJ!VmHR$UF0j`+y(b;B86Yr|anB6--m?1g1fq`5`q9IGp^BExSI;K9kh-?{6 z?Pq+8T}-6-T$Q40?98S1cmrJb%3?%*j5jORae~96`*(}1SW$s0kf|9*ZXd(9m4LcV z-NpsQ^I4tdD#$sb)I4Eq)U``gqhmJW#(IhEj5gMLi*=rtDa%GjCB8Cn&s^cam=#I# za(sX|>7bH}M0z1doeqjkCuklvbjB{{Y%pqqY&u*|yrcar)^gM0)kHz>xP`sCL3mA8 zT@{Y@5JMpoZ1>3~=^qJ&hpcnPI6QzpzemUapa)%;< zMHHW=7vN#W-4R&z8MAy2RN#0x;P-#>`4>=;+OfuC#X%>mI-_0`C@T&+VObTpRve(1?9AH9I@`_NvtX$Z07B>1C zb7D_dB59d{Q-D3Qn-)Ol4esBw_f+9Ucu9y82aWzTkUD~dEnRV=#VATt19K}AJHfwX4VHXF(B zFdg+og4qAjT`1KKFob1-;KJc70}*FPQx z`c4q^M|~B~rovhOvd8 zMNlhnK*4dYI8L>xyCS$&#Z`exfWu+JbycjF>P%&V&5b1`p~p~sle8+t-cBYt7n3M% z=87VU^HQ*?g|LO5U_0495^Z@no|BZ4GsYZ~p}NBxmXepU12SxVj=cywYL8rnS7yoB zpkoVxtYK0%_I;3+Jiv9w$`zYuQ`cUh3F@p+}_J#Z{DmJA7=RISf(<25N&O z(N3yY1y(4orMg1!NT3u9u^R{AE+(eGC__ELWkxY3Ek+yTO)i$;y*H{W;DrkIDckq1 zFdf1Py5nR$>5B7&(#;IcUi1ou;#Lk=bVYHUELgArs+ci%5L!L0YjR!&&U(SruQ}n2 zii#tSU@+DUl>(j)05USf+e{JFC_oKZl>2Wb8*K~{j!=^&!Ky1%fl0>7J?8nrDcgX! zoxka)YQ=&DGY%-IsUXWWW$J3&K;0I@kQV<}1~?p<%iuIs<+CjvBZm52QMNsY@xT80 z*%2ZCzxIN(*??2@}SiNJoZ|h zq^?rcnF(f7HbqNQdLBtKJ*#Q%>G1~LQgDck+$hWH;62kqQ7qBi8b@kDSxc%=^*k_R z72{3XNz?6>6qcg+v(za2m{qjfowda^F*%p4b2`UneVaAJZH2i8&L4+`CoH+AaB9fhrQK2J4%%Lph?n7T-(;G3Jz3sMLP+ zu4J&3# zp(W!u88b$|v+;?Mr0sLgB3Na|COgiwfJIR4$nMUuX&nMa7k1u!Qt~dXEdZ?8P*BD_ zZ2cB6b~G#_I~o8O4J?8aRo4SXx5IF;b$74*{|KIW29hisf#k#cdJw*R&<-WX#Q&Ao zAN8-#3ukaO{w}Hvm%jIa$J+3^FSxV?BEXphJ6G(r;nVAadO73$vEh2V?nJpu!7f0d1|sU7 zGyzr<&SQI$ql6xrJ#g^g(Lt&V^;#$O3|v$ox)3}TuXVH#7!!HaO_ly7xN)dSew|S zdZj$hW44SU2jz`n5?~P*cR;-L`G{5crE(3(R;m7`URB$|AwW3HFKLnojorebQn`Cp z?BM6r&XM*I=qlKr2~f>dcxV8DL!GQpTfoYg&};M@I+^0`XW%;(Wfaq%!y|39`NVJlpnf)ucnE&0JOg7{ z*V2F{A-1VQ;+S6c*@H zu+fH!1siV=($RD;@l_tU$%+$IJh0-0&bZ1A4Gllwb!?RaH@V}46LvJb$sHoV59I|F z1q}^#c%p7{#|3A6m$!cO8@=>8kFw&GUIyEY-4XFfRvtpvq3_T=VC=#uL?{VhKM&im zsS=-dmFGJccWh|VKmguk!wCy6v~(ae3}70bNFnJ*!o{8?+B~j91EZqXt=zETgls?iP@(1?-%=`!K{Es24 z|K9$o2aB1(%mHjM7Ek|XaADL|aBe3Q02dHyZP-scUP}d|U~j-rpZ^5@1nl=akf_<+^2;GhSSAPHhDEsL*f@n2&%c_SWD?%=Gh> z&ub9o#zEvzlcKIKZ#jbHxQ@ELlY>zPD2^Vl0Cwgnv%|C%j3nM3po6IkS~WP;+U5?r zA_du)5`gk;M}Z$8lzmWMfahXE|ZT4uJ5T?ceL~L$^RGnM})r9H9S`O&tkBaTF|&J%?qEfw7wWb zjHL)r7z-+7Av~zyrM}`M3r;7(`gQ}aI~E9N14L9Rf^vv4<-7R z*M^1*od&pS*rlNo;U+6Y1aI;{kp(Yw!AT+xdABnrF;Sj@Ge)JamG%Jl~;U~Hvob&PWTa@@g`Rk6tMLAVmH2H zp#qT|7$9oJ)?>72!Ny&No&X3Mng|}U;T0D%T5{o2kFD(s#Awp6jYI_juu#P+8-ADT zSPj9u-0=mU@FQMPQ1Ol%9$4`sodLnv+AR2li*xOu2LYQGwG0ryLvY0ntL*qfpTQ!y zV+GJ__`S-dpS=s`d4NSV;Qz;Sg4Zx>t(FwqdP|TKe~8#CB??`BJ&p=VHRfJxKl0DmLzj=X~C= zaTj;^`|?bM`=A9eDID zq)|*WbM!~qU}Bb69HE4*pk(3G)Q~uM3I#{iy&ePi&8sl?!TJ)va7}8u)8>iYLnhNb z1V|C{tUMd{d^*d7jqKfF_H@4J$#a$JEYpkh8(T)r)YW53Bp4wSL6dst^pO$R4^Zc& zI3oC;s&@PG*fKi!3qH9_K;tnJupK0zG*RFcSae*WszB-oLk$@3ltI+twNfx@Udi#$ z66Qh2!p4(57L{W*s1lhL+6(qoTuaYEkWuDi+Kipue}{m|h{(s9=(EP}&%AaIS#91K z9k4)v4J#h9;(--A3x1|gc#|vs%HOcygkR_fTyVleR{RV98_qc4AMhu9<#+r*7qBoI zc90N$lkd36iUlY9L-_(i_f~aKyJ45^f!bt6rHUWq74LY5fY2bg$_)VF6JAh+@Q@8B zuGq2Sjt!saj9qqY*m2<(?6i*d*gVLrutb1HGO`j2s>yvpL&I-)!=1awtWPuHce$cK z@H2kEgElPVJ`vy@H~c2w@N@Z$h8u*#0N;raW77gQ-| z)UeBrM!*Rb4Q*_h6CPM`!h$y9vsUc*hBthom*Lv(VNF@N8Y0e?#sv5JB9wo_OI&$9$SQ+R~2+ER5}W5O;EI+-B2PMF+de3Vh~+` zodE96(;bYqGhXU~(tySzjkfeUSW+8M3Wy5o(gDq-_N<(3ltQS~GlS05uyMu8gvMQV z6fkfG?vH-GPV~kFJ5%>i6(ez+D&tfbI~QzRP?`q5_h%Cr+g?zXk=QLj6JTqEWmv$i z6}((_umIOb>066AP@*qREV%%LaKvC8My;j+=D{Onf)`OShD@a(2}LD8yXy6N8#F0e zGS3UE)jBkS26x9JbL@A-XT|LhNwQY!bD2Vm4!7vivbLjV;pmgf{6H=^#`jMmQvzlZ zXOQ4giS2py=%7r4x5Bp)pSvas1B)#E@-c2bcgp%cew<@&p25lNLG!^Hz6jf=;rPfy zgS>E3`1V|iTXfkOLQndTK$+1n3=m9|@nnuBu&4pgqm8(BvFfsAs475{$rDCMj+nfz zabz(UE#5SNM+IqvCT2yIv#DSiy0iC7J&qo8B*FPL*J&ba&@tUGQY=0#BjG4LZ0;mv z_zwQ`0ARn6AV!-eOAO2jEC!J#u$#svPq+Xnz~06q*?U9irG7SPc%`!^EsfyqD{lBM zcRcXGPxykb@(q9GHxw-Rr}6_T2u*hUtNaDbf`2GKVa0}3HdOkAhpgDaxZ;Mt@>iU3 z!H;yt85Iv+@g@(D02ex;pyGx*-sO&e#xJS5%Zi0BxXYuL@!=C5xOXp-u+8gAJ6NRe^aNnPV#B}F@AysL@QO>{!V|(*xubya zU+8CCvEp5BxS)Ic9`wM!;;;CDUO>e7t9-{Iueeabf@06@I(Ww&ciga{NWm-401>{) zJ5D&^LJO8r%dMf|E4|}YUM%(s1Z>#wj%x>+AZ)VsEm0~s^BE-FtM!H(8hU-oeZ*j0 z@i3a?u_bJx7JcjNKjt;*Q=>`XZ`G-q!Bea+$^6I2>hG=56}Jav)b->MhqaLO0Q0@| zIHuDA5E%EpnL<8&s;EME+*hCoTI*uuTnL37T$M&>0>}=^c6x1SkyDxY>wXwBFW2-S2 zj1wVjt%EA6zV9d_kfq?p|rMa|*ekixnh5kZbAd+V>O z2F)xqXU>qWIa6%>7=(U^iqD=KLIN9R)hh7P{%K3V4%C&g~4UQE6*c^C!caf~(T; zAe2TiE)kzT@iAitzCOi}B4}0X^~?arfzvbjre2lkv5B`k-95iIy@EF*r&RkKh|;Ff zpVKqUyQ97GXPd7l0Iy?+hmX}tP~=c{n>#&=GkSL-?N~_*1BfBwYpPd90o5u$ANL&9 z3kL&{(L)vIGpY{-$;s@RX-E22u_}NV>>kiv7$`h0G#Vu~zKK30le8I@`d%|K4Pg1R zcHVlqA6y{N@;HnQJAR{Yc*g^uamKq`@vFR{$b$b{`KbdH?6}Gm4B&(lPEzqr-nvrf z9p7-pO;%iS1rg&jUhtVtxXBgY<$ z!*Asqe#Li`Uda(Ggx`nf?4R*7zTyqPNQV+3h3Oq-X?4J9^-0@BaS{+=mFcyog=s`^#EER%K0q?!# zeXm&e72DPWz?Y?>l%DFzjZq5$h0yk~1tw)0QQc!A4I;@M%}HpR044aR6xP$ zT(IxGAG_A1qVCZm>KTT$jMVi4Tuu!v!1w!t^TOC#7iNutojc%y0Ie02B52Z6(jR-l z)<*p(7N7{$z2Hi1gl#G)QE?W(iK7F4${b0GFzo8o^sIf_(t798e=wzTVGc) z$rqJp)ZKOzz;I!gy+kTNFx^La92c%)U?*$!!!81{;7tH3XbhRWb86MOzKc>8fuhgHH}`qt5JR-C?>sb#g3|_7l^RQ zhKH=U$%fzQJI+|JV#OP7U?Kd8UeToCh6gs>amER|2o@B)tXsLEg0RR5tL%8t1DiDLVBE?T>)2NNXZ(yW z@(I7o4OcwyPxK@1xZ&#6)+k~xgcQ7#oZO?v&Qc4&2EU2~g z{ls;6sY*eu6(WLt>xDs2wPM{E8w-}wH_Qrvwl}n$AUk(-KaxcWKodscQE;yG0Qge- zIdg4nEv#Dsfjgi=_g-C29o!UjfOX&cR^C#&ka%nb=hDDjdXPT4hmIS%M~X|2+iEiE zkq}UN+xuR?Ck)`_;?L6V$J`1DP`aXH@)!yiSHnuD2|P?hqn@$;U2=o?-&CkFDuanQ z$=fCXwG}LnipP(MlD&_T2}(V62Ju4en(U+Umz9{%YsEcUDJn_JN$B4xcviP;GhT`= zwei`qx}vuANww{dL$;R#mXx0m3dmUB0QX1$s8ZcSK$B96UIJCVls5_^h{>*k(3z3i z&vEGwa~|qJp#x}4P7}p90`I?jFP;=(aJ1|58Z`0&Tq&^9V8jTFp2cltz3=@c;Bbg9 z%}4+^vgnx)V- z(7{#mDvmZRo!;u9#dQn(AIe9l!6jqz0%wPTMxI6H8RKoIM9Wha{b_ixl;*&=$%Dk32>G(HreqjzTrkU z{Fy%EH(v3OhMgWb@hjft)-&w5;=kcnG-@c+1JXD2ZN&>NxXJ_XxZ@jc_(?vYO2u#G zE8gilE_^|e1z+(%6~ddWATIc&yh5a4ZG;=vUY=7LzSF&zJZP`@E?==@$4U7^ojvc*Ck~+ZJ6+g)tx3=}VSW@s` z%U|%08;A%yZ8*z2Qehz=1fHZ_PqzywZ=FR(8fW}QUK;&v!&GqjRl1T zG!jUK1-v)ZQw3NcV6%)#I@$udoPV54~x41r-BkT{6z z5CpG<`J5_DTxN|jnp3c$K*i->v~``7J8_h41i;1&GNZn!fSY(b9cYY{U-kS9Z%^b8 zc5OLnvK;>sb*=#ben5f0n&7>&ETP`B4~^dhxp@VE_4Ee@hkm~cUi! zK(LCSaRFn;0~>zi&v=&=8$EEVR}^Y^Ya8D2z(PPp!FRsmJKfM&(4^u_1d-PLH?-q- zJWx>4Sa2TzPtXf{{tNvD-^%a!%nJ$=uDD~99^JGF@C$v$E)C!J4OJSpvVo<5@g2AF zzz_Q;{1x9J!Z=Z{7j-KSG-iCqiVL6cnO||`2mZgyzoW^HMP49Gcq=#5;bq%Iz-7aO zR{XO630JzIl{+3npnb(wH+(POz-7lt7QEA~dxrLxelHp}thm<)KH~!BQJ9t(SGhq5 z_#JN`=_NlPgrC}H6asFvVW%CR`Gge@oaBsm-0|1tckB@Sx%~tY!sm9uN*iwFjy9Yi z_qO7#+_07nMS8u!*ZqPEp8)Qlh2u#8>IsS@I~yM)iBBc|XI57t;E&>@p6COW4?X#f zjjnIYir-(ZXe6j0oOr>77rgKZm$vjeh=qb@D;uG@MX10^!m&9EMEaqwLZ}5D9PPb= zYw4v#(AG8p7NIrn!S3iDng)Ta-0MWOu?JZgTibdew!IfQYYcGf8-cv?s7~Fp1ZnT3 z%LHU@OQOELr$K4E#uy3VbQ*j6+=Ju`F?J^0_I^z*{Vc@$UPtVegE9-e6?mN&bL04y z5s$?v!&2+QJ_t>qmuwgwtyl!Iw;x;pYVpHrx`)*4Ea5x=+d;+b?IH0DzUahCmNF4! z@g|JU%-b@8q^<4(nN&U;0y=9S!Nde^Hh+`~pDk@Tc$ln{kL165)*_dA9_3sD-Llfs zw$riYv}W<$7)Ox;k_e#ac)b8rhQ~!0gwoG`wR$=X6y*A4uDo4otHRW;djgq*oCp(q z++vvghz{Mum8-Bj*eAHVUV*fi=y0$-I}-Ko?rjPHSm{Ir*^`p#VuBq<5(!_3Ews|q zG{$E`PeNLb*933hQ$-M(pg=zYpS@JKG-QMrOD8^ZuU9OB8xs{Sd;)0=EVF0)SR4u4 zFy67~iALztGhb$yKS6ZhhO1m@sOO4VfW`(Yn>1X@9ar4(1+Nh7_;2-Be3Lt9gpv2& zRJ`&D%nd76Jn9V>IfJ>PFrn2Ag)1Jd;ah#jxiD_@Ky3?ld0;Oa&Q$T%ZurhC?zH19 z7gQ0fw1NO^)a$obskrdTKz)^pM_KXL@;h4Dv2dTexAKm+)&OEuDfj^|SeSrqu~?>i zx#LwX_+IX)TL(I;Fn-!U<9d0=_i_a@&_rcq@0@$^&O9IPVMoy#5KT?AU0>tv-7E8Lu5|NW*W-cigbzm+ePfwgunIiYq^G zt#@3pVx@+ScC4orTzjl`;ROpXxGjt-4^*}?sVL(#3@yrP^hUjwpZbf6{VSLmP%ttV zNfX<$V6RhbOT(i!GtAf8ur1Abb0mb70k*!Z7kt@YaF(Ul`bw;( zm_@+N%QJM41uXRFXPXtNy(UXz6eesZM&pLlRzVw~)Zsls9UbU<;EfnuU_rk!iZX6s zv}HrBgqOW^05&G141qGjzOXU(bZ9Cl(vPTV+)x+p72a!~u+|7=>B0E>PT09ygqsvR zZqY?3SX&Qb_eF@Numh#Ea@4Q(9snIfBsO6memow zR2kt#a7N~yjfYP>QHdt~?TDMWMI~`;KHuI_=x;&<&LDnSggUU)XRR%xxc3=ek+=p) z8HWRtRC#It5(0J9;M+!n0u3mQH&*j1&;6-bT2%L{_ zC0gwRfFF+g@c!$3_OYmp>A8_a<0Jv1UOh)B@r|BWN%;q zGAD%zbqBVUaeujE;~kg1XXZW119#rAFym``$9B4+5wJ?@VUTDzqW}!7D`Tq+rk=TV zrE3pkK|fcQ0laSGj6!Ny+6muJ@7QUFpkWc9>}PDJ4e!{n0(b@CECgZ3_7FVehI6Y} zOM}#gE4`yJaKet-Di*1Duix-~?%#J>E?64C*l=UU`+4md_Kmj!FP_;LhD4LR@?1 zX1$?OLv4i1b-}&e@%C~BGojIr2ExAgU8d`@VaJYBBgoqDwY}qd+HjK_-pbnJt4iw_ zp$b|7b}A5TAlkCrQPp9$X7adkKH6M7t@_bYiYP$R{Xx)@WbPbmvzCy1@p-sEZuX}8e?w_ zTWi=`!$NNhmJ^|t6Ey8s_KH#&r4eXf@CgMcS+GgNTDFclTY)s7l?HxokkTu`_w1&g z71+vx>#}37f`z;qxWfsntDXm_qAKY4l5mm}DiwUD zPk5~t)TN-7g1S`bDffzoGvrkb5lq@7jHB|w*fw$@?ZKuY{$VVxKf*y#7nspg7qo+( z96!K=Cqp?}v0|1%b%VyM*GcFM-VpVS1w`3BSE`YdFD4ixxw*VvGt}vmEfj&db=Xc!n5H?**AZN$ zxt_>n#yFD??eP9^@q{Feq^GCP)HSDjM*vN8^BSHI0@fE4lv+^AGLnmm$(T}TRL~CK zGtk{=r>~s`R5$wy3bp@`M4XqKD zGl2?&m%X1>(h7D$KV<}ha_VIomAepdL#`~9V zAdLMB>a`_Ro;2yTy%qqCfa~(s9UH>|P|($F13*;u9)ai` zpw;e1=x4}tQ1 zV6p5gptg$BdctMB;M5jW?m>C6jtp7^8^e7`gjx%hvY?y_F6R?!sUvMV3e_mC1p&SI z_fhDDlxrg*aYD2}>=_KqTEu8#fY)64U{U}9l9&RL)W7HhPz4Y%U?xqE52HZWGF@e| zfAXlP$3g;y#wrG6W_eKP;tXeTB7ygkSHSpDnOGbX1aRV08Gzc6=bma~Q&^6X!?=Sw zeP-&-s4G62#yIpDahZ%Hd_H0pW-2>i;|d8D(<80clU_T`t%0A>F{{(2YiM@`FI|+9 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%0AN&!1+@9dv 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/test_tower_gun.png images/test_tower_slot.png images/fire_totem.png + Levels/Level1/map.png + Levels/Level1/level.json \ No newline at end of file diff --git a/Utilities/Resources/pixmap_loader.cpp b/Utilities/Resources/pixmap_loader.cpp index 50f393d..db3e2ad 100644 --- a/Utilities/Resources/pixmap_loader.cpp +++ b/Utilities/Resources/pixmap_loader.cpp @@ -1,7 +1,8 @@ -#include "pixmap_loader.h" - #include +#include "constants.h" +#include "pixmap_loader.h" + using P = PixmapLoader::Pixmaps; QPixmap* P::kBackground; @@ -10,6 +11,7 @@ QPixmap* P::kTestMob; QPixmap* P::kTestTower; QPixmap* P::kTestTowerGun; QPixmap* P::kTestTowerSlot; +std::vector P::kLevelMaps; QPixmap* P::kFireTotemAnimations; std::vector P::kFireTotemIdle; @@ -23,7 +25,11 @@ void PixmapLoader::LoadPixmaps() { P::kTestTower = new QPixmap(":images/test_tower.png"); P::kTestTowerGun = new QPixmap(":images/test_tower_gun.png"); P::kTestTowerSlot = new QPixmap(":images/test_tower_slot.png"); - + for (int i = 1; i <= LevelData::kLevelsCount; ++i) { + P::kLevelMaps.push_back(new QPixmap(":Levels/Level" + + QString::number(i) + + "/map.png")); + } LoadFireTotemAnimations(); } diff --git a/Utilities/Resources/pixmap_loader.h b/Utilities/Resources/pixmap_loader.h index dd8eb75..349bd80 100644 --- a/Utilities/Resources/pixmap_loader.h +++ b/Utilities/Resources/pixmap_loader.h @@ -17,6 +17,7 @@ class PixmapLoader { static QPixmap* kTestTower; static QPixmap* kTestTowerGun; static QPixmap* kTestTowerSlot; + static std::vector kLevelMaps; // For animations test static QPixmap* kFireTotemAnimations; diff --git a/Utilities/route.cpp b/Utilities/route.cpp index e0f491c..b572fcc 100644 --- a/Utilities/route.cpp +++ b/Utilities/route.cpp @@ -35,4 +35,3 @@ VectorF Route::GetStart() const { void Route::RemoveEntity(Entity* entity) { entity_indexes_.erase(entity); } - diff --git a/Utilities/route.h b/Utilities/route.h index f6ce593..533250f 100644 --- a/Utilities/route.h +++ b/Utilities/route.h @@ -1,15 +1,16 @@ #pragma once -#include "../GameObjects/BasicObjects/Interface/entity.h" -#include "../Utilities/vector_f.h" -#include + #include #include -static constexpr qreal kThreshold = 2; +#include "GameObjects/BasicObjects/Interface/entity.h" +#include "Utilities/vector_f.h" + +static constexpr qreal kThreshold = 5; class Route { public: - explicit Route(const std::vector& points) : + explicit Route(const std::vector& points) : points_(points) {} void Move(Entity* entity, qreal distance); void AddEntity(Entity* entity); @@ -19,6 +20,6 @@ class Route { private: void ChooseIndex(Entity* entity); - std::vector points_; + std::vector points_; std::map entity_indexes_{}; }; diff --git a/Utilities/time.cpp b/Utilities/time.cpp index d0c7b9a..30864e8 100644 --- a/Utilities/time.cpp +++ b/Utilities/time.cpp @@ -62,6 +62,18 @@ Time operator*(int lhs, const Time& rhs) { return rhs * lhs; } +Time Time::operator*(double rhs) const { + return Time(ms_ * rhs); +} + +Time Time::operator*=(double rhs) const { + return Time(ms_ * rhs); +} + +Time operator*(double lhs, const Time& rhs) { + return Time(rhs.ms_ * lhs); +} + Time operator "" _ms(unsigned long long int ms) { // NOLINT return Time(ms); } diff --git a/Utilities/time.h b/Utilities/time.h index dd2ddec..263ea50 100644 --- a/Utilities/time.h +++ b/Utilities/time.h @@ -18,11 +18,13 @@ class Time { // there is no check for negative time Time operator-(const Time& rhs) const; Time operator*(int rhs) const; - + Time operator*(double rhs) const; Time& operator+=(const Time& rhs); Time& operator-=(const Time& rhs); Time& operator*=(int rhs); + Time operator*=(double rhs) const; friend Time operator*(int lhs, const Time& rhs); + friend Time operator*(double lhs, const Time& rhs); Time& operator-(); @@ -31,6 +33,7 @@ class Time { }; Time operator*(int lhs, const Time& rhs); +Time operator*(double lhs, const Time& rhs); // cpplint говорит, что unsigned long long int(Тип из си) нужно поменять на // int16/int32/int64...(тип из C++), но в документации к пользовательским diff --git a/Utilities/utility.cpp b/Utilities/utility.cpp new file mode 100644 index 0000000..0db0c8c --- /dev/null +++ b/Utilities/utility.cpp @@ -0,0 +1,14 @@ +#include + +#include "GameObjects/BasicObjects/Entities/Mobs/test_mob.h" +#include "GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.h" +#include "constants.h" +#include "utility.h" + +Mob* CreateMobFromType(QString type) { + if (type == Entities::kTestMobId) { + return new TestMob(); + } else { + throw std::invalid_argument("There is no such id: " + type.toStdString()); + } +} diff --git a/Utilities/utility.h b/Utilities/utility.h new file mode 100644 index 0000000..24f1d1d --- /dev/null +++ b/Utilities/utility.h @@ -0,0 +1,3 @@ +#pragma once + +Mob* CreateMobFromType(QString type); diff --git a/Utilities/wave.cpp b/Utilities/wave.cpp index ccddd6e..b31d894 100644 --- a/Utilities/wave.cpp +++ b/Utilities/wave.cpp @@ -1,15 +1,17 @@ #include "wave.h" +#include "Controller/controller.h" + void Wave::RemoveMobFromWave(Mob* mob) { mobs_time_to_spawn_.erase(mob); } void Wave::Tick(Time delta) { if (IsStarted()) { - for (auto i : mobs_time_to_spawn_) { + for (auto& i : mobs_time_to_spawn_) { i.second -= delta; if (i.second.ms() <= 0) { - // TODO(parfen01): move mob to map before removing from wave + Controller::Instance()->GetScene()->addItem(i.first); RemoveMobFromWave(i.first); } } diff --git a/Utilities/wave.h b/Utilities/wave.h index 116cce3..59dec71 100644 --- a/Utilities/wave.h +++ b/Utilities/wave.h @@ -1,14 +1,16 @@ #pragma once + #include "GameObjects/BasicObjects/Interface/tickable.h" #include "GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h" #include #include -class Wave : public Tickable { +class Wave { public: - explicit Wave(Time ms, std::map&& mobs) : time_to_start_(ms), + explicit Wave(Time time, std::map&& mobs) : time_to_start_(time), mobs_time_to_spawn_(std::move(mobs)) {} - void Tick(Time delta) override; + void Tick(Time delta); + // TODO(jansenin): we need to use it somewhere void RemoveMobFromWave(Mob*); [[nodiscard]] bool IsStarted() const; [[nodiscard]] bool IsEnded() const; diff --git a/constants.cpp b/constants.cpp index f8b336c..3a22bed 100644 --- a/constants.cpp +++ b/constants.cpp @@ -1,15 +1,23 @@ #include "constants.h" -const qreal kSceneWidth = 1920; -const qreal kSceneHeight = 1080; -const QRectF kSceneRect{ - -kSceneWidth/2, - -kSceneHeight/2, - kSceneWidth, - kSceneHeight}; +namespace Scene { +const qreal kWidth = 1920; +const qreal kHeight = 1080; +const QRectF kRect{ + -kWidth / 2, + -kHeight / 2, + kWidth, + kHeight}; +extern const qreal kMapTextureZValue = -100; +} + +namespace LevelData { +extern const int kLevelsCount = 1; +} namespace Entities { const int kCircleAttackAreaApproximationPointsCount = 10; +extern const QString kTestMobId = "TestMob"; namespace TestTower { const qreal kAttackRange = 300; diff --git a/constants.h b/constants.h index 3fe716e..cd91bae 100644 --- a/constants.h +++ b/constants.h @@ -5,12 +5,20 @@ #include "Utilities/time.h" #include -extern const qreal kSceneWidth; -extern const qreal kSceneHeight; -extern const QRectF kSceneRect; +namespace Scene { +extern const qreal kWidth; +extern const qreal kHeight; +extern const QRectF kRect; +extern const qreal kMapTextureZValue; +} + +namespace LevelData { +extern const int kLevelsCount; +} namespace Entities { extern const int kCircleAttackAreaApproximationPointsCount; +extern const QString kTestMobId; namespace TestTower { extern const qreal kAttackRange; diff --git a/level.cpp b/level.cpp new file mode 100644 index 0000000..d549541 --- /dev/null +++ b/level.cpp @@ -0,0 +1,163 @@ +#include "level.h" + +#include +#include +#include + +#include +#include +#include + +#include "GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.h" +#include "Utilities/utility.h" +#include "Utilities/Resources/pixmap_loader.h" +#include "constants.h" + +Level::Level(int level_number) : level_number_(level_number) { + QFile file(":Levels/Level" + + QString::fromStdString(std::to_string(level_number)) + "/level.json"); + + if (!file.open(QIODevice::ReadOnly)) { + throw std::invalid_argument("There is no such level"); + } + + QByteArray level_data = file.readAll(); + QJsonParseError error; + QJsonDocument document = QJsonDocument::fromJson(level_data, &error); + if (error.error != QJsonParseError::NoError) { + throw std::invalid_argument( + "Level json parse error: " + error.errorString().toStdString()); + } + + QJsonObject root = document.object(); + startMoney_ = root.value("startMoney").toInt(); + + QJsonArray tower_slot_positions = root.value("towerSlotPositions").toArray(); + tower_slots_.reserve(tower_slot_positions.size()); + for (auto tower_slot_position : tower_slot_positions) { + int tower_slot_x; + int tower_slot_y; + QJsonObject tower_slot_pos_object = tower_slot_position.toObject(); + tower_slot_x = tower_slot_pos_object.value("x").toInt(); + tower_slot_y = tower_slot_pos_object.value("y").toInt(); + + tower_slots_.push_back( + new TestTowerSlot(VectorF(tower_slot_x, tower_slot_y))); + } + + QJsonArray routes = root.value("routes").toArray(); + routes_.reserve(routes.size()); + for (auto route : routes) { + QJsonArray points = route.toObject().value("points").toArray(); + std::vector points_for_route; + points_for_route.reserve(points.size()); + for (auto point : points) { + QJsonObject point_object = point.toObject(); + int x = point_object.value("x").toInt(); + int y = point_object.value("y").toInt(); + points_for_route.emplace_back(x, y); + } + routes_.push_back(new Route(points_for_route)); + } + + QJsonArray waves = root.value("waves").toArray(); + waves_.reserve(waves_.size()); + + Time previous_wave_end_time(0); + for (auto json_wave : waves) { + QJsonObject wave_object = json_wave.toObject(); + Time current_wave_start_time = previous_wave_end_time + + Time(wave_object.value("startTimeRelativeToPrevWave").toInt()); + previous_wave_end_time = current_wave_start_time; + QJsonArray spawn_entries = wave_object.value("spawnEntries").toArray(); + Time wave_duration(0); + std::map mobs; + for (auto json_spawn_entry : spawn_entries) { + QJsonObject object = json_spawn_entry.toObject(); + SpawnEntry spawn_entry(object); + wave_duration = Time( + std::max(spawn_entry.GetEntryEndTime().ms(), wave_duration.ms())); + spawn_entry.AddMobsToWave(&mobs, routes_); + } + previous_wave_end_time += wave_duration; + Wave* wave = new Wave(current_wave_start_time, std::move(mobs)); + waves_.push_back(wave); + } +} + +void Level::AddObjectsToScene(GameScene* scene) { + QPixmap* map_pixmap = + PixmapLoader::Pixmaps::kLevelMaps.at(level_number_ - 1); + auto map_pixmap_item = scene->addPixmap(*map_pixmap); + map_pixmap_item->setZValue(Scene::kMapTextureZValue); + + qreal pixmap_width = map_pixmap->width(); + qreal pixmap_height = map_pixmap->height(); + + QTransform transform; + QRectF pixmap_rect( + -pixmap_width / 2.0, -pixmap_height / 2.0, + pixmap_width, pixmap_height); + transform.scale( + Scene::kWidth / pixmap_width, + Scene::kHeight / pixmap_height); + pixmap_rect = transform.mapRect(pixmap_rect); + map_pixmap_item->setPos(pixmap_rect.topLeft()); + map_pixmap_item->setTransform(transform); + + for (auto tower_slot : tower_slots_) { + scene->addItem(tower_slot); + } +} + +void Level::Tick(Time delta) { + for (auto wave : waves_) { + wave->Tick(delta); + } +} + +const std::vector& Level::GetRoutes() const { + return routes_; +} + +const std::vector& Level::GetWaves() { + return waves_; +} + +int Level::GetLevelNumber() const { + return level_number_; +} + +int Level::GetStartMoney() const { + return startMoney_; +} + +Level::SpawnEntry::SpawnEntry(const QJsonObject& spawn_root_object) + : start_time_(Time(spawn_root_object.value("startTime").toInt())), + mob_type_(spawn_root_object.value("mobType").toString()), + count_(spawn_root_object.value("count").toInt()), + entry_duration_(Time(spawn_root_object.value("entryDuration").toInt())), + route_index_(spawn_root_object.value("routeIndex").toInt()) + {} + +void Level::SpawnEntry::AddMobsToWave( + std::map* mobs, + const std::vector& routes) const { + if (count_ == 1) { + Mob* mob = CreateMobFromType(mob_type_); + mob->SetRoute(routes.at(route_index_)); + mobs->insert(std::make_pair(mob, start_time_)); + } + for (int i = 0; i < count_; ++i) { + Time spawn_time = start_time_; + spawn_time += entry_duration_ * ((1.0 * i) / (count_ - 1)); + + Mob* mob = CreateMobFromType(mob_type_); + mob->SetRoute(routes.at(route_index_)); + mobs->insert(std::make_pair(mob, spawn_time)); + } +} + +Time Level::SpawnEntry::GetEntryEndTime() const { + return start_time_ + entry_duration_; +} diff --git a/level.h b/level.h new file mode 100644 index 0000000..dc5246c --- /dev/null +++ b/level.h @@ -0,0 +1,49 @@ +#pragma once + +#include +#include + +#include + +#include "Utilities/vector_f.h" +#include "GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h" +#include "GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.h" +#include "Utilities/route.h" +#include "Utilities/wave.h" + +class Level { + public: + explicit Level(int level_number); + + void AddObjectsToScene(GameScene* scene); + void Tick(Time delta); + + [[nodiscard]] const std::vector& GetRoutes() const; + [[nodiscard]] const std::vector& GetWaves(); + [[nodiscard]] int GetLevelNumber() const; + [[nodiscard]] int GetStartMoney() const; + + private: + class SpawnEntry { + public: + explicit SpawnEntry(const QJsonObject& spawn_root_object); + + [[nodiscard]] Time GetEntryEndTime() const; + void AddMobsToWave( + std::map* mobs, + const std::vector& routes) const; + + private: + Time start_time_; + QString mob_type_; + int count_; + Time entry_duration_; + int route_index_; + }; + + std::vector tower_slots_{}; + std::vector routes_{}; + std::vector waves_{}; + int level_number_; + int startMoney_; +}; From 61cfee07aea1bd331546923c5f5413f8f25bbc2d Mon Sep 17 00:00:00 2001 From: parfen01 <99528469+parfen01@users.noreply.github.com> Date: Thu, 2 Jun 2022 16:56:56 +0300 Subject: [PATCH 07/19] Different mobs (#21) * Skeleton * Cobra, hedgehog, dwarf * Fixed cpplint * Fixed cpplint once again * Fixed routes, scaled mobs --- CMakeLists.txt | 6 +- Controller/controller.cpp | 4 + .../BasicObjects/Entities/Mobs/Basis/mob.cpp | 6 + .../BasicObjects/Entities/Mobs/Basis/mob.h | 4 +- .../BasicObjects/Entities/Mobs/cobra.cpp | 44 +++++ .../BasicObjects/Entities/Mobs/cobra.h | 16 ++ .../BasicObjects/Entities/Mobs/dwarf.cpp | 48 ++++++ .../BasicObjects/Entities/Mobs/dwarf.h | 20 +++ .../BasicObjects/Entities/Mobs/hedgehog.cpp | 44 +++++ .../BasicObjects/Entities/Mobs/hedgehog.h | 17 ++ .../BasicObjects/Entities/Mobs/skeleton.cpp | 44 +++++ .../BasicObjects/Entities/Mobs/skeleton.h | 18 ++ .../BasicObjects/Entities/Mobs/test_mob.cpp | 5 + .../BasicObjects/Entities/Mobs/test_mob.h | 2 + GameObjects/BasicObjects/Interface/entity.cpp | 2 +- Resources/Levels/Level1/level.json | 41 +++-- Resources/images/cobra.png | Bin 0 -> 24614 bytes Resources/images/dwarf.png | Bin 0 -> 32897 bytes Resources/images/hedgehog.png | Bin 0 -> 36375 bytes Resources/images/skeleton/death.png | Bin 0 -> 2440 bytes Resources/images/skeleton/walk.png | Bin 0 -> 1818 bytes Resources/resources.qrc | 10 ++ Utilities/Resources/pixmap_loader.cpp | 159 ++++++++++++++++++ Utilities/Resources/pixmap_loader.h | 19 +++ Utilities/utility.cpp | 19 ++- constants.cpp | 35 +++- constants.h | 28 +++ 27 files changed, 566 insertions(+), 25 deletions(-) create mode 100644 GameObjects/BasicObjects/Entities/Mobs/cobra.cpp create mode 100644 GameObjects/BasicObjects/Entities/Mobs/cobra.h create mode 100644 GameObjects/BasicObjects/Entities/Mobs/dwarf.cpp create mode 100644 GameObjects/BasicObjects/Entities/Mobs/dwarf.h create mode 100644 GameObjects/BasicObjects/Entities/Mobs/hedgehog.cpp create mode 100644 GameObjects/BasicObjects/Entities/Mobs/hedgehog.h create mode 100644 GameObjects/BasicObjects/Entities/Mobs/skeleton.cpp create mode 100644 GameObjects/BasicObjects/Entities/Mobs/skeleton.h create mode 100644 Resources/images/cobra.png create mode 100644 Resources/images/dwarf.png create mode 100644 Resources/images/hedgehog.png create mode 100644 Resources/images/skeleton/death.png create mode 100644 Resources/images/skeleton/walk.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 0ce4dc3..4d1db35 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,7 +29,11 @@ set(GAME_OBJECTS GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.cpp GameObjects/BasicObjects/Entities/Projectiles/test_projectile.cpp GameObjects/BasicObjects/Interface/graphics_item.cpp - GameObjects/BasicObjects/Entities/Projectiles/projectile.cpp) + GameObjects/BasicObjects/Entities/Projectiles/projectile.cpp + GameObjects/BasicObjects/Entities/Mobs/skeleton.cpp + GameObjects/BasicObjects/Entities/Mobs/cobra.cpp + GameObjects/BasicObjects/Entities/Mobs/hedgehog.cpp + GameObjects/BasicObjects/Entities/Mobs/dwarf.cpp) set(UTILITIES Utilities/damage.cpp diff --git a/Controller/controller.cpp b/Controller/controller.cpp index dacb23b..170ebbd 100644 --- a/Controller/controller.cpp +++ b/Controller/controller.cpp @@ -7,6 +7,10 @@ #include "GameObjects/BasicObjects/Entities/Mobs/test_mob.h" #include "GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.h" +#include "GameObjects/BasicObjects/Entities/Mobs/skeleton.h" +#include "GameObjects/BasicObjects/Entities/Mobs/hedgehog.h" +#include "GameObjects/BasicObjects/Entities/Mobs/cobra.h" +#include "GameObjects/BasicObjects/Entities/Mobs/dwarf.h" #include "constants.h" Controller* Controller::instance; diff --git a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp index 59a315a..af7622b 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp +++ b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp @@ -36,3 +36,9 @@ void Mob::SetRoute(Route* route) { void Mob::MoveToRouteStart() { Entity::setPos(route_->GetStart()); } +QRectF Mob::boundingRect() const { + QRectF result = Entity::boundingRect(); + return result.translated(0, - result.height() / 2); +} + + diff --git a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h index 8a4305e..2e56deb 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h +++ b/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h @@ -19,10 +19,12 @@ class Mob : public Entity { qreal speed = 0); virtual void SetRoute(Route* route); - void MoveToRouteStart(); + virtual void MoveToRouteStart(); [[nodiscard]] qreal GetSpeed() const; void SetSpeed(qreal speed); + QRectF boundingRect() const override; + protected: Route* route_{nullptr}; qreal speed_; diff --git a/GameObjects/BasicObjects/Entities/Mobs/cobra.cpp b/GameObjects/BasicObjects/Entities/Mobs/cobra.cpp new file mode 100644 index 0000000..3992bab --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Mobs/cobra.cpp @@ -0,0 +1,44 @@ +#include "cobra.h" +#include "Utilities/Resources/pixmap_loader.h" +#include "constants.h" + +namespace C = Entities::Cobra; +using P = PixmapLoader::Pixmaps; + +Cobra::Cobra(const VectorF& coordinates) : + Mob(coordinates, + new Animation(P::kCobraWalk, + C::kTimeBetweenFrames), + C::kHealth, + C::kSpeed), is_destroying_(false), + walk_animation_(animation_), + death_animation_(new Animation(P::kCobraDeath, C::kTimeBetweenFrames)) { + setScale(2); +} + +void Cobra::ApplyDamage(Damage damage) { + Damageable::ApplyDamage(damage); + if (health_ <= 0 && !is_destroying_) { + death_animation_->Reset(); + is_destroying_ = true; + animation_ = death_animation_; + } +} + +void Cobra::SetRoute(Route* route) { + Mob::SetRoute(route); + MoveToRouteStart(); +} + +void Cobra::Tick(Time delta) { + Mob::Tick(delta); + if (is_destroying_ && animation_->WasEndedDuringPreviousUpdate()) { + animation_->SetIndex(animation_->FrameCount() - 1); + deleteLater(); + } + if (route_ != nullptr) { + if (!is_destroying_ && !route_->isEnd(this)) { + route_->Move(this, speed_ * delta.seconds()); + } + } +} diff --git a/GameObjects/BasicObjects/Entities/Mobs/cobra.h b/GameObjects/BasicObjects/Entities/Mobs/cobra.h new file mode 100644 index 0000000..e9b991b --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Mobs/cobra.h @@ -0,0 +1,16 @@ +#pragma once +#include "Basis/mob.h" + +class Cobra : public Mob { + public: + explicit Cobra(const VectorF& coordinates = {0, 0}); + void ApplyDamage(Damage damage) override; + void SetRoute(Route* route) override; + void Tick(Time delta) override; + + private: + bool is_destroying_; + + Animation* walk_animation_; + Animation* death_animation_; +}; diff --git a/GameObjects/BasicObjects/Entities/Mobs/dwarf.cpp b/GameObjects/BasicObjects/Entities/Mobs/dwarf.cpp new file mode 100644 index 0000000..e4dfa5d --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Mobs/dwarf.cpp @@ -0,0 +1,48 @@ +#include "dwarf.h" +#include "Utilities/Resources/pixmap_loader.h" +#include "constants.h" + +namespace D = Entities::Dwarf; +using P = PixmapLoader::Pixmaps; + +Dwarf::Dwarf(const VectorF& coordinates) : + Mob(coordinates, + new Animation(P::kDwarfWalk, + D::kTimeBetweenFrames), + D::kHealth, + D::kSpeed), is_destroying_(false), + walk_animation_(animation_), + death_animation_(new Animation(P::kDwarfDeath, D::kTimeBetweenFrames)) { + setScale(3); +} + +void Dwarf::ApplyDamage(Damage damage) { + Damageable::ApplyDamage(damage); + if (health_ <= 0 && !is_destroying_) { + death_animation_->Reset(); + is_destroying_ = true; + animation_ = death_animation_; + } +} + +void Dwarf::SetRoute(Route* route) { + Mob::SetRoute(route); + MoveToRouteStart(); +} + +void Dwarf::Tick(Time delta) { + Mob::Tick(delta); + if (is_destroying_ && animation_->WasEndedDuringPreviousUpdate()) { + animation_->SetIndex(animation_->FrameCount() - 1); + deleteLater(); + } + if (route_ != nullptr) { + if (!is_destroying_ && !route_->isEnd(this)) { + route_->Move(this, speed_ * delta.seconds()); + } + } +} + +QRectF Dwarf::boundingRect() const { + return Mob::boundingRect().translated(0, 5); +} diff --git a/GameObjects/BasicObjects/Entities/Mobs/dwarf.h b/GameObjects/BasicObjects/Entities/Mobs/dwarf.h new file mode 100644 index 0000000..c49146e --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Mobs/dwarf.h @@ -0,0 +1,20 @@ +#pragma once +#include "Basis/mob.h" + + +class Dwarf : public Mob { + public: + explicit Dwarf(const VectorF& coordinates = {0, 0}); + void ApplyDamage(Damage damage) override; + void SetRoute(Route* route) override; + void Tick(Time delta) override; + + QRectF boundingRect() const override; + + private: + bool is_destroying_; + + Animation* walk_animation_; + Animation* death_animation_; +}; + diff --git a/GameObjects/BasicObjects/Entities/Mobs/hedgehog.cpp b/GameObjects/BasicObjects/Entities/Mobs/hedgehog.cpp new file mode 100644 index 0000000..cd4e799 --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Mobs/hedgehog.cpp @@ -0,0 +1,44 @@ +#include "hedgehog.h" +#include "Utilities/Resources/pixmap_loader.h" +#include "constants.h" + +namespace H = Entities::Hedgehog; +using P = PixmapLoader::Pixmaps; + +Hedgehog::Hedgehog(const VectorF& coordinates) : + Mob(coordinates, + new Animation(P::kHedgehogWalk, + H::kTimeBetweenFrames), + H::kHealth, + H::kSpeed), is_destroying_(false), + walk_animation_(animation_), + death_animation_(new Animation(P::kHedgehogDeath, H::kTimeBetweenFrames)) { + setScale(2); +} + +void Hedgehog::ApplyDamage(Damage damage) { + Damageable::ApplyDamage(damage); + if (health_ <= 0 && !is_destroying_) { + death_animation_->Reset(); + is_destroying_ = true; + animation_ = death_animation_; + } +} + +void Hedgehog::SetRoute(Route* route) { + Mob::SetRoute(route); + MoveToRouteStart(); +} + +void Hedgehog::Tick(Time delta) { + Mob::Tick(delta); + if (is_destroying_ && animation_->WasEndedDuringPreviousUpdate()) { + animation_->SetIndex(animation_->FrameCount() - 1); + deleteLater(); + } + if (route_ != nullptr) { + if (!is_destroying_ && !route_->isEnd(this)) { + route_->Move(this, speed_ * delta.seconds()); + } + } +} diff --git a/GameObjects/BasicObjects/Entities/Mobs/hedgehog.h b/GameObjects/BasicObjects/Entities/Mobs/hedgehog.h new file mode 100644 index 0000000..311f114 --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Mobs/hedgehog.h @@ -0,0 +1,17 @@ +#pragma once +#include "Basis/mob.h" + +class Hedgehog : public Mob { + public: + explicit Hedgehog(const VectorF& coordinates = {0, 0}); + void ApplyDamage(Damage damage) override; + void SetRoute(Route* route) override; + void Tick(Time delta) override; + + private: + bool is_destroying_; + + Animation* walk_animation_; + Animation* death_animation_; +}; + diff --git a/GameObjects/BasicObjects/Entities/Mobs/skeleton.cpp b/GameObjects/BasicObjects/Entities/Mobs/skeleton.cpp new file mode 100644 index 0000000..da51678 --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Mobs/skeleton.cpp @@ -0,0 +1,44 @@ +#include "skeleton.h" +#include "Utilities/Resources/pixmap_loader.h" +#include "constants.h" + +namespace S = Entities::Skeleton; +using P = PixmapLoader::Pixmaps; + +Skeleton::Skeleton(const VectorF& coordinates) : + Mob(coordinates, + new Animation(P::kSkeletonWalk, + S::kTimeBetweenFrames), + S::kHealth, + S::kSpeed), is_destroying_(false), + walk_animation_(animation_), + death_animation_(new Animation(P::kSkeletonDeath, S::kTimeBetweenFrames)) { + setScale(3); +} + +void Skeleton::ApplyDamage(Damage damage) { + Damageable::ApplyDamage(damage); + if (health_ <= 0 && !is_destroying_) { + death_animation_->Reset(); + is_destroying_ = true; + animation_ = death_animation_; + } +} + +void Skeleton::SetRoute(Route* route) { + Mob::SetRoute(route); + MoveToRouteStart(); +} + +void Skeleton::Tick(Time delta) { + Mob::Tick(delta); + if (is_destroying_ && animation_->WasEndedDuringPreviousUpdate()) { + animation_->SetIndex(animation_->FrameCount() - 1); + deleteLater(); + } + if (route_ != nullptr) { + if (!is_destroying_ && !route_->isEnd(this)) { + route_->Move(this, speed_ * delta.seconds()); + } + } +} diff --git a/GameObjects/BasicObjects/Entities/Mobs/skeleton.h b/GameObjects/BasicObjects/Entities/Mobs/skeleton.h new file mode 100644 index 0000000..e391231 --- /dev/null +++ b/GameObjects/BasicObjects/Entities/Mobs/skeleton.h @@ -0,0 +1,18 @@ +#pragma once +#include "Basis/mob.h" + +class Skeleton : public Mob { + public: + explicit Skeleton(const VectorF& coordinates = {0, 0}); + void ApplyDamage(Damage damage) override; + void SetRoute(Route* route) override; + void Tick(Time delta) override; + + private: + bool is_destroying_; + + Animation* walk_animation_; + Animation* death_animation_; +}; + + diff --git a/GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp b/GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp index 042fe5a..cc12813 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp +++ b/GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp @@ -83,3 +83,8 @@ void TestMob::SetRoute(Route* route) { Mob::SetRoute(route); MoveToRouteStart(); } +QRectF TestMob::boundingRect() const { + // because in animation file there is gap between totem and bottom side + // of frame(and it's approximately 10px) + return Mob::boundingRect().translated(0, 10); +} diff --git a/GameObjects/BasicObjects/Entities/Mobs/test_mob.h b/GameObjects/BasicObjects/Entities/Mobs/test_mob.h index 98fc32b..6349f51 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/test_mob.h +++ b/GameObjects/BasicObjects/Entities/Mobs/test_mob.h @@ -13,6 +13,8 @@ class TestMob : public Mob { void ApplyDamage(Damage damage) override; void SetRoute(Route* route) override; + QRectF boundingRect() const override; + ~TestMob() override; protected: diff --git a/GameObjects/BasicObjects/Interface/entity.cpp b/GameObjects/BasicObjects/Interface/entity.cpp index 2376443..7d7df4c 100644 --- a/GameObjects/BasicObjects/Interface/entity.cpp +++ b/GameObjects/BasicObjects/Interface/entity.cpp @@ -31,7 +31,7 @@ void Entity::paint(QPainter* painter, static QPen pen(QColor(0, 0, 255, 50)); painter->setPen(pen); // painter->drawRect(boundingRect()); - painter->drawPixmap(Entity::boundingRect().toRect(), *animation_->Frame()); + painter->drawPixmap(boundingRect().toRect(), *animation_->Frame()); painter->restore(); } diff --git a/Resources/Levels/Level1/level.json b/Resources/Levels/Level1/level.json index 1db7177..ae8403c 100644 --- a/Resources/Levels/Level1/level.json +++ b/Resources/Levels/Level1/level.json @@ -2,8 +2,8 @@ "startMoney": 100, "towerSlotPositions": [ { - "x": -495, - "y": -160 + "x": -524, + "y": -172 }, { "x": -140, @@ -31,35 +31,35 @@ "points": [ { "x": -1000, - "y": -10 + "y": 48 }, { - "x": -640, - "y": -10 + "x": -650, + "y": 48 }, { - "x": -640, - "y": -300 + "x": -650, + "y": -262 }, { - "x": -260, - "y": -310 + "x": -262, + "y": -262 }, { - "x": -260, - "y": 110 + "x": -262, + "y": 162 }, { "x": 250, - "y": 110 + "y": 162 }, { "x": 250, - "y": -80 + "y": -54 }, { "x": 1000, - "y": -80 + "y": -54 } ] } @@ -69,25 +69,32 @@ "startTimeRelativeToPrevWave": 0, "spawnEntries": [ { - "mobType": "TestMob", + "mobType": "Cobra", "count": 4, "startTime": 0, "entryDuration": 1000, "routeIndex": 1 }, { - "mobType": "TestMob", + "mobType": "Dwarf", "count": 4, "startTime": 2000, "entryDuration": 1000, "routeIndex": 1 }, { - "mobType": "TestMob", + "mobType": "Hedgehog", "count": 4, "startTime": 4000, "entryDuration": 1000, "routeIndex": 1 + }, + { + "mobType": "Skeleton", + "count": 4, + "startTime": 6000, + "entryDuration": 1000, + "routeIndex": 1 } ] }, diff --git a/Resources/images/cobra.png b/Resources/images/cobra.png new file mode 100644 index 0000000000000000000000000000000000000000..f7e2addff9a41b2cd311cfb4cc08d836825d0c56 GIT binary patch literal 24614 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 literal 0 HcmV?d00001 diff --git a/Resources/images/dwarf.png b/Resources/images/dwarf.png new file mode 100644 index 0000000000000000000000000000000000000000..44cdbe29ef1a4592c0d867df7ada9f358da3978e GIT binary patch literal 32897 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 literal 0 HcmV?d00001 diff --git a/Resources/images/hedgehog.png b/Resources/images/hedgehog.png new file mode 100644 index 0000000000000000000000000000000000000000..9c44eda9116c433aba67499282b027fc02c5de74 GIT binary patch literal 36375 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%0AI;lUtDIjjQ(NTKREMgbQD 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/test_tower_gun.png images/test_tower_slot.png images/fire_totem.png + + images/skeleton/walk.png + images/skeleton/death.png + + images/cobra.png + + images/hedgehog.png + + images/dwarf.png + Levels/Level1/map.png Levels/Level1/level.json diff --git a/Utilities/Resources/pixmap_loader.cpp b/Utilities/Resources/pixmap_loader.cpp index db3e2ad..5270bed 100644 --- a/Utilities/Resources/pixmap_loader.cpp +++ b/Utilities/Resources/pixmap_loader.cpp @@ -18,6 +18,21 @@ std::vector P::kFireTotemIdle; std::vector P::kFireTotemDisappear; std::vector P::kFireTotemAppearing; +std::vector P::kSkeletonWalk; +std::vector P::kSkeletonDeath; + +QPixmap* P::kCobraAnimations; +std::vector P::kCobraWalk; +std::vector P::kCobraDeath; + +QPixmap* P::kHedgehogAnimations; +std::vector P::kHedgehogWalk; +std::vector P::kHedgehogDeath; + +QPixmap* P::kDwarfAnimations; +std::vector P::kDwarfWalk; +std::vector P::kDwarfDeath; + void PixmapLoader::LoadPixmaps() { P::kBackground = new QPixmap(":images/background.png"); P::kTestBullet = new QPixmap(":images/test_bullet.png"); @@ -31,6 +46,10 @@ void PixmapLoader::LoadPixmaps() { + "/map.png")); } LoadFireTotemAnimations(); + LoadSkeletonAnimations(); + LoadCobraAnimations(); + LoadHedgehogAnimations(); + LoadDwarfAnimations(); } std::vector PixmapLoader::CreateHorizontalFramesVector( @@ -94,3 +113,143 @@ void PixmapLoader::LoadFireTotemAnimations() { appear_animation_column * frame_width, appear_animation_row * frame_height); } + +void PixmapLoader::LoadSkeletonAnimations() { + // walk 13 frame columns + // death 14 frame columns + // walk file size - 286x33 + // death file size - 495x32 + const int frame_walk_width = 286 / 13; + const int frame_walk_height = 33; + const int walk_animation_frames_count = 13; + + const int frame_death_width = 495 / 15; + const int frame_death_height = 32; + const int death_animation_frames_count = 14; + + // row and column start from 0 + const int walk_animation_row = 0; + const int walk_animation_column = 0; + + const int death_animation_row = 0; + const int death_animation_column = 1; + + + QPixmap* walk_animation = new QPixmap(":images/skeleton/walk.png"); + QPixmap* death_animation = new QPixmap(":images/skeleton/death.png"); + + P::kSkeletonWalk = CreateHorizontalFramesVector( + walk_animation, + frame_walk_width, + frame_walk_height, + walk_animation_frames_count, + walk_animation_column * frame_walk_width, + walk_animation_row * frame_walk_height); + + P::kSkeletonDeath = CreateHorizontalFramesVector( + death_animation, + frame_death_width, + frame_death_height, + death_animation_frames_count, + death_animation_column * frame_death_width, + death_animation_row * frame_death_height); + + delete walk_animation; + delete death_animation; +} + +void PixmapLoader::LoadCobraAnimations() { + // file size - 256x160 + // 5 frame rows, 8 frame columns + const int frame_width = 256 / 8; + const int frame_height = 160 / 5; + const int death_animation_frames_count = 6; + const int walk_animation_frames_count = 8; + // row and column start from 0 + const int death_animation_row = 4; + const int death_animation_column = 0; + const int walk_animation_row = 1; + const int walk_animation_column = 0; + + P::kCobraAnimations = new QPixmap(":images/cobra.png"); + + P::kCobraWalk = CreateHorizontalFramesVector( + P::kCobraAnimations, + frame_width, + frame_height, + walk_animation_frames_count, + walk_animation_column * frame_width, + walk_animation_row * frame_height); + + P::kCobraDeath = CreateHorizontalFramesVector( + P::kCobraAnimations, + frame_width, + frame_height, + death_animation_frames_count, + death_animation_column * frame_width, + death_animation_row * frame_height); +} + +void PixmapLoader::LoadHedgehogAnimations() { + // file size - 128x128 + // 4 frame rows, 4 frame columns + const int frame_width = 128 / 4; + const int frame_height = 128 / 4; + const int death_animation_frames_count = 3; + const int walk_animation_frames_count = 4; + // row and column start from 0 + const int death_animation_row = 3; + const int death_animation_column = 0; + const int walk_animation_row = 1; + const int walk_animation_column = 0; + + P::kHedgehogAnimations = new QPixmap(":images/hedgehog.png"); + + P::kHedgehogWalk = CreateHorizontalFramesVector( + P::kHedgehogAnimations, + frame_width, + frame_height, + walk_animation_frames_count, + walk_animation_column * frame_width, + walk_animation_row * frame_height); + + P::kHedgehogDeath = CreateHorizontalFramesVector( + P::kHedgehogAnimations, + frame_width, + frame_height, + death_animation_frames_count, + death_animation_column * frame_width, + death_animation_row * frame_height); +} + +void PixmapLoader::LoadDwarfAnimations() { + // file size - 512x256 + // 8 frame rows, 8 frame columns + const int frame_width = 512 / 8; + const int frame_height = 256 / 8; + const int death_animation_frames_count = 7; + const int walk_animation_frames_count = 8; + // row and column start from 0 + const int death_animation_row = 7; + const int death_animation_column = 0; + const int walk_animation_row = 1; + const int walk_animation_column = 0; + + P::kDwarfAnimations = new QPixmap(":images/dwarf.png"); + + P::kDwarfWalk = CreateHorizontalFramesVector( + P::kDwarfAnimations, + frame_width, + frame_height, + walk_animation_frames_count, + walk_animation_column * frame_width, + walk_animation_row * frame_height); + + P::kDwarfDeath = CreateHorizontalFramesVector( + P::kDwarfAnimations, + frame_width, + frame_height, + death_animation_frames_count, + death_animation_column * frame_width, + death_animation_row * frame_height); +} diff --git a/Utilities/Resources/pixmap_loader.h b/Utilities/Resources/pixmap_loader.h index 349bd80..90c8b2c 100644 --- a/Utilities/Resources/pixmap_loader.h +++ b/Utilities/Resources/pixmap_loader.h @@ -24,6 +24,21 @@ class PixmapLoader { static std::vector kFireTotemIdle; static std::vector kFireTotemDisappear; static std::vector kFireTotemAppearing; + + static std::vector kSkeletonWalk; + static std::vector kSkeletonDeath; + + static QPixmap* kCobraAnimations; + static std::vector kCobraWalk; + static std::vector kCobraDeath; + + static QPixmap* kHedgehogAnimations; + static std::vector kHedgehogWalk; + static std::vector kHedgehogDeath; + + static QPixmap* kDwarfAnimations; + static std::vector kDwarfWalk; + static std::vector kDwarfDeath; }; static void LoadPixmaps(); @@ -38,4 +53,8 @@ class PixmapLoader { int y); static void LoadFireTotemAnimations(); + static void LoadSkeletonAnimations(); + static void LoadCobraAnimations(); + static void LoadHedgehogAnimations(); + static void LoadDwarfAnimations(); }; diff --git a/Utilities/utility.cpp b/Utilities/utility.cpp index 0db0c8c..7dc17c3 100644 --- a/Utilities/utility.cpp +++ b/Utilities/utility.cpp @@ -2,13 +2,28 @@ #include "GameObjects/BasicObjects/Entities/Mobs/test_mob.h" #include "GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.h" +#include "GameObjects/BasicObjects/Entities/Mobs/skeleton.h" +#include "GameObjects/BasicObjects/Entities/Mobs/cobra.h" +#include "GameObjects/BasicObjects/Entities/Mobs/hedgehog.h" +#include "GameObjects/BasicObjects/Entities/Mobs/dwarf.h" #include "constants.h" #include "utility.h" Mob* CreateMobFromType(QString type) { if (type == Entities::kTestMobId) { return new TestMob(); - } else { + } + if (type == Entities::kSkeletonId) { + return new Skeleton(); + } + if (type == Entities::kCobraId) { + return new Cobra(); + } + if (type == Entities::kHedgehogId) { + return new Hedgehog(); + } + if (type == Entities::kDwarfId) { + return new Dwarf(); + } throw std::invalid_argument("There is no such id: " + type.toStdString()); } -} diff --git a/constants.cpp b/constants.cpp index 3a22bed..d2e77dc 100644 --- a/constants.cpp +++ b/constants.cpp @@ -1,3 +1,4 @@ +#include #include "constants.h" namespace Scene { @@ -17,7 +18,11 @@ extern const int kLevelsCount = 1; namespace Entities { const int kCircleAttackAreaApproximationPointsCount = 10; -extern const QString kTestMobId = "TestMob"; +const QString kTestMobId = "TestMob"; +const QString kSkeletonId = "Skeleton"; +const QString kCobraId = "Cobra"; +const QString kHedgehogId = "Hedgehog"; +const QString kDwarfId = "Dwarf"; namespace TestTower { const qreal kAttackRange = 300; @@ -31,8 +36,32 @@ const qreal kRotationSpeed = 10; const int kHealth = 30; } +namespace Skeleton { +const Time kTimeBetweenFrames = 50_ms; +const qreal kSpeed = 50; +const int kHealth = 200; +} + +namespace Cobra { +const Time kTimeBetweenFrames = 50_ms; +const qreal kSpeed = 200; +const int kHealth = 40; +} + +namespace Hedgehog { +const Time kTimeBetweenFrames = 50_ms; +const qreal kSpeed = 110; +extern const int kHealth = 80; +} + +namespace Dwarf { +const Time kTimeBetweenFrames = 50_ms; +const qreal kSpeed = 60; +extern const int kHealth = 300; +} + namespace TestProjectile { -extern const Damage kDamage = Damage(3); -extern const qreal kSpeed = 500; +const Damage kDamage = Damage(3); +const qreal kSpeed = 500; } } // namespace Entities diff --git a/constants.h b/constants.h index cd91bae..233bd9c 100644 --- a/constants.h +++ b/constants.h @@ -19,6 +19,10 @@ extern const int kLevelsCount; namespace Entities { extern const int kCircleAttackAreaApproximationPointsCount; extern const QString kTestMobId; +extern const QString kSkeletonId; +extern const QString kCobraId; +extern const QString kHedgehogId; +extern const QString kDwarfId; namespace TestTower { extern const qreal kAttackRange; @@ -32,6 +36,30 @@ extern const qreal kRotationSpeed; extern const int kHealth; } +namespace Skeleton { +extern const Time kTimeBetweenFrames; +extern const qreal kSpeed; +extern const int kHealth; +} + +namespace Cobra { +extern const Time kTimeBetweenFrames; +extern const qreal kSpeed; +extern const int kHealth; +} + +namespace Hedgehog { +extern const Time kTimeBetweenFrames; +extern const qreal kSpeed; +extern const int kHealth; +} + +namespace Dwarf { +extern const Time kTimeBetweenFrames; +extern const qreal kSpeed; +extern const int kHealth; +} + namespace TestProjectile { extern const Damage kDamage; extern const qreal kSpeed; From 5c4e8ed7ad0679d5e64c8a60167a7d08ec39f5d9 Mon Sep 17 00:00:00 2001 From: jansenin <59775038+jansenin@users.noreply.github.com> Date: Fri, 3 Jun 2022 10:20:55 +0300 Subject: [PATCH 08/19] UI components (#22) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add customizable base classes * add getters to scene * fix cpplint * test use of animations, many other fixes Если кратко, то вот: 1)Тестовый моб теперь может чуть больше и у него есть анимации 2)Самонаводящиеся пули перескакивают на других мобов при смерти первоначальных * code style * more code style * fix custom literal error * Added level managing system, json-format level data storage. * add textured box, toolpit, unfinished death system * add ui components(layouts, menus, text buttons, ...) Added: LinearLayout(horisontal and vertical) LinearMenu(horisontal and vertical) PaddingBox TextButton * add icons on buttons Co-authored-by: Artsiom S --- .gitignore | 3 +- CMakeLists.txt | 46 ++-- Controller/controller.cpp | 244 ++++++++++------- Controller/controller.h | 9 +- Controller/ui_controller.cpp | 1 + Controller/ui_controller.h | 3 + .../BasicObjects/Interface/graphics_item.cpp | 17 -- .../Entities/Mobs/Basis/mob.cpp | 33 ++- .../Entities/Mobs/Basis/mob.h | 17 +- .../Entities/Mobs/cobra.cpp | 5 +- .../{BasicObjects => }/Entities/Mobs/cobra.h | 0 .../Entities/Mobs/dwarf.cpp | 5 +- .../{BasicObjects => }/Entities/Mobs/dwarf.h | 0 .../Entities/Mobs/hedgehog.cpp | 6 +- .../Entities/Mobs/hedgehog.h | 0 .../Entities/Mobs/skeleton.cpp | 10 +- .../Entities/Mobs/skeleton.h | 0 .../Entities/Mobs/test_mob.cpp | 48 +++- .../Entities/Mobs/test_mob.h | 14 +- .../Projectiles/autoguided_projectile.cpp | 2 +- .../Projectiles/autoguided_projectile.h | 2 +- .../Entities/Projectiles/projectile.cpp | 0 .../Entities/Projectiles/projectile.h | 2 +- .../Entities/Projectiles/test_projectile.cpp | 0 .../Entities/Projectiles/test_projectile.h | 0 .../Towers/TowerSlots/test_tower_slot.cpp | 6 +- .../Towers/TowerSlots/test_tower_slot.h | 0 .../Entities/Towers/TowerSlots/tower_slot.cpp | 0 .../Entities/Towers/TowerSlots/tower_slot.h | 4 +- .../Entities/Towers/test_tower.cpp | 4 +- .../Entities/Towers/test_tower.h | 0 .../Entities/Towers/tower.cpp | 0 .../Entities/Towers/tower.h | 2 +- .../Interface/damageable.cpp | 0 .../{BasicObjects => }/Interface/damageable.h | 0 .../{BasicObjects => }/Interface/entity.cpp | 9 +- .../{BasicObjects => }/Interface/entity.h | 10 +- GameObjects/Interface/graphics_object.cpp | 18 ++ .../graphics_object.h} | 6 +- .../{BasicObjects => }/Interface/tickable.h | 0 .../Button/bottom_left_corner.png | Bin 0 -> 149 bytes .../Button/bottom_right_corner.png | Bin 0 -> 157 bytes .../GUI/Textured boxes/Button/bottom_side.png | Bin 0 -> 143 bytes .../GUI/Textured boxes/Button/inside.png | Bin 0 -> 138 bytes .../GUI/Textured boxes/Button/left_side.png | Bin 0 -> 149 bytes .../GUI/Textured boxes/Button/right_side.png | Bin 0 -> 158 bytes .../Textured boxes/Button/top_left_corner.png | Bin 0 -> 138 bytes .../Button/top_right_corner.png | Bin 0 -> 143 bytes .../GUI/Textured boxes/Button/top_side.png | Bin 0 -> 143 bytes .../Default/bottom_left_corner.png | Bin 0 -> 204 bytes .../Default/bottom_right_corner.png | Bin 0 -> 206 bytes .../Textured boxes/Default/bottom_side.png | Bin 0 -> 143 bytes .../GUI/Textured boxes/Default/inside.png | Bin 0 -> 138 bytes .../GUI/Textured boxes/Default/left_side.png | Bin 0 -> 142 bytes .../GUI/Textured boxes/Default/right_side.png | Bin 0 -> 141 bytes .../Default/top_left_corner.png | Bin 0 -> 206 bytes .../Default/top_right_corner.png | Bin 0 -> 204 bytes .../GUI/Textured boxes/Default/top_side.png | Bin 0 -> 143 bytes .../Menu/bottom_left_corner.png | Bin 0 -> 189 bytes .../Menu/bottom_right_corner.png | Bin 0 -> 194 bytes .../GUI/Textured boxes/Menu/bottom_side.png | Bin 0 -> 163 bytes Resources/GUI/Textured boxes/Menu/inside.png | Bin 0 -> 151 bytes .../GUI/Textured boxes/Menu/left_side.png | Bin 0 -> 187 bytes .../GUI/Textured boxes/Menu/right_side.png | Bin 0 -> 187 bytes .../Textured boxes/Menu/top_left_corner.png | Bin 0 -> 159 bytes .../Textured boxes/Menu/top_right_corner.png | Bin 0 -> 159 bytes .../GUI/Textured boxes/Menu/top_side.png | Bin 0 -> 168 bytes .../Menu2/bottom_left_corner.png | Bin 0 -> 273 bytes .../Menu2/bottom_right_corner.png | Bin 0 -> 268 bytes .../GUI/Textured boxes/Menu2/bottom_side.png | Bin 0 -> 197 bytes Resources/GUI/Textured boxes/Menu2/inside.png | Bin 0 -> 148 bytes .../GUI/Textured boxes/Menu2/left_side.png | Bin 0 -> 203 bytes .../GUI/Textured boxes/Menu2/right_side.png | Bin 0 -> 206 bytes .../Textured boxes/Menu2/top_left_corner.png | Bin 0 -> 284 bytes .../Textured boxes/Menu2/top_right_corner.png | Bin 0 -> 285 bytes .../GUI/Textured boxes/Menu2/top_side.png | Bin 0 -> 200 bytes Resources/Levels/Level1/level.json | 12 + Resources/images/explosion.png | Bin 0 -> 2728 bytes Resources/resources.qrc | 45 ++++ UI/button.cpp | 63 +++++ UI/button.h | 40 +++ UI/linear_layout.cpp | 171 ++++++++++++ UI/linear_layout.h | 40 +++ UI/linear_menu.cpp | 67 +++++ UI/linear_menu.h | 34 +++ UI/padding_box.cpp | 54 ++++ UI/padding_box.h | 20 ++ UI/pixmap_object.cpp | 24 ++ UI/pixmap_object.h | 21 ++ UI/textured_box.cpp | 144 ++++++++++ UI/textured_box.h | 29 ++ UI/tooltip.cpp | 52 ++++ UI/tooltip.h | 22 ++ Utilities/Resources/pixmap_loader.cpp | 248 ++++++++++++------ Utilities/Resources/pixmap_loader.h | 59 +++-- Utilities/Resources/textured_box_pixmaps.h | 17 ++ Utilities/animation.h | 2 +- Utilities/route.h | 4 +- Utilities/time.h | 4 + Utilities/utility.cpp | 12 +- Utilities/wave.cpp | 15 +- Utilities/wave.h | 10 +- constants.cpp | 19 +- constants.h | 13 + game_scene.cpp | 10 +- game_scene.h | 2 +- level.cpp | 21 +- level.h | 6 +- wave_manager.h | 2 +- 109 files changed, 1483 insertions(+), 325 deletions(-) create mode 100644 Controller/ui_controller.cpp create mode 100644 Controller/ui_controller.h delete mode 100644 GameObjects/BasicObjects/Interface/graphics_item.cpp rename GameObjects/{BasicObjects => }/Entities/Mobs/Basis/mob.cpp (53%) rename GameObjects/{BasicObjects => }/Entities/Mobs/Basis/mob.h (64%) rename GameObjects/{BasicObjects => }/Entities/Mobs/cobra.cpp (87%) rename GameObjects/{BasicObjects => }/Entities/Mobs/cobra.h (100%) rename GameObjects/{BasicObjects => }/Entities/Mobs/dwarf.cpp (88%) rename GameObjects/{BasicObjects => }/Entities/Mobs/dwarf.h (100%) rename GameObjects/{BasicObjects => }/Entities/Mobs/hedgehog.cpp (86%) rename GameObjects/{BasicObjects => }/Entities/Mobs/hedgehog.h (100%) rename GameObjects/{BasicObjects => }/Entities/Mobs/skeleton.cpp (81%) rename GameObjects/{BasicObjects => }/Entities/Mobs/skeleton.h (100%) rename GameObjects/{BasicObjects => }/Entities/Mobs/test_mob.cpp (62%) rename GameObjects/{BasicObjects => }/Entities/Mobs/test_mob.h (63%) rename GameObjects/{BasicObjects => }/Entities/Projectiles/autoguided_projectile.cpp (97%) rename GameObjects/{BasicObjects => }/Entities/Projectiles/autoguided_projectile.h (89%) rename GameObjects/{BasicObjects => }/Entities/Projectiles/projectile.cpp (100%) rename GameObjects/{BasicObjects => }/Entities/Projectiles/projectile.h (77%) rename GameObjects/{BasicObjects => }/Entities/Projectiles/test_projectile.cpp (100%) rename GameObjects/{BasicObjects => }/Entities/Projectiles/test_projectile.h (100%) rename GameObjects/{BasicObjects => }/Entities/Towers/TowerSlots/test_tower_slot.cpp (84%) rename GameObjects/{BasicObjects => }/Entities/Towers/TowerSlots/test_tower_slot.h (100%) rename GameObjects/{BasicObjects => }/Entities/Towers/TowerSlots/tower_slot.cpp (100%) rename GameObjects/{BasicObjects => }/Entities/Towers/TowerSlots/tower_slot.h (74%) rename GameObjects/{BasicObjects => }/Entities/Towers/test_tower.cpp (91%) rename GameObjects/{BasicObjects => }/Entities/Towers/test_tower.h (100%) rename GameObjects/{BasicObjects => }/Entities/Towers/tower.cpp (100%) rename GameObjects/{BasicObjects => }/Entities/Towers/tower.h (78%) rename GameObjects/{BasicObjects => }/Interface/damageable.cpp (100%) rename GameObjects/{BasicObjects => }/Interface/damageable.h (100%) rename GameObjects/{BasicObjects => }/Interface/entity.cpp (89%) rename GameObjects/{BasicObjects => }/Interface/entity.h (77%) create mode 100644 GameObjects/Interface/graphics_object.cpp rename GameObjects/{BasicObjects/Interface/graphics_item.h => Interface/graphics_object.h} (58%) rename GameObjects/{BasicObjects => }/Interface/tickable.h (100%) create mode 100644 Resources/GUI/Textured boxes/Button/bottom_left_corner.png create mode 100644 Resources/GUI/Textured boxes/Button/bottom_right_corner.png create mode 100644 Resources/GUI/Textured boxes/Button/bottom_side.png create mode 100644 Resources/GUI/Textured boxes/Button/inside.png create mode 100644 Resources/GUI/Textured boxes/Button/left_side.png create mode 100644 Resources/GUI/Textured boxes/Button/right_side.png create mode 100644 Resources/GUI/Textured boxes/Button/top_left_corner.png create mode 100644 Resources/GUI/Textured boxes/Button/top_right_corner.png create mode 100644 Resources/GUI/Textured boxes/Button/top_side.png create mode 100644 Resources/GUI/Textured boxes/Default/bottom_left_corner.png create mode 100644 Resources/GUI/Textured boxes/Default/bottom_right_corner.png create mode 100644 Resources/GUI/Textured boxes/Default/bottom_side.png create mode 100644 Resources/GUI/Textured boxes/Default/inside.png create mode 100644 Resources/GUI/Textured boxes/Default/left_side.png create mode 100644 Resources/GUI/Textured boxes/Default/right_side.png create mode 100644 Resources/GUI/Textured boxes/Default/top_left_corner.png create mode 100644 Resources/GUI/Textured boxes/Default/top_right_corner.png create mode 100644 Resources/GUI/Textured boxes/Default/top_side.png create mode 100644 Resources/GUI/Textured boxes/Menu/bottom_left_corner.png create mode 100644 Resources/GUI/Textured boxes/Menu/bottom_right_corner.png create mode 100644 Resources/GUI/Textured boxes/Menu/bottom_side.png create mode 100644 Resources/GUI/Textured boxes/Menu/inside.png create mode 100644 Resources/GUI/Textured boxes/Menu/left_side.png create mode 100644 Resources/GUI/Textured boxes/Menu/right_side.png create mode 100644 Resources/GUI/Textured boxes/Menu/top_left_corner.png create mode 100644 Resources/GUI/Textured boxes/Menu/top_right_corner.png create mode 100644 Resources/GUI/Textured boxes/Menu/top_side.png create mode 100644 Resources/GUI/Textured boxes/Menu2/bottom_left_corner.png create mode 100644 Resources/GUI/Textured boxes/Menu2/bottom_right_corner.png create mode 100644 Resources/GUI/Textured boxes/Menu2/bottom_side.png create mode 100644 Resources/GUI/Textured boxes/Menu2/inside.png create mode 100644 Resources/GUI/Textured boxes/Menu2/left_side.png create mode 100644 Resources/GUI/Textured boxes/Menu2/right_side.png create mode 100644 Resources/GUI/Textured boxes/Menu2/top_left_corner.png create mode 100644 Resources/GUI/Textured boxes/Menu2/top_right_corner.png create mode 100644 Resources/GUI/Textured boxes/Menu2/top_side.png create mode 100644 Resources/images/explosion.png create mode 100644 UI/button.cpp create mode 100644 UI/button.h create mode 100644 UI/linear_layout.cpp create mode 100644 UI/linear_layout.h create mode 100644 UI/linear_menu.cpp create mode 100644 UI/linear_menu.h create mode 100644 UI/padding_box.cpp create mode 100644 UI/padding_box.h create mode 100644 UI/pixmap_object.cpp create mode 100644 UI/pixmap_object.h create mode 100644 UI/textured_box.cpp create mode 100644 UI/textured_box.h create mode 100644 UI/tooltip.cpp create mode 100644 UI/tooltip.h create mode 100644 Utilities/Resources/textured_box_pixmaps.h diff --git a/.gitignore b/.gitignore index 170b6f4..747a309 100644 --- a/.gitignore +++ b/.gitignore @@ -53,4 +53,5 @@ compile_commands.json -/.idea/ \ No newline at end of file +/.idea/ +!Controller/ui_controller.h \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 4d1db35..1cccf3e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ project(Game) set(CMAKE_CXX_STANDARD 17) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) -set(CMAKE_AUTOUIC ON) +#set(CMAKE_AUTOUIC ON) find_package(Qt6 COMPONENTS Core @@ -18,22 +18,22 @@ set(RESOURCES set(CMAKE_INCLUDE_CURRENT_DIR ON) set(GAME_OBJECTS - GameObjects/BasicObjects/Interface/damageable.cpp - GameObjects/BasicObjects/Interface/entity.cpp - GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp - GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp - GameObjects/BasicObjects/Entities/Towers/tower.cpp - GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.cpp - GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp - GameObjects/BasicObjects/Entities/Towers/test_tower.cpp - GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.cpp - GameObjects/BasicObjects/Entities/Projectiles/test_projectile.cpp - GameObjects/BasicObjects/Interface/graphics_item.cpp - GameObjects/BasicObjects/Entities/Projectiles/projectile.cpp - GameObjects/BasicObjects/Entities/Mobs/skeleton.cpp - GameObjects/BasicObjects/Entities/Mobs/cobra.cpp - GameObjects/BasicObjects/Entities/Mobs/hedgehog.cpp - GameObjects/BasicObjects/Entities/Mobs/dwarf.cpp) + GameObjects/Interface/damageable.cpp + GameObjects/Interface/entity.cpp + GameObjects/Entities/Mobs/Basis/mob.cpp + GameObjects/Entities/Mobs/test_mob.cpp + GameObjects/Entities/Towers/tower.cpp + GameObjects/Entities/Towers/TowerSlots/tower_slot.cpp + GameObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp + GameObjects/Entities/Towers/test_tower.cpp + GameObjects/Entities/Projectiles/autoguided_projectile.cpp + GameObjects/Entities/Projectiles/test_projectile.cpp + GameObjects/Interface/graphics_object.cpp + GameObjects/Entities/Projectiles/projectile.cpp + GameObjects/Entities/Mobs/skeleton.cpp + GameObjects/Entities/Mobs/cobra.cpp + GameObjects/Entities/Mobs/hedgehog.cpp + GameObjects/Entities/Mobs/dwarf.cpp) set(UTILITIES Utilities/damage.cpp @@ -46,14 +46,24 @@ set(UTILITIES wave_manager.cpp Utilities/animation.cpp Utilities/utility.cpp) - + +set(UI + UI/tooltip.cpp + UI/textured_box.cpp + UI/linear_menu.cpp + UI/linear_layout.cpp + UI/button.cpp + UI/padding_box.cpp UI/pixmap_object.cpp UI/pixmap_object.h) + add_executable(Game ${RESOURCES} ${GAME_OBJECTS} ${UTILITIES} + ${UI} main.cpp main_window.cpp Controller/controller.cpp + Controller/ui_controller.cpp game_view.cpp constants.cpp game_scene.cpp diff --git a/Controller/controller.cpp b/Controller/controller.cpp index 170ebbd..4634413 100644 --- a/Controller/controller.cpp +++ b/Controller/controller.cpp @@ -4,14 +4,19 @@ #include #include #include - -#include "GameObjects/BasicObjects/Entities/Mobs/test_mob.h" -#include "GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.h" -#include "GameObjects/BasicObjects/Entities/Mobs/skeleton.h" -#include "GameObjects/BasicObjects/Entities/Mobs/hedgehog.h" -#include "GameObjects/BasicObjects/Entities/Mobs/cobra.h" -#include "GameObjects/BasicObjects/Entities/Mobs/dwarf.h" +#include + +#include "GameObjects/Entities/Mobs/test_mob.h" +#include "GameObjects/Entities/Towers/TowerSlots/test_tower_slot.h" +#include "GameObjects/Entities/Mobs/skeleton.h" +#include "GameObjects/Entities/Mobs/hedgehog.h" +#include "GameObjects/Entities/Mobs/cobra.h" +#include "GameObjects/Entities/Mobs/dwarf.h" #include "constants.h" +#include "UI/button.h" +#include "UI/linear_menu.h" +#include "UI/padding_box.h" +#include "Utilities/Resources/pixmap_loader.h" Controller* Controller::instance; @@ -19,9 +24,18 @@ Controller::Controller() : scene_(new GameScene(Scene::kRect)), view_(new GameView(scene_)), tick_timer_(new QTimer(this)), - level_(new Level(1)) { + level_(new Level(1)), + base_hp_(20), + damage_per_current_tick_(0) { SetupScene(); LaunchTickTimer(); + + connect(this, &Controller::GameOver, [this]() { + scene_->addItem(new TestMob({100, 100})); + // it's needed, but it also blocks close button + // view_->setInteractive(false); + tick_timer_->stop(); + }); } GameView* Controller::GetView() const { @@ -37,93 +51,127 @@ Level* Controller::GetLevel() const { } void Controller::SetupScene() { - /*{ // temporary code - QPushButton* close_button = new QPushButton(); - QGraphicsProxyWidget* close_button_proxy = scene_->addWidget(close_button); - close_button_proxy->setGeometry(QRectF( - scene_->sceneRect().topRight() - VectorF{100, 0}, - scene_->sceneRect().topRight() + VectorF{0, 100})); - - close_button->setText("Close"); - QObject::connect(close_button, &QPushButton::clicked, &QApplication::exit); - - Entity* entity = new TestMob(); - scene_->addItem(entity); - scene_->setFocusItem(entity); - - TestTowerSlot* test_tower_slot = new TestTowerSlot(VectorF{400, 400}); - scene_->addItem(test_tower_slot); - - QRectF sceneRect = scene_->sceneRect(); - qreal x = sceneRect.x(); - qreal y = sceneRect.y(); - qreal width = sceneRect.width(); - qreal height = sceneRect.height(); - - scene_->addLine( - x + width / 2, - y, - x + width / 2, - y + height, - QPen(Qt::blue)); - - scene_->addLine( - x, - y + 1, - x + width, - y + 1, - QPen(Qt::blue)); - - scene_->addLine( - x, - y + height / 2, - x + width, - y + height / 2, - QPen(Qt::blue)); - } // temporary code end*/ { // temporary code - QPushButton* close_button = new QPushButton(); - QGraphicsProxyWidget* close_button_proxy = scene_->addWidget(close_button); - close_button_proxy->setGeometry(QRectF( - scene_->sceneRect().topRight() - VectorF{100, 0}, - scene_->sceneRect().topRight() + VectorF{0, 100})); - - close_button->setText("Close"); - QObject::connect(close_button, &QPushButton::clicked, &QApplication::exit); - - level_->AddObjectsToScene(scene_); - - QRectF sceneRect = scene_->sceneRect(); - qreal x = sceneRect.x(); - qreal y = sceneRect.y(); - qreal width = sceneRect.width(); - qreal height = sceneRect.height(); - - scene_->addLine( - x + width / 2, - y, - x + width / 2, - y + height, - QPen(Qt::blue)); - - scene_->addLine( - x, - y + 1, - x + width, - y + 1, - QPen(Qt::blue)); - - scene_->addLine( - x, - y + height / 2, - x + width, - y + height / 2, - QPen(Qt::blue)); + LinearMenu* main_menu = new LinearMenu(); + main_menu->SetTexturedBoxPixmaps(PixmapLoader::kMenu2TexturedBoxPixmaps); + main_menu->SetSpacing(30); + + TextButton* test_button = new TextButton(); + test_button->SetText("Test button"); + QFont button_font = test_button->GetTextDocument()->defaultFont(); + button_font.setPixelSize(30); + test_button->GetTextDocument()->setDefaultFont(button_font); + + connect(test_button, &TextButton::Clicked, + [this, test_button, main_menu](){ + static int i = 0; + i++; + scene_->addItem(new TestMob({200.0 + 10 * i, 200})); + test_button->setScale(1.5); + test_button->SetIcon(PixmapLoader::Pixmaps::FireTotem::kIdle.at(0)); + test_button->SetSpacing(test_button->Spacing() + 5); + test_button->SetPadding(test_button->Padding() + 3); + main_menu->setPos( + scene_->sceneRect().topRight() - + main_menu->boundingRect().topRight() + + QPointF{-5, 5}); + main_menu->RecalculatePositions(); + }); + + LinearLayout* layout = new LinearLayout(); + layout->SetSpacing(10); + layout->AddItem(new TextButton({0, 0}, "Menu button 1")); + layout->AddItem(new TextButton({0, 0}, "Menu button 2")); + TextButton* close_button = new TextButton({0, 0}, "Quit"); + layout->AddItem(close_button); + connect(close_button, &TextButton::Clicked, [](){ QApplication::exit(); }); + + LinearMenu* menu = new LinearMenu(); + menu->AddItem(new PaddingBox(new TextButton({0, 0}, "Menu button 1"), 10)); + menu->AddItem(new PaddingBox(new TextButton({0, 0}, "Menu button 2"), 10)); + menu->SetSpacing(5); + menu->SetPadding(20); + menu->setScale(1.2); + menu->SetTexturedBoxPixmaps(PixmapLoader::kMenuTexturedBoxPixmaps); + menu->SetType(LinearLayout::Type::Vertical); + + main_menu->AddItem(layout); + main_menu->AddItem(menu); + main_menu->AddItem(test_button); + main_menu->SetType(LinearLayout::Type::Vertical); + + //{ + // LinearLayout* test_hor_layout = new LinearLayout(); + // test_hor_layout->AddItem(new TextButton({0, 0}, "test 1")); + // test_hor_layout->AddItem(new TextButton({0, 0}, "test 2")); + // test_hor_layout->SetType(LinearLayout::Type::Horizontal); + // test_hor_layout->SetSpacing(20); + // test_hor_layout->setPos(200, 200); + // + // LinearLayout* test_ver_layout = new LinearLayout(); + // test_ver_layout->AddItem(new TextButton({0, 0}, "test 1")); + // test_ver_layout->AddItem(new TextButton({0, 0}, "test 2")); + // test_ver_layout->SetType(LinearLayout::Type::Vertical); + // test_ver_layout->SetSpacing(20); + // test_ver_layout->setPos(200, 300); + // + // scene_->addItem(test_hor_layout); + // scene_->addItem(test_ver_layout); + //} + //{ + // LinearMenu* test_hor_menu = new LinearMenu(); + // test_hor_menu->AddItem(new TextButton({0, 0}, "test 1")); + // test_hor_menu->AddItem(new TextButton({0, 0}, "test 2")); + // test_hor_menu->SetType(LinearLayout::Type::Horizontal); + // test_hor_menu->SetTexturedBoxPixmaps( + // PixmapLoader::kMenu2TexturedBoxPixmaps); + // test_hor_menu->SetPadding(50); + // test_hor_menu->SetSpacing(20); + // test_hor_menu->setPos(-200, 100); + // + // LinearMenu* test_ver_menu = new LinearMenu(); + // test_ver_menu->AddItem(new TextButton({0, 0}, "test 1")); + // test_ver_menu->AddItem(new TextButton({0, 0}, "test 2")); + // test_ver_menu->SetType(LinearLayout::Type::Vertical); + // test_ver_menu->SetTexturedBoxPixmaps( + // PixmapLoader::kMenu2TexturedBoxPixmaps); + // test_ver_menu->SetPadding(50); + // test_ver_menu->SetSpacing(20); + // test_ver_menu->setPos(-600, 100); + // + // scene_->addItem(test_hor_menu); + // scene_->addItem(test_ver_menu); + //} + //{ + // TextButton* text_button = new TextButton({0, 0}, "Button"); + // PaddingBox* padding_box = new PaddingBox(text_button, 20); + // padding_box->setPos(0, 0); + // + // scene_->addItem(padding_box); + //} + //{ + // TextButton* text_button = new TextButton({-300, 0}, "Button"); + // + // connect(text_button, &TextButton::Clicked, [text_button]() { + // text_button->SetText( + // text_button->GetTextDocument()->toPlainText() + " Button"); + // }); + // + // scene_->addItem(text_button); + //} + + scene_->addItem(main_menu); + main_menu->setPos( + scene_->sceneRect().topRight() - + main_menu->boundingRect().topRight() + + QPointF{-5, 5}); } // temporary code end + + level_->AddObjectsToScene(scene_); } void Controller::LaunchTickTimer() { - tick_timer_->setInterval(1000 / 30); + tick_timer_->setInterval(1000 / kFPS); tick_timer_->start(); connect(tick_timer_, &QTimer::timeout, this, &Controller::TickAllTickables); } @@ -136,7 +184,10 @@ Controller* Controller::Instance() { } void Controller::TickAllTickables() { - Time delta = Time(1000 / 30); + // because we don't want to emit GameOver more than one time + assert(base_hp_ > 0); + + Time delta = Time(1000 / kFPS); for (QGraphicsItem* graphics_item : scene_->items()) { if (Tickable* tickable = dynamic_cast(graphics_item)) { // TODO(jansenin): make time dependency(it @@ -145,4 +196,15 @@ void Controller::TickAllTickables() { } } level_->Tick(delta); + + base_hp_ -= damage_per_current_tick_; + damage_per_current_tick_ = 0; + if (base_hp_ <= 0) { + base_hp_ = 0; + emit GameOver(); + } +} + +void Controller::DealDamageToBase(int damage) { + // damage_per_current_tick_ += damage; } diff --git a/Controller/controller.h b/Controller/controller.h index 23cda6e..cea6ea8 100644 --- a/Controller/controller.h +++ b/Controller/controller.h @@ -4,7 +4,7 @@ #include #include -#include "GameObjects/BasicObjects/Interface/entity.h" +#include "GameObjects/Interface/entity.h" #include "game_view.h" #include "game_scene.h" #include "level.h" @@ -19,6 +19,10 @@ class Controller : public QObject { [[nodiscard]] GameScene* GetScene() const; [[nodiscard]] Level* GetLevel() const; + void DealDamageToBase(int damage); + + signals: + void GameOver(); public slots: void TickAllTickables(); @@ -35,4 +39,7 @@ class Controller : public QObject { GameView* view_; QTimer* tick_timer_; Level* level_; + + int base_hp_; + int damage_per_current_tick_; }; diff --git a/Controller/ui_controller.cpp b/Controller/ui_controller.cpp new file mode 100644 index 0000000..b7c9c25 --- /dev/null +++ b/Controller/ui_controller.cpp @@ -0,0 +1 @@ +#include "ui_controller.h" diff --git a/Controller/ui_controller.h b/Controller/ui_controller.h new file mode 100644 index 0000000..c19adeb --- /dev/null +++ b/Controller/ui_controller.h @@ -0,0 +1,3 @@ +#pragma once + +class UIController {}; diff --git a/GameObjects/BasicObjects/Interface/graphics_item.cpp b/GameObjects/BasicObjects/Interface/graphics_item.cpp deleted file mode 100644 index 2b80d7c..0000000 --- a/GameObjects/BasicObjects/Interface/graphics_item.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "graphics_item.h" - -GraphicsItem::GraphicsItem(QGraphicsItem* parent) : QGraphicsItem(parent) {} - -GameScene* GraphicsItem::scene() { - auto result = dynamic_cast(QGraphicsItem::scene()); - assert(result != nullptr); - return result; -} - -GameView* GraphicsItem::view() { - return scene()->view(); -} - -void GraphicsItem::MoveBy(const VectorF& delta) { - setPos(pos() + delta); -} diff --git a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp b/GameObjects/Entities/Mobs/Basis/mob.cpp similarity index 53% rename from GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp rename to GameObjects/Entities/Mobs/Basis/mob.cpp index af7622b..df5e5ac 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.cpp +++ b/GameObjects/Entities/Mobs/Basis/mob.cpp @@ -2,18 +2,24 @@ #include +#include "Controller/controller.h" + Mob::Mob(const VectorF& coordinates, Animation* animation, int health, + int damage_to_base, qreal speed) : Entity(coordinates, animation, health), - speed_(speed) {} + speed_(speed), + dealed_damage_to_base_(false), + damage_to_base_(damage_to_base) {} Mob::Mob(const VectorF& coordinates, QPixmap* pixmap, int health, + int damage_to_base, qreal speed) - : Mob(coordinates, new Animation(pixmap), health, speed) {} + : Mob(coordinates, new Animation(pixmap), health, damage_to_base, speed) {} qreal Mob::GetSpeed() const { return speed_; @@ -36,9 +42,26 @@ void Mob::SetRoute(Route* route) { void Mob::MoveToRouteStart() { Entity::setPos(route_->GetStart()); } -QRectF Mob::boundingRect() const { - QRectF result = Entity::boundingRect(); - return result.translated(0, - result.height() / 2); + +void Mob::Tick(Time delta) { + Entity::Tick(delta); + + if (route_ != nullptr) { + if (route_->isEnd(this) && !dealed_damage_to_base_) { + dealed_damage_to_base_ = true; + Controller::Instance()->DealDamageToBase(damage_to_base_); + } + } } +Mob::~Mob() { + if (route_ != nullptr) { + route_->RemoveEntity(this); + } +} +QRectF Mob::boundingRect() const { + QRectF result = Entity::boundingRect(); + result.translate(0, -result.height() / 2); + return result; +} diff --git a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h b/GameObjects/Entities/Mobs/Basis/mob.h similarity index 64% rename from GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h rename to GameObjects/Entities/Mobs/Basis/mob.h index 2e56deb..94a0097 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h +++ b/GameObjects/Entities/Mobs/Basis/mob.h @@ -2,7 +2,7 @@ #include -#include "GameObjects/BasicObjects/Interface/entity.h" +#include "GameObjects/Interface/entity.h" #include "Utilities/vector_f.h" #include "Utilities/route.h" @@ -11,21 +11,30 @@ class Mob : public Entity { Mob(const VectorF& coordinates, QPixmap* pixmap, int health, - qreal speed = 0); + int damage_to_base, + qreal speed); Mob(const VectorF& coordinates, Animation* animation, int health, - qreal speed = 0); + int damage_to_base, + qreal speed); virtual void SetRoute(Route* route); - virtual void MoveToRouteStart(); + void MoveToRouteStart(); + [[nodiscard]] qreal GetSpeed() const; void SetSpeed(qreal speed); + void Tick(Time delta) override; + QRectF boundingRect() const override; + virtual ~Mob(); + protected: Route* route_{nullptr}; qreal speed_; + bool dealed_damage_to_base_; + int damage_to_base_; }; diff --git a/GameObjects/BasicObjects/Entities/Mobs/cobra.cpp b/GameObjects/Entities/Mobs/cobra.cpp similarity index 87% rename from GameObjects/BasicObjects/Entities/Mobs/cobra.cpp rename to GameObjects/Entities/Mobs/cobra.cpp index 3992bab..dd9fc2f 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/cobra.cpp +++ b/GameObjects/Entities/Mobs/cobra.cpp @@ -7,12 +7,13 @@ using P = PixmapLoader::Pixmaps; Cobra::Cobra(const VectorF& coordinates) : Mob(coordinates, - new Animation(P::kCobraWalk, + new Animation(P::Cobra::kWalk, C::kTimeBetweenFrames), C::kHealth, + C::kDamageToBase, C::kSpeed), is_destroying_(false), walk_animation_(animation_), - death_animation_(new Animation(P::kCobraDeath, C::kTimeBetweenFrames)) { + death_animation_(new Animation(P::Cobra::kDeath, C::kTimeBetweenFrames)) { setScale(2); } diff --git a/GameObjects/BasicObjects/Entities/Mobs/cobra.h b/GameObjects/Entities/Mobs/cobra.h similarity index 100% rename from GameObjects/BasicObjects/Entities/Mobs/cobra.h rename to GameObjects/Entities/Mobs/cobra.h diff --git a/GameObjects/BasicObjects/Entities/Mobs/dwarf.cpp b/GameObjects/Entities/Mobs/dwarf.cpp similarity index 88% rename from GameObjects/BasicObjects/Entities/Mobs/dwarf.cpp rename to GameObjects/Entities/Mobs/dwarf.cpp index e4dfa5d..bad2cba 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/dwarf.cpp +++ b/GameObjects/Entities/Mobs/dwarf.cpp @@ -7,12 +7,13 @@ using P = PixmapLoader::Pixmaps; Dwarf::Dwarf(const VectorF& coordinates) : Mob(coordinates, - new Animation(P::kDwarfWalk, + new Animation(P::Dwarf::kWalk, D::kTimeBetweenFrames), D::kHealth, + D::kDamageToBase, D::kSpeed), is_destroying_(false), walk_animation_(animation_), - death_animation_(new Animation(P::kDwarfDeath, D::kTimeBetweenFrames)) { + death_animation_(new Animation(P::Dwarf::kDeath, D::kTimeBetweenFrames)) { setScale(3); } diff --git a/GameObjects/BasicObjects/Entities/Mobs/dwarf.h b/GameObjects/Entities/Mobs/dwarf.h similarity index 100% rename from GameObjects/BasicObjects/Entities/Mobs/dwarf.h rename to GameObjects/Entities/Mobs/dwarf.h diff --git a/GameObjects/BasicObjects/Entities/Mobs/hedgehog.cpp b/GameObjects/Entities/Mobs/hedgehog.cpp similarity index 86% rename from GameObjects/BasicObjects/Entities/Mobs/hedgehog.cpp rename to GameObjects/Entities/Mobs/hedgehog.cpp index cd4e799..839eefe 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/hedgehog.cpp +++ b/GameObjects/Entities/Mobs/hedgehog.cpp @@ -7,12 +7,14 @@ using P = PixmapLoader::Pixmaps; Hedgehog::Hedgehog(const VectorF& coordinates) : Mob(coordinates, - new Animation(P::kHedgehogWalk, + new Animation(P::Hedgehog::kWalk, H::kTimeBetweenFrames), H::kHealth, + H::kDamageToBase, H::kSpeed), is_destroying_(false), walk_animation_(animation_), - death_animation_(new Animation(P::kHedgehogDeath, H::kTimeBetweenFrames)) { + death_animation_( + new Animation(P::Hedgehog::kDeath, H::kTimeBetweenFrames)) { setScale(2); } diff --git a/GameObjects/BasicObjects/Entities/Mobs/hedgehog.h b/GameObjects/Entities/Mobs/hedgehog.h similarity index 100% rename from GameObjects/BasicObjects/Entities/Mobs/hedgehog.h rename to GameObjects/Entities/Mobs/hedgehog.h diff --git a/GameObjects/BasicObjects/Entities/Mobs/skeleton.cpp b/GameObjects/Entities/Mobs/skeleton.cpp similarity index 81% rename from GameObjects/BasicObjects/Entities/Mobs/skeleton.cpp rename to GameObjects/Entities/Mobs/skeleton.cpp index da51678..8f83561 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/skeleton.cpp +++ b/GameObjects/Entities/Mobs/skeleton.cpp @@ -5,14 +5,16 @@ namespace S = Entities::Skeleton; using P = PixmapLoader::Pixmaps; -Skeleton::Skeleton(const VectorF& coordinates) : - Mob(coordinates, - new Animation(P::kSkeletonWalk, +Skeleton::Skeleton(const VectorF& coordinates) + : Mob(coordinates, + new Animation(P::Skeleton::kWalk, S::kTimeBetweenFrames), S::kHealth, + S::kDamageToBase, S::kSpeed), is_destroying_(false), walk_animation_(animation_), - death_animation_(new Animation(P::kSkeletonDeath, S::kTimeBetweenFrames)) { + death_animation_( + new Animation(P::Skeleton::kDeath, S::kTimeBetweenFrames)) { setScale(3); } diff --git a/GameObjects/BasicObjects/Entities/Mobs/skeleton.h b/GameObjects/Entities/Mobs/skeleton.h similarity index 100% rename from GameObjects/BasicObjects/Entities/Mobs/skeleton.h rename to GameObjects/Entities/Mobs/skeleton.h diff --git a/GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp b/GameObjects/Entities/Mobs/test_mob.cpp similarity index 62% rename from GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp rename to GameObjects/Entities/Mobs/test_mob.cpp index cc12813..49bf52e 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/test_mob.cpp +++ b/GameObjects/Entities/Mobs/test_mob.cpp @@ -13,11 +13,12 @@ void TestMob::Tick(Time delta) { animation_->SetIndex(animation_->FrameCount() - 1); deleteLater(); } - if (route_ != nullptr) { + if (route_ != nullptr && !is_destroying_) { if (!is_creating_ && !route_->isEnd(this)) { route_->Move(this, speed_ * delta.seconds()); } } + test_tooltip->setPos(scenePos() + QPointF(0, 80)); } void TestMob::keyPressEvent(QKeyEvent* event) { @@ -42,6 +43,13 @@ void TestMob::keyPressEvent(QKeyEvent* event) { void TestMob::mousePressEvent(QGraphicsSceneMouseEvent* event) { scene()->addItem(new TestMob(pos() + VectorF{100, 100})); + static int tooltip_number = 0; + tooltip_number++; + test_tooltip->setHtml( + "Test tooltip line 1
" + "Test tooltip line 2
" + "Test very long tooltip line with line break in the end" + + QString::number(tooltip_number)); } TestMob::TestMob(const VectorF& coordinates) @@ -49,24 +57,35 @@ TestMob::TestMob(const VectorF& coordinates) coordinates, // TODO(jansenin): Было бы лучше инициализировать анимации отдельно // от моба - new Animation(PixmapLoader::Pixmaps::kFireTotemAppearing, 50_ms), + new Animation(PixmapLoader::Pixmaps::FireTotem::kAppearing, 50_ms), Entities::TestMob::kHealth, + 1, 300), is_destroying_(false), idle_animation_( - new Animation(PixmapLoader::Pixmaps::kFireTotemIdle, 50_ms)), + new Animation(PixmapLoader::Pixmaps::FireTotem::kIdle, 50_ms)), disappearing_animation_( - new Animation(PixmapLoader::Pixmaps::kFireTotemDisappear, 50_ms)), + new Animation(PixmapLoader::Pixmaps::FireTotem::kDisappear, 50_ms)), appearing_animation_(animation_), - is_creating_(true) { + is_creating_(true), + test_tooltip(new Tooltip()) { setFlag(QGraphicsItem::ItemIsFocusable, true); + setAcceptHoverEvents(true); setScale(1.4); + + test_tooltip->setPos(scenePos() + QPointF(0, 80)); + test_tooltip->setVisible(false); + test_tooltip->setHtml( + "Test tooltip line 1
" + "Test tooltip line 2
" + "Test very long tooltip line with line break in the end
"); } TestMob::~TestMob() { delete idle_animation_; delete disappearing_animation_; delete appearing_animation_; + test_tooltip->deleteLater(); } void TestMob::ApplyDamage(Damage damage) { @@ -83,8 +102,19 @@ void TestMob::SetRoute(Route* route) { Mob::SetRoute(route); MoveToRouteStart(); } -QRectF TestMob::boundingRect() const { - // because in animation file there is gap between totem and bottom side - // of frame(and it's approximately 10px) - return Mob::boundingRect().translated(0, 10); + +void TestMob::hoverEnterEvent(QGraphicsSceneHoverEvent* event) { + test_tooltip->setVisible(true); +} + +void TestMob::hoverLeaveEvent(QGraphicsSceneHoverEvent* event) { + test_tooltip->setVisible(false); +} + +QVariant TestMob::itemChange(QGraphicsItem::GraphicsItemChange change, + const QVariant& value) { + if (change == GraphicsItemChange::ItemSceneHasChanged) { + scene()->addItem(test_tooltip); + } + return QGraphicsItem::itemChange(change, value); } diff --git a/GameObjects/BasicObjects/Entities/Mobs/test_mob.h b/GameObjects/Entities/Mobs/test_mob.h similarity index 63% rename from GameObjects/BasicObjects/Entities/Mobs/test_mob.h rename to GameObjects/Entities/Mobs/test_mob.h index 6349f51..f192fef 100644 --- a/GameObjects/BasicObjects/Entities/Mobs/test_mob.h +++ b/GameObjects/Entities/Mobs/test_mob.h @@ -2,8 +2,9 @@ #include -#include "Basis/mob.h" +#include "GameObjects/Entities/Mobs/Basis/mob.h" #include "Utilities/vector_f.h" +#include "UI/tooltip.h" class TestMob : public Mob { public: @@ -13,17 +14,24 @@ class TestMob : public Mob { void ApplyDamage(Damage damage) override; void SetRoute(Route* route) override; - QRectF boundingRect() const override; - ~TestMob() override; protected: + QVariant itemChange(GraphicsItemChange change, + const QVariant& value) override; + void keyPressEvent(QKeyEvent* event) override; void mousePressEvent(QGraphicsSceneMouseEvent* event) override; + void hoverEnterEvent(QGraphicsSceneHoverEvent* event) override; + void hoverLeaveEvent(QGraphicsSceneHoverEvent* event) override; + bool is_destroying_; bool is_creating_; + Animation* idle_animation_; Animation* disappearing_animation_; Animation* appearing_animation_; + + Tooltip* test_tooltip; }; diff --git a/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.cpp b/GameObjects/Entities/Projectiles/autoguided_projectile.cpp similarity index 97% rename from GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.cpp rename to GameObjects/Entities/Projectiles/autoguided_projectile.cpp index 0788072..567b1a4 100644 --- a/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.cpp +++ b/GameObjects/Entities/Projectiles/autoguided_projectile.cpp @@ -1,7 +1,7 @@ #include #include "autoguided_projectile.h" -#include "GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h" +#include "GameObjects/Entities/Mobs/Basis/mob.h" AutoguidedProjectile::AutoguidedProjectile( const VectorF& coordinates, diff --git a/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.h b/GameObjects/Entities/Projectiles/autoguided_projectile.h similarity index 89% rename from GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.h rename to GameObjects/Entities/Projectiles/autoguided_projectile.h index 75c2b9a..1837cdc 100644 --- a/GameObjects/BasicObjects/Entities/Projectiles/autoguided_projectile.h +++ b/GameObjects/Entities/Projectiles/autoguided_projectile.h @@ -1,6 +1,6 @@ #pragma once -#include "GameObjects/BasicObjects/Entities/Projectiles/projectile.h" +#include "projectile.h" class AutoguidedProjectile : public Projectile { public: diff --git a/GameObjects/BasicObjects/Entities/Projectiles/projectile.cpp b/GameObjects/Entities/Projectiles/projectile.cpp similarity index 100% rename from GameObjects/BasicObjects/Entities/Projectiles/projectile.cpp rename to GameObjects/Entities/Projectiles/projectile.cpp diff --git a/GameObjects/BasicObjects/Entities/Projectiles/projectile.h b/GameObjects/Entities/Projectiles/projectile.h similarity index 77% rename from GameObjects/BasicObjects/Entities/Projectiles/projectile.h rename to GameObjects/Entities/Projectiles/projectile.h index 64e1870..a5fc192 100644 --- a/GameObjects/BasicObjects/Entities/Projectiles/projectile.h +++ b/GameObjects/Entities/Projectiles/projectile.h @@ -1,6 +1,6 @@ #pragma once -#include "GameObjects/BasicObjects/Interface/entity.h" +#include "GameObjects/Interface/entity.h" class Projectile : public Entity { public: diff --git a/GameObjects/BasicObjects/Entities/Projectiles/test_projectile.cpp b/GameObjects/Entities/Projectiles/test_projectile.cpp similarity index 100% rename from GameObjects/BasicObjects/Entities/Projectiles/test_projectile.cpp rename to GameObjects/Entities/Projectiles/test_projectile.cpp diff --git a/GameObjects/BasicObjects/Entities/Projectiles/test_projectile.h b/GameObjects/Entities/Projectiles/test_projectile.h similarity index 100% rename from GameObjects/BasicObjects/Entities/Projectiles/test_projectile.h rename to GameObjects/Entities/Projectiles/test_projectile.h diff --git a/GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp b/GameObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp similarity index 84% rename from GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp rename to GameObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp index 621fea4..ad233e7 100644 --- a/GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp +++ b/GameObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp @@ -1,7 +1,9 @@ #include "test_tower_slot.h" -#include "GameObjects/BasicObjects/Entities/Towers/test_tower.h" -#include +#include + +#include "GameObjects/Entities/Towers/test_tower.h" +#include "Utilities/Resources/pixmap_loader.h" TestTowerSlot::TestTowerSlot(const VectorF& coordinates) : TowerSlot( coordinates, PixmapLoader::Pixmaps::kTestTowerSlot) {} diff --git a/GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.h b/GameObjects/Entities/Towers/TowerSlots/test_tower_slot.h similarity index 100% rename from GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.h rename to GameObjects/Entities/Towers/TowerSlots/test_tower_slot.h diff --git a/GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.cpp b/GameObjects/Entities/Towers/TowerSlots/tower_slot.cpp similarity index 100% rename from GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.cpp rename to GameObjects/Entities/Towers/TowerSlots/tower_slot.cpp diff --git a/GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.h b/GameObjects/Entities/Towers/TowerSlots/tower_slot.h similarity index 74% rename from GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.h rename to GameObjects/Entities/Towers/TowerSlots/tower_slot.h index d281e4f..46b5f5d 100644 --- a/GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.h +++ b/GameObjects/Entities/Towers/TowerSlots/tower_slot.h @@ -1,7 +1,7 @@ #pragma once -#include "GameObjects/BasicObjects/Entities/Towers/tower.h" -#include "GameObjects/BasicObjects/Interface/entity.h" +#include "GameObjects/Entities/Towers/tower.h" +#include "GameObjects/Interface/entity.h" class TowerSlot : public Entity { public: diff --git a/GameObjects/BasicObjects/Entities/Towers/test_tower.cpp b/GameObjects/Entities/Towers/test_tower.cpp similarity index 91% rename from GameObjects/BasicObjects/Entities/Towers/test_tower.cpp rename to GameObjects/Entities/Towers/test_tower.cpp index df287c7..b8711bd 100644 --- a/GameObjects/BasicObjects/Entities/Towers/test_tower.cpp +++ b/GameObjects/Entities/Towers/test_tower.cpp @@ -2,8 +2,8 @@ #include -#include "GameObjects/BasicObjects/Entities/Projectiles/test_projectile.h" -#include "GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h" +#include "GameObjects/Entities/Projectiles/test_projectile.h" +#include "GameObjects/Entities/Mobs/Basis/mob.h" #include "Utilities/Resources/pixmap_loader.h" #include "constants.h" diff --git a/GameObjects/BasicObjects/Entities/Towers/test_tower.h b/GameObjects/Entities/Towers/test_tower.h similarity index 100% rename from GameObjects/BasicObjects/Entities/Towers/test_tower.h rename to GameObjects/Entities/Towers/test_tower.h diff --git a/GameObjects/BasicObjects/Entities/Towers/tower.cpp b/GameObjects/Entities/Towers/tower.cpp similarity index 100% rename from GameObjects/BasicObjects/Entities/Towers/tower.cpp rename to GameObjects/Entities/Towers/tower.cpp diff --git a/GameObjects/BasicObjects/Entities/Towers/tower.h b/GameObjects/Entities/Towers/tower.h similarity index 78% rename from GameObjects/BasicObjects/Entities/Towers/tower.h rename to GameObjects/Entities/Towers/tower.h index 4a41492..7be2b91 100644 --- a/GameObjects/BasicObjects/Entities/Towers/tower.h +++ b/GameObjects/Entities/Towers/tower.h @@ -1,6 +1,6 @@ #pragma once -#include "GameObjects/BasicObjects/Interface/entity.h" +#include "GameObjects/Interface/entity.h" class Tower : public Entity { public: diff --git a/GameObjects/BasicObjects/Interface/damageable.cpp b/GameObjects/Interface/damageable.cpp similarity index 100% rename from GameObjects/BasicObjects/Interface/damageable.cpp rename to GameObjects/Interface/damageable.cpp diff --git a/GameObjects/BasicObjects/Interface/damageable.h b/GameObjects/Interface/damageable.h similarity index 100% rename from GameObjects/BasicObjects/Interface/damageable.h rename to GameObjects/Interface/damageable.h diff --git a/GameObjects/BasicObjects/Interface/entity.cpp b/GameObjects/Interface/entity.cpp similarity index 89% rename from GameObjects/BasicObjects/Interface/entity.cpp rename to GameObjects/Interface/entity.cpp index 7d7df4c..64f97c3 100644 --- a/GameObjects/BasicObjects/Interface/entity.cpp +++ b/GameObjects/Interface/entity.cpp @@ -1,7 +1,5 @@ #include "entity.h" -#include - Entity::Entity( const VectorF& coordinates, QPixmap* pixmap, @@ -10,11 +8,14 @@ Entity::Entity( Entity::Entity(const VectorF& coordinates, Animation* animation, int health) : Damageable(health), - GraphicsItem(), - animation_(animation) { + GraphicsObject(), + animation_(animation) { animation->Frame(); setPos(coordinates); setFlag(ItemSendsGeometryChanges); + connect(this, &Entity::yChanged, [this](){ + setZValue(pos().y()); + }); } QRectF Entity::boundingRect() const { diff --git a/GameObjects/BasicObjects/Interface/entity.h b/GameObjects/Interface/entity.h similarity index 77% rename from GameObjects/BasicObjects/Interface/entity.h rename to GameObjects/Interface/entity.h index d6a8bc5..40840af 100644 --- a/GameObjects/BasicObjects/Interface/entity.h +++ b/GameObjects/Interface/entity.h @@ -10,15 +10,13 @@ #include "tickable.h" #include "damageable.h" #include "Utilities/vector_f.h" -#include "GameObjects/BasicObjects/Interface/graphics_item.h" +#include "graphics_object.h" #include "Utilities/animation.h" class Entity - : public QObject, - public Tickable, + : public Tickable, public Damageable, - public GraphicsItem { - Q_OBJECT + public GraphicsObject { public: Entity( const VectorF& coordinates, @@ -30,7 +28,7 @@ class Entity Animation* animation, int health = 0); - [[nodiscard]] QRectF boundingRect() const override; + QRectF boundingRect() const override; void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override; diff --git a/GameObjects/Interface/graphics_object.cpp b/GameObjects/Interface/graphics_object.cpp new file mode 100644 index 0000000..8ff8298 --- /dev/null +++ b/GameObjects/Interface/graphics_object.cpp @@ -0,0 +1,18 @@ +#include "graphics_object.h" + +GraphicsObject::GraphicsObject(QGraphicsItem* parent) + : QGraphicsObject(parent) {} + +GameScene* GraphicsObject::scene() { + auto result = dynamic_cast(QGraphicsObject::scene()); + assert(result != nullptr); + return result; +} + +GameView* GraphicsObject::view() { + return scene()->view(); +} + +void GraphicsObject::MoveBy(const VectorF& delta) { + setPos(pos() + delta); +} diff --git a/GameObjects/BasicObjects/Interface/graphics_item.h b/GameObjects/Interface/graphics_object.h similarity index 58% rename from GameObjects/BasicObjects/Interface/graphics_item.h rename to GameObjects/Interface/graphics_object.h index 0255ceb..a9018a5 100644 --- a/GameObjects/BasicObjects/Interface/graphics_item.h +++ b/GameObjects/Interface/graphics_object.h @@ -1,14 +1,14 @@ #pragma once -#include "QGraphicsItem" +#include "QGraphicsObject" #include "Utilities/vector_f.h" #include "game_scene.h" #include "game_view.h" -class GraphicsItem : public QGraphicsItem { +class GraphicsObject : public QGraphicsObject { public: - explicit GraphicsItem(QGraphicsItem* parent = nullptr); + explicit GraphicsObject(QGraphicsItem* parent = nullptr); GameScene* scene(); GameView* view(); diff --git a/GameObjects/BasicObjects/Interface/tickable.h b/GameObjects/Interface/tickable.h similarity index 100% rename from GameObjects/BasicObjects/Interface/tickable.h rename to GameObjects/Interface/tickable.h diff --git a/Resources/GUI/Textured boxes/Button/bottom_left_corner.png b/Resources/GUI/Textured boxes/Button/bottom_left_corner.png new file mode 100644 index 0000000000000000000000000000000000000000..802763f20077951e314e91814fa36d9aa4eb4069 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^96-#&!3HGb=lz)rq!^2X+?^QKos)S9a~60+7BevL9RguSQ4OyKprDqgi(`mJaPky^z`y4kSbiLNx=@EBq3MzZ q<5Mn)g(fl!c6ajSNmLv-z`(HM9na~60+7BevL9RguSQ4OyKprDbbi(`mJaB|4yvY+Q0SnT%JaHKji2v0f2 ysS$oaLvc~pqc-vUJY%Ps2@dS$JT?gl3=DvjzBsxT4nJ@ErnSMo|r~2B4sjr;B5V#N}iO iEe8Sa1s(wb0t^piSOcRrc<=#b89ZJ6T-G@yGywpV^B{Ww literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Button/inside.png b/Resources/GUI/Textured boxes/Button/inside.png new file mode 100644 index 0000000000000000000000000000000000000000..4e02e0aba804754ed031554da2d67e36e58c2931 GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^8bGYV!VDxig;G_46k~CayA#8@b22Z19F}xPUq=Rp zjs4tz5?O(K<^Z1%S1XsaeNMt3Kw1hsB8wRq_zr*53# bMm9DErY{VPA|ioDfN~6;u6{1-oD!M<90VN% literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Button/left_side.png b/Resources/GUI/Textured boxes/Button/left_side.png new file mode 100644 index 0000000000000000000000000000000000000000..021f80ecfe141386c31c1ab86c33e26e9dad8303 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^96+qX!VDzc{L{VyDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoB=)|t`Z`uRxW93+Aeo43gmzU3p^r=85sBufiR<}hF1enP}I}KF+}2W nazcWDh|HaqNkUu;m#{Fb7iJAKoWA)4PyvIdtDnm{r-UW|7P})y literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Button/right_side.png b/Resources/GUI/Textured boxes/Button/right_side.png new file mode 100644 index 0000000000000000000000000000000000000000..f4de339109116226f620621217c94dc7fbd3ab3a GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^96+qX!VDzc{L{VyDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheLIFM@u2wE-rgpKqM!qU)wlY$>5+bU%KVJC=l;te&h%9Dc;5!7ujG`J| w4M0IrPZ!4!iOb0e0!Exi6(pS4^#y?r&`c6v8~XF-OrQb=Pgg&ebxsLQ0B(6DTL1t6 literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Button/top_left_corner.png b/Resources/GUI/Textured boxes/Button/top_left_corner.png new file mode 100644 index 0000000000000000000000000000000000000000..9cabf01dc7ac4a381c3c5d05319662519e180829 GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enP~OwUF+?LcS%RfO(CctxOUJ8v4Pl-c3rzeR dRx+`%F-%*_81b87w*gQogQu&X%Q~loCIHt%AwK{B literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Button/top_right_corner.png b/Resources/GUI/Textured boxes/Button/top_right_corner.png new file mode 100644 index 0000000000000000000000000000000000000000..3fda1aca4c7f3edc36f3c3b507a48ef3fdd445bb GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enP{q^5F+?LcS%Re@(8=Yi{S;m{{d;%PT8s`h iaC$vvnWB}Dz`$@%orUA|jel}L^$eb_elF{r5}E*|)+AN{ literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Button/top_side.png b/Resources/GUI/Textured boxes/Button/top_side.png new file mode 100644 index 0000000000000000000000000000000000000000..6fad1753dfd1a4e88b68c61be9dd1bee30b698c8 GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^8bHj!!VDxUYZhbxDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheYymzYt`Z`uRxW9QVU@8!5zYdS$YKTtzC$3)D5~Mr02CDRba4!kxSYIz hRp1DdhLDH|3&Z^rtbrnGCNV%+22WQ%mvv4FO#lks9|r&c literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Default/bottom_left_corner.png b/Resources/GUI/Textured boxes/Default/bottom_left_corner.png new file mode 100644 index 0000000000000000000000000000000000000000..865b8c8d6f55f1934d19d1ed8b615a385f6d474e GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$3?vg*uel1O7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%xN{Fa-&)yQ1*>T|X9V?eKpm0Lje|I3oRubeF{2v4uHt%1uA1K0E z;1OBOz`%D1gc(IOyc&RlhMq2tArj%q42*6X4$ln?53&SUu34j?XKdWjeKIkTQS<1N nh8+RP1{MkoLJp4%3>X+Jw=n!wd#tVv)Xd=N>gTe~DWM4fyzDyw literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Default/bottom_right_corner.png b/Resources/GUI/Textured boxes/Default/bottom_right_corner.png new file mode 100644 index 0000000000000000000000000000000000000000..e17577e2389ef277f4495a8d5ffbb6d9dc8dea93 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$3?vg*uel1O7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%xcF*1-A)5pztjJo*6)jtt7}V_&*3RY~H_QKTw3T zz$3Dlfr0N32s4Umcr^e8jXhl)LnOje&p7fiDDW^jYCioRzs<#0>U8GwLsiai)0&l& qm=xw-a#6E<_@yz+-mil95}Q>HqoU2SqicZL89ZJ6T-G@yGywp)i9aj= literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Default/bottom_side.png b/Resources/GUI/Textured boxes/Default/bottom_side.png new file mode 100644 index 0000000000000000000000000000000000000000..d3a7c85585178554775f0c83d6b39baa393b98fb GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^DnQJ`!VDyTTx9wHq!^2X+?^QKos)S9vjzBsxOUIpA|awW$us#7P=vFgTe~DWM4fw(lUA literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Default/inside.png b/Resources/GUI/Textured boxes/Default/inside.png new file mode 100644 index 0000000000000000000000000000000000000000..8a2ea5d19964e9d341af008c84317ced7a387257 GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|l3?zm1T2})p#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6Nn{1`*#dk*TqQ(QyJv6ty}cczpR>RtvY3H^?+^$xifVW@00jj-T^vIsE+;1l gurvyKaB?v*+)d^F%Cj>(8z{-(>FVdQ&MBb@0GP%h*#H0l literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Default/right_side.png b/Resources/GUI/Textured boxes/Default/right_side.png new file mode 100644 index 0000000000000000000000000000000000000000..d657201b2aac4ba737c1fab0e4585c1206dd9e88 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^JV30%!VDz+mmKQ{QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`*#dk*T)Ss)kq}Xxk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%xN{FZ)IDIE7v!i?V7Au!Dpzt=Uo-aU(tt7}V_&*3RY~H_QKTw3T zz$3Dlfr0N32s4Umcr^e8jXhl)LnOjedmQ-~6nG9vocUjWQ*e4ljQ$q!4N^0{N#E;` qWXPPFmNLnBja|UUk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%xN{FaNWp;GW-g4md9V?eKpm0XCWde|5D+%%o{tp5SoA)o-4;0}n z@Q5sCVBk9h!i=ICUJXD&Lr)jS5Q*?)2F5TAhvx=HhgbqEeS8%3jEy_GPbMZZY94*k nup=PZz(RpR$l;NJ0RuzA7DnFwNvk=4ni)J@{an^LB{Ts5KNvYf literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Default/top_side.png b/Resources/GUI/Textured boxes/Default/top_side.png new file mode 100644 index 0000000000000000000000000000000000000000..a68a4971532c6c1f19e79752403201864a841606 GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^DnQJ`!VDyTTx9wHq!^2X+?^QKos)S9vjzBsxJrnqcF*4OdwV-bKWBkQWHAE+-yslY6xHx*0166ux;TbNTuxTt h<49^yR94a8U?^C_{grRolnp>x22WQ%mvv4FO#tv)BIN)8 literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Menu/bottom_left_corner.png b/Resources/GUI/Textured boxes/Menu/bottom_left_corner.png new file mode 100644 index 0000000000000000000000000000000000000000..206794bc7c3503305a8564ca9a5ca1322f919745 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^5Nn{1`c>;VwTqQ(QOYALoNn{1`c>;VwTqQ(QOYALok44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0h2Ka=yN{FbI*jw(%59nQ6cLyX`;1OBOz`%D1gc(IOyc&Rl%APKcAr_~T zC0JV;6{a32F!Sj2O0bZ2*?K_k7+WtBQ$r&ogL#!tBeT=GB%pEzPgg&ebxsLQ0N?8= Aa{vGU literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Menu/inside.png b/Resources/GUI/Textured boxes/Menu/inside.png new file mode 100644 index 0000000000000000000000000000000000000000..c92ce16c2e6d6dd55851f0a31dade208c6211e2c GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^6M#5`g&9cB7hJ3fq!^2X+?^QKos)S9GY9yDxY}zN$sSLL1#&qHJR*x382Ao>Fr%o3R|8N`*3-o?B;xSfgN(dD n-k}BG{d4)*S%6Fi2ALI%;$IjTH|9M24B~pa`njxgN@xNAb9p12 literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Menu/left_side.png b/Resources/GUI/Textured boxes/Menu/left_side.png new file mode 100644 index 0000000000000000000000000000000000000000..723fca2681cb320a196b95f65fb5708c73bcfa7c GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^5Nn{1`c>;VwTqQ(QOYALo^YI^scIE$kIi(`d{ Y*fn`h!|p(pWp00i_>zopr08H^RTmS$7 literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Menu/right_side.png b/Resources/GUI/Textured boxes/Menu/right_side.png new file mode 100644 index 0000000000000000000000000000000000000000..db372a1667502f11c596f29aa00e2d297888fcac GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^5Nn{1`c>;VwTqQ(QOYALop=fS?83{1OPv4G9dr} literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Menu/top_left_corner.png b/Resources/GUI/Textured boxes/Menu/top_left_corner.png new file mode 100644 index 0000000000000000000000000000000000000000..8697f8857d82e4ec09122b731edbf668b4679a66 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6-$0X`wF5+bTQ@&iijE$uaou0|v{0L3{AJR*x382Ao>Fr%o3R|8N`#?!?y xMB{w20zbzg#*Z?p77KKbOYn6(pTHp@!Qf~s>gcg7IufXk!PC{xWt~$(697#4B?kZi literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Menu/top_right_corner.png b/Resources/GUI/Textured boxes/Menu/top_right_corner.png new file mode 100644 index 0000000000000000000000000000000000000000..5a507cb046a2728a28be06f8bedf7dd8c824c652 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6-$0X`wF5+bTQ@&iijE$uaou0|v{0L3{AJR*x382Ao>Fr%o3R|8N`#?!?y xMB{w20z1bc#*Z?p77KKbOYn6(pTHv_!H~UI)X^Z?_Bc=-gQu&X%Q~loCID9MC7J*L literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Menu/top_side.png b/Resources/GUI/Textured boxes/Menu/top_side.png new file mode 100644 index 0000000000000000000000000000000000000000..69c47e9e5edc810508a6b115d48fde2d5b18d22c GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^6M$HPg&9ab@6NOXQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`c>;VwTqQ(QcjO0@*jw6b7+sA>Z~%&P7I;J!GcfQS0%1l`4X*~EpsJ^f zV~EA+WC_-mMun*d3d}q@y%Mf0n3y}k5X8$65n$lqVX)Dg$tbq>d@WD|gQu&X%Q~lo FCIGX9D>(oF literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Menu2/bottom_left_corner.png b/Resources/GUI/Textured boxes/Menu2/bottom_left_corner.png new file mode 100644 index 0000000000000000000000000000000000000000..0518658ae6ea96fc9b69321518dc89196d47735c GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^CLqkg3?x4-dwml~F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl}23GfMVl@L)?({{0PNdpR0pDLXWQdbh>7ySSKe+CDwm0y5-&H|6fVg?4j z!ywFfJby(BP_WL^#WBRg`|Slsz6J#W=fEq!??-mYKa!A&>3W!Ja=Fa;)lIe)t|?+$ zJI*W;n;5xt%l$v8UtH1xyHDt33C?uYRoZ-M;>sW21XFr9xJ4-csZ+^YQEhzCF9s<%iK(rrx|CgioA9{GIRNRD7WKR>urIrI!lEG?{a_SKh3TSbP0o} LtDnm{r-UW|uxe!{ literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Menu2/bottom_right_corner.png b/Resources/GUI/Textured boxes/Menu2/bottom_right_corner.png new file mode 100644 index 0000000000000000000000000000000000000000..69eaa1bd72cee80ad757c80371a2b33809b06a1d GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^CLqkg3?x4-dwml~F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl}23GfMVRnvBn5K*;qNdpQ@*%b@Y#8MLE7ySSKe+CDwm0y5-&H|6fVg?4j z!ywFfJby(BP_WX|#WBRg`|Slsz6J#W=fJ7I??-yu9WxZ!*7tDji7j_GoP8tfBDc5U z#A0!Q$}dbx{!1S})L(3_)F0>YzC8C`FMPqlu&A(hy>!R>_ErNs+{U#x3< zF*o%JpY7J#i_y#{O;%;L8~qAhHqrU}w8Sd~vwwYAF-163fh$q`gNn{1`c>;VwT-CH)Bt%rLT+)C7Q+CDP1gR?t@(cd||38C+*2*tHK4*bPWHAE+ z-(e7DJf6QI1t@6b>EamT;r;f)MqUO7j>89@Z~lMIM5n<+^e0=vLw2BooT;8gFJ`N> iKf4-PzNYfEH+k_?`%elF{r5}E*jsyi0| literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Menu2/inside.png b/Resources/GUI/Textured boxes/Menu2/inside.png new file mode 100644 index 0000000000000000000000000000000000000000..177199b2ecd542860037e9c1d464e1c695f7fd53 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xZ3?!EyURMI77>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~$2l#}zs%g8-sjkleaybh;B8wRq_zr_GnvpAmf$@I)zZjr6gQu&X%Q~loCIH#9CJX=o literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Menu2/left_side.png b/Resources/GUI/Textured boxes/Menu2/left_side.png new file mode 100644 index 0000000000000000000000000000000000000000..2ebb7caaaf633340de640d2724924ca68173c0e8 GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^CP3`L!3-q(+|-hR6k~CayA#8@b22Z19F}xPUq=Rp zjs4tz5?O(Ko&cW^R|yeSE0;7iZ5N;b>n!P+Aax}{e!>6$|7UQ}TKNUY=PdAuEM{Qf zI}E~%$MaXD00k{PT^vI^yx*SQ$jhK0aQJ}woBhU)pBOrBUElHP&8(=>+3bD=O~P{? ju&7%cb3ZjdZ+PVM%xNb!1@J z*w6hZkrl}23GfMVl@L+2a!FIub^!{o&XS%9Qdbh>7ySSKe+CDwm0y5-&H|6fVg?4j z!ywFfJby(BP_Wa}#WBRg`|Slsp~DJ1&VgR<>YrcxaQ2Fx6-D1DHP_|XR-{wR`+IuZ!`&nWtZpWU@cds+}7AssPFD7-<`}sA=hdl*u zH;SexPF~@fBDA%`XOY-M&$TJ`2j3d~a#0KHKB1B&IMYQ}NjR&P$#@dKqx!kHDxjkn NJYD@<);T3K0RXs$V<-Rs literal 0 HcmV?d00001 diff --git a/Resources/GUI/Textured boxes/Menu2/top_right_corner.png b/Resources/GUI/Textured boxes/Menu2/top_right_corner.png new file mode 100644 index 0000000000000000000000000000000000000000..2360b042b3fa0205926d40c08a72456d4f60e19f GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^CLqkg3?x4-dwml~F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl}23GfMVl@L+2a!FIub^!{o&XS%9Qdbh>7ySSKe+CDwm0y5-&H|6fVg?4j z!ywFfJby(BP_WC>#WBRg`|Slsp#}vW=fEq!??(pN^~kQ=QCv_Vz17of+3LrtuUNM$ z!mxJ!%)Klx%*y7ZEJ^P-`sH?ib5B*y)R%M5iY(50e_?K{^sAc}ic8WzAMJP(D7)^W zlxTK~>8X%Cirj&pPdHt%*(6}vud}4D>v)i@cE?v)siNJ)79NB6dj$ld%xLNn{1`c>;VwTqQ(Qtz6R7v|WG#th1zNg4C4+`33*~|DVA@YvmUppR>RtvY3H^ z?=T269?xHq0u(g$ba4#v@P2#7P>?}^f!R>wpRMx4>3)0r8|H*>lIgrV>8Xc~s@s_k mNkiqdBRw+&jgvM9eqvnkU*cd{O5P-(0Sun5elF{r5}E*5y*g(A literal 0 HcmV?d00001 diff --git a/Resources/Levels/Level1/level.json b/Resources/Levels/Level1/level.json index ae8403c..78dc978 100644 --- a/Resources/Levels/Level1/level.json +++ b/Resources/Levels/Level1/level.json @@ -8,6 +8,18 @@ { "x": -140, "y": 60 + }, + { + "x": -50, + "y": 60 + }, + { + "x": 40, + "y": 60 + }, + { + "x": 130, + "y": 60 } ], "routes": [ diff --git a/Resources/images/explosion.png b/Resources/images/explosion.png new file mode 100644 index 0000000000000000000000000000000000000000..16fcf93e258fe09a9f5b56078beb2d9766be4a90 GIT binary patch literal 2728 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/test_tower.png images/test_tower_gun.png images/test_tower_slot.png + + + images/fire_totem.png images/skeleton/walk.png @@ -19,5 +22,47 @@ Levels/Level1/map.png Levels/Level1/level.json + + + + GUI/Textured boxes/Default/top_left_corner.png + GUI/Textured boxes/Default/top_right_corner.png + GUI/Textured boxes/Default/bottom_left_corner.png + GUI/Textured boxes/Default/bottom_right_corner.png + GUI/Textured boxes/Default/left_side.png + GUI/Textured boxes/Default/right_side.png + GUI/Textured boxes/Default/top_side.png + GUI/Textured boxes/Default/bottom_side.png + GUI/Textured boxes/Default/inside.png + + GUI/Textured boxes/Menu/top_left_corner.png + GUI/Textured boxes/Menu/top_right_corner.png + GUI/Textured boxes/Menu/bottom_left_corner.png + GUI/Textured boxes/Menu/bottom_right_corner.png + GUI/Textured boxes/Menu/left_side.png + GUI/Textured boxes/Menu/right_side.png + GUI/Textured boxes/Menu/top_side.png + GUI/Textured boxes/Menu/bottom_side.png + GUI/Textured boxes/Menu/inside.png + + GUI/Textured boxes/Menu2/top_left_corner.png + GUI/Textured boxes/Menu2/top_right_corner.png + GUI/Textured boxes/Menu2/bottom_left_corner.png + GUI/Textured boxes/Menu2/bottom_right_corner.png + GUI/Textured boxes/Menu2/left_side.png + GUI/Textured boxes/Menu2/right_side.png + GUI/Textured boxes/Menu2/top_side.png + GUI/Textured boxes/Menu2/bottom_side.png + GUI/Textured boxes/Menu2/inside.png + + GUI/Textured boxes/Button/top_left_corner.png + GUI/Textured boxes/Button/top_right_corner.png + GUI/Textured boxes/Button/bottom_left_corner.png + GUI/Textured boxes/Button/bottom_right_corner.png + GUI/Textured boxes/Button/left_side.png + GUI/Textured boxes/Button/right_side.png + GUI/Textured boxes/Button/top_side.png + GUI/Textured boxes/Button/bottom_side.png + GUI/Textured boxes/Button/inside.png \ No newline at end of file diff --git a/UI/button.cpp b/UI/button.cpp new file mode 100644 index 0000000..1b222f7 --- /dev/null +++ b/UI/button.cpp @@ -0,0 +1,63 @@ +#include "button.h" + +#include +#include + +#include "Utilities/Resources/pixmap_loader.h" +#include "constants.h" + +TextButton::TextButton(VectorF position, const QString& text) + : TexturedBox() { + textured_box_pixmaps_ = PixmapLoader::kButtonTexturedBoxPixmaps; + text_item_ = new QGraphicsTextItem(); + icon_ = new PixmapObject(PixmapLoader::Pixmaps::kEmpty); + layout_ = new LinearLayout(); + layout_->AddItem(icon_); + layout_->AddItem(text_item_); + layout_->SetType(LinearLayout::Type::Horizontal); + padding_box_ = new PaddingBox(layout_, 0); + text_item_->setDefaultTextColor(UI::kButtonDefaultTextColor); + SetWrappingItem(padding_box_); + setPos(position); + SetText(text); + setZValue(UI::kDefaultZValue); + setCursor(Qt::PointingHandCursor); +} + +void TextButton::SetText(const QString& text) { + prepareGeometryChange(); + text_item_->setPlainText(text); +} + +void TextButton::mousePressEvent(QGraphicsSceneMouseEvent* event) { + emit Clicked(); +} + +QTextDocument* TextButton::GetTextDocument() { + return text_item_->document(); +} + +qreal TextButton::Padding() { + return padding_box_->Padding(); +} + +void TextButton::SetPadding(qreal padding) { + padding_box_->SetPadding(padding); +} + +qreal TextButton::Spacing() { + return layout_->Spacing(); +} + +void TextButton::SetSpacing(qreal spacing) { + layout_->SetSpacing(spacing); +} + +QPixmap* TextButton::Icon() { + return icon_->Pixmap(); +} + +void TextButton::SetIcon(QPixmap* icon) { + icon_->SetPixmap(icon); + layout_->RecalculatePositions(); +} diff --git a/UI/button.h b/UI/button.h new file mode 100644 index 0000000..fcf1ed9 --- /dev/null +++ b/UI/button.h @@ -0,0 +1,40 @@ +#pragma once + +#include + +#include "textured_box.h" +#include "Utilities/vector_f.h" +#include "padding_box.h" +#include "pixmap_object.h" +#include "linear_layout.h" + +class TextButton : public TexturedBox { + Q_OBJECT + + public: + explicit TextButton(VectorF position = {0, 0}, const QString& text = ""); + + void SetText(const QString& text); + QTextDocument* GetTextDocument(); + + qreal Padding(); + void SetPadding(qreal padding); + + qreal Spacing(); + void SetSpacing(qreal spacing); + + QPixmap* Icon(); + void SetIcon(QPixmap* icon); + + signals: + + void Clicked(); + + protected: + void mousePressEvent(QGraphicsSceneMouseEvent* event) override; + + QGraphicsTextItem* text_item_; + PixmapObject* icon_; + PaddingBox* padding_box_; + LinearLayout* layout_; +}; diff --git a/UI/linear_layout.cpp b/UI/linear_layout.cpp new file mode 100644 index 0000000..d217a92 --- /dev/null +++ b/UI/linear_layout.cpp @@ -0,0 +1,171 @@ +#include "linear_layout.h" + +#include + +#include + +#include "constants.h" + +LinearLayout::LinearLayout(QGraphicsItem* parent) + : QGraphicsObject(parent), + items_(std::vector()), + type_(Type::Horizontal) { + setZValue(UI::kDefaultZValue); +} + +QRectF LinearLayout::boundingRect() const { + return childrenBoundingRect(); +} + +void LinearLayout::OnItemDestroyed(QObject* item) { + QGraphicsObject* object = dynamic_cast(item); + assert(object != nullptr); + RemoveItem(object); +} + +void LinearLayout::AddItem(QGraphicsObject* item) { + prepareGeometryChange(); + items_.push_back(item); + item->setParentItem(this); + ConnectItem(item); + RecalculatePositions(); +} + +void LinearLayout::RemoveItem(QGraphicsObject* item) { + auto i = std::find(items_.begin(), items_.end(), item); + if (i == items_.end()) { + qDebug() << "LinearLayout.RemoveItem: there is no item in items_"; + } + items_.erase(i); + + prepareGeometryChange(); + item->setParentItem(nullptr); + DisconnectItem(item); + RecalculatePositions(); +} + +bool LinearLayout::HasItem(QGraphicsObject* item) { + int count = std::count(items_.begin(), items_.end(), item); + assert(count <= 1); + return count == 1; +} + +// wasn't tested properly(works on text buttons and should work on +// elements, that satisfy: +// boundingBox().x() == boundingBox().y() == 0) +void LinearLayout::RecalculatePositions() { + if (type_ == Type::Horizontal) { + qreal max_height = 0; + for (int i = 0 ; i < items_.size() ; ++i) { + max_height = std::max(max_height, items_.at(i)->boundingRect().height()); + } + qreal x = 0; + for (int i = 0 ; i < items_.size() ; ++i) { + QGraphicsItem* item = items_.at(i); + qreal item_width = item->boundingRect().width() * item->scale(); + qreal item_height = item->boundingRect().height() * item->scale(); + item->setPos( + x, + max_height / 2 - item_height / 2); + x += item_width + spacing_; + } + } else if (type_ == Type::Vertical) { + qreal max_width = 0; + for (int i = 0 ; i < items_.size() ; ++i) { + max_width = std::max( + max_width, + items_.at(i)->boundingRect().width() * items_.at(i)->scale()); + } + qreal y = 0; + for (int i = 0 ; i < items_.size() ; ++i) { + QGraphicsItem* item = items_.at(i); + qreal item_width = item->boundingRect().width() * item->scale(); + qreal item_height = item->boundingRect().height() * item->scale(); + item->setPos( + max_width / 2 - item_width / 2, + y); + y += item_height + spacing_; + } + } else { + assert(false); + } +} + +qreal LinearLayout::Spacing() const { + return spacing_; +} + +void LinearLayout::SetSpacing(qreal spacing) { + if (spacing_ != spacing) { + spacing_ = spacing; + prepareGeometryChange(); + RecalculatePositions(); + } +} + +void LinearLayout::paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) { + if (kDebugMode) { + painter->setPen(QPen(Qt::green)); + painter->drawRect(boundingRect()); + } +} + +void LinearLayout::ConnectItem(QGraphicsObject* item) { + connect( + item, + &QGraphicsObject::heightChanged, + this, + &LinearLayout::RecalculatePositions); + connect( + item, + &QGraphicsObject::widthChanged, + this, + &LinearLayout::RecalculatePositions); + connect( + item, + &QGraphicsObject::scaleChanged, + this, + &LinearLayout::RecalculatePositions); + connect( + item, + &QGraphicsObject::destroyed, + this, + &LinearLayout::OnItemDestroyed); +} + +void LinearLayout::DisconnectItem(QGraphicsObject* item) { + disconnect( + item, + &QGraphicsObject::heightChanged, + this, + &LinearLayout::RecalculatePositions); + disconnect( + item, + &QGraphicsObject::widthChanged, + this, + &LinearLayout::RecalculatePositions); + disconnect( + item, + &QGraphicsObject::scaleChanged, + this, + &LinearLayout::RecalculatePositions); + disconnect( + item, + &QGraphicsObject::destroyed, + this, + &LinearLayout::OnItemDestroyed); +} + +enum LinearLayout::Type LinearLayout::Type() const { + return type_; +} + +void LinearLayout::SetType(enum LinearLayout::Type type) { + if (type_ != type) { + type_ = type; + prepareGeometryChange(); + RecalculatePositions(); + } +} diff --git a/UI/linear_layout.h b/UI/linear_layout.h new file mode 100644 index 0000000..b5970bf --- /dev/null +++ b/UI/linear_layout.h @@ -0,0 +1,40 @@ +#pragma once + +#include + +#include +#include + +// positions items one after another, centered by y +class LinearLayout : public QGraphicsObject { + public: + enum class Type { Horizontal, Vertical }; + + explicit LinearLayout(QGraphicsItem* parent = nullptr); + + QRectF boundingRect() const override; + void paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) override; + + void AddItem(QGraphicsObject* item); + void RemoveItem(QGraphicsObject* item); + bool HasItem(QGraphicsObject* item); + + qreal Spacing() const; + void SetSpacing(qreal spacing); + + Type Type() const; + void SetType(enum Type type); + + void RecalculatePositions(); + + protected: + void OnItemDestroyed(QObject* item); + void ConnectItem(QGraphicsObject* item); + void DisconnectItem(QGraphicsObject* item); + + std::vector items_; + qreal spacing_; + enum Type type_; +}; diff --git a/UI/linear_menu.cpp b/UI/linear_menu.cpp new file mode 100644 index 0000000..c156429 --- /dev/null +++ b/UI/linear_menu.cpp @@ -0,0 +1,67 @@ +#include "linear_menu.h" + +#include +#include +#include +#include + +#include "constants.h" + +LinearMenu::LinearMenu(QGraphicsItem* parent) + : TexturedBox() { + textured_box_pixmaps_ = PixmapLoader::kMenuTexturedBoxPixmaps; + layout_ = new LinearLayout(); + padding_box_ = new PaddingBox(layout_, 0); + SetWrappingItem(padding_box_); + this->setParentItem(parent); + setZValue(UI::kDefaultZValue); +} + +void LinearMenu::AddItem(QGraphicsObject* graphics_object) { + layout_->AddItem(graphics_object); +} + +void LinearMenu::RemoveItem(QGraphicsObject* graphics_object) { + layout_->RemoveItem(graphics_object); +} + +void LinearMenu::SetSpacing(qreal spacing) { + layout_->SetSpacing(spacing); +} + +qreal LinearMenu::Spacing() { + return layout_->Spacing(); +} + +qreal LinearMenu::Padding() const { + return padding_box_->Padding(); +} + +void LinearMenu::SetPadding(qreal padding) { + prepareGeometryChange(); + padding_box_->SetPadding(padding); +} + +LinearMenu::Type LinearMenu::GetType() const { + return layout_->Type(); +} + +void LinearMenu::SetType(LinearMenu::Type type) { + layout_->SetType(type); +} + +void LinearMenu::RecalculatePositions() { + layout_->RecalculatePositions(); +} + +void LinearMenu::paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) { + TexturedBox::paint(painter, option, widget); + + if (kDebugMode) { + static QPen pen(Qt::red); + painter->setPen(pen); + painter->drawRect(TexturedBox::boundingRect()); + } +} diff --git a/UI/linear_menu.h b/UI/linear_menu.h new file mode 100644 index 0000000..e98dd90 --- /dev/null +++ b/UI/linear_menu.h @@ -0,0 +1,34 @@ +#pragma once + +#include "textured_box.h" +#include "linear_layout.h" +#include "padding_box.h" + +class LinearMenu : public TexturedBox { + public: + using Type = enum LinearLayout::Type; + + explicit LinearMenu(QGraphicsItem* parent = nullptr); + + void AddItem(QGraphicsObject* graphics_object); + void RemoveItem(QGraphicsObject* graphics_object); + + void SetSpacing(qreal spacing); + qreal Spacing(); + + qreal Padding() const; + void SetPadding(qreal padding); + + Type GetType() const; + void SetType(Type type); + + void RecalculatePositions(); + + void paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) override; + + protected: + LinearLayout* layout_; + PaddingBox* padding_box_; +}; diff --git a/UI/padding_box.cpp b/UI/padding_box.cpp new file mode 100644 index 0000000..1f2ccd8 --- /dev/null +++ b/UI/padding_box.cpp @@ -0,0 +1,54 @@ +#include "padding_box.h" + +#include + +#include "Utilities/vector_f.h" +#include "constants.h" + +PaddingBox::PaddingBox(QGraphicsItem* wrapping_item, qreal padding) + : wrapping_item_(wrapping_item), padding_(padding) { + wrapping_item->setParentItem(this); + wrapping_item->setPos(padding, padding); + setZValue(UI::kDefaultZValue); +} + +qreal PaddingBox::Padding() const { + return padding_; +} +void PaddingBox::SetPadding(qreal padding) { + padding_ = padding; + wrapping_item_->setPos(padding, padding); +} + +QRectF PaddingBox::boundingRect() const { + QRectF inner_rect = wrapping_item_->boundingRect(); + VectorF inner_rect_half_size = VectorF( + inner_rect.width() / 2, + inner_rect.height() / 2); + QRectF result = QRectF( + inner_rect.center() - inner_rect_half_size * scale(), + inner_rect.center() + inner_rect_half_size * scale()); + result.translate(-result.x(), -result.y()); + result.adjust(0, 0, 2 * padding_, 2 * padding_); + return result; +} + +void PaddingBox::paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) { + if (kDebugMode) { + static QPen white_pen(Qt::white); + static QPen green_pen(Qt::green); + static QPen blue_pen(Qt::blue); + + painter->setPen(white_pen); + painter->drawRect(boundingRect()); + + painter->setPen(green_pen); + painter->drawRect( + wrapping_item_->boundingRect().translated(wrapping_item_->pos())); + + painter->setPen(blue_pen); + painter->drawEllipse(-5, -5, 10, 10); + } +} diff --git a/UI/padding_box.h b/UI/padding_box.h new file mode 100644 index 0000000..38da9f6 --- /dev/null +++ b/UI/padding_box.h @@ -0,0 +1,20 @@ +#pragma once + +#include + +class PaddingBox : public QGraphicsObject { + public: + PaddingBox(QGraphicsItem* wrapping_item, qreal padding); + + qreal Padding() const; + void SetPadding(qreal padding); + + QRectF boundingRect() const override; + void paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) override; + + protected: + qreal padding_; + QGraphicsItem* wrapping_item_; +}; diff --git a/UI/pixmap_object.cpp b/UI/pixmap_object.cpp new file mode 100644 index 0000000..9ca9ab0 --- /dev/null +++ b/UI/pixmap_object.cpp @@ -0,0 +1,24 @@ +#include "pixmap_object.h" + +#include + +PixmapObject::PixmapObject(QPixmap* pixmap, QGraphicsItem* parent) + : QGraphicsObject(parent), pixmap_(pixmap) {} + +QRectF PixmapObject::boundingRect() const { + return pixmap_->rect(); +} + +void PixmapObject::paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) { + painter->drawPixmap(0, 0, *pixmap_); +} + +QPixmap* PixmapObject::Pixmap() const { + return pixmap_; +} + +void PixmapObject::SetPixmap(QPixmap* pixmap) { + pixmap_ = pixmap; +} diff --git a/UI/pixmap_object.h b/UI/pixmap_object.h new file mode 100644 index 0000000..8380d3d --- /dev/null +++ b/UI/pixmap_object.h @@ -0,0 +1,21 @@ +#pragma once + +#include + +class PixmapObject : public QGraphicsObject { + public: + explicit PixmapObject(QPixmap* pixmap, QGraphicsItem* parent = nullptr); + + QRectF boundingRect() const override; + void paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) override; + + QPixmap* Pixmap() const; + void SetPixmap(QPixmap* pixmap); + + protected: + QPixmap* pixmap_; +}; + + diff --git a/UI/textured_box.cpp b/UI/textured_box.cpp new file mode 100644 index 0000000..c656d41 --- /dev/null +++ b/UI/textured_box.cpp @@ -0,0 +1,144 @@ +#include "textured_box.h" + +#include + +#include "Utilities/vector_f.h" +#include "constants.h" + +TexturedBox::TexturedBox( + QGraphicsItem* wrapping_item, + TexturedBoxPixmaps textured_box_pixmaps) + : textured_box_pixmaps_(textured_box_pixmaps), + wrapping_item_(wrapping_item) { + wrapping_item->setParentItem(this); + wrapping_item->setPos( + textured_box_pixmaps_.left_side->width(), + textured_box_pixmaps_.top_side->height()); + setZValue(UI::kDefaultZValue); +} + +TexturedBox::TexturedBox() { + setZValue(UI::kDefaultZValue); +} + +void TexturedBox::paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) { + TexturedBoxPixmaps& pixmaps = textured_box_pixmaps_; + + QRectF bounding_rect = boundingRect(); + QRectF inner_rect = wrapping_item_->boundingRect().translated( + pixmaps.left_side->width(), + pixmaps.top_side->height()); + + QRectF left_side_rect = { + bounding_rect.x(), + inner_rect.y(), + static_cast(pixmaps.left_side->width()), + inner_rect.height()}; + QRectF right_side_rect = { + inner_rect.right(), + inner_rect.y(), + static_cast(pixmaps.right_side->width()), + inner_rect.height()}; + QRectF top_side_rect = { + inner_rect.x(), + bounding_rect.y(), + inner_rect.width(), + static_cast(pixmaps.top_side->height())}; + QRectF bottom_side_rect = { + inner_rect.x(), + inner_rect.bottom(), + inner_rect.width(), + static_cast(pixmaps.bottom_side->height())}; + + // there are -1 because of gaps + painter->drawPixmap( + inner_rect.adjusted(-1, -1, 1, 1), + *pixmaps.inside, + pixmaps.inside->rect()); + + painter->drawPixmap( + left_side_rect.adjusted(0, -1, 0, 1), + *pixmaps.left_side, + pixmaps.left_side->rect()); + painter->drawPixmap( + right_side_rect.adjusted(0, -1, 0, 1), + *pixmaps.right_side, + pixmaps.right_side->rect()); + painter->drawPixmap( + top_side_rect.adjusted(-1, 0, 1, 0), + *pixmaps.top_side, + pixmaps.top_side->rect()); + painter->drawPixmap( + bottom_side_rect.adjusted(-1, 0, 1, 0), + *pixmaps.bottom_side, + pixmaps.bottom_side->rect()); + + + VectorF top_left_corner_pos = { + bounding_rect.left(), + bounding_rect.top() + }; + VectorF top_right_corner_pos = { + bounding_rect.right() - pixmaps.top_right_corner->width(), + bounding_rect.top() + }; + VectorF bottom_left_corner_pos = { + bounding_rect.left(), + bounding_rect.bottom() - pixmaps.bottom_left_corner->height() + }; + VectorF bottom_right_corner_pos = { + bounding_rect.right() - pixmaps.bottom_right_corner->width(), + bounding_rect.bottom() - pixmaps.bottom_right_corner->height() + }; + + painter->drawPixmap(top_left_corner_pos, *pixmaps.top_left_corner); + painter->drawPixmap(top_right_corner_pos, *pixmaps.top_right_corner); + painter->drawPixmap(bottom_left_corner_pos, *pixmaps.bottom_left_corner); + painter->drawPixmap(bottom_right_corner_pos, *pixmaps.bottom_right_corner); + + if (kDebugMode) { + painter->setPen(QPen(Qt::white, 3)); + painter->drawRect(boundingRect()); + + painter->setPen(QPen(Qt::yellow, 5)); + painter->drawRect(inner_rect); + } +} + +QRectF TexturedBox::boundingRect() const { + qreal left_side_width = textured_box_pixmaps_.left_side->width(); + qreal right_side_width = textured_box_pixmaps_.right_side->width(); + qreal top_side_height = textured_box_pixmaps_.top_side->height(); + qreal bottom_side_height = textured_box_pixmaps_.bottom_side->height(); + + QRectF unscaled_result = wrapping_item_->boundingRect().adjusted( + 0, + 0, + right_side_width + left_side_width, + bottom_side_height + top_side_height); + VectorF half_size = + VectorF(unscaled_result.width(), unscaled_result.height()) / 2; + + return QRectF( + unscaled_result.center() - half_size, + unscaled_result.center() + half_size); +} + +void TexturedBox::SetTexturedBoxPixmaps(const TexturedBoxPixmaps& pixmaps) { + prepareGeometryChange(); + textured_box_pixmaps_ = pixmaps; + wrapping_item_->setPos( + textured_box_pixmaps_.left_side->width(), + textured_box_pixmaps_.top_side->height()); +} + +void TexturedBox::SetWrappingItem(QGraphicsItem* wrapping_item) { + prepareGeometryChange(); + wrapping_item_ = wrapping_item; + wrapping_item->setParentItem(this); + wrapping_item->setPos( + textured_box_pixmaps_.left_side->width(), + textured_box_pixmaps_.top_side->height()); +} diff --git a/UI/textured_box.h b/UI/textured_box.h new file mode 100644 index 0000000..fc3d82f --- /dev/null +++ b/UI/textured_box.h @@ -0,0 +1,29 @@ +#pragma once + +#include +#include + +#include "Utilities/Resources/pixmap_loader.h" +#include "Utilities/Resources/textured_box_pixmaps.h" + +class TexturedBox : public QGraphicsObject { + public: + explicit TexturedBox( + QGraphicsItem* wrapping_item, + TexturedBoxPixmaps textured_box_pixmaps = + PixmapLoader::kDefaultTexturedBoxPixmaps); + + void paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) override; + QRectF boundingRect() const override; + + void SetTexturedBoxPixmaps(const TexturedBoxPixmaps& pixmaps); + void SetWrappingItem(QGraphicsItem* wrapping_item); + + protected: + TexturedBox(); + + TexturedBoxPixmaps textured_box_pixmaps_; + QGraphicsItem* wrapping_item_; +}; diff --git a/UI/tooltip.cpp b/UI/tooltip.cpp new file mode 100644 index 0000000..cbfa5f9 --- /dev/null +++ b/UI/tooltip.cpp @@ -0,0 +1,52 @@ +#include "tooltip.h" + +#include +#include + +#include "Utilities/Resources/pixmap_loader.h" +#include "Utilities/vector_f.h" +#include "constants.h" + +Tooltip::Tooltip(QGraphicsItem* parent) + : TexturedBox(), text_item_(new QGraphicsTextItem()) { + textured_box_pixmaps_ = PixmapLoader::kDefaultTexturedBoxPixmaps; + SetWrappingItem(text_item_); + setZValue(UI::kDefaultZValue); +} + +Tooltip::Tooltip(QString text, QGraphicsItem* parent) + : Tooltip(parent) { + setPlainText(text); +} + +void Tooltip::setPlainText(const QString& text) { + qreal initial_text_width = text_item_->document()->size().width(); + text_item_->setPlainText(text); + qreal current_text_width = text_item_->document()->size().width(); + + moveBy(initial_text_width / 2, 0); + moveBy(- current_text_width / 2, 0); + + prepareGeometryChange(); +} + +void Tooltip::setHtml(const QString& text) { + qreal initial_text_width = text_item_->document()->size().width(); + text_item_->setHtml(text); + qreal current_text_width = text_item_->document()->size().width(); + + moveBy(initial_text_width / 2, 0); + moveBy(- current_text_width / 2, 0); + + prepareGeometryChange(); +} + +void Tooltip::setPos(qreal ax, qreal ay) { + QGraphicsItem::setPos(ax, ay); + qreal text_width = boundingRect().width(); + moveBy(- text_width / 2, 0); +} + +void Tooltip::setPos(const QPointF& pos) { + setPos(pos.x(), pos.y()); +} diff --git a/UI/tooltip.h b/UI/tooltip.h new file mode 100644 index 0000000..19aeb65 --- /dev/null +++ b/UI/tooltip.h @@ -0,0 +1,22 @@ +#pragma once + +#include +#include + +#include "textured_box.h" + +// it's position = top(not very accurate) center point +class Tooltip : public TexturedBox { + public: + explicit Tooltip(QGraphicsItem* parent = nullptr); + explicit Tooltip(QString text, QGraphicsItem* parent = nullptr); + + void setPlainText(const QString& text); + void setHtml(const QString& text); + + void setPos(qreal ax, qreal ay); + void setPos(const QPointF& pos); + + protected: + QGraphicsTextItem* text_item_; +}; diff --git a/Utilities/Resources/pixmap_loader.cpp b/Utilities/Resources/pixmap_loader.cpp index 5270bed..ebb034f 100644 --- a/Utilities/Resources/pixmap_loader.cpp +++ b/Utilities/Resources/pixmap_loader.cpp @@ -12,26 +12,34 @@ QPixmap* P::kTestTower; QPixmap* P::kTestTowerGun; QPixmap* P::kTestTowerSlot; std::vector P::kLevelMaps; +QPixmap* P::kEmpty; -QPixmap* P::kFireTotemAnimations; -std::vector P::kFireTotemIdle; -std::vector P::kFireTotemDisappear; -std::vector P::kFireTotemAppearing; +QPixmap* P::FireTotem::kAnimations; +std::vector P::FireTotem::kIdle; +std::vector P::FireTotem::kDisappear; +std::vector P::FireTotem::kAppearing; -std::vector P::kSkeletonWalk; -std::vector P::kSkeletonDeath; +std::vector P::Skeleton::kWalk; +std::vector P::Skeleton::kDeath; -QPixmap* P::kCobraAnimations; -std::vector P::kCobraWalk; -std::vector P::kCobraDeath; +QPixmap* P::Cobra::kAnimations; +std::vector P::Cobra::kWalk; +std::vector P::Cobra::kDeath; -QPixmap* P::kHedgehogAnimations; -std::vector P::kHedgehogWalk; -std::vector P::kHedgehogDeath; +QPixmap* P::Hedgehog::kAnimations; +std::vector P::Hedgehog::kWalk; +std::vector P::Hedgehog::kDeath; -QPixmap* P::kDwarfAnimations; -std::vector P::kDwarfWalk; -std::vector P::kDwarfDeath; +QPixmap* P::Dwarf::kAnimations; +std::vector P::Dwarf::kWalk; +std::vector P::Dwarf::kDeath; + +// ----------------------------------------------------------------------------- + +TexturedBoxPixmaps PixmapLoader::kDefaultTexturedBoxPixmaps; +TexturedBoxPixmaps PixmapLoader::kMenuTexturedBoxPixmaps; +TexturedBoxPixmaps PixmapLoader::kMenu2TexturedBoxPixmaps; +TexturedBoxPixmaps PixmapLoader::kButtonTexturedBoxPixmaps; void PixmapLoader::LoadPixmaps() { P::kBackground = new QPixmap(":images/background.png"); @@ -45,11 +53,14 @@ void PixmapLoader::LoadPixmaps() { + QString::number(i) + "/map.png")); } + P::kEmpty = new QPixmap(); + LoadFireTotemAnimations(); LoadSkeletonAnimations(); LoadCobraAnimations(); LoadHedgehogAnimations(); LoadDwarfAnimations(); + LoadUI(); } std::vector PixmapLoader::CreateHorizontalFramesVector( @@ -87,26 +98,26 @@ void PixmapLoader::LoadFireTotemAnimations() { const int appear_animation_row = 0; const int appear_animation_column = 0; - P::kFireTotemAnimations = new QPixmap(":images/fire_totem.png"); + P::FireTotem::kAnimations = new QPixmap(":images/fire_totem.png"); - P::kFireTotemIdle = CreateHorizontalFramesVector( - P::kFireTotemAnimations, + P::FireTotem::kIdle = CreateHorizontalFramesVector( + P::FireTotem::kAnimations, frame_width, frame_height, idle_animation_frames_count, idle_animation_column * frame_width, idle_animation_row * frame_height); - P::kFireTotemDisappear = CreateHorizontalFramesVector( - P::kFireTotemAnimations, + P::FireTotem::kDisappear = CreateHorizontalFramesVector( + P::FireTotem::kAnimations, frame_width, frame_height, disappear_animation_frames_count, disappear_animation_column * frame_width, disappear_animation_row * frame_height); - P::kFireTotemAppearing = CreateHorizontalFramesVector( - P::kFireTotemAnimations, + P::FireTotem::kAppearing = CreateHorizontalFramesVector( + P::FireTotem::kAnimations, frame_width, frame_height, appear_animation_frames_count, @@ -138,7 +149,7 @@ void PixmapLoader::LoadSkeletonAnimations() { QPixmap* walk_animation = new QPixmap(":images/skeleton/walk.png"); QPixmap* death_animation = new QPixmap(":images/skeleton/death.png"); - P::kSkeletonWalk = CreateHorizontalFramesVector( + P::Skeleton::kWalk = CreateHorizontalFramesVector( walk_animation, frame_walk_width, frame_walk_height, @@ -146,7 +157,7 @@ void PixmapLoader::LoadSkeletonAnimations() { walk_animation_column * frame_walk_width, walk_animation_row * frame_walk_height); - P::kSkeletonDeath = CreateHorizontalFramesVector( + P::Skeleton::kDeath = CreateHorizontalFramesVector( death_animation, frame_death_width, frame_death_height, @@ -159,67 +170,67 @@ void PixmapLoader::LoadSkeletonAnimations() { } void PixmapLoader::LoadCobraAnimations() { - // file size - 256x160 - // 5 frame rows, 8 frame columns - const int frame_width = 256 / 8; - const int frame_height = 160 / 5; - const int death_animation_frames_count = 6; - const int walk_animation_frames_count = 8; - // row and column start from 0 - const int death_animation_row = 4; - const int death_animation_column = 0; - const int walk_animation_row = 1; - const int walk_animation_column = 0; - - P::kCobraAnimations = new QPixmap(":images/cobra.png"); - - P::kCobraWalk = CreateHorizontalFramesVector( - P::kCobraAnimations, - frame_width, - frame_height, - walk_animation_frames_count, - walk_animation_column * frame_width, - walk_animation_row * frame_height); - - P::kCobraDeath = CreateHorizontalFramesVector( - P::kCobraAnimations, - frame_width, - frame_height, - death_animation_frames_count, - death_animation_column * frame_width, - death_animation_row * frame_height); + // file size - 256x160 + // 5 frame rows, 8 frame columns + const int frame_width = 256 / 8; + const int frame_height = 160 / 5; + const int death_animation_frames_count = 6; + const int walk_animation_frames_count = 8; + // row and column start from 0 + const int death_animation_row = 4; + const int death_animation_column = 0; + const int walk_animation_row = 1; + const int walk_animation_column = 0; + + P::Cobra::kAnimations = new QPixmap(":images/cobra.png"); + + P::Cobra::kWalk = CreateHorizontalFramesVector( + P::Cobra::kAnimations, + frame_width, + frame_height, + walk_animation_frames_count, + walk_animation_column * frame_width, + walk_animation_row * frame_height); + + P::Cobra::kDeath = CreateHorizontalFramesVector( + P::Cobra::kAnimations, + frame_width, + frame_height, + death_animation_frames_count, + death_animation_column * frame_width, + death_animation_row * frame_height); } void PixmapLoader::LoadHedgehogAnimations() { - // file size - 128x128 - // 4 frame rows, 4 frame columns - const int frame_width = 128 / 4; - const int frame_height = 128 / 4; - const int death_animation_frames_count = 3; - const int walk_animation_frames_count = 4; - // row and column start from 0 - const int death_animation_row = 3; - const int death_animation_column = 0; - const int walk_animation_row = 1; - const int walk_animation_column = 0; - - P::kHedgehogAnimations = new QPixmap(":images/hedgehog.png"); - - P::kHedgehogWalk = CreateHorizontalFramesVector( - P::kHedgehogAnimations, - frame_width, - frame_height, - walk_animation_frames_count, - walk_animation_column * frame_width, - walk_animation_row * frame_height); - - P::kHedgehogDeath = CreateHorizontalFramesVector( - P::kHedgehogAnimations, - frame_width, - frame_height, - death_animation_frames_count, - death_animation_column * frame_width, - death_animation_row * frame_height); + // file size - 128x128 + // 4 frame rows, 4 frame columns + const int frame_width = 128 / 4; + const int frame_height = 128 / 4; + const int death_animation_frames_count = 3; + const int walk_animation_frames_count = 4; + // row and column start from 0 + const int death_animation_row = 3; + const int death_animation_column = 0; + const int walk_animation_row = 1; + const int walk_animation_column = 0; + + P::Hedgehog::kAnimations = new QPixmap(":images/hedgehog.png"); + + P::Hedgehog::kWalk = CreateHorizontalFramesVector( + P::Hedgehog::kAnimations, + frame_width, + frame_height, + walk_animation_frames_count, + walk_animation_column * frame_width, + walk_animation_row * frame_height); + + P::Hedgehog::kDeath = CreateHorizontalFramesVector( + P::Hedgehog::kAnimations, + frame_width, + frame_height, + death_animation_frames_count, + death_animation_column * frame_width, + death_animation_row * frame_height); } void PixmapLoader::LoadDwarfAnimations() { @@ -235,21 +246,84 @@ void PixmapLoader::LoadDwarfAnimations() { const int walk_animation_row = 1; const int walk_animation_column = 0; - P::kDwarfAnimations = new QPixmap(":images/dwarf.png"); + P::Dwarf::kAnimations = new QPixmap(":images/dwarf.png"); - P::kDwarfWalk = CreateHorizontalFramesVector( - P::kDwarfAnimations, + P::Dwarf::kWalk = CreateHorizontalFramesVector( + P::Dwarf::kAnimations, frame_width, frame_height, walk_animation_frames_count, walk_animation_column * frame_width, walk_animation_row * frame_height); - P::kDwarfDeath = CreateHorizontalFramesVector( - P::kDwarfAnimations, + P::Dwarf::kDeath = CreateHorizontalFramesVector( + P::Dwarf::kAnimations, frame_width, frame_height, death_animation_frames_count, death_animation_column * frame_width, death_animation_row * frame_height); } + +void PixmapLoader::LoadUI() { + LoadDefaultTextureBox(); + LoadMenuTextureBox(); + LoadMenu2TextureBox(); + LoadButtonTextureBox(); +} + +void PixmapLoader::LoadDefaultTextureBox() { + kDefaultTexturedBoxPixmaps = TexturedBoxPixmaps { + new QPixmap(":GUI/Textured boxes/Default/top_left_corner.png"), + new QPixmap(":GUI/Textured boxes/Default/top_right_corner.png"), + new QPixmap(":GUI/Textured boxes/Default/bottom_left_corner.png"), + new QPixmap(":GUI/Textured boxes/Default/bottom_right_corner.png"), + new QPixmap(":GUI/Textured boxes/Default/left_side.png"), + new QPixmap(":GUI/Textured boxes/Default/right_side.png"), + new QPixmap(":GUI/Textured boxes/Default/top_side.png"), + new QPixmap(":GUI/Textured boxes/Default/bottom_side.png"), + new QPixmap(":GUI/Textured boxes/Default/inside.png") + }; +} + +void PixmapLoader::LoadMenuTextureBox() { + kMenuTexturedBoxPixmaps = TexturedBoxPixmaps { + new QPixmap(":GUI/Textured boxes/Menu/top_left_corner.png"), + new QPixmap(":GUI/Textured boxes/Menu/top_right_corner.png"), + new QPixmap(":GUI/Textured boxes/Menu/bottom_left_corner.png"), + new QPixmap(":GUI/Textured boxes/Menu/bottom_right_corner.png"), + new QPixmap(":GUI/Textured boxes/Menu/left_side.png"), + new QPixmap(":GUI/Textured boxes/Menu/right_side.png"), + new QPixmap(":GUI/Textured boxes/Menu/top_side.png"), + new QPixmap(":GUI/Textured boxes/Menu/bottom_side.png"), + new QPixmap(":GUI/Textured boxes/Menu/inside.png") + }; +} + +void PixmapLoader::LoadMenu2TextureBox() { + kMenu2TexturedBoxPixmaps = TexturedBoxPixmaps { + new QPixmap(":GUI/Textured boxes/Menu2/top_left_corner.png"), + new QPixmap(":GUI/Textured boxes/Menu2/top_right_corner.png"), + new QPixmap(":GUI/Textured boxes/Menu2/bottom_left_corner.png"), + new QPixmap(":GUI/Textured boxes/Menu2/bottom_right_corner.png"), + new QPixmap(":GUI/Textured boxes/Menu2/left_side.png"), + new QPixmap(":GUI/Textured boxes/Menu2/right_side.png"), + new QPixmap(":GUI/Textured boxes/Menu2/top_side.png"), + new QPixmap(":GUI/Textured boxes/Menu2/bottom_side.png"), + new QPixmap(":GUI/Textured boxes/Menu2/inside.png") + }; +} + +void PixmapLoader::LoadButtonTextureBox() { + kButtonTexturedBoxPixmaps = TexturedBoxPixmaps { + new QPixmap(":GUI/Textured boxes/Button/top_left_corner.png"), + new QPixmap(":GUI/Textured boxes/Button/top_right_corner.png"), + new QPixmap(":GUI/Textured boxes/Button/bottom_left_corner.png"), + new QPixmap(":GUI/Textured boxes/Button/bottom_right_corner.png"), + new QPixmap(":GUI/Textured boxes/Button/left_side.png"), + new QPixmap(":GUI/Textured boxes/Button/right_side.png"), + new QPixmap(":GUI/Textured boxes/Button/top_side.png"), + new QPixmap(":GUI/Textured boxes/Button/bottom_side.png"), + new QPixmap(":GUI/Textured boxes/Button/inside.png") + }; +} diff --git a/Utilities/Resources/pixmap_loader.h b/Utilities/Resources/pixmap_loader.h index 90c8b2c..846afb4 100644 --- a/Utilities/Resources/pixmap_loader.h +++ b/Utilities/Resources/pixmap_loader.h @@ -5,6 +5,7 @@ #include #include "Utilities/animation.h" +#include "Utilities/Resources/textured_box_pixmaps.h" class PixmapLoader { public: @@ -18,29 +19,49 @@ class PixmapLoader { static QPixmap* kTestTowerGun; static QPixmap* kTestTowerSlot; static std::vector kLevelMaps; + static QPixmap* kEmpty; - // For animations test - static QPixmap* kFireTotemAnimations; - static std::vector kFireTotemIdle; - static std::vector kFireTotemDisappear; - static std::vector kFireTotemAppearing; + class FireTotem { + public: + static QPixmap* kAnimations; + static std::vector kIdle; + static std::vector kDisappear; + static std::vector kAppearing; + }; - static std::vector kSkeletonWalk; - static std::vector kSkeletonDeath; + class Skeleton { + public: + static std::vector kWalk; + static std::vector kDeath; + }; - static QPixmap* kCobraAnimations; - static std::vector kCobraWalk; - static std::vector kCobraDeath; + class Cobra { + public: + static QPixmap* kAnimations; + static std::vector kWalk; + static std::vector kDeath; + }; - static QPixmap* kHedgehogAnimations; - static std::vector kHedgehogWalk; - static std::vector kHedgehogDeath; + class Hedgehog { + public: + static QPixmap* kAnimations; + static std::vector kWalk; + static std::vector kDeath; + }; - static QPixmap* kDwarfAnimations; - static std::vector kDwarfWalk; - static std::vector kDwarfDeath; + class Dwarf { + public: + static QPixmap* kAnimations; + static std::vector kWalk; + static std::vector kDeath; + }; }; + static TexturedBoxPixmaps kMenuTexturedBoxPixmaps; + static TexturedBoxPixmaps kMenu2TexturedBoxPixmaps; + static TexturedBoxPixmaps kButtonTexturedBoxPixmaps; + static TexturedBoxPixmaps kDefaultTexturedBoxPixmaps; + static void LoadPixmaps(); private: @@ -57,4 +78,10 @@ class PixmapLoader { static void LoadCobraAnimations(); static void LoadHedgehogAnimations(); static void LoadDwarfAnimations(); + + static void LoadUI(); + static void LoadDefaultTextureBox(); + static void LoadMenuTextureBox(); + static void LoadMenu2TextureBox(); + static void LoadButtonTextureBox(); }; diff --git a/Utilities/Resources/textured_box_pixmaps.h b/Utilities/Resources/textured_box_pixmaps.h new file mode 100644 index 0000000..e679ce5 --- /dev/null +++ b/Utilities/Resources/textured_box_pixmaps.h @@ -0,0 +1,17 @@ +#pragma once + +#include + +struct TexturedBoxPixmaps { + QPixmap* top_left_corner; + QPixmap* top_right_corner; + QPixmap* bottom_left_corner; + QPixmap* bottom_right_corner; + + QPixmap* left_side; + QPixmap* right_side; + QPixmap* top_side; + QPixmap* bottom_side; + + QPixmap* inside; +}; diff --git a/Utilities/animation.h b/Utilities/animation.h index b4c624e..512d320 100644 --- a/Utilities/animation.h +++ b/Utilities/animation.h @@ -5,7 +5,7 @@ #include #include "Utilities/time.h" -#include "GameObjects/BasicObjects/Interface/tickable.h" +#include "GameObjects/Interface/tickable.h" class Animation : public Tickable { public: diff --git a/Utilities/route.h b/Utilities/route.h index 533250f..5a7f085 100644 --- a/Utilities/route.h +++ b/Utilities/route.h @@ -3,7 +3,9 @@ #include #include -#include "GameObjects/BasicObjects/Interface/entity.h" +#include + +#include "GameObjects/Interface/entity.h" #include "Utilities/vector_f.h" static constexpr qreal kThreshold = 5; diff --git a/Utilities/time.h b/Utilities/time.h index 263ea50..83ff0bb 100644 --- a/Utilities/time.h +++ b/Utilities/time.h @@ -17,12 +17,16 @@ class Time { Time operator+(const Time& rhs) const; // there is no check for negative time Time operator-(const Time& rhs) const; + Time operator*(int rhs) const; Time operator*(double rhs) const; + Time& operator+=(const Time& rhs); Time& operator-=(const Time& rhs); + Time& operator*=(int rhs); Time operator*=(double rhs) const; + friend Time operator*(int lhs, const Time& rhs); friend Time operator*(double lhs, const Time& rhs); diff --git a/Utilities/utility.cpp b/Utilities/utility.cpp index 7dc17c3..32e606f 100644 --- a/Utilities/utility.cpp +++ b/Utilities/utility.cpp @@ -1,11 +1,11 @@ #include -#include "GameObjects/BasicObjects/Entities/Mobs/test_mob.h" -#include "GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.h" -#include "GameObjects/BasicObjects/Entities/Mobs/skeleton.h" -#include "GameObjects/BasicObjects/Entities/Mobs/cobra.h" -#include "GameObjects/BasicObjects/Entities/Mobs/hedgehog.h" -#include "GameObjects/BasicObjects/Entities/Mobs/dwarf.h" +#include "GameObjects/Entities/Mobs/test_mob.h" +#include "GameObjects/Entities/Towers/TowerSlots/test_tower_slot.h" +#include "GameObjects/Entities/Mobs/skeleton.h" +#include "GameObjects/Entities/Mobs/cobra.h" +#include "GameObjects/Entities/Mobs/hedgehog.h" +#include "GameObjects/Entities/Mobs/dwarf.h" #include "constants.h" #include "utility.h" diff --git a/Utilities/wave.cpp b/Utilities/wave.cpp index b31d894..c8eeb7a 100644 --- a/Utilities/wave.cpp +++ b/Utilities/wave.cpp @@ -8,11 +8,16 @@ void Wave::RemoveMobFromWave(Mob* mob) { void Wave::Tick(Time delta) { if (IsStarted()) { - for (auto& i : mobs_time_to_spawn_) { - i.second -= delta; - if (i.second.ms() <= 0) { - Controller::Instance()->GetScene()->addItem(i.first); - RemoveMobFromWave(i.first); + for (auto i = mobs_time_to_spawn_.begin(); + i != mobs_time_to_spawn_.end();) { + i->second -= delta; + if (i->second.ms() <= 0) { + Controller::Instance()->GetScene()->addItem(i->first); + Mob* mob_to_remove = i->first; + i++; + RemoveMobFromWave(mob_to_remove); + } else { + i++; } } } else { diff --git a/Utilities/wave.h b/Utilities/wave.h index 59dec71..f40a180 100644 --- a/Utilities/wave.h +++ b/Utilities/wave.h @@ -1,14 +1,16 @@ #pragma once -#include "GameObjects/BasicObjects/Interface/tickable.h" -#include "GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h" #include #include +#include "GameObjects/Interface/tickable.h" +#include "GameObjects/Entities/Mobs/Basis/mob.h" + class Wave { public: - explicit Wave(Time time, std::map&& mobs) : time_to_start_(time), - mobs_time_to_spawn_(std::move(mobs)) {} + explicit Wave(Time time_to_start, std::map&& mobs) + : time_to_start_(time_to_start), mobs_time_to_spawn_(std::move(mobs)) {} + void Tick(Time delta); // TODO(jansenin): we need to use it somewhere void RemoveMobFromWave(Mob*); diff --git a/constants.cpp b/constants.cpp index d2e77dc..6ce9124 100644 --- a/constants.cpp +++ b/constants.cpp @@ -1,6 +1,9 @@ #include #include "constants.h" +const bool kDebugMode = false; +const int kFPS = 60; + namespace Scene { const qreal kWidth = 1920; const qreal kHeight = 1080; @@ -9,7 +12,12 @@ const QRectF kRect{ -kHeight / 2, kWidth, kHeight}; -extern const qreal kMapTextureZValue = -100; +const qreal kMapTextureZValue = -10000; +} + +namespace UI { +const qreal kDefaultZValue = 10000; +const QColor kButtonDefaultTextColor = Qt::white; } namespace LevelData { @@ -34,30 +42,35 @@ const qreal kPassiveMoveSpeed = 5; const qreal kActiveMoveSpeed = 100; const qreal kRotationSpeed = 10; const int kHealth = 30; +const int kDamageToBase = 1; } namespace Skeleton { const Time kTimeBetweenFrames = 50_ms; const qreal kSpeed = 50; const int kHealth = 200; +const int kDamageToBase = 1; } namespace Cobra { const Time kTimeBetweenFrames = 50_ms; const qreal kSpeed = 200; const int kHealth = 40; +const int kDamageToBase = 1; } namespace Hedgehog { const Time kTimeBetweenFrames = 50_ms; const qreal kSpeed = 110; -extern const int kHealth = 80; +const int kHealth = 80; +const int kDamageToBase = 1; } namespace Dwarf { const Time kTimeBetweenFrames = 50_ms; const qreal kSpeed = 60; -extern const int kHealth = 300; +const int kHealth = 300; +const int kDamageToBase = 1; } namespace TestProjectile { diff --git a/constants.h b/constants.h index 233bd9c..99a1926 100644 --- a/constants.h +++ b/constants.h @@ -1,10 +1,14 @@ #pragma once #include +#include #include "Utilities/time.h" #include +extern const bool kDebugMode; +extern const int kFPS; + namespace Scene { extern const qreal kWidth; extern const qreal kHeight; @@ -12,6 +16,11 @@ extern const QRectF kRect; extern const qreal kMapTextureZValue; } +namespace UI { +extern const qreal kDefaultZValue; +extern const QColor kButtonDefaultTextColor; +} + namespace LevelData { extern const int kLevelsCount; } @@ -40,24 +49,28 @@ namespace Skeleton { extern const Time kTimeBetweenFrames; extern const qreal kSpeed; extern const int kHealth; +extern const int kDamageToBase; } namespace Cobra { extern const Time kTimeBetweenFrames; extern const qreal kSpeed; extern const int kHealth; +extern const int kDamageToBase; } namespace Hedgehog { extern const Time kTimeBetweenFrames; extern const qreal kSpeed; extern const int kHealth; +extern const int kDamageToBase; } namespace Dwarf { extern const Time kTimeBetweenFrames; extern const qreal kSpeed; extern const int kHealth; +extern const int kDamageToBase; } namespace TestProjectile { diff --git a/game_scene.cpp b/game_scene.cpp index a17305b..b62349e 100644 --- a/game_scene.cpp +++ b/game_scene.cpp @@ -1,11 +1,11 @@ #include "game_scene.h" -#include "GameObjects/BasicObjects/Interface/graphics_item.h" +#include "GameObjects/Interface/graphics_object.h" #include "game_view.h" -#include "GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h" -#include "GameObjects/BasicObjects/Entities/Towers/tower.h" -#include "GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.h" -#include "GameObjects/BasicObjects/Entities/Projectiles/projectile.h" +#include "GameObjects/Entities/Mobs/Basis/mob.h" +#include "GameObjects/Entities/Towers/tower.h" +#include "GameObjects/Entities/Towers/TowerSlots/tower_slot.h" +#include "GameObjects/Entities/Projectiles/projectile.h" GameScene::GameScene(const QRectF& scene_rect, QObject* parent) : QGraphicsScene(scene_rect, parent) {} diff --git a/game_scene.h b/game_scene.h index 55adcde..906cd51 100644 --- a/game_scene.h +++ b/game_scene.h @@ -5,7 +5,7 @@ #include #include -class GraphicsItem; +class GraphicsObject; class GameView; class Mob; class Tower; diff --git a/level.cpp b/level.cpp index d549541..04627c0 100644 --- a/level.cpp +++ b/level.cpp @@ -8,7 +8,7 @@ #include #include -#include "GameObjects/BasicObjects/Entities/Towers/TowerSlots/test_tower_slot.h" +#include "GameObjects/Entities/Towers/TowerSlots/test_tower_slot.h" #include "Utilities/utility.h" #include "Utilities/Resources/pixmap_loader.h" #include "constants.h" @@ -74,9 +74,10 @@ Level::Level(int level_number) : level_number_(level_number) { std::map mobs; for (auto json_spawn_entry : spawn_entries) { QJsonObject object = json_spawn_entry.toObject(); - SpawnEntry spawn_entry(object); - wave_duration = Time( - std::max(spawn_entry.GetEntryEndTime().ms(), wave_duration.ms())); + SpawnEntry spawn_entry(&object); + wave_duration = Time(std::max( + spawn_entry.GetEntryEndTime().ms(), + wave_duration.ms())); spawn_entry.AddMobsToWave(&mobs, routes_); } previous_wave_end_time += wave_duration; @@ -132,12 +133,12 @@ int Level::GetStartMoney() const { return startMoney_; } -Level::SpawnEntry::SpawnEntry(const QJsonObject& spawn_root_object) - : start_time_(Time(spawn_root_object.value("startTime").toInt())), - mob_type_(spawn_root_object.value("mobType").toString()), - count_(spawn_root_object.value("count").toInt()), - entry_duration_(Time(spawn_root_object.value("entryDuration").toInt())), - route_index_(spawn_root_object.value("routeIndex").toInt()) +Level::SpawnEntry::SpawnEntry(QJsonObject* spawn_root_object) + : start_time_(Time(spawn_root_object->value("startTime").toInt())), + mob_type_(spawn_root_object->value("mobType").toString()), + count_(spawn_root_object->value("count").toInt()), + entry_duration_(Time(spawn_root_object->value("entryDuration").toInt())), + route_index_(spawn_root_object->value("routeIndex").toInt()) {} void Level::SpawnEntry::AddMobsToWave( diff --git a/level.h b/level.h index dc5246c..ee099b7 100644 --- a/level.h +++ b/level.h @@ -6,8 +6,8 @@ #include #include "Utilities/vector_f.h" -#include "GameObjects/BasicObjects/Entities/Mobs/Basis/mob.h" -#include "GameObjects/BasicObjects/Entities/Towers/TowerSlots/tower_slot.h" +#include "GameObjects/Entities/Mobs/Basis/mob.h" +#include "GameObjects/Entities/Towers/TowerSlots/tower_slot.h" #include "Utilities/route.h" #include "Utilities/wave.h" @@ -26,7 +26,7 @@ class Level { private: class SpawnEntry { public: - explicit SpawnEntry(const QJsonObject& spawn_root_object); + explicit SpawnEntry(QJsonObject* spawn_root_object); [[nodiscard]] Time GetEntryEndTime() const; void AddMobsToWave( diff --git a/wave_manager.h b/wave_manager.h index 1e96720..60f9934 100644 --- a/wave_manager.h +++ b/wave_manager.h @@ -1,5 +1,5 @@ #pragma once -#include "GameObjects/BasicObjects/Interface/tickable.h" +#include "GameObjects/Interface/tickable.h" #include "Utilities/wave.h" #include #include From 3c4e074308ceef86182c5326ae4aaec70855cdf0 Mon Sep 17 00:00:00 2001 From: jansenin <59775038+jansenin@users.noreply.github.com> Date: Fri, 3 Jun 2022 13:00:34 +0300 Subject: [PATCH 09/19] Better autoguided projectiles (#23) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add customizable base classes * add getters to scene * fix cpplint * test use of animations, many other fixes Если кратко, то вот: 1)Тестовый моб теперь может чуть больше и у него есть анимации 2)Самонаводящиеся пули перескакивают на других мобов при смерти первоначальных * code style * more code style * fix custom literal error * Added level managing system, json-format level data storage. * add textured box, toolpit, unfinished death system * add ui components(layouts, menus, text buttons, ...) Added: LinearLayout(horisontal and vertical) LinearMenu(horisontal and vertical) PaddingBox TextButton * add icons on buttons * change trajectory of TestProjectile * add linear movement Co-authored-by: Artsiom S --- CMakeLists.txt | 2 +- Controller/controller.cpp | 3 +- GameObjects/Entities/Mobs/Basis/mob.h | 2 +- .../Projectiles/autoguided_projectile.cpp | 57 +++++++++--- .../Projectiles/autoguided_projectile.h | 22 ++++- .../linear_autoguided_projectile.cpp | 88 +++++++++++++++++++ .../linear_autoguided_projectile.h | 35 ++++++++ .../Projectiles/linear_test_projectile.cpp | 17 ++++ .../Projectiles/linear_test_projectile.h | 10 +++ .../Entities/Projectiles/test_projectile.cpp | 7 +- .../Entities/Projectiles/test_projectile.h | 3 + GameObjects/Entities/Towers/test_tower.cpp | 3 +- Resources/Levels/Level1/level.json | 14 +-- Utilities/vector_f.cpp | 12 +++ Utilities/vector_f.h | 3 + constants.cpp | 12 ++- constants.h | 6 ++ 17 files changed, 267 insertions(+), 29 deletions(-) create mode 100644 GameObjects/Entities/Projectiles/linear_autoguided_projectile.cpp create mode 100644 GameObjects/Entities/Projectiles/linear_autoguided_projectile.h create mode 100644 GameObjects/Entities/Projectiles/linear_test_projectile.cpp create mode 100644 GameObjects/Entities/Projectiles/linear_test_projectile.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 1cccf3e..22c2308 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,7 +33,7 @@ set(GAME_OBJECTS GameObjects/Entities/Mobs/skeleton.cpp GameObjects/Entities/Mobs/cobra.cpp GameObjects/Entities/Mobs/hedgehog.cpp - GameObjects/Entities/Mobs/dwarf.cpp) + GameObjects/Entities/Mobs/dwarf.cpp GameObjects/Entities/Projectiles/linear_autoguided_projectile.cpp GameObjects/Entities/Projectiles/linear_autoguided_projectile.h GameObjects/Entities/Projectiles/linear_test_projectile.cpp GameObjects/Entities/Projectiles/linear_test_projectile.h) set(UTILITIES Utilities/damage.cpp diff --git a/Controller/controller.cpp b/Controller/controller.cpp index 4634413..35b1ed8 100644 --- a/Controller/controller.cpp +++ b/Controller/controller.cpp @@ -99,6 +99,7 @@ void Controller::SetupScene() { main_menu->AddItem(menu); main_menu->AddItem(test_button); main_menu->SetType(LinearLayout::Type::Vertical); + main_menu->setScale(0.3); //{ // LinearLayout* test_hor_layout = new LinearLayout(); @@ -163,7 +164,7 @@ void Controller::SetupScene() { scene_->addItem(main_menu); main_menu->setPos( scene_->sceneRect().topRight() - - main_menu->boundingRect().topRight() + + main_menu->boundingRect().topRight() * main_menu->scale() + QPointF{-5, 5}); } // temporary code end diff --git a/GameObjects/Entities/Mobs/Basis/mob.h b/GameObjects/Entities/Mobs/Basis/mob.h index 94a0097..0b0643b 100644 --- a/GameObjects/Entities/Mobs/Basis/mob.h +++ b/GameObjects/Entities/Mobs/Basis/mob.h @@ -30,7 +30,7 @@ class Mob : public Entity { QRectF boundingRect() const override; - virtual ~Mob(); + ~Mob() override; protected: Route* route_{nullptr}; diff --git a/GameObjects/Entities/Projectiles/autoguided_projectile.cpp b/GameObjects/Entities/Projectiles/autoguided_projectile.cpp index 567b1a4..91ba046 100644 --- a/GameObjects/Entities/Projectiles/autoguided_projectile.cpp +++ b/GameObjects/Entities/Projectiles/autoguided_projectile.cpp @@ -1,29 +1,51 @@ +#include "autoguided_projectile.h" + +#include + #include -#include "autoguided_projectile.h" #include "GameObjects/Entities/Mobs/Basis/mob.h" +#include "constants.h" AutoguidedProjectile::AutoguidedProjectile( const VectorF& coordinates, Animation* animation, Entity* target, - qreal speed, + qreal start_speed, + qreal max_speed, + qreal acceleration, + qreal enemy_find_distance, Damage damage) : Projectile(coordinates, animation), - target_(target), speed_(speed), damage_(damage) { + target_(target), + speed_( + VectorF(target->scenePos() - scenePos()).normalized() * start_speed), + max_speed_(max_speed), + acceleration_(acceleration), + enemy_find_distance_(enemy_find_distance), + damage_(damage) { connect(target_, &Entity::destroyed, this, &AutoguidedProjectile::FindNewTargetOrDie); } - AutoguidedProjectile::AutoguidedProjectile( const VectorF& coordinates, QPixmap* pixmap, Entity* target, - qreal speed, + qreal start_speed, + qreal max_speed, + qreal acceleration, + qreal enemy_find_distance, Damage damage) : AutoguidedProjectile( - coordinates, new Animation(pixmap), target, speed, damage) {} + coordinates, + new Animation(pixmap), + target, + start_speed, + max_speed, + acceleration, + enemy_find_distance, + damage) {} void AutoguidedProjectile::Tick(Time delta) { Projectile::Tick(delta); @@ -49,11 +71,16 @@ void AutoguidedProjectile::Move(Time delta) { if (target_ == nullptr) { return; } - VectorF target_point = target_->scenePos(); - VectorF delta_pos = target_point - scenePos(); - VectorF velocity = delta_pos.normalized() * speed_; - MoveBy(velocity * delta.seconds()); + VectorF delta_velocity = + VectorFromThisToTarget().normalized() * acceleration_ * delta.seconds(); + + speed_ += delta_velocity; + + qreal speed_scalar = speed_.length(); + speed_ = speed_.normalized() * std::min(max_speed_, speed_scalar); + + MoveBy(speed_ * delta.seconds()); } void AutoguidedProjectile::FindNewTargetOrDie() { @@ -63,8 +90,12 @@ void AutoguidedProjectile::FindNewTargetOrDie() { } else { auto old_target = target_; for (auto new_target : scene()->Mobs()) { + VectorF this_to_target_vector = + VectorF(new_target->scenePos() - scenePos()); + if (new_target != target_ && - VectorF(new_target->scenePos() - scenePos()).length() < 100) { + this_to_target_vector.length() < enemy_find_distance_ && + new_target->GetHealth() > 0) { SetTarget(new_target); break; } @@ -92,3 +123,7 @@ void AutoguidedProjectile::SetTarget(Entity* target) { &AutoguidedProjectile::FindNewTargetOrDie); } } + +VectorF AutoguidedProjectile::VectorFromThisToTarget() { + return target_->scenePos() - scenePos(); +} diff --git a/GameObjects/Entities/Projectiles/autoguided_projectile.h b/GameObjects/Entities/Projectiles/autoguided_projectile.h index 1837cdc..5f19191 100644 --- a/GameObjects/Entities/Projectiles/autoguided_projectile.h +++ b/GameObjects/Entities/Projectiles/autoguided_projectile.h @@ -6,11 +6,22 @@ class AutoguidedProjectile : public Projectile { public: AutoguidedProjectile(const VectorF& coordinates, QPixmap* pixmap, - Entity* target, qreal speed, Damage damage); + Entity* target, + qreal start_speed, + qreal max_speed, + qreal acceleration, + qreal enemy_find_distance, + Damage damage); AutoguidedProjectile(const VectorF& coordinates, Animation* animation, - Entity* target, qreal speed, Damage damage); + Entity* target, + qreal start_speed, + qreal max_speed, + qreal acceleration, + qreal enemy_find_distance, + Damage damage); + void SetTarget(Entity* target); void Tick(Time delta) override; @@ -19,7 +30,12 @@ class AutoguidedProjectile : public Projectile { void Move(Time delta); void FindNewTargetOrDie(); + VectorF VectorFromThisToTarget(); + Entity* target_; - qreal speed_; + VectorF speed_; + qreal max_speed_; + qreal acceleration_; + qreal enemy_find_distance_; Damage damage_; }; diff --git a/GameObjects/Entities/Projectiles/linear_autoguided_projectile.cpp b/GameObjects/Entities/Projectiles/linear_autoguided_projectile.cpp new file mode 100644 index 0000000..3a10b93 --- /dev/null +++ b/GameObjects/Entities/Projectiles/linear_autoguided_projectile.cpp @@ -0,0 +1,88 @@ +#include "linear_autoguided_projectile.h" + +#include + +#include + +#include "GameObjects/Entities/Mobs/Basis/mob.h" +#include "constants.h" + +LinearAutoguidedProjectile::LinearAutoguidedProjectile( + const VectorF& coordinates, + QPixmap* pixmap, + Entity* target, + qreal speed, + Damage damage) + : LinearAutoguidedProjectile( + coordinates, new Animation(pixmap), target, speed, damage) {} + +LinearAutoguidedProjectile::LinearAutoguidedProjectile( + const VectorF& coordinates, + Animation* animation, + Entity* target, + qreal speed, + Damage damage) + : Projectile(coordinates, animation), + target_(target), + speed_(speed), + damage_(damage) { + connect(target_, &Entity::destroyed, this, + &LinearAutoguidedProjectile::Die); +} + +void LinearAutoguidedProjectile::Tick(Time delta) { + Projectile::Tick(delta); + if (target_ == nullptr) { + return; + } + if (target_->GetHealth() <= 0) { + Die(); + } + if (target_ == nullptr) { + return; + } + + Move(delta); + + if (target_->collidesWithItem(this)) { + target_->ApplyDamage(damage_); + deleteLater(); + } +} + +void LinearAutoguidedProjectile::Move(Time delta) { + if (target_ == nullptr) { + return; + } + + VectorF delta_pos = + VectorFromThisToTarget().normalized() * speed_ * delta.seconds(); + + MoveBy(delta_pos); +} + +void LinearAutoguidedProjectile::SetTarget(Entity* target) { + // TODO(jansenin): what if target_ is destroyed? + disconnect( + target_, + &Entity::destroyed, + this, + &LinearAutoguidedProjectile::Die); + target_ = target; + if (target_ != nullptr) { + connect( + target_, + &Entity::destroyed, + this, + &LinearAutoguidedProjectile::Die); + } +} + +VectorF LinearAutoguidedProjectile::VectorFromThisToTarget() { + return target_->scenePos() - scenePos(); +} + +void LinearAutoguidedProjectile::Die() { + SetTarget(nullptr); + deleteLater(); +} diff --git a/GameObjects/Entities/Projectiles/linear_autoguided_projectile.h b/GameObjects/Entities/Projectiles/linear_autoguided_projectile.h new file mode 100644 index 0000000..7fbca85 --- /dev/null +++ b/GameObjects/Entities/Projectiles/linear_autoguided_projectile.h @@ -0,0 +1,35 @@ +#pragma once + +#include "projectile.h" + +class LinearAutoguidedProjectile : public Projectile { + public: + LinearAutoguidedProjectile( + const VectorF& coordinates, + QPixmap* pixmap, + Entity* target, + qreal speed, + Damage damage); + + LinearAutoguidedProjectile( + const VectorF& coordinates, + Animation* animation, + Entity* target, + qreal speed, + Damage damage); + + void SetTarget(Entity* target); + + void Tick(Time delta) override; + + protected: + void Move(Time delta); + void Die(); + VectorF VectorFromThisToTarget(); + + Entity* target_; + qreal speed_; + Damage damage_; +}; + + diff --git a/GameObjects/Entities/Projectiles/linear_test_projectile.cpp b/GameObjects/Entities/Projectiles/linear_test_projectile.cpp new file mode 100644 index 0000000..54d258f --- /dev/null +++ b/GameObjects/Entities/Projectiles/linear_test_projectile.cpp @@ -0,0 +1,17 @@ +#include "linear_test_projectile.h" + +#include "Utilities/Resources/pixmap_loader.h" +#include "constants.h" + +LinearTestProjectile::LinearTestProjectile( + const VectorF& coordinates, Entity* target) + : LinearAutoguidedProjectile( + coordinates, + PixmapLoader::Pixmaps::kTestBullet, + target, + 500, + Entities::TestProjectile::kDamage) {} + +void LinearTestProjectile::Tick(Time delta) { + LinearAutoguidedProjectile::Tick(delta); +} diff --git a/GameObjects/Entities/Projectiles/linear_test_projectile.h b/GameObjects/Entities/Projectiles/linear_test_projectile.h new file mode 100644 index 0000000..f9d80eb --- /dev/null +++ b/GameObjects/Entities/Projectiles/linear_test_projectile.h @@ -0,0 +1,10 @@ +#pragma once + +#include "linear_autoguided_projectile.h" + +class LinearTestProjectile : public LinearAutoguidedProjectile { + public: + LinearTestProjectile(const VectorF& coordinates, Entity* target); + + void Tick(Time delta) override; +}; diff --git a/GameObjects/Entities/Projectiles/test_projectile.cpp b/GameObjects/Entities/Projectiles/test_projectile.cpp index 5037d31..8b2600b 100644 --- a/GameObjects/Entities/Projectiles/test_projectile.cpp +++ b/GameObjects/Entities/Projectiles/test_projectile.cpp @@ -9,7 +9,12 @@ TestProjectile::TestProjectile(const VectorF& coordinates, Entity* target) PixmapLoader::Pixmaps::kTestBullet, target, Entities::TestProjectile::kSpeed, - Entities::TestProjectile::kDamage) {} + Entities::TestProjectile::kMaxSpeed, + Entities::TestProjectile::kAcceleration, + Entities::TestProjectile::kEnemyFindDistance, + Entities::TestProjectile::kDamage), + cross_cycle_time_( + Entities::TestProjectile::kCrossAccelerationCycleDuration) {} void TestProjectile::Tick(Time delta) { AutoguidedProjectile::Tick(delta); diff --git a/GameObjects/Entities/Projectiles/test_projectile.h b/GameObjects/Entities/Projectiles/test_projectile.h index d510285..5c1c00f 100644 --- a/GameObjects/Entities/Projectiles/test_projectile.h +++ b/GameObjects/Entities/Projectiles/test_projectile.h @@ -7,4 +7,7 @@ class TestProjectile : public AutoguidedProjectile { TestProjectile(const VectorF& coordinates, Entity* target); void Tick(Time delta) override; + + private: + Time cross_cycle_time_; }; diff --git a/GameObjects/Entities/Towers/test_tower.cpp b/GameObjects/Entities/Towers/test_tower.cpp index b8711bd..3360f96 100644 --- a/GameObjects/Entities/Towers/test_tower.cpp +++ b/GameObjects/Entities/Towers/test_tower.cpp @@ -3,6 +3,7 @@ #include #include "GameObjects/Entities/Projectiles/test_projectile.h" +#include "GameObjects/Entities/Projectiles/linear_test_projectile.h" #include "GameObjects/Entities/Mobs/Basis/mob.h" #include "Utilities/Resources/pixmap_loader.h" #include "constants.h" @@ -41,7 +42,7 @@ void TestTower::Tick(Time delta) { if (mob->GetHealth() <= 0) { continue; } - scene()->addItem(new TestProjectile(scenePos(), mob)); + scene()->addItem(new LinearTestProjectile(scenePos(), mob)); attack_timer_.Start(Entities::TestTower::kAttackCooldown); break; } diff --git a/Resources/Levels/Level1/level.json b/Resources/Levels/Level1/level.json index 78dc978..4936b75 100644 --- a/Resources/Levels/Level1/level.json +++ b/Resources/Levels/Level1/level.json @@ -91,21 +91,21 @@ "mobType": "Dwarf", "count": 4, "startTime": 2000, - "entryDuration": 1000, + "entryDuration": 1500, "routeIndex": 1 }, { "mobType": "Hedgehog", "count": 4, - "startTime": 4000, + "startTime": 4500, "entryDuration": 1000, "routeIndex": 1 }, { "mobType": "Skeleton", "count": 4, - "startTime": 6000, - "entryDuration": 1000, + "startTime": 6500, + "entryDuration": 1500, "routeIndex": 1 } ] @@ -115,10 +115,10 @@ "spawnEntries": [ { "mobType": "TestMob", - "count": 30, + "count": 300, "startTime": 0, - "entryDuration": 2000, - "routeIndex": 0 + "entryDuration": 100000, + "routeIndex": 1 } ] } diff --git a/Utilities/vector_f.cpp b/Utilities/vector_f.cpp index 7bc7abc..edea52f 100644 --- a/Utilities/vector_f.cpp +++ b/Utilities/vector_f.cpp @@ -21,3 +21,15 @@ void VectorF::normalize() { VectorF VectorF::normalized() { return *this / length(); } + +void VectorF::rotate(qreal radians) { + *this = this->rotated(radians); +} + +VectorF VectorF::rotated(qreal radians) { + qreal s = sin(radians); + qreal c = cos(radians); + return VectorF( + x() * c - y() * s, + x() * s + y() * c); +} diff --git a/Utilities/vector_f.h b/Utilities/vector_f.h index de85928..f5edb53 100644 --- a/Utilities/vector_f.h +++ b/Utilities/vector_f.h @@ -14,4 +14,7 @@ class VectorF : public QPointF { void normalize(); VectorF normalized(); + + void rotate(qreal radians); + VectorF rotated(qreal radians); }; diff --git a/constants.cpp b/constants.cpp index 6ce9124..4f80771 100644 --- a/constants.cpp +++ b/constants.cpp @@ -34,7 +34,7 @@ const QString kDwarfId = "Dwarf"; namespace TestTower { const qreal kAttackRange = 300; -const Time kAttackCooldown = Time(100); +const Time kAttackCooldown = Time(500); } namespace TestMob { @@ -74,7 +74,13 @@ const int kDamageToBase = 1; } namespace TestProjectile { -const Damage kDamage = Damage(3); -const qreal kSpeed = 500; +const Damage kDamage = Damage(10); +const qreal kSpeed = 100; +const qreal kAcceleration = 1500; +const qreal kMaxSpeed = 500; +const qreal kEnemyFindDistance = 300; +const qreal kCrossAccelerationPerPixel = 900.0 / 100.0; +const Time kCrossAccelerationCycleDuration = 1500_ms; +const qreal kMaxCrossAcceleration = 600; } } // namespace Entities diff --git a/constants.h b/constants.h index 99a1926..88e98cb 100644 --- a/constants.h +++ b/constants.h @@ -76,5 +76,11 @@ extern const int kDamageToBase; namespace TestProjectile { extern const Damage kDamage; extern const qreal kSpeed; +extern const qreal kAcceleration; +extern const qreal kMaxSpeed; +extern const qreal kEnemyFindDistance; +extern const qreal kCrossAccelerationPerPixel; +extern const Time kCrossAccelerationCycleDuration; +extern const qreal kMaxCrossAcceleration; } } // namespace Entities From affea2da44791387da7c62dd20569d4eab4d9331 Mon Sep 17 00:00:00 2001 From: jansenin <59775038+jansenin@users.noreply.github.com> Date: Fri, 3 Jun 2022 15:14:30 +0300 Subject: [PATCH 10/19] Explosion (#24) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add customizable base classes * add getters to scene * fix cpplint * test use of animations, many other fixes Если кратко, то вот: 1)Тестовый моб теперь может чуть больше и у него есть анимации 2)Самонаводящиеся пули перескакивают на других мобов при смерти первоначальных * code style * more code style * fix custom literal error * Added level managing system, json-format level data storage. * add textured box, toolpit, unfinished death system * add ui components(layouts, menus, text buttons, ...) Added: LinearLayout(horisontal and vertical) LinearMenu(horisontal and vertical) PaddingBox TextButton * add icons on buttons * explosion * fix z-value Co-authored-by: Artsiom S --- CMakeLists.txt | 9 +- Controller/controller.cpp | 125 ++---------------- .../Projectiles/autoguided_projectile.h | 2 +- GameObjects/Entities/Towers/test_tower.cpp | 4 +- GameObjects/explosion.cpp | 59 +++++++++ GameObjects/explosion.h | 32 +++++ Resources/resources.qrc | 2 + Utilities/Resources/pixmap_loader.cpp | 24 ++++ Utilities/Resources/pixmap_loader.h | 9 +- constants.cpp | 7 + constants.h | 7 + 11 files changed, 158 insertions(+), 122 deletions(-) create mode 100644 GameObjects/explosion.cpp create mode 100644 GameObjects/explosion.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 22c2308..24d0d56 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,7 +33,10 @@ set(GAME_OBJECTS GameObjects/Entities/Mobs/skeleton.cpp GameObjects/Entities/Mobs/cobra.cpp GameObjects/Entities/Mobs/hedgehog.cpp - GameObjects/Entities/Mobs/dwarf.cpp GameObjects/Entities/Projectiles/linear_autoguided_projectile.cpp GameObjects/Entities/Projectiles/linear_autoguided_projectile.h GameObjects/Entities/Projectiles/linear_test_projectile.cpp GameObjects/Entities/Projectiles/linear_test_projectile.h) + GameObjects/Entities/Mobs/dwarf.cpp + GameObjects/explosion.cpp + GameObjects/Entities/Projectiles/linear_autoguided_projectile.cpp + GameObjects/Entities/Projectiles/linear_test_projectile.cpp) set(UTILITIES Utilities/damage.cpp @@ -53,7 +56,9 @@ set(UI UI/linear_menu.cpp UI/linear_layout.cpp UI/button.cpp - UI/padding_box.cpp UI/pixmap_object.cpp UI/pixmap_object.h) + UI/padding_box.cpp + UI/pixmap_object.cpp + UI/pixmap_object.h) add_executable(Game ${RESOURCES} diff --git a/Controller/controller.cpp b/Controller/controller.cpp index 35b1ed8..176f6e3 100644 --- a/Controller/controller.cpp +++ b/Controller/controller.cpp @@ -12,6 +12,7 @@ #include "GameObjects/Entities/Mobs/hedgehog.h" #include "GameObjects/Entities/Mobs/cobra.h" #include "GameObjects/Entities/Mobs/dwarf.h" +#include "GameObjects/explosion.h" #include "constants.h" #include "UI/button.h" #include "UI/linear_menu.h" @@ -52,120 +53,16 @@ Level* Controller::GetLevel() const { void Controller::SetupScene() { { // temporary code - LinearMenu* main_menu = new LinearMenu(); - main_menu->SetTexturedBoxPixmaps(PixmapLoader::kMenu2TexturedBoxPixmaps); - main_menu->SetSpacing(30); - - TextButton* test_button = new TextButton(); - test_button->SetText("Test button"); - QFont button_font = test_button->GetTextDocument()->defaultFont(); - button_font.setPixelSize(30); - test_button->GetTextDocument()->setDefaultFont(button_font); - - connect(test_button, &TextButton::Clicked, - [this, test_button, main_menu](){ - static int i = 0; - i++; - scene_->addItem(new TestMob({200.0 + 10 * i, 200})); - test_button->setScale(1.5); - test_button->SetIcon(PixmapLoader::Pixmaps::FireTotem::kIdle.at(0)); - test_button->SetSpacing(test_button->Spacing() + 5); - test_button->SetPadding(test_button->Padding() + 3); - main_menu->setPos( - scene_->sceneRect().topRight() - - main_menu->boundingRect().topRight() + - QPointF{-5, 5}); - main_menu->RecalculatePositions(); - }); - - LinearLayout* layout = new LinearLayout(); - layout->SetSpacing(10); - layout->AddItem(new TextButton({0, 0}, "Menu button 1")); - layout->AddItem(new TextButton({0, 0}, "Menu button 2")); - TextButton* close_button = new TextButton({0, 0}, "Quit"); - layout->AddItem(close_button); - connect(close_button, &TextButton::Clicked, [](){ QApplication::exit(); }); - - LinearMenu* menu = new LinearMenu(); - menu->AddItem(new PaddingBox(new TextButton({0, 0}, "Menu button 1"), 10)); - menu->AddItem(new PaddingBox(new TextButton({0, 0}, "Menu button 2"), 10)); - menu->SetSpacing(5); - menu->SetPadding(20); - menu->setScale(1.2); - menu->SetTexturedBoxPixmaps(PixmapLoader::kMenuTexturedBoxPixmaps); - menu->SetType(LinearLayout::Type::Vertical); - - main_menu->AddItem(layout); - main_menu->AddItem(menu); - main_menu->AddItem(test_button); - main_menu->SetType(LinearLayout::Type::Vertical); - main_menu->setScale(0.3); - - //{ - // LinearLayout* test_hor_layout = new LinearLayout(); - // test_hor_layout->AddItem(new TextButton({0, 0}, "test 1")); - // test_hor_layout->AddItem(new TextButton({0, 0}, "test 2")); - // test_hor_layout->SetType(LinearLayout::Type::Horizontal); - // test_hor_layout->SetSpacing(20); - // test_hor_layout->setPos(200, 200); - // - // LinearLayout* test_ver_layout = new LinearLayout(); - // test_ver_layout->AddItem(new TextButton({0, 0}, "test 1")); - // test_ver_layout->AddItem(new TextButton({0, 0}, "test 2")); - // test_ver_layout->SetType(LinearLayout::Type::Vertical); - // test_ver_layout->SetSpacing(20); - // test_ver_layout->setPos(200, 300); - // - // scene_->addItem(test_hor_layout); - // scene_->addItem(test_ver_layout); - //} - //{ - // LinearMenu* test_hor_menu = new LinearMenu(); - // test_hor_menu->AddItem(new TextButton({0, 0}, "test 1")); - // test_hor_menu->AddItem(new TextButton({0, 0}, "test 2")); - // test_hor_menu->SetType(LinearLayout::Type::Horizontal); - // test_hor_menu->SetTexturedBoxPixmaps( - // PixmapLoader::kMenu2TexturedBoxPixmaps); - // test_hor_menu->SetPadding(50); - // test_hor_menu->SetSpacing(20); - // test_hor_menu->setPos(-200, 100); - // - // LinearMenu* test_ver_menu = new LinearMenu(); - // test_ver_menu->AddItem(new TextButton({0, 0}, "test 1")); - // test_ver_menu->AddItem(new TextButton({0, 0}, "test 2")); - // test_ver_menu->SetType(LinearLayout::Type::Vertical); - // test_ver_menu->SetTexturedBoxPixmaps( - // PixmapLoader::kMenu2TexturedBoxPixmaps); - // test_ver_menu->SetPadding(50); - // test_ver_menu->SetSpacing(20); - // test_ver_menu->setPos(-600, 100); - // - // scene_->addItem(test_hor_menu); - // scene_->addItem(test_ver_menu); - //} - //{ - // TextButton* text_button = new TextButton({0, 0}, "Button"); - // PaddingBox* padding_box = new PaddingBox(text_button, 20); - // padding_box->setPos(0, 0); - // - // scene_->addItem(padding_box); - //} - //{ - // TextButton* text_button = new TextButton({-300, 0}, "Button"); - // - // connect(text_button, &TextButton::Clicked, [text_button]() { - // text_button->SetText( - // text_button->GetTextDocument()->toPlainText() + " Button"); - // }); - // - // scene_->addItem(text_button); - //} - - scene_->addItem(main_menu); - main_menu->setPos( - scene_->sceneRect().topRight() - - main_menu->boundingRect().topRight() * main_menu->scale() + - QPointF{-5, 5}); + TextButton* quit_button = new TextButton({0, 0}, "Quit"); + auto quit_button_font = quit_button->GetTextDocument()->defaultFont(); + quit_button_font.setPixelSize(20); + quit_button->GetTextDocument()->setDefaultFont(quit_button_font); + quit_button->setPos( + scene_->sceneRect().topRight() + - quit_button->boundingRect().topRight() + - VectorF(5, -5)); + connect(quit_button, &TextButton::Clicked, [](){ QApplication::exit(); }); + scene_->addItem(quit_button); } // temporary code end level_->AddObjectsToScene(scene_); diff --git a/GameObjects/Entities/Projectiles/autoguided_projectile.h b/GameObjects/Entities/Projectiles/autoguided_projectile.h index 5f19191..8ef9847 100644 --- a/GameObjects/Entities/Projectiles/autoguided_projectile.h +++ b/GameObjects/Entities/Projectiles/autoguided_projectile.h @@ -34,8 +34,8 @@ class AutoguidedProjectile : public Projectile { Entity* target_; VectorF speed_; + Damage damage_; qreal max_speed_; qreal acceleration_; qreal enemy_find_distance_; - Damage damage_; }; diff --git a/GameObjects/Entities/Towers/test_tower.cpp b/GameObjects/Entities/Towers/test_tower.cpp index 3360f96..04b6222 100644 --- a/GameObjects/Entities/Towers/test_tower.cpp +++ b/GameObjects/Entities/Towers/test_tower.cpp @@ -2,8 +2,8 @@ #include -#include "GameObjects/Entities/Projectiles/test_projectile.h" #include "GameObjects/Entities/Projectiles/linear_test_projectile.h" +#include "GameObjects/Entities/Projectiles/test_projectile.h" #include "GameObjects/Entities/Mobs/Basis/mob.h" #include "Utilities/Resources/pixmap_loader.h" #include "constants.h" @@ -42,7 +42,7 @@ void TestTower::Tick(Time delta) { if (mob->GetHealth() <= 0) { continue; } - scene()->addItem(new LinearTestProjectile(scenePos(), mob)); + scene()->addItem(new TestProjectile(scenePos(), mob)); attack_timer_.Start(Entities::TestTower::kAttackCooldown); break; } diff --git a/GameObjects/explosion.cpp b/GameObjects/explosion.cpp new file mode 100644 index 0000000..24dd66d --- /dev/null +++ b/GameObjects/explosion.cpp @@ -0,0 +1,59 @@ +#include "explosion.h" + +#include "GameObjects/Entities/Mobs/Basis/mob.h" +#include "Utilities/Resources/pixmap_loader.h" +#include "constants.h" + +Explosion::Explosion(const VectorF& coordinates, qreal radius, Damage damage) + : radius_(radius), + damage_(damage), + animation_(new Animation( + PixmapLoader::Pixmaps::Explosion::kExplosion, + Explosions::kTimeBetweenFrames)) { + setPos(coordinates); + setZValue(Explosions::kZValue); +} + +QRectF Explosion::boundingRect() const { + QRectF result = animation_->Frame()->rect(); + qreal scale = result.width() / (radius_ * 2); + result = QRectF(0, 0, result.width() / scale, result.height() / scale); + result.translate(-result.width() / 2, -result.height() / 2); + return result; +} + +void Explosion::paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) { + QRectF rect = boundingRect(); + QPixmap* pixmap = animation_->Frame(); + painter->drawPixmap(rect, *pixmap, pixmap->rect()); +} + +void Explosion::Tick(Time delta) { + animation_->Tick(delta); + + if (animation_->WasEndedDuringPreviousUpdate()) { + deleteLater(); + } +} + +void Explosion::DamageMobs() { + for (auto mob : scene()->Mobs()) { + if (VectorF(scenePos() - mob->scenePos()).length() < radius_) { + mob->ApplyDamage(damage_); + } + } +} + +QVariant Explosion::itemChange(QGraphicsItem::GraphicsItemChange change, + const QVariant& value) { + if (change == GraphicsItemChange::ItemSceneHasChanged) { + DamageMobs(); + } + return QGraphicsItem::itemChange(change, value); +} + +Explosion::~Explosion() { + delete animation_; +} diff --git a/GameObjects/explosion.h b/GameObjects/explosion.h new file mode 100644 index 0000000..a335a66 --- /dev/null +++ b/GameObjects/explosion.h @@ -0,0 +1,32 @@ +#pragma once + +#include "GameObjects/Interface/graphics_object.h" +#include "GameObjects/Interface/tickable.h" +#include "constants.h" +#include "Utilities/animation.h" + +class Explosion : public GraphicsObject, public Tickable { + public: + Explosion( + const VectorF& coordinates, + qreal radius = Explosions::kDefaultRadius, + Damage damage = Explosions::kDefaultDamage); + + QRectF boundingRect() const override; + void paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) override; + void Tick(Time delta) override; + + virtual ~Explosion(); + + QVariant itemChange(QGraphicsItem::GraphicsItemChange change, + const QVariant& value) override; + + private: + void DamageMobs(); + + Animation* animation_; + qreal radius_; + Damage damage_; +}; diff --git a/Resources/resources.qrc b/Resources/resources.qrc index 7d522c8..7153579 100644 --- a/Resources/resources.qrc +++ b/Resources/resources.qrc @@ -23,6 +23,8 @@ Levels/Level1/map.png Levels/Level1/level.json + images/explosion.png + GUI/Textured boxes/Default/top_left_corner.png diff --git a/Utilities/Resources/pixmap_loader.cpp b/Utilities/Resources/pixmap_loader.cpp index ebb034f..417d6ba 100644 --- a/Utilities/Resources/pixmap_loader.cpp +++ b/Utilities/Resources/pixmap_loader.cpp @@ -33,6 +33,8 @@ std::vector P::Hedgehog::kDeath; QPixmap* P::Dwarf::kAnimations; std::vector P::Dwarf::kWalk; std::vector P::Dwarf::kDeath; +QPixmap* P::Explosion::kAnimations; +std::vector P::Explosion::kExplosion; // ----------------------------------------------------------------------------- @@ -60,6 +62,7 @@ void PixmapLoader::LoadPixmaps() { LoadCobraAnimations(); LoadHedgehogAnimations(); LoadDwarfAnimations(); + LoadExplosionAnimation(); LoadUI(); } @@ -265,6 +268,27 @@ void PixmapLoader::LoadDwarfAnimations() { death_animation_row * frame_height); } +void PixmapLoader::LoadExplosionAnimation() { + // file size - 384x48 + // 1 frame rows, 8 frame columns + const int animation_frames_count = 8; + const int frame_width = 384 / animation_frames_count; + const int frame_height = 48 / 1; + // row and column start from 0 + const int animation_row = 0; + const int animation_column = 0; + + P::Explosion::kAnimations = new QPixmap(":images/explosion.png"); + + P::Explosion::kExplosion = CreateHorizontalFramesVector( + P::Explosion::kAnimations, + frame_width, + frame_height, + animation_frames_count, + animation_column * frame_width, + animation_row * frame_height); +} + void PixmapLoader::LoadUI() { LoadDefaultTextureBox(); LoadMenuTextureBox(); diff --git a/Utilities/Resources/pixmap_loader.h b/Utilities/Resources/pixmap_loader.h index 846afb4..02228d4 100644 --- a/Utilities/Resources/pixmap_loader.h +++ b/Utilities/Resources/pixmap_loader.h @@ -34,27 +34,29 @@ class PixmapLoader { static std::vector kWalk; static std::vector kDeath; }; - class Cobra { public: static QPixmap* kAnimations; static std::vector kWalk; static std::vector kDeath; }; - class Hedgehog { public: static QPixmap* kAnimations; static std::vector kWalk; static std::vector kDeath; }; - class Dwarf { public: static QPixmap* kAnimations; static std::vector kWalk; static std::vector kDeath; }; + class Explosion { + public: + static QPixmap* kAnimations; + static std::vector kExplosion; + }; }; static TexturedBoxPixmaps kMenuTexturedBoxPixmaps; @@ -78,6 +80,7 @@ class PixmapLoader { static void LoadCobraAnimations(); static void LoadHedgehogAnimations(); static void LoadDwarfAnimations(); + static void LoadExplosionAnimation(); static void LoadUI(); static void LoadDefaultTextureBox(); diff --git a/constants.cpp b/constants.cpp index 4f80771..0b1c527 100644 --- a/constants.cpp +++ b/constants.cpp @@ -24,6 +24,13 @@ namespace LevelData { extern const int kLevelsCount = 1; } +namespace Explosions { +const qreal kDefaultRadius = 70.0; +const Damage kDefaultDamage = Damage(50); +const Time kTimeBetweenFrames = 50_ms; +const qreal kZValue = 2000; +} + namespace Entities { const int kCircleAttackAreaApproximationPointsCount = 10; const QString kTestMobId = "TestMob"; diff --git a/constants.h b/constants.h index 88e98cb..613f92a 100644 --- a/constants.h +++ b/constants.h @@ -25,6 +25,13 @@ namespace LevelData { extern const int kLevelsCount; } +namespace Explosions { +extern const qreal kDefaultRadius; +extern const Damage kDefaultDamage; +extern const Time kTimeBetweenFrames; +extern const qreal kZValue; +} + namespace Entities { extern const int kCircleAttackAreaApproximationPointsCount; extern const QString kTestMobId; From e73785b8a98b30e457c23dbd9527591e04bd5d45 Mon Sep 17 00:00:00 2001 From: parfen01 <99528469+parfen01@users.noreply.github.com> Date: Fri, 3 Jun 2022 15:56:28 +0300 Subject: [PATCH 11/19] Different towers (#25) * Moved mehanics from tested tower and toweslots * Made two towers * Fixed cpplint * Fixed cpplint once again * Deleted tests objects --- CMakeLists.txt | 5 +- Controller/controller.cpp | 8 +- GameObjects/Entities/Mobs/test_mob.cpp | 120 ------------------ GameObjects/Entities/Mobs/test_mob.h | 37 ------ .../Towers/TowerSlots/test_tower_slot.cpp | 29 ----- .../Towers/TowerSlots/test_tower_slot.h | 16 --- .../Entities/Towers/TowerSlots/tower_slot.cpp | 42 +++++- .../Entities/Towers/TowerSlots/tower_slot.h | 7 +- GameObjects/Entities/Towers/cannon_tower.cpp | 39 ++++++ GameObjects/Entities/Towers/cannon_tower.h | 12 ++ GameObjects/Entities/Towers/magic_tower.cpp | 37 ++++++ GameObjects/Entities/Towers/magic_tower.h | 13 ++ GameObjects/Entities/Towers/test_tower.cpp | 51 -------- GameObjects/Entities/Towers/test_tower.h | 19 --- GameObjects/Entities/Towers/tower.cpp | 70 +++++++++- GameObjects/Entities/Towers/tower.h | 35 ++++- Resources/Levels/Level1/level.json | 30 ++--- Resources/images/cannon_tower_level1.png | Bin 0 -> 530 bytes Resources/images/cannon_tower_level2.png | Bin 0 -> 602 bytes Resources/images/cannon_tower_level3.png | Bin 0 -> 624 bytes Resources/images/magic_tower_level1.png | Bin 0 -> 6214 bytes Resources/images/magic_tower_level2.png | Bin 0 -> 7045 bytes Resources/images/magic_tower_level3.png | Bin 0 -> 7069 bytes Resources/images/tower_slot.png | Bin 0 -> 1306 bytes Resources/resources.qrc | 11 +- UI/linear_layout.cpp | 2 + UI/linear_layout.h | 2 + Utilities/Resources/pixmap_loader.cpp | 22 ++-- Utilities/Resources/pixmap_loader.h | 11 +- Utilities/utility.cpp | 5 - constants.cpp | 27 ++-- constants.h | 26 ++-- level.cpp | 4 +- 33 files changed, 326 insertions(+), 354 deletions(-) delete mode 100644 GameObjects/Entities/Mobs/test_mob.cpp delete mode 100644 GameObjects/Entities/Mobs/test_mob.h delete mode 100644 GameObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp delete mode 100644 GameObjects/Entities/Towers/TowerSlots/test_tower_slot.h create mode 100644 GameObjects/Entities/Towers/cannon_tower.cpp create mode 100644 GameObjects/Entities/Towers/cannon_tower.h create mode 100644 GameObjects/Entities/Towers/magic_tower.cpp create mode 100644 GameObjects/Entities/Towers/magic_tower.h delete mode 100644 GameObjects/Entities/Towers/test_tower.cpp delete mode 100644 GameObjects/Entities/Towers/test_tower.h create mode 100644 Resources/images/cannon_tower_level1.png create mode 100644 Resources/images/cannon_tower_level2.png create mode 100644 Resources/images/cannon_tower_level3.png create mode 100644 Resources/images/magic_tower_level1.png create mode 100644 Resources/images/magic_tower_level2.png create mode 100644 Resources/images/magic_tower_level3.png create mode 100644 Resources/images/tower_slot.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 24d0d56..3514672 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,11 +21,8 @@ set(GAME_OBJECTS GameObjects/Interface/damageable.cpp GameObjects/Interface/entity.cpp GameObjects/Entities/Mobs/Basis/mob.cpp - GameObjects/Entities/Mobs/test_mob.cpp GameObjects/Entities/Towers/tower.cpp GameObjects/Entities/Towers/TowerSlots/tower_slot.cpp - GameObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp - GameObjects/Entities/Towers/test_tower.cpp GameObjects/Entities/Projectiles/autoguided_projectile.cpp GameObjects/Entities/Projectiles/test_projectile.cpp GameObjects/Interface/graphics_object.cpp @@ -34,6 +31,8 @@ set(GAME_OBJECTS GameObjects/Entities/Mobs/cobra.cpp GameObjects/Entities/Mobs/hedgehog.cpp GameObjects/Entities/Mobs/dwarf.cpp + GameObjects/Entities/Towers/magic_tower.cpp + GameObjects/Entities/Towers/cannon_tower.cpp GameObjects/explosion.cpp GameObjects/Entities/Projectiles/linear_autoguided_projectile.cpp GameObjects/Entities/Projectiles/linear_test_projectile.cpp) diff --git a/Controller/controller.cpp b/Controller/controller.cpp index 176f6e3..bacfa7e 100644 --- a/Controller/controller.cpp +++ b/Controller/controller.cpp @@ -6,8 +6,6 @@ #include #include -#include "GameObjects/Entities/Mobs/test_mob.h" -#include "GameObjects/Entities/Towers/TowerSlots/test_tower_slot.h" #include "GameObjects/Entities/Mobs/skeleton.h" #include "GameObjects/Entities/Mobs/hedgehog.h" #include "GameObjects/Entities/Mobs/cobra.h" @@ -32,7 +30,7 @@ Controller::Controller() : LaunchTickTimer(); connect(this, &Controller::GameOver, [this]() { - scene_->addItem(new TestMob({100, 100})); + scene_->addItem(new Dwarf({100, 100})); // it's needed, but it also blocks close button // view_->setInteractive(false); tick_timer_->stop(); @@ -59,8 +57,8 @@ void Controller::SetupScene() { quit_button->GetTextDocument()->setDefaultFont(quit_button_font); quit_button->setPos( scene_->sceneRect().topRight() - - quit_button->boundingRect().topRight() - - VectorF(5, -5)); + - quit_button->boundingRect().topRight() + - VectorF(5, -5)); connect(quit_button, &TextButton::Clicked, [](){ QApplication::exit(); }); scene_->addItem(quit_button); } // temporary code end diff --git a/GameObjects/Entities/Mobs/test_mob.cpp b/GameObjects/Entities/Mobs/test_mob.cpp deleted file mode 100644 index 49bf52e..0000000 --- a/GameObjects/Entities/Mobs/test_mob.cpp +++ /dev/null @@ -1,120 +0,0 @@ -#include "test_mob.h" - -#include "Utilities/Resources/pixmap_loader.h" -#include "constants.h" - -void TestMob::Tick(Time delta) { - Mob::Tick(delta); - if (is_creating_ && animation_->WasEndedDuringPreviousUpdate()) { - is_creating_ = false; - animation_ = idle_animation_; - } - if (is_destroying_ && animation_->WasEndedDuringPreviousUpdate()) { - animation_->SetIndex(animation_->FrameCount() - 1); - deleteLater(); - } - if (route_ != nullptr && !is_destroying_) { - if (!is_creating_ && !route_->isEnd(this)) { - route_->Move(this, speed_ * delta.seconds()); - } - } - test_tooltip->setPos(scenePos() + QPointF(0, 80)); -} - -void TestMob::keyPressEvent(QKeyEvent* event) { - if (health_ == 0) return; - QPointF velocity_vector = mapToParent(pos() + - VectorF{0, -Entities::TestMob::kActiveMoveSpeed}) - mapToParent(pos()); - if (event->key() == Qt::Key::Key_Left) { - setRotation(rotation() - Entities::TestMob::kRotationSpeed); - } else if (event->key() == Qt::Key::Key_Right) { - setRotation(rotation() + Entities::TestMob::kRotationSpeed); - } else if (event->key() == Qt::Key::Key_Up) { - setPos(pos() + velocity_vector); - } else if (event->key() == Qt::Key::Key_Down) { - setPos(pos() - velocity_vector); - } else if (event->key() == Qt::Key::Key_Space && !is_destroying_) { - health_ = 0; - is_destroying_ = true; - disappearing_animation_->Reset(); - animation_ = disappearing_animation_; - } -} - -void TestMob::mousePressEvent(QGraphicsSceneMouseEvent* event) { - scene()->addItem(new TestMob(pos() + VectorF{100, 100})); - static int tooltip_number = 0; - tooltip_number++; - test_tooltip->setHtml( - "Test tooltip line 1
" - "Test tooltip line 2
" - "Test very long tooltip line with line break in the end" + - QString::number(tooltip_number)); -} - -TestMob::TestMob(const VectorF& coordinates) - : Mob( - coordinates, - // TODO(jansenin): Было бы лучше инициализировать анимации отдельно - // от моба - new Animation(PixmapLoader::Pixmaps::FireTotem::kAppearing, 50_ms), - Entities::TestMob::kHealth, - 1, - 300), - is_destroying_(false), - idle_animation_( - new Animation(PixmapLoader::Pixmaps::FireTotem::kIdle, 50_ms)), - disappearing_animation_( - new Animation(PixmapLoader::Pixmaps::FireTotem::kDisappear, 50_ms)), - appearing_animation_(animation_), - is_creating_(true), - test_tooltip(new Tooltip()) { - setFlag(QGraphicsItem::ItemIsFocusable, true); - setAcceptHoverEvents(true); - setScale(1.4); - - test_tooltip->setPos(scenePos() + QPointF(0, 80)); - test_tooltip->setVisible(false); - test_tooltip->setHtml( - "Test tooltip line 1
" - "Test tooltip line 2
" - "Test very long tooltip line with line break in the end
"); -} - -TestMob::~TestMob() { - delete idle_animation_; - delete disappearing_animation_; - delete appearing_animation_; - test_tooltip->deleteLater(); -} - -void TestMob::ApplyDamage(Damage damage) { - Damageable::ApplyDamage(damage); - - if (health_ <= 0 && !is_destroying_) { - disappearing_animation_->Reset(); - is_destroying_ = true; - animation_ = disappearing_animation_; - } -} - -void TestMob::SetRoute(Route* route) { - Mob::SetRoute(route); - MoveToRouteStart(); -} - -void TestMob::hoverEnterEvent(QGraphicsSceneHoverEvent* event) { - test_tooltip->setVisible(true); -} - -void TestMob::hoverLeaveEvent(QGraphicsSceneHoverEvent* event) { - test_tooltip->setVisible(false); -} - -QVariant TestMob::itemChange(QGraphicsItem::GraphicsItemChange change, - const QVariant& value) { - if (change == GraphicsItemChange::ItemSceneHasChanged) { - scene()->addItem(test_tooltip); - } - return QGraphicsItem::itemChange(change, value); -} diff --git a/GameObjects/Entities/Mobs/test_mob.h b/GameObjects/Entities/Mobs/test_mob.h deleted file mode 100644 index f192fef..0000000 --- a/GameObjects/Entities/Mobs/test_mob.h +++ /dev/null @@ -1,37 +0,0 @@ -#pragma once - -#include - -#include "GameObjects/Entities/Mobs/Basis/mob.h" -#include "Utilities/vector_f.h" -#include "UI/tooltip.h" - -class TestMob : public Mob { - public: - explicit TestMob(const VectorF& coordinates = VectorF{0, 0}); - - void Tick(Time delta) override; - void ApplyDamage(Damage damage) override; - void SetRoute(Route* route) override; - - ~TestMob() override; - - protected: - QVariant itemChange(GraphicsItemChange change, - const QVariant& value) override; - - void keyPressEvent(QKeyEvent* event) override; - void mousePressEvent(QGraphicsSceneMouseEvent* event) override; - - void hoverEnterEvent(QGraphicsSceneHoverEvent* event) override; - void hoverLeaveEvent(QGraphicsSceneHoverEvent* event) override; - - bool is_destroying_; - bool is_creating_; - - Animation* idle_animation_; - Animation* disappearing_animation_; - Animation* appearing_animation_; - - Tooltip* test_tooltip; -}; diff --git a/GameObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp b/GameObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp deleted file mode 100644 index ad233e7..0000000 --- a/GameObjects/Entities/Towers/TowerSlots/test_tower_slot.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include "test_tower_slot.h" - -#include - -#include "GameObjects/Entities/Towers/test_tower.h" -#include "Utilities/Resources/pixmap_loader.h" - -TestTowerSlot::TestTowerSlot(const VectorF& coordinates) : TowerSlot( - coordinates, PixmapLoader::Pixmaps::kTestTowerSlot) {} - -void TestTowerSlot::mousePressEvent(QGraphicsSceneMouseEvent* event) { - if (event->button() != Qt::MouseButton::LeftButton) { - return TowerSlot::mousePressEvent(event); - } - if (!IsTakenUp()) { - TestTower* tower = new TestTower(scenePos()); - scene()->addItem(tower); - TakeUpArea(tower); - } - QGraphicsItem::mousePressEvent(event); -} - -void TestTowerSlot::paint( - QPainter* painter, - const QStyleOptionGraphicsItem* option, - QWidget* widget) { - if (IsTakenUp()) return; - Entity::paint(painter, option, widget); -} diff --git a/GameObjects/Entities/Towers/TowerSlots/test_tower_slot.h b/GameObjects/Entities/Towers/TowerSlots/test_tower_slot.h deleted file mode 100644 index a09a135..0000000 --- a/GameObjects/Entities/Towers/TowerSlots/test_tower_slot.h +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include "tower_slot.h" - -class TestTowerSlot : public TowerSlot { - public: - explicit TestTowerSlot(const VectorF& coordinates); - - protected: - void mousePressEvent(QGraphicsSceneMouseEvent* event) override; - - public: - void paint(QPainter* painter, - const QStyleOptionGraphicsItem* option, - QWidget* widget) override; -}; diff --git a/GameObjects/Entities/Towers/TowerSlots/tower_slot.cpp b/GameObjects/Entities/Towers/TowerSlots/tower_slot.cpp index 5f158a8..b8733d7 100644 --- a/GameObjects/Entities/Towers/TowerSlots/tower_slot.cpp +++ b/GameObjects/Entities/Towers/TowerSlots/tower_slot.cpp @@ -1,4 +1,10 @@ #include "tower_slot.h" +#include "GameObjects/Entities/Towers/tower.h" +#include "GameObjects/Entities/Towers/magic_tower.h" +#include "GameObjects/Entities/Towers/cannon_tower.h" +#include "Utilities/Resources/pixmap_loader.h" +#include "constants.h" +#include bool TowerSlot::IsTakenUp() const { return tower_ != nullptr; @@ -12,11 +18,10 @@ void TowerSlot::ClearArea() { tower_ = nullptr; } -TowerSlot::TowerSlot(const VectorF& coordinates, QPixmap* pixmap) - : TowerSlot(coordinates, new Animation(pixmap)) {} - -TowerSlot::TowerSlot(const VectorF& coordinates, Animation* animation) - : Entity(coordinates, animation), tower_(nullptr) {} +TowerSlot::TowerSlot(const VectorF& coordinates) + : Entity(coordinates, PixmapLoader::Pixmaps::kTowerSlot), tower_(nullptr) { + setScale(0.45); +} void TowerSlot::Tick(Time time) { Entity::Tick(time); @@ -25,3 +30,30 @@ void TowerSlot::Tick(Time time) { tower_->Tick(time); } } + +void TowerSlot::mousePressEvent(QGraphicsSceneMouseEvent* event) { + if (event->button() == Qt::MouseButton::LeftButton) { + if (!IsTakenUp()) { + MagicTower* tower = new MagicTower(scenePos()); + scene()->addItem(tower); + TakeUpArea(tower); + } + QGraphicsItem::mousePressEvent(event); + return; + } + if (event->button() == Qt::MouseButton::RightButton) { + if (!IsTakenUp()) { + CannonTower* tower = new CannonTower(scenePos()); + scene()->addItem(tower); + TakeUpArea(tower); + } + QGraphicsItem::mousePressEvent(event); + return; + } +} + void TowerSlot::paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) { + if (IsTakenUp()) return; + Entity::paint(painter, option, widget); + } diff --git a/GameObjects/Entities/Towers/TowerSlots/tower_slot.h b/GameObjects/Entities/Towers/TowerSlots/tower_slot.h index 46b5f5d..68fdb25 100644 --- a/GameObjects/Entities/Towers/TowerSlots/tower_slot.h +++ b/GameObjects/Entities/Towers/TowerSlots/tower_slot.h @@ -5,13 +5,16 @@ class TowerSlot : public Entity { public: - TowerSlot(const VectorF& coordinates, QPixmap* pixmap); - TowerSlot(const VectorF& coordinates, Animation* animation); + explicit TowerSlot(const VectorF& coordinates); [[nodiscard]] bool IsTakenUp() const; void TakeUpArea(Tower* tower); void ClearArea(); void Tick(Time time) override; + void mousePressEvent(QGraphicsSceneMouseEvent* event) override; + void paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) override; protected: Tower* tower_; diff --git a/GameObjects/Entities/Towers/cannon_tower.cpp b/GameObjects/Entities/Towers/cannon_tower.cpp new file mode 100644 index 0000000..52ca7a0 --- /dev/null +++ b/GameObjects/Entities/Towers/cannon_tower.cpp @@ -0,0 +1,39 @@ +#include "cannon_tower.h" +#include "constants.h" +#include "Utilities/Resources/pixmap_loader.h" + +using P = PixmapLoader::Pixmaps; + +CannonTower::CannonTower(const VectorF& coordinates) : + Tower(coordinates, + P::kCannonTowerLevel1, + Entities::CannonTower::kAttackCooldownLevel1, + Entities::CannonTower::kAttackRangeLevel1, + Entities::CannonTower::kMaxLevel, + Entities::CannonTower::kPrice) { + setScale(2); +} + +void CannonTower::Upgrade() { + Tower::Upgrade(); + + ++Tower::current_level_; + if (current_level_ == 2) { + Tower::cooldown_ = Entities::CannonTower::kAttackCooldownLevel2; + Tower::range_ = Entities::CannonTower::kAttackRangeLevel2; + delete Tower::animation_; + Tower::animation_ = new Animation(P::kCannonTowerLevel2); + return; + } + if (current_level_ == 3) { + Tower::cooldown_ = Entities::CannonTower::kAttackCooldownLevel3; + Tower::range_ = Entities::CannonTower::kAttackRangeLevel3; + delete Tower::animation_; + Tower::animation_ = new Animation(P::kCannonTowerLevel3); + return; + } +} + +void CannonTower::mousePressEvent(QGraphicsSceneMouseEvent* event) { + Upgrade(); +} diff --git a/GameObjects/Entities/Towers/cannon_tower.h b/GameObjects/Entities/Towers/cannon_tower.h new file mode 100644 index 0000000..f6575e6 --- /dev/null +++ b/GameObjects/Entities/Towers/cannon_tower.h @@ -0,0 +1,12 @@ +#pragma once +#include "tower.h" +#include + +class CannonTower : public Tower { + public: + explicit CannonTower(const VectorF& coordinates); + void mousePressEvent(QGraphicsSceneMouseEvent* event) override; + + private: + void Upgrade() override; +}; diff --git a/GameObjects/Entities/Towers/magic_tower.cpp b/GameObjects/Entities/Towers/magic_tower.cpp new file mode 100644 index 0000000..875410c --- /dev/null +++ b/GameObjects/Entities/Towers/magic_tower.cpp @@ -0,0 +1,37 @@ +#include "magic_tower.h" +#include "constants.h" +#include "Utilities/Resources/pixmap_loader.h" + +using P = PixmapLoader::Pixmaps; + +MagicTower::MagicTower(const VectorF& coordinates) : + Tower(coordinates, + P::kMagicTowerLevel1, + Entities::MagicTower::kAttackCooldownLevel1, + Entities::MagicTower::kAttackRangeLevel1, + Entities::MagicTower::kMaxLevel, + Entities::MagicTower::kPrice) {} + +void MagicTower::Upgrade() { + Tower::Upgrade(); + + ++Tower::current_level_; + if (current_level_ == 2) { + Tower::cooldown_ = Entities::MagicTower::kAttackCooldownLevel2; + Tower::range_ = Entities::MagicTower::kAttackRangeLevel2; + delete Tower::animation_; + Tower::animation_ = new Animation(P::kMagicTowerLevel2); + return; + } + if (current_level_ == 3) { + Tower::cooldown_ = Entities::MagicTower::kAttackCooldownLevel3; + Tower::range_ = Entities::MagicTower::kAttackRangeLevel3; + delete Tower::animation_; + Tower::animation_ = new Animation(P::kMagicTowerLevel3); + return; + } +} + +void MagicTower::mousePressEvent(QGraphicsSceneMouseEvent* event) { + Upgrade(); +} diff --git a/GameObjects/Entities/Towers/magic_tower.h b/GameObjects/Entities/Towers/magic_tower.h new file mode 100644 index 0000000..c9bd98f --- /dev/null +++ b/GameObjects/Entities/Towers/magic_tower.h @@ -0,0 +1,13 @@ +#pragma once +#include "tower.h" +#include + +class MagicTower : public Tower { + public: + explicit MagicTower(const VectorF& coordinates); + void mousePressEvent(QGraphicsSceneMouseEvent* event) override; + + private: + void Upgrade() override; +}; + diff --git a/GameObjects/Entities/Towers/test_tower.cpp b/GameObjects/Entities/Towers/test_tower.cpp deleted file mode 100644 index 04b6222..0000000 --- a/GameObjects/Entities/Towers/test_tower.cpp +++ /dev/null @@ -1,51 +0,0 @@ -#include "test_tower.h" - -#include - -#include "GameObjects/Entities/Projectiles/linear_test_projectile.h" -#include "GameObjects/Entities/Projectiles/test_projectile.h" -#include "GameObjects/Entities/Mobs/Basis/mob.h" -#include "Utilities/Resources/pixmap_loader.h" -#include "constants.h" - -namespace { -QPolygonF CreateAttackArea(qreal range) { - const int points_count = Entities::kCircleAttackAreaApproximationPointsCount; - QVector points; - for (int i = 0 ; i < points_count; ++i) { - qreal angle = i * 2 * M_PI / points_count; - points.push_back(QPointF { cos(angle), sin(angle) } * range); - } - return QPolygonF(points); -} -} // namespace - -TestTower::TestTower(const VectorF& coordinates) - : Tower(coordinates, PixmapLoader::Pixmaps::kTestTower), - attack_timer_(Time(0)), - range_(Entities::TestTower::kAttackRange), - local_attack_area_(CreateAttackArea(range_)) { - // TODO(jansenin): change it when coordinates are changed - scene_attack_area_ = local_attack_area_.translated(scenePos()); -} - -void TestTower::Tick(Time delta) { - Tower::Tick(delta); - - attack_timer_.Tick(delta); - - if (attack_timer_.IsExpired()) { - QList items_in_attack_area = - scene()->items(scene_attack_area_); - for (QGraphicsItem* item : items_in_attack_area) { - if (Mob* mob = dynamic_cast(item)) { - if (mob->GetHealth() <= 0) { - continue; - } - scene()->addItem(new TestProjectile(scenePos(), mob)); - attack_timer_.Start(Entities::TestTower::kAttackCooldown); - break; - } - } - } -} diff --git a/GameObjects/Entities/Towers/test_tower.h b/GameObjects/Entities/Towers/test_tower.h deleted file mode 100644 index fa33d7f..0000000 --- a/GameObjects/Entities/Towers/test_tower.h +++ /dev/null @@ -1,19 +0,0 @@ -#pragma once - -#include "Utilities/timer.h" -#include - -#include "tower.h" - -class TestTower : public Tower { - public: - explicit TestTower(const VectorF& coordinates); - - void Tick(Time delta) override; - - protected: - qreal range_; - Timer attack_timer_; - QPolygonF local_attack_area_; - QPolygonF scene_attack_area_; -}; diff --git a/GameObjects/Entities/Towers/tower.cpp b/GameObjects/Entities/Towers/tower.cpp index f92c0af..648bc2f 100644 --- a/GameObjects/Entities/Towers/tower.cpp +++ b/GameObjects/Entities/Towers/tower.cpp @@ -1,7 +1,69 @@ +#include + #include "tower.h" +#include "GameObjects/Entities/Projectiles/test_projectile.h" +#include "GameObjects/Entities/Mobs/Basis/mob.h" +#include "Utilities/Resources/pixmap_loader.h" +#include "constants.h" + +QPolygonF CreateAttackArea(qreal range) { + const int points_count = Entities::kCircleAttackAreaApproximationPointsCount; + QVector points; + for (int i = 0 ; i < points_count; ++i) { + qreal angle = i * 2 * M_PI / points_count; + points.push_back(QPointF { cos(angle), sin(angle) } * range); + } + return QPolygonF(points); +} + +Tower::Tower(const VectorF& coordinates, QPixmap* pixmap, Time cooldown, + qreal range, int max_level, int price, int health) + : Entity(coordinates, new Animation(pixmap), health), + attack_timer_(Time(0)), + range_(range), + cooldown_(cooldown), + current_level_(1), + max_level_(max_level), + price_(price), + local_attack_area_(CreateAttackArea(range_)) { + // TODO(jansenin): change it when coordinates are changed + scene_attack_area_ = local_attack_area_.translated(scenePos()); +} + +Tower::Tower(const VectorF& coordinates, Animation* animation, + Time cooldown, qreal range, int max_level, int price, int health) + : Entity(coordinates, animation, health), + attack_timer_(Time(0)), + range_(range), + cooldown_(cooldown), + current_level_(1), + max_level_(max_level), + price_(price), + local_attack_area_(CreateAttackArea(range_)) { + // TODO(jansenin): change it when coordinates are changed + scene_attack_area_ = local_attack_area_.translated(scenePos()); +} + +void Tower::Tick(Time delta) { + Entity::Tick(delta); + + attack_timer_.Tick(delta); -Tower::Tower(const VectorF& coordinates, QPixmap* pixmap, int health) - : Tower(coordinates, new Animation(pixmap), health) {} + if (attack_timer_.IsExpired()) { + QList items_in_attack_area = + scene()->items(scene_attack_area_); + for (QGraphicsItem* item : items_in_attack_area) { + if (Mob* mob = dynamic_cast(item)) { + if (mob->GetHealth() <= 0) { + continue; + } + scene()->addItem(new TestProjectile( + scenePos() - QPointF(0, 20), mob)); + attack_timer_.Start(cooldown_); + break; + } + } + } +} -Tower::Tower(const VectorF& coordinates, Animation* animation, int health) - : Entity(coordinates, animation, health) {} +void Tower::Upgrade() {} diff --git a/GameObjects/Entities/Towers/tower.h b/GameObjects/Entities/Towers/tower.h index 7be2b91..d17424a 100644 --- a/GameObjects/Entities/Towers/tower.h +++ b/GameObjects/Entities/Towers/tower.h @@ -1,9 +1,40 @@ #pragma once #include "GameObjects/Interface/entity.h" +#include "Utilities/timer.h" +#include + +QPolygonF CreateAttackArea(qreal range); class Tower : public Entity { public: - Tower(const VectorF& coordinates, QPixmap* pixmap, int health = 0); - Tower(const VectorF& coordinates, Animation* animation, int health = 0); + Tower(const VectorF& coordinates, + QPixmap* pixmap, + Time cooldown, + qreal range, + int max_level, + int price, + int health = 0); + + Tower(const VectorF& coordinates, + Animation* animation, + Time cooldown, + qreal range, + int max_level, + int price, + int health = 0); + + virtual void Upgrade(); + + void Tick(Time delta) override; + + protected: + int price_; + int current_level_; + int max_level_; + Time cooldown_; + qreal range_; + Timer attack_timer_; + QPolygonF local_attack_area_; + QPolygonF scene_attack_area_; }; diff --git a/Resources/Levels/Level1/level.json b/Resources/Levels/Level1/level.json index 4936b75..ee2ae3b 100644 --- a/Resources/Levels/Level1/level.json +++ b/Resources/Levels/Level1/level.json @@ -84,40 +84,28 @@ "mobType": "Cobra", "count": 4, "startTime": 0, - "entryDuration": 1000, + "entryDuration": 2000, "routeIndex": 1 }, { - "mobType": "Dwarf", + "mobType": "Hedgehog", "count": 4, - "startTime": 2000, - "entryDuration": 1500, + "startTime": 3000, + "entryDuration": 2000, "routeIndex": 1 }, { - "mobType": "Hedgehog", + "mobType": "Dwarf", "count": 4, - "startTime": 4500, - "entryDuration": 1000, + "startTime": 6000, + "entryDuration": 4000, "routeIndex": 1 }, { "mobType": "Skeleton", "count": 4, - "startTime": 6500, - "entryDuration": 1500, - "routeIndex": 1 - } - ] - }, - { - "startTimeRelativeToPrevWave": 5000, - "spawnEntries": [ - { - "mobType": "TestMob", - "count": 300, - "startTime": 0, - "entryDuration": 100000, + "startTime": 11000, + "entryDuration": 2000, "routeIndex": 1 } ] diff --git a/Resources/images/cannon_tower_level1.png b/Resources/images/cannon_tower_level1.png new file mode 100644 index 0000000000000000000000000000000000000000..dbf7c4e0230dc763223b282c2a5ed5e2978192ab GIT binary patch literal 530 zcmeAS@N?(olHy`uVBq!ia0vp^;y|p(!2~4tW-oUKQtTz3zOL-|Svh&d`Pny|`vOu^ z;u=vBoS#-wo>-L1;O^rBG)AE;wMfBO&!n(*$wQzLj*!LpeYZeSkfJR z9T^xl_H+M9WCilslDyqr82*Fcg1yTpgG5S#{DL7O<`L4h3=E9Xo-U3d6?2k*`12kx z$l}Uec0-ai!Bu4jQ^;G{z=;=41bG=*H%c8j(!ltpm)Ve&Q{%v6@dalyIHvF4u!EJO z;;PBC=(lrJjX=s8gJ!(iIGgFpgl}s5BiAs4MUKp33i|J%ylnsg literal 0 HcmV?d00001 diff --git a/Resources/images/cannon_tower_level2.png b/Resources/images/cannon_tower_level2.png new file mode 100644 index 0000000000000000000000000000000000000000..3ffe5f73f1c294a8c50f020dd9919ad79d0290f4 GIT binary patch literal 602 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 literal 0 HcmV?d00001 diff --git a/Resources/images/magic_tower_level2.png b/Resources/images/magic_tower_level2.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c66f64b382ba0eb45a5ee41b5cb7a59750bee2 GIT binary patch literal 7045 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 Hu0mjf3fLKO literal 0 HcmV?d00001 diff --git a/Resources/images/tower_slot.png b/Resources/images/tower_slot.png new file mode 100644 index 0000000000000000000000000000000000000000..6d27ca37021365a9b473c1adf5391210dc629ba9 GIT binary patch literal 1306 zcmV+#1?BpQP)005f^0{{R3(yU-{00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj57*I@9MSOL2U|CtVmy#zWB$j%0NJK<5A0Ge!0PNWb z#Q*>R2y{|TQ~&?}|NsC00N#VWSpWb432;bRa{vGi!vFvd!vV){sAK>D1b0b9K~#8N z?V0UXV>b{4*<=&m|BW;1E?JT#UE3G4F);N@nvYg-Sk5u*+xwGwdl(isq~L8>+>nB| zVR6GV1%DO(Is~T~B4$!>1f3ZoW>Rnjof#r#o+KzYy@bh(y2lVUkb)P~J%+G>6uhAB zF@y~~QxKCGz0Nt%bqk4=6fEdr&VjC5NUWq_K@W2dblpN?<>P{KQ*?V>r^Z!H*A_h`1n+SB zUEmzxa0ua$g8zdcIUTqOOez;aM(==U;719z@3`E=3Bi)WQ$Y%*pkeorognSI`8+`x zNl@q-(7v0pqpwvjr(g;ib`N=ZLDRcYdXTc2f`-zAl+6@0lpdsPexjhvfYO7M%?AY8 znvlVT%Vz>$=oDo?1sOU;+5ZWGB|$Dr7&-+JSbj%A?fv>k{3{6TVDuD3q~K|Yc&6a| zuaVJH5RrnXA>yNgR_is1op6`sLln$b;42~?7Hbp(SLBSC17&sToD*CbrH(szlNP^Muw@D+&}wMG0EM2=ux z_}N}TWfooOyF^UXjY>;N!4wQ$Pf(rE0!b34=pmvZgT_OGi@%UV*|JD4W%^yLgsL+#Xr$mz64af~ zc@?E{p3%ky>#PJDxCug*5E=YDLDOq0qlfJyhzwHjQv?O0ff}3xT^Cr#^n!euf`|`)HpKv$81DOjN}uu@|@Sp6!%;tU%VU4@VS z5i6+Oeu~v?sMdI*;1xs!DVTx-sx|(wpgPS>sN0|#9IB1D+fS0QhOJ5prr-e8;13I` zBR8R|PYv?xmUMTRe1H>zeq`|=+X34Ft@D~GSn=dy>jqy$P!KsozvB4CQ`iM8 z_IPr!)uBPomG33!;O!&W1uV{ZYnPxA&Xp7#@zyRuBb+O$`3JbWkEl^_;{}y zIPD-=>|@k87L=P{XM=`0H=NcdtE^$6zYL~eLBpIIPV19Z*04yy3mWF!a9W?NvW7(` zDAX1dg15IRpzB`Y_JcUtuaFbSO{Cy0oa|S~39t)N@D@(?E93;&1>Jw-TtR?W9pei9 z4W1ck4V?y@>{nEfP~)cH4E+rZ4YY<%$4ID=f`!)5=@ images/background.png images/test_bullet.png - images/test_mob.png - images/test_tower.png - images/test_tower_gun.png - images/test_tower_slot.png + images/magic_tower_level1.png + images/magic_tower_level2.png + images/magic_tower_level3.png + images/cannon_tower_level1.png + images/cannon_tower_level2.png + images/cannon_tower_level3.png + images/tower_slot.png diff --git a/UI/linear_layout.cpp b/UI/linear_layout.cpp index d217a92..0d04c1a 100644 --- a/UI/linear_layout.cpp +++ b/UI/linear_layout.cpp @@ -3,6 +3,7 @@ #include #include +#include #include "constants.h" @@ -23,6 +24,7 @@ void LinearLayout::OnItemDestroyed(QObject* item) { RemoveItem(object); } + void LinearLayout::AddItem(QGraphicsObject* item) { prepareGeometryChange(); items_.push_back(item); diff --git a/UI/linear_layout.h b/UI/linear_layout.h index b5970bf..0f70079 100644 --- a/UI/linear_layout.h +++ b/UI/linear_layout.h @@ -5,6 +5,8 @@ #include #include + + // positions items one after another, centered by y class LinearLayout : public QGraphicsObject { public: diff --git a/Utilities/Resources/pixmap_loader.cpp b/Utilities/Resources/pixmap_loader.cpp index 417d6ba..e7734c6 100644 --- a/Utilities/Resources/pixmap_loader.cpp +++ b/Utilities/Resources/pixmap_loader.cpp @@ -7,10 +7,13 @@ using P = PixmapLoader::Pixmaps; QPixmap* P::kBackground; QPixmap* P::kTestBullet; -QPixmap* P::kTestMob; -QPixmap* P::kTestTower; -QPixmap* P::kTestTowerGun; -QPixmap* P::kTestTowerSlot; +QPixmap* P::kMagicTowerLevel1; +QPixmap* P::kMagicTowerLevel2; +QPixmap* P::kMagicTowerLevel3; +QPixmap* P::kCannonTowerLevel1; +QPixmap* P::kCannonTowerLevel2; +QPixmap* P::kCannonTowerLevel3; +QPixmap* P::kTowerSlot; std::vector P::kLevelMaps; QPixmap* P::kEmpty; @@ -46,10 +49,13 @@ TexturedBoxPixmaps PixmapLoader::kButtonTexturedBoxPixmaps; void PixmapLoader::LoadPixmaps() { P::kBackground = new QPixmap(":images/background.png"); P::kTestBullet = new QPixmap(":images/test_bullet.png"); - P::kTestMob = new QPixmap(":images/test_mob.png"); - P::kTestTower = new QPixmap(":images/test_tower.png"); - P::kTestTowerGun = new QPixmap(":images/test_tower_gun.png"); - P::kTestTowerSlot = new QPixmap(":images/test_tower_slot.png"); + P::kTowerSlot = new QPixmap(":images/tower_slot.png"); + P::kMagicTowerLevel1 = new QPixmap(":images/magic_tower_level1.png"); + P::kMagicTowerLevel2 = new QPixmap(":images/magic_tower_level2.png"); + P::kMagicTowerLevel3 = new QPixmap(":images/magic_tower_level3.png"); + P::kCannonTowerLevel1 = new QPixmap(":images/cannon_tower_level1.png"); + P::kCannonTowerLevel2 = new QPixmap(":images/cannon_tower_level2.png"); + P::kCannonTowerLevel3 = new QPixmap(":images/cannon_tower_level3.png"); for (int i = 1; i <= LevelData::kLevelsCount; ++i) { P::kLevelMaps.push_back(new QPixmap(":Levels/Level" + QString::number(i) diff --git a/Utilities/Resources/pixmap_loader.h b/Utilities/Resources/pixmap_loader.h index 02228d4..95de2b3 100644 --- a/Utilities/Resources/pixmap_loader.h +++ b/Utilities/Resources/pixmap_loader.h @@ -14,10 +14,13 @@ class PixmapLoader { // TODO(jansenin): maybe make this readonly static QPixmap* kBackground; static QPixmap* kTestBullet; - static QPixmap* kTestMob; - static QPixmap* kTestTower; - static QPixmap* kTestTowerGun; - static QPixmap* kTestTowerSlot; + static QPixmap* kTowerSlot; + static QPixmap* kMagicTowerLevel1; + static QPixmap* kMagicTowerLevel2; + static QPixmap* kMagicTowerLevel3; + static QPixmap* kCannonTowerLevel1; + static QPixmap* kCannonTowerLevel2; + static QPixmap* kCannonTowerLevel3; static std::vector kLevelMaps; static QPixmap* kEmpty; diff --git a/Utilities/utility.cpp b/Utilities/utility.cpp index 32e606f..ac8a87c 100644 --- a/Utilities/utility.cpp +++ b/Utilities/utility.cpp @@ -1,7 +1,5 @@ #include -#include "GameObjects/Entities/Mobs/test_mob.h" -#include "GameObjects/Entities/Towers/TowerSlots/test_tower_slot.h" #include "GameObjects/Entities/Mobs/skeleton.h" #include "GameObjects/Entities/Mobs/cobra.h" #include "GameObjects/Entities/Mobs/hedgehog.h" @@ -10,9 +8,6 @@ #include "utility.h" Mob* CreateMobFromType(QString type) { - if (type == Entities::kTestMobId) { - return new TestMob(); - } if (type == Entities::kSkeletonId) { return new Skeleton(); } diff --git a/constants.cpp b/constants.cpp index 0b1c527..09cf1d3 100644 --- a/constants.cpp +++ b/constants.cpp @@ -39,17 +39,26 @@ const QString kCobraId = "Cobra"; const QString kHedgehogId = "Hedgehog"; const QString kDwarfId = "Dwarf"; -namespace TestTower { -const qreal kAttackRange = 300; -const Time kAttackCooldown = Time(500); +namespace MagicTower { +const qreal kAttackRangeLevel1 = 300; +const Time kAttackCooldownLevel1 = Time(500); +const qreal kAttackRangeLevel2 = 400; +const Time kAttackCooldownLevel2 = Time(450); +const qreal kAttackRangeLevel3 = 600; +const Time kAttackCooldownLevel3 = Time(400); +const int kMaxLevel = 3; +const int kPrice = 110; } -namespace TestMob { -const qreal kPassiveMoveSpeed = 5; -const qreal kActiveMoveSpeed = 100; -const qreal kRotationSpeed = 10; -const int kHealth = 30; -const int kDamageToBase = 1; +namespace CannonTower { +const qreal kAttackRangeLevel1 = 200; +const Time kAttackCooldownLevel1 = Time(200); +const qreal kAttackRangeLevel2 = 300; +const Time kAttackCooldownLevel2 = Time(150); +const qreal kAttackRangeLevel3 = 500; +const Time kAttackCooldownLevel3 = Time(100); +const int kMaxLevel = 3; +const int kPrice = 70; } namespace Skeleton { diff --git a/constants.h b/constants.h index 613f92a..0fe2898 100644 --- a/constants.h +++ b/constants.h @@ -40,16 +40,26 @@ extern const QString kCobraId; extern const QString kHedgehogId; extern const QString kDwarfId; -namespace TestTower { -extern const qreal kAttackRange; -extern const Time kAttackCooldown; +namespace MagicTower { +extern const qreal kAttackRangeLevel1; +extern const Time kAttackCooldownLevel1; +extern const qreal kAttackRangeLevel2; +extern const Time kAttackCooldownLevel2; +extern const qreal kAttackRangeLevel3; +extern const Time kAttackCooldownLevel3; +extern const int kMaxLevel; +extern const int kPrice; } -namespace TestMob { -extern const qreal kPassiveMoveSpeed; -extern const qreal kActiveMoveSpeed; -extern const qreal kRotationSpeed; -extern const int kHealth; +namespace CannonTower { +extern const qreal kAttackRangeLevel1; +extern const Time kAttackCooldownLevel1; +extern const qreal kAttackRangeLevel2; +extern const Time kAttackCooldownLevel2; +extern const qreal kAttackRangeLevel3; +extern const Time kAttackCooldownLevel3; +extern const int kMaxLevel; +extern const int kPrice; } namespace Skeleton { diff --git a/level.cpp b/level.cpp index 04627c0..9c5304b 100644 --- a/level.cpp +++ b/level.cpp @@ -8,7 +8,7 @@ #include #include -#include "GameObjects/Entities/Towers/TowerSlots/test_tower_slot.h" +#include "GameObjects/Entities/Towers/TowerSlots/tower_slot.h" #include "Utilities/utility.h" #include "Utilities/Resources/pixmap_loader.h" #include "constants.h" @@ -42,7 +42,7 @@ Level::Level(int level_number) : level_number_(level_number) { tower_slot_y = tower_slot_pos_object.value("y").toInt(); tower_slots_.push_back( - new TestTowerSlot(VectorF(tower_slot_x, tower_slot_y))); + new TowerSlot(VectorF(tower_slot_x, tower_slot_y))); } QJsonArray routes = root.value("routes").toArray(); From 8c91a368635ae124cb01b5099be21acde460b8e5 Mon Sep 17 00:00:00 2001 From: exhaustedkid <99528470+exhaustedkid@users.noreply.github.com> Date: Fri, 3 Jun 2022 21:49:39 +0300 Subject: [PATCH 12/19] Feachures (#27) * created trap, bomb, coins * fixed ci * fixed ci try2 * added nolint --- CMakeLists.txt | 3 + Controller/controller.cpp | 18 +++ Controller/controller.h | 9 ++ GameObjects/Entities/Mobs/Basis/mob.cpp | 7 + .../Entities/Towers/TowerSlots/tower_slot.cpp | 2 + GameObjects/Entities/Towers/cannon_tower.cpp | 2 +- GameObjects/Entities/Towers/magic_tower.cpp | 3 +- GameObjects/Entities/Traps/bear_trap.cpp | 83 ++++++++++++ GameObjects/Entities/Traps/bear_trap.h | 27 ++++ GameObjects/Entities/Traps/bomb.cpp | 73 ++++++++++ GameObjects/Entities/Traps/bomb.h | 26 ++++ GameObjects/Interface/coin.cpp | 60 +++++++++ GameObjects/Interface/coin.h | 24 ++++ Resources/images/bear_trap.png | Bin 0 -> 825 bytes Resources/images/bomb0.png | Bin 0 -> 378 bytes Resources/images/bomb1.png | Bin 0 -> 393 bytes Resources/images/bomb2.png | Bin 0 -> 429 bytes Resources/images/bomb3.png | Bin 0 -> 393 bytes Resources/images/bomb4.png | Bin 0 -> 345 bytes Resources/images/bomb5.png | Bin 0 -> 333 bytes Resources/images/coin.png | Bin 0 -> 625 bytes Resources/resources.qrc | 9 +- Utilities/Resources/pixmap_loader.cpp | 125 ++++++++++++++++++ Utilities/Resources/pixmap_loader.h | 23 ++++ constants.cpp | 9 +- constants.h | 9 +- game_scene.cpp | 40 ++++++ game_scene.h | 20 +++ level.cpp | 27 +++- level.h | 4 + 30 files changed, 591 insertions(+), 12 deletions(-) create mode 100644 GameObjects/Entities/Traps/bear_trap.cpp create mode 100644 GameObjects/Entities/Traps/bear_trap.h create mode 100644 GameObjects/Entities/Traps/bomb.cpp create mode 100644 GameObjects/Entities/Traps/bomb.h create mode 100644 GameObjects/Interface/coin.cpp create mode 100644 GameObjects/Interface/coin.h create mode 100644 Resources/images/bear_trap.png create mode 100644 Resources/images/bomb0.png create mode 100644 Resources/images/bomb1.png create mode 100644 Resources/images/bomb2.png create mode 100644 Resources/images/bomb3.png create mode 100644 Resources/images/bomb4.png create mode 100644 Resources/images/bomb5.png create mode 100644 Resources/images/coin.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 3514672..8c90621 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,9 @@ set(GAME_OBJECTS GameObjects/Entities/Towers/magic_tower.cpp GameObjects/Entities/Towers/cannon_tower.cpp GameObjects/explosion.cpp + GameObjects/Entities/Traps/bear_trap.cpp + GameObjects/Entities/Traps/bomb.cpp + GameObjects/Interface/coin.cpp GameObjects/Entities/Projectiles/linear_autoguided_projectile.cpp GameObjects/Entities/Projectiles/linear_test_projectile.cpp) diff --git a/Controller/controller.cpp b/Controller/controller.cpp index bacfa7e..bdee8b8 100644 --- a/Controller/controller.cpp +++ b/Controller/controller.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "GameObjects/Entities/Mobs/skeleton.h" #include "GameObjects/Entities/Mobs/hedgehog.h" @@ -99,8 +100,25 @@ void Controller::TickAllTickables() { base_hp_ = 0; emit GameOver(); } + RegulateMoney(); + std::cout << balance_ << '\n'; } void Controller::DealDamageToBase(int damage) { // damage_per_current_tick_ += damage; } + +void Controller::RegulateMoney() { + if (scene_->GetCoinsCount() > coins_count_) { + balance_ += Costs::kCoinCost; + } + coins_count_ = scene_->GetCoinsCount(); + if (scene_->GetCannonTowersCount() > cannon_tower_count_) { + balance_ -= Costs::kCannonTowerCost; + } + cannon_tower_count_ = scene_->GetCannonTowersCount(); + if (scene_->GetMagicTowersCount() > magic_tower_count_) { + balance_ -= Costs::kMagicTowerCost; + } + magic_tower_count_ = scene_->GetMagicTowersCount(); +} diff --git a/Controller/controller.h b/Controller/controller.h index cea6ea8..e049eda 100644 --- a/Controller/controller.h +++ b/Controller/controller.h @@ -5,9 +5,11 @@ #include #include "GameObjects/Interface/entity.h" +#include "GameObjects/Interface/coin.h" #include "game_view.h" #include "game_scene.h" #include "level.h" +#include "constants.h" class Controller : public QObject { Q_OBJECT @@ -35,11 +37,18 @@ class Controller : public QObject { void SetupScene(); void LaunchTickTimer(); + void RegulateMoney(); + GameScene* scene_; GameView* view_; QTimer* tick_timer_; Level* level_; + int balance_ = kStartBalance; int base_hp_; int damage_per_current_tick_; + + int coins_count_ = 0; + int cannon_tower_count_ = 0; + int magic_tower_count_ = 0; }; diff --git a/GameObjects/Entities/Mobs/Basis/mob.cpp b/GameObjects/Entities/Mobs/Basis/mob.cpp index df5e5ac..36aa6cd 100644 --- a/GameObjects/Entities/Mobs/Basis/mob.cpp +++ b/GameObjects/Entities/Mobs/Basis/mob.cpp @@ -3,6 +3,9 @@ #include #include "Controller/controller.h" +#include "GameObjects/Interface/coin.h" +#include "Utilities/Resources/pixmap_loader.h" +#include "constants.h" Mob::Mob(const VectorF& coordinates, Animation* animation, @@ -58,6 +61,10 @@ Mob::~Mob() { if (route_ != nullptr) { route_->RemoveEntity(this); } + if (rand() % Entities::kCoinAppearChance == 1) { //NOLINT + scene()->addItem(new Coin(VectorF(pos().x(), pos().y()), + PixmapLoader::Pixmaps::kCoinAnimations)); + } } QRectF Mob::boundingRect() const { diff --git a/GameObjects/Entities/Towers/TowerSlots/tower_slot.cpp b/GameObjects/Entities/Towers/TowerSlots/tower_slot.cpp index b8733d7..97e5880 100644 --- a/GameObjects/Entities/Towers/TowerSlots/tower_slot.cpp +++ b/GameObjects/Entities/Towers/TowerSlots/tower_slot.cpp @@ -12,10 +12,12 @@ bool TowerSlot::IsTakenUp() const { void TowerSlot::TakeUpArea(Tower* tower) { tower_ = tower; + scene()->IncMagicTowersCount(); } void TowerSlot::ClearArea() { tower_ = nullptr; +// scene()->DecCannonTowersCount(); } TowerSlot::TowerSlot(const VectorF& coordinates) diff --git a/GameObjects/Entities/Towers/cannon_tower.cpp b/GameObjects/Entities/Towers/cannon_tower.cpp index 52ca7a0..6575878 100644 --- a/GameObjects/Entities/Towers/cannon_tower.cpp +++ b/GameObjects/Entities/Towers/cannon_tower.cpp @@ -16,7 +16,6 @@ CannonTower::CannonTower(const VectorF& coordinates) : void CannonTower::Upgrade() { Tower::Upgrade(); - ++Tower::current_level_; if (current_level_ == 2) { Tower::cooldown_ = Entities::CannonTower::kAttackCooldownLevel2; @@ -37,3 +36,4 @@ void CannonTower::Upgrade() { void CannonTower::mousePressEvent(QGraphicsSceneMouseEvent* event) { Upgrade(); } + diff --git a/GameObjects/Entities/Towers/magic_tower.cpp b/GameObjects/Entities/Towers/magic_tower.cpp index 875410c..873f37b 100644 --- a/GameObjects/Entities/Towers/magic_tower.cpp +++ b/GameObjects/Entities/Towers/magic_tower.cpp @@ -10,7 +10,8 @@ MagicTower::MagicTower(const VectorF& coordinates) : Entities::MagicTower::kAttackCooldownLevel1, Entities::MagicTower::kAttackRangeLevel1, Entities::MagicTower::kMaxLevel, - Entities::MagicTower::kPrice) {} + Entities::MagicTower::kPrice) { +} void MagicTower::Upgrade() { Tower::Upgrade(); diff --git a/GameObjects/Entities/Traps/bear_trap.cpp b/GameObjects/Entities/Traps/bear_trap.cpp new file mode 100644 index 0000000..688cd99 --- /dev/null +++ b/GameObjects/Entities/Traps/bear_trap.cpp @@ -0,0 +1,83 @@ +#include "bear_trap.h" +#include "Utilities/Resources/pixmap_loader.h" +#include "constants.h" + +#include +#include +#include + +QRectF BearTrap::boundingRect() const { + return QRectF(QPointF(-15, -15), QSize(30, 30)); +} + +BearTrap::BearTrap(const VectorF& coordinates, QPixmap* pixmap) + : BearTrap(coordinates, + new Animation( + PixmapLoader::Pixmaps::kBearTrapIdle, + 50_ms)) { + attacking_animation_ = new Animation( + PixmapLoader::Pixmaps::kBearTrapAttacking, + 50_ms);; + idle_animation_ = new Animation( + PixmapLoader::Pixmaps::kBearTrapIdle, + 50_ms); + broken_animation_ = new Animation( + PixmapLoader::Pixmaps::kBearTrapBroken, + 50_ms); + repairing_animation_ = new Animation( + PixmapLoader::Pixmaps::kBearTrapBroken, + 50_ms); + setFlag(QGraphicsItem::ItemIsFocusable, true); + setScale(2.5); +} + +BearTrap::BearTrap(const VectorF& coordinates, Animation* animation) + : Entity(coordinates, animation) {} + +void BearTrap::Tick(Time delta) { + if (animation_->WasEndedDuringPreviousUpdate()) { + if (is_broken_) { + animation_ = repairing_animation_; + } else { + animation_ = idle_animation_; + } + } + Entity::Tick(delta); + std::vector mobs = scene()->Mobs(); + for (auto mob : mobs) { + if (mob->sceneBoundingRect().intersects(this->sceneBoundingRect()) + && !is_broken_) { + mob->ApplyDamage(Damage(mob->GetHealth())); + animation_ = attacking_animation_; + is_broken_ = true; + } + } +} + +void BearTrap::paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) { + Entity::paint(painter, option, widget); +} + +void BearTrap::mousePressEvent(QGraphicsSceneMouseEvent* event) { + if (event->button() != Qt::LeftButton) { + return; + } + RepairTrap(); +} + +void BearTrap::RepairTrap() { + is_broken_ = false; + animation_ = repairing_animation_; + update(); +} + +BearTrap::~BearTrap() { + delete idle_animation_; + delete broken_animation_; + delete attacking_animation_; + delete repairing_animation_; +} + + diff --git a/GameObjects/Entities/Traps/bear_trap.h b/GameObjects/Entities/Traps/bear_trap.h new file mode 100644 index 0000000..7788ada --- /dev/null +++ b/GameObjects/Entities/Traps/bear_trap.h @@ -0,0 +1,27 @@ +#pragma once + +#include "GameObjects/Entities/Mobs/Basis/mob.h" + +class BearTrap : public Entity { + public: + BearTrap(const VectorF& coordinates, QPixmap* pixmap); + BearTrap(const VectorF& coordinates, Animation* animation); + ~BearTrap(); + + [[nodiscard]] QRectF boundingRect() const; + void paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget); + void Tick(Time delta); + void RepairTrap(); + + void mousePressEvent(QGraphicsSceneMouseEvent* event) override; + + private: + Animation* idle_animation_; + Animation* attacking_animation_; + Animation* broken_animation_; + Animation* repairing_animation_; + + bool is_broken_ = false; +}; diff --git a/GameObjects/Entities/Traps/bomb.cpp b/GameObjects/Entities/Traps/bomb.cpp new file mode 100644 index 0000000..7c33d62 --- /dev/null +++ b/GameObjects/Entities/Traps/bomb.cpp @@ -0,0 +1,73 @@ +#include "bomb.h" +#include "Utilities/Resources/pixmap_loader.h" + +#include "constants.h" + +#include +#include +#include + +QRectF Bomb::boundingRect() const { + return QRectF(QPointF(-15, -15), QSize(30, 30)); +} + +Bomb::Bomb(const VectorF& coordinates, QPixmap* pixmap) + : Bomb(coordinates, new Animation( + PixmapLoader::Pixmaps::kBombIdle, + 50_ms)) { + idle_animation_ = new Animation( + PixmapLoader::Pixmaps::kBombIdle, + 50_ms); + explosion_animation_ = new Animation( + PixmapLoader::Pixmaps::kBombExplosion, + 50_ms); + setFlag(QGraphicsItem::ItemIsFocusable, true); + setScale(2.5); +} + +Bomb::Bomb(const VectorF& coordinates, Animation* animation) + : Entity(coordinates, animation) {} + +void Bomb::Tick(Time delta) { + if (animation_->WasEndedDuringPreviousUpdate()) { + if (activated_) { + animation_ = explosion_animation_; + } + } + + Entity::Tick(delta); + if (activated_ && animation_->WasEndedDuringPreviousUpdate()) { + std::vector mobs = scene()->Mobs(); + for (auto mob : mobs) { + if (mob->sceneBoundingRect().intersects(this->sceneBoundingRect())) { + mob->ApplyDamage(Damage(mob->GetHealth())); + animation_ = explosion_animation_; + } + } + delete this; + } +} + +void Bomb::paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) { + Entity::paint(painter, option, widget); +} + +void Bomb::mousePressEvent(QGraphicsSceneMouseEvent* event) { + if (event->button() != Qt::LeftButton) { + return; + } + Explode(); +} + +Bomb::~Bomb() { + delete idle_animation_; + delete explosion_animation_; +} + +void Bomb::Explode() { + activated_ = true; +} + + diff --git a/GameObjects/Entities/Traps/bomb.h b/GameObjects/Entities/Traps/bomb.h new file mode 100644 index 0000000..a27c370 --- /dev/null +++ b/GameObjects/Entities/Traps/bomb.h @@ -0,0 +1,26 @@ +#pragma once + +#include "GameObjects/Entities/Mobs/Basis/mob.h" + +class Bomb : public Entity { + public: + Bomb(const VectorF& coordinates, QPixmap* pixmap); + Bomb(const VectorF& coordinates, Animation* animation); + ~Bomb(); + + [[nodiscard]] QRectF boundingRect() const; + void paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget); + void Tick(Time delta); + + void Explode(); + + void mousePressEvent(QGraphicsSceneMouseEvent* event) override; + + private: + Animation* idle_animation_; + Animation* explosion_animation_; + + bool activated_ = false; +}; diff --git a/GameObjects/Interface/coin.cpp b/GameObjects/Interface/coin.cpp new file mode 100644 index 0000000..f01bbb6 --- /dev/null +++ b/GameObjects/Interface/coin.cpp @@ -0,0 +1,60 @@ +#include "coin.h" +#include "Utilities/Resources/pixmap_loader.h" +#include "constants.h" + +#include +#include +#include + +Coin::Coin(const VectorF& coordinates, QPixmap* pixmap) + : Coin(coordinates, new Animation( + PixmapLoader::Pixmaps::kCoinIdle, + 50_ms)) { + idle_animation_ = new Animation( + PixmapLoader::Pixmaps::kCoinIdle, + 50_ms); + collecting_route_ = nullptr; + speed_ = 300; + setFlag(QGraphicsItem::ItemIsFocusable, true); + setScale(2.5); +} + +Coin::Coin(const VectorF& coordinates, Animation* animation) + : Entity(coordinates, animation) {} + +void Coin::Tick(Time delta) { + if (animation_->WasEndedDuringPreviousUpdate()) { + animation_ = idle_animation_; + } + if (collecting_route_ != nullptr) { + collecting_route_->Move(this, delta.ms() * speed_); + } + Entity::Tick(delta); +} + +void Coin::paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) { + Entity::paint(painter, option, widget); +} + +void Coin::mousePressEvent(QGraphicsSceneMouseEvent* event) { + scene()->IncCoinsCount(); + update(); + SetRoute(); + delete this; +} + +Coin::~Coin() { + delete idle_animation_; +// scene()->DecCoinsCount(); +} + +void Coin::SetRoute() { + std::vector points; + points.emplace_back(this->pos().x(), this->pos().y()); + points.emplace_back(50, 50); + collecting_route_ = new Route(points); + collecting_route_->AddEntity(this); +} + diff --git a/GameObjects/Interface/coin.h b/GameObjects/Interface/coin.h new file mode 100644 index 0000000..c413fd3 --- /dev/null +++ b/GameObjects/Interface/coin.h @@ -0,0 +1,24 @@ +#pragma once + +#include "GameObjects/Entities/Mobs/Basis/mob.h" + +class Coin : public Entity { + public: + Coin(const VectorF& coordinates, QPixmap* pixmap); + Coin(const VectorF& coordinates, Animation* animation); + ~Coin(); + + void paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget); + void Tick(Time delta); + + void SetRoute(); + + void mousePressEvent(QGraphicsSceneMouseEvent* event) override; + + private: + Animation* idle_animation_; + Route* collecting_route_; + qreal speed_; +}; diff --git a/Resources/images/bear_trap.png b/Resources/images/bear_trap.png new file mode 100644 index 0000000000000000000000000000000000000000..11f3160205af0a900095e0b555a23c2c7dd2e62a GIT binary patch literal 825 zcmV-91IGM`P)U2qM^G4`LPXPeGtWSlliHPXcn|Hpxp#IPA zAE9YlVROiP{rB^lSlRHxYx@VK=n>J@jo+qEL{y{`#ObHuULKPv6562lxweDa{sC(H z2Usm;SS@C;_v|_cZ9|+skIPd(NZk6*Gd0&v|KvJ#9WH3ER}8pvrl?|Ph6zbNw756u9*^N|;U zY;?5^0DE;Edv)E{2V8ds^|#UxWw>AjWJ!O!P!;`92N?8+z7);^SC^K?A5KSVpE?$R z&vEjAGtpjM_i7+N0*3}Uj%vUhdRJvL-*1R|9BFC;JD{6PcY~Y)6Odq905@j z`8bwDzew`Xk39sQn&vgnYIVBQ>U4=6gb#!2n5#=mJ2g!V`om1=Davr1c{l>fPQO*s zk92^;hVCl`T+3bC@nr{<-uZ~8XGZ3_pN1+#;7#i%dK2i{j^_mG>HgF-aq;^PxZOJ+ z(V#!XMZ+L>llF^@4vql6E}JUoN7hF+dNA5K1#y3{&8P>*OtXvN!6So!|C=y8hW7CN z?vI^!O+T^(g#EkZ+72dT3;Zr%GPX)J{`Ac7wabpaD(NROj(Xq&*2aDOWIYMjc0$v9 zQIADUqfKhoSPx$G)Y83R9HvtmO&1|P!NWvCy=mZDQb{+hx6$Qt2ibY`2CLhE(m&J38_Fr zVAJSEnStL;OLqGMn}S3@1ShJVND*6*3I0WbZICOl62SW-nlIV-xdJOVr683sCEx^d zC4gJ8-fXySHcqNs0{6!aikJh|5|ZxOc<|4J#%r}w6TiPoyO#)HO)7yOOd<%zLlQl8 z!wn*;dy_Clkp(VIAeF!q+7eyj1<{9 literal 0 HcmV?d00001 diff --git a/Resources/images/bomb1.png b/Resources/images/bomb1.png new file mode 100644 index 0000000000000000000000000000000000000000..5c03b8b08a1acb8be2d46c6c0e2d4c2fbf5dec76 GIT binary patch literal 393 zcmV;40e1e0P)Px$K}keGR9HvtmO%=_Fc3v2ClGY&S`ZYitL|KQ3@@M;QV*cFP-st}3qf%0R>2cQ zCUi=al9{Bf-LxC4j`?q1(nJLfU#j7JXaQOSwHwd?8W*|(P-5HL*N@12nORNQSW;ienGfY_=HOhP@XvrX-aH}EY!CtQ_pS1Ma{bY4~W-E5Uuy< nf**t!5DY6XX#pBH@BwphU?ES5k*WXy002ovPDHLkV1fVu_WzrG literal 0 HcmV?d00001 diff --git a/Resources/images/bomb2.png b/Resources/images/bomb2.png new file mode 100644 index 0000000000000000000000000000000000000000..65af93cd1c5fb3e967d43d7d7282764279c39204 GIT binary patch literal 429 zcmV;e0aE^nP)Px$W=TXrR9HvtmO)MeF%*VhPhf&u-I8E53LDt5@EBe|FXVUtxrHXol9euuCT?M? zi6^LeFZ`1Z4()4)I-8jVfwc7h`n~dsp^hKZaX$3`*$u4Ur}p%0B{@y+vjcFjC9;N^ z%bgv7!x@4BToBm!7XX9<#Qo)E1;FkRh%&fmAqRjcXX{Yzs^2{iDF6s)GHLH_Z|J^w zBx7W0d2vnbT8IIV;OqHZf`_9M`uy0?({hP08eg5u*lc$B2V!5x)dE-q`&u`{OvV@0 zl$Y1H%0e3eRX74%BPf9nI%FU!ya6J#e(*9%0^sveJS>9xLlct1VL=PwQ`7^rGQg#H zF3V7vy@#+B!1vD=9ik5;Luhs%)WdBY?R9W;?CU4BG41X(0CJZAfPx$K}keGR9Hvtmc0_eKoH0GdX-AUs14(z;TbeW?FD!t@c^`p#yhAej5=sk8v2;M zv6=IAySa!oNkfu#|KI-Za-tyRL#3P#89-(raRaA)J1ADxUvvHjfFSt9y}~38z&++k z0O(EuK#_j)^VNb200o%M(Kx|qIDoM?1*P;Qc6_$LNYTOlQchngbbD}KEn$ARQW!KF zRei71slP$QT>}9H+vXHuTFqKmvf1uf3lamOa7s0e{9+0sg@1rx8{`U{0C0VHlNqa@ zD{u-Y3sMN1feav)0i24(@y1QFb*G92;OEQmi+#WuLef2}2LJ-vUdtDs`(q35OS_i< zU`+^tCpHia#zUf>Xt|Au>YgBMDx!o-4TKQ*g{H)Wc!Wl6O4mybn0dDM0r5IPx$5=lfsR9HvtmQ4_5H46{Bu)awE$${j+Upmka*#b2O6@7#i3;5H#PhXu5=6bsu zYu%K(zgpm_IN?WGx~WUsnsZT@ZC$gNS!J2~wmI%$2o#`aVJW%^W}W9_$+PQJ7Z3nQ zoK<~C<~V{N@gERsgIYlp0NoG7e(ijs#MuQDLUJGhOmcvZV%IdPx$2T4RhR9HvtmQ50aAPj|*J9I(se>h$A4(Ws%8WAC6w9HuD^iO%;dxWG2gD)Jc z5B~u`FCcuB&0af!nsceWpC^z*oen?%ga9b7`KdbTJnnHjuO@J7`O6%_xWDh_T7WJ8h<{5xU#MZwRAY?l{TRNmOeVoT@c~>=Q zNx&wa?0pl_Td+5CS^$0GTZq>B&0*vM;QDxSeW)VzB;XRy&V3W27SRoGClDK-sR0#A z+|q=a73u{z>KLlF()Zul>fVw-H$;zk4?r4(wOO2vW>aj literal 0 HcmV?d00001 diff --git a/Resources/images/coin.png b/Resources/images/coin.png new file mode 100644 index 0000000000000000000000000000000000000000..6bce34cf1521a056b7bfa342d8620e4f2666be37 GIT binary patch literal 625 zcmV-%0*?KOP)Px%D@jB_RA_$}vG2s$|Y_e}u+=s(_b*`PzpYgoei`$?>Yq*7s^|ubu(}wh6hqv>-~mua8XI?L zcpgi6X#+lAxj#A&Um|`!>j6+SKwU{3jzuw+HIVn-nGVYG`LM(D>~OIAryGTfF+BjF zuCVUz*d;dZVDJEKoJ2P2n7*HjcsG7sVZA83*f!5&UFNf%JD6#G0vV1=5*zjy|i2A47_WTtrIlRS4Nz1|Hi9^8pj`HPJ&W|Rl@uh5k zuy6-A)6qmUrb}I|=3c`p)=k5cy3>yTU$wu*5o|z<#j>BAP!7ckax-DCY{oS6R$K^Kw{H9^xn|w{x|7z8 zwstxFW7`mkJaa36@RDr=|4yo88$ruAcLPP+5Z-NkEr0CW5W$UjavR+XXA(mW4WFY3 z8$RdQnRwzjv=0Df?P(pX{;@~V()iquV%ei;NBSt5#bU8oET@@Y(|8%}c>P?900000 LNkvXXu0mjf;1w;1 literal 0 HcmV?d00001 diff --git a/Resources/resources.qrc b/Resources/resources.qrc index 12e01fb..9a8e09c 100644 --- a/Resources/resources.qrc +++ b/Resources/resources.qrc @@ -28,7 +28,14 @@ images/explosion.png - + images/bear_trap.png + images/bomb0.png + images/bomb1.png + images/bomb2.png + images/bomb3.png + images/bomb4.png + images/bomb5.png + images/coin.png GUI/Textured boxes/Default/top_left_corner.png GUI/Textured boxes/Default/top_right_corner.png diff --git a/Utilities/Resources/pixmap_loader.cpp b/Utilities/Resources/pixmap_loader.cpp index e7734c6..0e60df2 100644 --- a/Utilities/Resources/pixmap_loader.cpp +++ b/Utilities/Resources/pixmap_loader.cpp @@ -17,6 +17,27 @@ QPixmap* P::kTowerSlot; std::vector P::kLevelMaps; QPixmap* P::kEmpty; +QPixmap* P::kBombIdleFrame; +QPixmap* P::kBomb0; +QPixmap* P::kBomb1; +QPixmap* P::kBomb2; +QPixmap* P::kBomb3; +QPixmap* P::kBomb4; +QPixmap* P::kBomb5; +std::vector P::kBombExplosion; +std::vector P::kBombIdle; + +QPixmap* P::kBearTrap; +QPixmap* P::kBearTrapAnimations; +std::vector P::kBearTrapIdle; +std::vector P::kBearTrapAttacking; +std::vector P::kBearTrapBroken; +std::vector P::kBearTrapRepairing; + +std::vector P::kCoinIdle; +QPixmap* P::kCoinAnimations; + + QPixmap* P::FireTotem::kAnimations; std::vector P::FireTotem::kIdle; std::vector P::FireTotem::kDisappear; @@ -49,6 +70,7 @@ TexturedBoxPixmaps PixmapLoader::kButtonTexturedBoxPixmaps; void PixmapLoader::LoadPixmaps() { P::kBackground = new QPixmap(":images/background.png"); P::kTestBullet = new QPixmap(":images/test_bullet.png"); + P::kBearTrap = new QPixmap(":images/bear_trap.png"); P::kTowerSlot = new QPixmap(":images/tower_slot.png"); P::kMagicTowerLevel1 = new QPixmap(":images/magic_tower_level1.png"); P::kMagicTowerLevel2 = new QPixmap(":images/magic_tower_level2.png"); @@ -63,6 +85,9 @@ void PixmapLoader::LoadPixmaps() { } P::kEmpty = new QPixmap(); + LoadBearTrapAnimations(); + LoadBombAnimations(); + LoadCoinAnimations(); LoadFireTotemAnimations(); LoadSkeletonAnimations(); LoadCobraAnimations(); @@ -357,3 +382,103 @@ void PixmapLoader::LoadButtonTextureBox() { new QPixmap(":GUI/Textured boxes/Button/inside.png") }; } + +void PixmapLoader::LoadBearTrapAnimations() { + // file size - 128x32 + // 1 frame row, 4 frame columns + const int frame_width = 128 / 4; + const int frame_height = 32; + const int idle_animation_frames_count = 1; + const int attack_animation_frames_count = 3; + const int broken_animation_frames_count = 1; + const int repairing_animation_frames_count = 1; + // row and column start from 0 + const int idle_animation_row = 0; + const int idle_animation_column = 0; + const int attack_animation_row = 0; + const int attack_animation_column = 1; + const int broken_animation_row = 0; + const int broken_animation_column = 3; + const int repairing_animation_row = 0; + const int repairing_animation_column = 0; + + P::kBearTrapAnimations = new QPixmap(":images/bear_trap.png"); + + P::kBearTrapIdle = CreateHorizontalFramesVector( + P::kBearTrapAnimations, + frame_width, + frame_height, + idle_animation_frames_count, + idle_animation_column * frame_width, + idle_animation_row * frame_height); + + P::kBearTrapBroken = CreateHorizontalFramesVector( + P::kBearTrapAnimations, + frame_width, + frame_height, + broken_animation_frames_count, + broken_animation_column * frame_width, + broken_animation_row * frame_height); + + P::kBearTrapAttacking = CreateHorizontalFramesVector( + P::kBearTrapAnimations, + frame_width, + frame_height, + attack_animation_frames_count, + attack_animation_column * frame_width, + attack_animation_row * frame_height); + + P::kBearTrapAttacking = CreateHorizontalFramesVector( + P::kBearTrapAnimations, + frame_width, + frame_height, + attack_animation_frames_count, + attack_animation_column * frame_width, + attack_animation_row * frame_height); + + P::kBearTrapRepairing = CreateHorizontalFramesVector( + P::kBearTrapAnimations, + frame_width, + frame_height, + repairing_animation_frames_count, + repairing_animation_column * frame_width, + repairing_animation_row * frame_height); +} + +void PixmapLoader::LoadBombAnimations() { + P::kBombIdleFrame = new QPixmap(":images/bomb0.png"); + P::kBomb0 = new QPixmap(":images/bomb0.png"); + P::kBomb1 = new QPixmap(":images/bomb1.png"); + P::kBomb2 = new QPixmap(":images/bomb2.png"); + P::kBomb3 = new QPixmap(":images/bomb3.png"); + P::kBomb4 = new QPixmap(":images/bomb4.png"); + P::kBomb5 = new QPixmap(":images/bomb5.png"); + P::kBombExplosion.push_back(P::kBomb0); + P::kBombExplosion.push_back(P::kBomb1); + P::kBombExplosion.push_back(P::kBomb2); + P::kBombExplosion.push_back(P::kBomb3); + P::kBombExplosion.push_back(P::kBomb4); + P::kBombExplosion.push_back(P::kBomb5); + P::kBombIdle.push_back(P::kBombIdleFrame); +} + +void PixmapLoader::LoadCoinAnimations() { + // file size - 224x16 + // 1 frame rows, 14 frame columns + const int frame_width = 224 / 14; + const int frame_height = 16; + const int idle_animation_frames_count = 14; + // row and column start from 0 + const int idle_animation_row = 0; + const int idle_animation_column = 0; + + P::kCoinAnimations = new QPixmap(":images/coin.png"); + + P::kCoinIdle = CreateHorizontalFramesVector( + P::kCoinAnimations, + frame_width, + frame_height, + idle_animation_frames_count, + idle_animation_column * frame_width, + idle_animation_row * frame_height); +} diff --git a/Utilities/Resources/pixmap_loader.h b/Utilities/Resources/pixmap_loader.h index 95de2b3..5a9e569 100644 --- a/Utilities/Resources/pixmap_loader.h +++ b/Utilities/Resources/pixmap_loader.h @@ -24,6 +24,26 @@ class PixmapLoader { static std::vector kLevelMaps; static QPixmap* kEmpty; + static QPixmap* kBearTrap; + static QPixmap* kBearTrapAnimations; + static std::vector kBearTrapIdle; + static std::vector kBearTrapAttacking; + static std::vector kBearTrapBroken; + static std::vector kBearTrapRepairing; + + static std::vector kCoinIdle; + static QPixmap* kCoinAnimations; + + static QPixmap* kBomb0; + static QPixmap* kBomb1; + static QPixmap* kBomb2; + static QPixmap* kBomb3; + static QPixmap* kBomb4; + static QPixmap* kBomb5; + static std::vector kBombExplosion; + static std::vector kBombIdle; + static QPixmap* kBombIdleFrame; + class FireTotem { public: static QPixmap* kAnimations; @@ -84,6 +104,9 @@ class PixmapLoader { static void LoadHedgehogAnimations(); static void LoadDwarfAnimations(); static void LoadExplosionAnimation(); + static void LoadBearTrapAnimations(); + static void LoadBombAnimations(); + static void LoadCoinAnimations(); static void LoadUI(); static void LoadDefaultTextureBox(); diff --git a/constants.cpp b/constants.cpp index 09cf1d3..aaa7768 100644 --- a/constants.cpp +++ b/constants.cpp @@ -3,6 +3,7 @@ const bool kDebugMode = false; const int kFPS = 60; +const int kStartBalance = 1000; namespace Scene { const qreal kWidth = 1920; @@ -33,11 +34,11 @@ const qreal kZValue = 2000; namespace Entities { const int kCircleAttackAreaApproximationPointsCount = 10; -const QString kTestMobId = "TestMob"; const QString kSkeletonId = "Skeleton"; const QString kCobraId = "Cobra"; const QString kHedgehogId = "Hedgehog"; const QString kDwarfId = "Dwarf"; +const int kCoinAppearChance = 3; namespace MagicTower { const qreal kAttackRangeLevel1 = 300; @@ -100,3 +101,9 @@ const Time kCrossAccelerationCycleDuration = 1500_ms; const qreal kMaxCrossAcceleration = 600; } } // namespace Entities + +namespace Costs { +const int kCoinCost = 50; +const int kCannonTowerCost = 500; +const int kMagicTowerCost = 500; +} diff --git a/constants.h b/constants.h index 0fe2898..4136db7 100644 --- a/constants.h +++ b/constants.h @@ -8,6 +8,13 @@ extern const bool kDebugMode; extern const int kFPS; +extern const int kStartBalance; + +namespace Costs { +extern const int kCoinCost; +extern const int kCannonTowerCost; +extern const int kMagicTowerCost; +} namespace Scene { extern const qreal kWidth; @@ -34,11 +41,11 @@ extern const qreal kZValue; namespace Entities { extern const int kCircleAttackAreaApproximationPointsCount; -extern const QString kTestMobId; extern const QString kSkeletonId; extern const QString kCobraId; extern const QString kHedgehogId; extern const QString kDwarfId; +extern const int kCoinAppearChance; namespace MagicTower { extern const qreal kAttackRangeLevel1; diff --git a/game_scene.cpp b/game_scene.cpp index b62349e..c34f8ec 100644 --- a/game_scene.cpp +++ b/game_scene.cpp @@ -56,3 +56,43 @@ std::vector GameScene::Projectiles() const { return result; } +void GameScene::IncCoinsCount() { + ++coins_count_; +} + +void GameScene::DecCoinsCount() { + if (coins_count_ > 0) { + --coins_count_; + } +} + +void GameScene::IncCannonTowersCount() { + ++cannon_tower_count_; +} + +void GameScene::DecCannonTowersCount() { + if (cannon_tower_count_ > 0) { + --cannon_tower_count_; + } +} + +int GameScene::GetCoinsCount() { + return coins_count_; +} + +int GameScene::GetCannonTowersCount() { + return cannon_tower_count_; +} + +void GameScene::IncMagicTowersCount() { + ++magic_tower_count_; +} + +void GameScene::DecMagicTowersCount() { + --magic_tower_count_; +} + +int GameScene::GetMagicTowersCount() { + return magic_tower_count_; +} + diff --git a/game_scene.h b/game_scene.h index 906cd51..8cd3c4e 100644 --- a/game_scene.h +++ b/game_scene.h @@ -19,8 +19,28 @@ class GameScene : public QGraphicsScene { GameView* view(); + void IncCoinsCount(); + void DecCoinsCount(); + int GetCoinsCount(); + + void IncCannonTowersCount(); + void DecCannonTowersCount(); + int GetCannonTowersCount(); + + void IncMagicTowersCount(); + void DecMagicTowersCount(); + int GetMagicTowersCount(); + + + + [[nodiscard]] std::vector Mobs() const; [[nodiscard]] std::vector Towers() const; [[nodiscard]] std::vector TowerSlots() const; [[nodiscard]] std::vector Projectiles() const; + + private: + int coins_count_ = 0; + int cannon_tower_count_ = 0; + int magic_tower_count_ = 0; }; diff --git a/level.cpp b/level.cpp index 9c5304b..a912eef 100644 --- a/level.cpp +++ b/level.cpp @@ -15,7 +15,7 @@ Level::Level(int level_number) : level_number_(level_number) { QFile file(":Levels/Level" + - QString::fromStdString(std::to_string(level_number)) + "/level.json"); + QString::fromStdString(std::to_string(level_number)) + "/level.json"); if (!file.open(QIODevice::ReadOnly)) { throw std::invalid_argument("There is no such level"); @@ -44,6 +44,14 @@ Level::Level(int level_number) : level_number_(level_number) { tower_slots_.push_back( new TowerSlot(VectorF(tower_slot_x, tower_slot_y))); } + { + bear_traps_.push_back(new BearTrap(VectorF(150, 150), + PixmapLoader::Pixmaps::kTowerSlot)); + } + { + bombs_.push_back(new Bomb(VectorF(0, 150), + PixmapLoader::Pixmaps::kTowerSlot)); // test + } QJsonArray routes = root.value("routes").toArray(); routes_.reserve(routes.size()); @@ -109,6 +117,12 @@ void Level::AddObjectsToScene(GameScene* scene) { for (auto tower_slot : tower_slots_) { scene->addItem(tower_slot); } + for (auto bear_trap : bear_traps_) { + scene->addItem(bear_trap); + } + for (auto bomb : bombs_) { + scene->addItem(bomb); + } } void Level::Tick(Time delta) { @@ -134,12 +148,11 @@ int Level::GetStartMoney() const { } Level::SpawnEntry::SpawnEntry(QJsonObject* spawn_root_object) - : start_time_(Time(spawn_root_object->value("startTime").toInt())), - mob_type_(spawn_root_object->value("mobType").toString()), - count_(spawn_root_object->value("count").toInt()), - entry_duration_(Time(spawn_root_object->value("entryDuration").toInt())), - route_index_(spawn_root_object->value("routeIndex").toInt()) - {} + : start_time_(Time(spawn_root_object->value("startTime").toInt())), + mob_type_(spawn_root_object->value("mobType").toString()), + count_(spawn_root_object->value("count").toInt()), + entry_duration_(Time(spawn_root_object->value("entryDuration").toInt())), + route_index_(spawn_root_object->value("routeIndex").toInt()) {} void Level::SpawnEntry::AddMobsToWave( std::map* mobs, diff --git a/level.h b/level.h index ee099b7..c957ced 100644 --- a/level.h +++ b/level.h @@ -10,6 +10,8 @@ #include "GameObjects/Entities/Towers/TowerSlots/tower_slot.h" #include "Utilities/route.h" #include "Utilities/wave.h" +#include "GameObjects/Entities/Traps/bear_trap.h" +#include "GameObjects/Entities/Traps/bomb.h" class Level { public: @@ -41,6 +43,8 @@ class Level { int route_index_; }; + std::vector bear_traps_{}; + std::vector bombs_{}; std::vector tower_slots_{}; std::vector routes_{}; std::vector waves_{}; From 531db3631088f9160226ac61902518967571e8c6 Mon Sep 17 00:00:00 2001 From: parfen01 <99528469+parfen01@users.noreply.github.com> Date: Fri, 3 Jun 2022 22:36:09 +0300 Subject: [PATCH 13/19] Big mehanic (#28) * Added BIG_mechanic * Fixed cmake * Fixed issues from last pull request --- CMakeLists.txt | 5 +- Controller/controller.cpp | 9 +++- Controller/controller.h | 2 +- GameObjects/Entities/Mobs/Basis/mob.cpp | 53 +++++++++++++++++-- GameObjects/Entities/Mobs/Basis/mob.h | 3 ++ .../Entities/Towers/TowerSlots/tower_slot.cpp | 1 - GameObjects/Entities/Towers/cannon_tower.cpp | 2 + GameObjects/Entities/Towers/magic_tower.cpp | 2 + GameObjects/{Interface => }/coin.cpp | 0 GameObjects/{Interface => }/coin.h | 0 Resources/Levels/Level1/level.json | 10 ++++ Utilities/randomaizer.cpp | 17 ++++++ Utilities/randomaizer.h | 8 +++ constants.cpp | 1 + constants.h | 1 + level.cpp | 16 ++++++ level.h | 2 + 17 files changed, 124 insertions(+), 8 deletions(-) rename GameObjects/{Interface => }/coin.cpp (100%) rename GameObjects/{Interface => }/coin.h (100%) create mode 100644 Utilities/randomaizer.cpp create mode 100644 Utilities/randomaizer.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 8c90621..d623f5a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,7 +36,7 @@ set(GAME_OBJECTS GameObjects/explosion.cpp GameObjects/Entities/Traps/bear_trap.cpp GameObjects/Entities/Traps/bomb.cpp - GameObjects/Interface/coin.cpp + GameObjects/coin.cpp GameObjects/Entities/Projectiles/linear_autoguided_projectile.cpp GameObjects/Entities/Projectiles/linear_test_projectile.cpp) @@ -50,7 +50,8 @@ set(UTILITIES Utilities/wave.cpp wave_manager.cpp Utilities/animation.cpp - Utilities/utility.cpp) + Utilities/utility.cpp + Utilities/randomaizer.cpp) set(UI UI/tooltip.cpp diff --git a/Controller/controller.cpp b/Controller/controller.cpp index bdee8b8..c826a58 100644 --- a/Controller/controller.cpp +++ b/Controller/controller.cpp @@ -7,6 +7,7 @@ #include #include +#include "GameObjects/Entities/Mobs/Basis/mob.h" #include "GameObjects/Entities/Mobs/skeleton.h" #include "GameObjects/Entities/Mobs/hedgehog.h" #include "GameObjects/Entities/Mobs/cobra.h" @@ -92,6 +93,13 @@ void Controller::TickAllTickables() { tickable->Tick(delta); } } + if (level_->IsTimeForGrow()) { + for (QGraphicsItem* graphics_item : scene_->items()) { + if (Mob* mob = dynamic_cast(graphics_item)) { + mob->TimeToGrow(); + } + } + } level_->Tick(delta); base_hp_ -= damage_per_current_tick_; @@ -101,7 +109,6 @@ void Controller::TickAllTickables() { emit GameOver(); } RegulateMoney(); - std::cout << balance_ << '\n'; } void Controller::DealDamageToBase(int damage) { diff --git a/Controller/controller.h b/Controller/controller.h index e049eda..9216e50 100644 --- a/Controller/controller.h +++ b/Controller/controller.h @@ -5,7 +5,7 @@ #include #include "GameObjects/Interface/entity.h" -#include "GameObjects/Interface/coin.h" +#include "GameObjects/coin.h" #include "game_view.h" #include "game_scene.h" #include "level.h" diff --git a/GameObjects/Entities/Mobs/Basis/mob.cpp b/GameObjects/Entities/Mobs/Basis/mob.cpp index 36aa6cd..b8d6153 100644 --- a/GameObjects/Entities/Mobs/Basis/mob.cpp +++ b/GameObjects/Entities/Mobs/Basis/mob.cpp @@ -1,9 +1,9 @@ #include "mob.h" #include - #include "Controller/controller.h" -#include "GameObjects/Interface/coin.h" +#include "Utilities/randomaizer.h" +#include "GameObjects/coin.h" #include "Utilities/Resources/pixmap_loader.h" #include "constants.h" @@ -14,6 +14,8 @@ Mob::Mob(const VectorF& coordinates, qreal speed) : Entity(coordinates, animation, health), speed_(speed), + growing_time_(Time(0)), + growing_step_(0), dealed_damage_to_base_(false), damage_to_base_(damage_to_base) {} @@ -22,7 +24,12 @@ Mob::Mob(const VectorF& coordinates, int health, int damage_to_base, qreal speed) - : Mob(coordinates, new Animation(pixmap), health, damage_to_base, speed) {} + : Entity(coordinates, new Animation(pixmap), health), + speed_(speed), + growing_time_(Time(0)), + growing_step_(0), + dealed_damage_to_base_(false), + damage_to_base_(damage_to_base) {} qreal Mob::GetSpeed() const { return speed_; @@ -55,6 +62,11 @@ void Mob::Tick(Time delta) { Controller::Instance()->DealDamageToBase(damage_to_base_); } } + if (growing_time_.ms() > 0) { + setScale(scale() + growing_step_ * delta.ms()); + growing_time_ -= delta; + } + update(); } Mob::~Mob() { @@ -72,3 +84,38 @@ QRectF Mob::boundingRect() const { result.translate(0, -result.height() / 2); return result; } + +void Mob::TimeToGrow() { + int grow_chance = std::abs(Randomaizer::Random()) % 6; + qreal grow_index = 0; + switch (grow_chance) { + case 0 : { + grow_index = 1.0; + break; + } + case 1 : { + grow_index = 1.0; + break; + } + case 2 : { + grow_index = 1.0; + break; + } + case 3 : { + grow_index = 1.1; + break; + } + case 4 : { + grow_index = 1.3; + break; + } + case 5 : { + grow_index = 1.5; + break; + } + } + health_ = static_cast(grow_index * static_cast(health_)); + growing_step_ = (grow_index * scale() - scale()) / + Entities::kGrowingSpeed.ms(); + growing_time_ = Entities::kGrowingSpeed; +} diff --git a/GameObjects/Entities/Mobs/Basis/mob.h b/GameObjects/Entities/Mobs/Basis/mob.h index 0b0643b..06beac0 100644 --- a/GameObjects/Entities/Mobs/Basis/mob.h +++ b/GameObjects/Entities/Mobs/Basis/mob.h @@ -19,6 +19,7 @@ class Mob : public Entity { int health, int damage_to_base, qreal speed); + void TimeToGrow(); virtual void SetRoute(Route* route); void MoveToRouteStart(); @@ -37,4 +38,6 @@ class Mob : public Entity { qreal speed_; bool dealed_damage_to_base_; int damage_to_base_; + Time growing_time_; + qreal growing_step_; }; diff --git a/GameObjects/Entities/Towers/TowerSlots/tower_slot.cpp b/GameObjects/Entities/Towers/TowerSlots/tower_slot.cpp index 97e5880..e018120 100644 --- a/GameObjects/Entities/Towers/TowerSlots/tower_slot.cpp +++ b/GameObjects/Entities/Towers/TowerSlots/tower_slot.cpp @@ -17,7 +17,6 @@ void TowerSlot::TakeUpArea(Tower* tower) { void TowerSlot::ClearArea() { tower_ = nullptr; -// scene()->DecCannonTowersCount(); } TowerSlot::TowerSlot(const VectorF& coordinates) diff --git a/GameObjects/Entities/Towers/cannon_tower.cpp b/GameObjects/Entities/Towers/cannon_tower.cpp index 6575878..3dd23b5 100644 --- a/GameObjects/Entities/Towers/cannon_tower.cpp +++ b/GameObjects/Entities/Towers/cannon_tower.cpp @@ -22,6 +22,7 @@ void CannonTower::Upgrade() { Tower::range_ = Entities::CannonTower::kAttackRangeLevel2; delete Tower::animation_; Tower::animation_ = new Animation(P::kCannonTowerLevel2); + update(); return; } if (current_level_ == 3) { @@ -29,6 +30,7 @@ void CannonTower::Upgrade() { Tower::range_ = Entities::CannonTower::kAttackRangeLevel3; delete Tower::animation_; Tower::animation_ = new Animation(P::kCannonTowerLevel3); + update(); return; } } diff --git a/GameObjects/Entities/Towers/magic_tower.cpp b/GameObjects/Entities/Towers/magic_tower.cpp index 873f37b..5d34c23 100644 --- a/GameObjects/Entities/Towers/magic_tower.cpp +++ b/GameObjects/Entities/Towers/magic_tower.cpp @@ -22,6 +22,7 @@ void MagicTower::Upgrade() { Tower::range_ = Entities::MagicTower::kAttackRangeLevel2; delete Tower::animation_; Tower::animation_ = new Animation(P::kMagicTowerLevel2); + update(); return; } if (current_level_ == 3) { @@ -29,6 +30,7 @@ void MagicTower::Upgrade() { Tower::range_ = Entities::MagicTower::kAttackRangeLevel3; delete Tower::animation_; Tower::animation_ = new Animation(P::kMagicTowerLevel3); + update(); return; } } diff --git a/GameObjects/Interface/coin.cpp b/GameObjects/coin.cpp similarity index 100% rename from GameObjects/Interface/coin.cpp rename to GameObjects/coin.cpp diff --git a/GameObjects/Interface/coin.h b/GameObjects/coin.h similarity index 100% rename from GameObjects/Interface/coin.h rename to GameObjects/coin.h diff --git a/Resources/Levels/Level1/level.json b/Resources/Levels/Level1/level.json index ee2ae3b..48487c7 100644 --- a/Resources/Levels/Level1/level.json +++ b/Resources/Levels/Level1/level.json @@ -110,5 +110,15 @@ } ] } + ], + "GrowTimes": [ + 3000, + 3000, + 3000, + 3000, + 3000, + 3000, + 3000, + 3000 ] } \ No newline at end of file diff --git a/Utilities/randomaizer.cpp b/Utilities/randomaizer.cpp new file mode 100644 index 0000000..d92f376 --- /dev/null +++ b/Utilities/randomaizer.cpp @@ -0,0 +1,17 @@ +#include "randomaizer.h" +#include +#include + +int random_seed = time(0); + +int Randomaizer::Random() { + srand(time(0)); + int result = rand(); // NOLINT + result %= random_seed; + result += random_seed; + result *= random_seed; + random_seed = rand(); // NOLINT + srand(random_seed); + random_seed = rand() + result; // NOLINT + return result; +} diff --git a/Utilities/randomaizer.h b/Utilities/randomaizer.h new file mode 100644 index 0000000..ec65477 --- /dev/null +++ b/Utilities/randomaizer.h @@ -0,0 +1,8 @@ +#pragma once + +extern int random_seed; + +class Randomaizer { + public: + static int Random(); +}; diff --git a/constants.cpp b/constants.cpp index aaa7768..aeddffb 100644 --- a/constants.cpp +++ b/constants.cpp @@ -34,6 +34,7 @@ const qreal kZValue = 2000; namespace Entities { const int kCircleAttackAreaApproximationPointsCount = 10; +const Time kGrowingSpeed = Time(500); const QString kSkeletonId = "Skeleton"; const QString kCobraId = "Cobra"; const QString kHedgehogId = "Hedgehog"; diff --git a/constants.h b/constants.h index 4136db7..be00dea 100644 --- a/constants.h +++ b/constants.h @@ -41,6 +41,7 @@ extern const qreal kZValue; namespace Entities { extern const int kCircleAttackAreaApproximationPointsCount; +extern const Time kGrowingSpeed; extern const QString kSkeletonId; extern const QString kCobraId; extern const QString kHedgehogId; diff --git a/level.cpp b/level.cpp index a912eef..6d04339 100644 --- a/level.cpp +++ b/level.cpp @@ -92,6 +92,11 @@ Level::Level(int level_number) : level_number_(level_number) { Wave* wave = new Wave(current_wave_start_time, std::move(mobs)); waves_.push_back(wave); } + QJsonArray timers_for_grow_array = root.value("GrowTimes").toArray(); + timers_for_grow_.reserve(timers_for_grow_array.size()); + for (auto i : timers_for_grow_array) { + timers_for_grow_.emplace_back(i.toInt()); + } } void Level::AddObjectsToScene(GameScene* scene) { @@ -129,6 +134,9 @@ void Level::Tick(Time delta) { for (auto wave : waves_) { wave->Tick(delta); } + if (!timers_for_grow_.empty()) { + timers_for_grow_[0] -= delta; + } } const std::vector& Level::GetRoutes() const { @@ -147,6 +155,14 @@ int Level::GetStartMoney() const { return startMoney_; } +bool Level::IsTimeForGrow() { + if (!timers_for_grow_.empty() && timers_for_grow_[0].ms() <= 0) { + timers_for_grow_.erase(timers_for_grow_.begin()); + return true; + } + return false; +} + Level::SpawnEntry::SpawnEntry(QJsonObject* spawn_root_object) : start_time_(Time(spawn_root_object->value("startTime").toInt())), mob_type_(spawn_root_object->value("mobType").toString()), diff --git a/level.h b/level.h index c957ced..eb7c92e 100644 --- a/level.h +++ b/level.h @@ -24,6 +24,7 @@ class Level { [[nodiscard]] const std::vector& GetWaves(); [[nodiscard]] int GetLevelNumber() const; [[nodiscard]] int GetStartMoney() const; + bool IsTimeForGrow(); private: class SpawnEntry { @@ -48,6 +49,7 @@ class Level { std::vector tower_slots_{}; std::vector routes_{}; std::vector waves_{}; + std::vector
OZt5O$E~e(*gCAu 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 L+g<+8qu=~*eK?0| literal 265013 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

>&TB^8Xz0cN&@;xVnqvyKBs3+8Y*Fu5C~ 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%0A>F{{(2YiM@`FI|+9 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%0AN&!1+@9dv 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 Date: Sat, 4 Jun 2022 07:29:27 +0300 Subject: [PATCH 18/19] add hp and money ui (#33) * add hp and money ui * hp and money interface * cpplint --- CMakeLists.txt | 3 +- Controller/controller.cpp | 31 +++++++++- Controller/controller.h | 6 +- GameObjects/Entities/Mobs/Basis/mob.cpp | 4 +- GameObjects/Entities/Traps/bear_trap.cpp | 3 + Resources/images/health_status_1.png | Bin 0 -> 290 bytes Resources/images/health_status_2.png | Bin 0 -> 270 bytes Resources/images/money_icon.png | Bin 0 -> 320 bytes Resources/resources.qrc | 3 + UI/resource_displayer.cpp | 57 ++++++++++++++++++ UI/resource_displayer.h | 20 +++++++ UI/textured_box.cpp | 73 ++++++++++++++++++++--- UI/textured_box.h | 10 ++++ Utilities/Resources/pixmap_loader.cpp | 6 ++ Utilities/Resources/pixmap_loader.h | 3 + Utilities/randomaizer.cpp | 16 ++--- 16 files changed, 211 insertions(+), 24 deletions(-) create mode 100644 Resources/images/health_status_1.png create mode 100644 Resources/images/health_status_2.png create mode 100644 Resources/images/money_icon.png create mode 100644 UI/resource_displayer.cpp create mode 100644 UI/resource_displayer.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 3bff3e0..fb75bbb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,7 +61,8 @@ set(UI UI/button.cpp UI/padding_box.cpp UI/pixmap_object.cpp - UI/pixmap_object.h) + UI/pixmap_object.h + UI/resource_displayer.cpp) add_executable(Game ${RESOURCES} diff --git a/Controller/controller.cpp b/Controller/controller.cpp index 9d2c673..3cbf43b 100644 --- a/Controller/controller.cpp +++ b/Controller/controller.cpp @@ -26,9 +26,12 @@ Controller::Controller() : view_(new GameView(scene_)), tick_timer_(new QTimer(this)), level_(new Level(1)), - base_hp_(20), - damage_per_current_tick_(0) { + base_hp_(5), + balance_(kStartBalance), + damage_per_current_tick_(0), + resource_displayer_(nullptr) { SetupScene(); + SetupInterface(); LaunchTickTimer(); connect(this, &Controller::GameOver, [this]() { @@ -36,6 +39,16 @@ Controller::Controller() : // it's needed, but it also blocks close button // view_->setInteractive(false); tick_timer_->stop(); + QGraphicsTextItem* game_over_item = new QGraphicsTextItem(); + game_over_item->setPlainText("Game Over"); + QFont font = game_over_item->font(); + font.setPixelSize(150); + game_over_item->setFont(font); + game_over_item->setPos( + -game_over_item->boundingRect().width() / 2, + -game_over_item->boundingRect().height() / 2); + game_over_item->setZValue(1000000); + scene_->addItem(game_over_item); }); } @@ -103,6 +116,7 @@ void Controller::TickAllTickables() { level_->Tick(delta); base_hp_ -= damage_per_current_tick_; + resource_displayer_->SetHp(base_hp_); damage_per_current_tick_ = 0; if (base_hp_ <= 0) { base_hp_ = 0; @@ -111,15 +125,26 @@ void Controller::TickAllTickables() { } void Controller::DealDamageToBase(int damage) { - // damage_per_current_tick_ += damage; + damage_per_current_tick_ += damage; +} + +void Controller::SetupInterface() { + resource_displayer_ = new ResourcesDisplayer(); + resource_displayer_->SetMoney(balance_); + resource_displayer_->SetHp(base_hp_); + resource_displayer_->SetOriginPoint(TexturedBox::OriginPoint::kTopLeft); + resource_displayer_->setPos(scene_->sceneRect().topLeft() + VectorF(5, 5)); + scene_->addItem(resource_displayer_); } void Controller::AddMoney(int money) { balance_ += money; + resource_displayer_->SetMoney(balance_); } void Controller::LoseMoney(int money) { balance_ -= money; + resource_displayer_->SetMoney(balance_); } int Controller::GetBalance() { diff --git a/Controller/controller.h b/Controller/controller.h index b53576b..7f361a8 100644 --- a/Controller/controller.h +++ b/Controller/controller.h @@ -10,6 +10,7 @@ #include "game_scene.h" #include "level.h" #include "constants.h" +#include "UI/resource_displayer.h" class Controller : public QObject { Q_OBJECT @@ -23,6 +24,8 @@ class Controller : public QObject { void DealDamageToBase(int damage); + void SetupInterface(); + void AddMoney(int money); void LoseMoney(int money); int GetBalance(); @@ -48,8 +51,9 @@ class Controller : public QObject { GameView* view_; QTimer* tick_timer_; Level* level_; - int balance_ = kStartBalance; + int balance_; int base_hp_; int damage_per_current_tick_; + ResourcesDisplayer* resource_displayer_; }; diff --git a/GameObjects/Entities/Mobs/Basis/mob.cpp b/GameObjects/Entities/Mobs/Basis/mob.cpp index 90884eb..4f63333 100644 --- a/GameObjects/Entities/Mobs/Basis/mob.cpp +++ b/GameObjects/Entities/Mobs/Basis/mob.cpp @@ -45,8 +45,8 @@ void Mob::SetRoute(Route* route) { } std::vector points = route->GetPoints(); for (int i = 0; i < points.size(); ++i) { - points[i].setX(points[i].x() + Randomaizer::Random() % 30); - points[i].setY(points[i].y() + Randomaizer::Random() % 30); + points[i].setX(points[i].x() + Randomaizer::Random() % 50); + points[i].setY(points[i].y() + Randomaizer::Random() % 50); } route_ = new Route(points); if (route_ != nullptr) { diff --git a/GameObjects/Entities/Traps/bear_trap.cpp b/GameObjects/Entities/Traps/bear_trap.cpp index 93803dc..5dac7f2 100644 --- a/GameObjects/Entities/Traps/bear_trap.cpp +++ b/GameObjects/Entities/Traps/bear_trap.cpp @@ -62,6 +62,9 @@ void BearTrap::paint(QPainter* painter, } void BearTrap::mousePressEvent(QGraphicsSceneMouseEvent* event) { + if (!is_broken_) { + return; + } if (!Controller::Instance()->HaveEnoughMoney(Costs::kBearTrapRepairingCost)) { return; } diff --git a/Resources/images/health_status_1.png b/Resources/images/health_status_1.png new file mode 100644 index 0000000000000000000000000000000000000000..0437b4384ac8f498ba876b206fb388ab0584ce7f GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^Vn8g!!3-obe&3S^QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`B?5dxT!FNp&)mD7p8pvb{{R0!ZNh|Rpb!JYn?jpLAjMG<Avs%=`E{z_e~W3m3{MAYIynfyY;2pckln2y;y!$cA50wwLe1LH)O7< aVkn)$`Zap$uVX-`FnGH9xvXNn{1`B?5dxT!FNp&)jJfCfxP({LjGf|NsAHpb!JY&nIrTfD}hbkY6xR5Cj4nJ@ErzW#^d=bQh&AlZ!?e^l^+h*VNeZ6c~s{7=-n|^)gviEo=&n?L6`Qg(deW0}rp00i_>zopr E0N}V|egFUf literal 0 HcmV?d00001 diff --git a/Resources/images/money_icon.png b/Resources/images/money_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0f6323915fc18a59839298fb5d1492e02c5a5e70 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI13?%1G+4BcTF%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl`n4e$wZ1=71KeEuI~o8vC<_Zq{r2@`-K*_j5~K#IL2$S?Rm7%)hAGrIwW zI14-?iy0XB4ude`@%$AjK*5EcE{-7@!MW!f`Hm=XFbA~X`}cqH`c|caowIcM%#W-M zk1U^_`K8;H|Jnh!4UKa%c-eQx`g}?Xc%;y|=JM2Z$ydEz4hDkt5vgf6&3JqMhst^; zy;W${vpIQ?XWEO!4li0Z@QS?gTe~DWM4f DP}g-& literal 0 HcmV?d00001 diff --git a/Resources/resources.qrc b/Resources/resources.qrc index 3cd60e3..2df3211 100644 --- a/Resources/resources.qrc +++ b/Resources/resources.qrc @@ -17,6 +17,9 @@ images/cannon_projectile_level2.png images/cannon_projectile_level3.png images/tower_slot.png + images/money_icon.png + images/health_status_1.png + images/health_status_2.png diff --git a/UI/resource_displayer.cpp b/UI/resource_displayer.cpp new file mode 100644 index 0000000..3ae4e26 --- /dev/null +++ b/UI/resource_displayer.cpp @@ -0,0 +1,57 @@ +#include "resource_displayer.h" + +#include + +#include "padding_box.h" +#include "Utilities/vector_f.h" +#include "constants.h" + +ResourcesDisplayer::ResourcesDisplayer() { + resources_layout_ = new LinearLayout(); + + textured_box_pixmaps_ = PixmapLoader::kDefaultTexturedBoxPixmaps; + SetWrappingItem(resources_layout_); + + LinearLayout* money_layout = new LinearLayout(); + LinearLayout* hp_layout = new LinearLayout(); + + money_icon_ = new PixmapObject(PixmapLoader::Pixmaps::kMoneyIcon); + hp_icon_ = new PixmapObject(PixmapLoader::Pixmaps::kHealthStatus1); + + money_item_ = new QGraphicsTextItem(); + hp_item_ = new QGraphicsTextItem(); + money_item_->setPlainText("money"); + hp_item_->setPlainText("hp"); + QFont money_font = money_item_->font(); + QFont hp_font = hp_item_->font(); + money_font.setPixelSize(20); + hp_font.setPixelSize(20); + money_item_->setFont(money_font); + hp_item_->setFont(hp_font); + + money_layout->AddItem(new PaddingBox(money_icon_, 10)); + money_layout->AddItem(new PaddingBox(money_item_, 10)); + + hp_layout->AddItem(hp_icon_); + hp_layout->AddItem(hp_item_); + + resources_layout_->AddItem(money_layout); + resources_layout_->AddItem(hp_layout); + + resources_layout_->RecalculatePositions(); +} + +void ResourcesDisplayer::SetMoney(int money) { + money_item_->setPlainText("Money: " + QString::number(money)); + resources_layout_->RecalculatePositions(); + RecalculateInnerPos(); +} + +void ResourcesDisplayer::SetHp(int hp) { + hp_item_->setPlainText("Hp: " + QString::number(hp)); + if (hp < 5 / 2) { // half hp + hp_icon_->SetPixmap(PixmapLoader::Pixmaps::kHealthStatus2); + } + resources_layout_->RecalculatePositions(); + RecalculateInnerPos(); +} diff --git a/UI/resource_displayer.h b/UI/resource_displayer.h new file mode 100644 index 0000000..748ab24 --- /dev/null +++ b/UI/resource_displayer.h @@ -0,0 +1,20 @@ +#pragma once + +#include "textured_box.h" +#include "linear_layout.h" +#include "pixmap_object.h" + +class ResourcesDisplayer : public TexturedBox { + public: + ResourcesDisplayer(); + + void SetMoney(int money); + void SetHp(int hp); + + private: + LinearLayout* resources_layout_; + QGraphicsTextItem* money_item_; + QGraphicsTextItem* hp_item_; + PixmapObject* money_icon_; + PixmapObject* hp_icon_; +}; diff --git a/UI/textured_box.cpp b/UI/textured_box.cpp index c656d41..45e237f 100644 --- a/UI/textured_box.cpp +++ b/UI/textured_box.cpp @@ -9,15 +9,14 @@ TexturedBox::TexturedBox( QGraphicsItem* wrapping_item, TexturedBoxPixmaps textured_box_pixmaps) : textured_box_pixmaps_(textured_box_pixmaps), - wrapping_item_(wrapping_item) { - wrapping_item->setParentItem(this); - wrapping_item->setPos( - textured_box_pixmaps_.left_side->width(), - textured_box_pixmaps_.top_side->height()); + wrapping_item_(wrapping_item), + origin_point_(OriginPoint::kTopLeft) { + SetWrappingItem(wrapping_item_); setZValue(UI::kDefaultZValue); } -TexturedBox::TexturedBox() { +TexturedBox::TexturedBox() + : origin_point_(OriginPoint::kTopLeft) { setZValue(UI::kDefaultZValue); } @@ -29,7 +28,8 @@ void TexturedBox::paint(QPainter* painter, QRectF bounding_rect = boundingRect(); QRectF inner_rect = wrapping_item_->boundingRect().translated( pixmaps.left_side->width(), - pixmaps.top_side->height()); + pixmaps.top_side->height()) + .translated(bounding_rect.topLeft()); QRectF left_side_rect = { bounding_rect.x(), @@ -124,6 +124,54 @@ QRectF TexturedBox::boundingRect() const { return QRectF( unscaled_result.center() - half_size, unscaled_result.center() + half_size); + + QRectF result = QRectF( + unscaled_result.center() - half_size, + unscaled_result.center() + half_size); + + return ConvertRectConsideringOriginPoint(result); +} + +QRectF TexturedBox::ConvertRectConsideringOriginPoint(QRectF rect) const { + assert(rect.top() == 0); + assert(rect.left() == 0); + + switch (origin_point_) { + case OriginPoint::kTopLeft: + return rect; + + break; + case OriginPoint::kTopRight: + rect.translate(-rect.width(), 0); + return rect; + + break; + case OriginPoint::kBottomLeft: + rect.translate(0, -rect.height()); + return rect; + + break; + case OriginPoint::kBottomRight: + rect.translate(-rect.width(), -rect.height()); + return rect; + + break; + default: + assert(false); + throw std::exception(); + break; + } +} + +void TexturedBox::RecalculateInnerPos() { + VectorF wrapping_item_pos = VectorF( + textured_box_pixmaps_.left_side->width(), + textured_box_pixmaps_.top_side->height()); + + VectorF origin_point_pos_fix2 = boundingRect().topLeft(); + + wrapping_item_pos += origin_point_pos_fix2; + wrapping_item_->setPos(wrapping_item_pos); } void TexturedBox::SetTexturedBoxPixmaps(const TexturedBoxPixmaps& pixmaps) { @@ -132,6 +180,7 @@ void TexturedBox::SetTexturedBoxPixmaps(const TexturedBoxPixmaps& pixmaps) { wrapping_item_->setPos( textured_box_pixmaps_.left_side->width(), textured_box_pixmaps_.top_side->height()); + RecalculateInnerPos(); } void TexturedBox::SetWrappingItem(QGraphicsItem* wrapping_item) { @@ -141,4 +190,14 @@ void TexturedBox::SetWrappingItem(QGraphicsItem* wrapping_item) { wrapping_item->setPos( textured_box_pixmaps_.left_side->width(), textured_box_pixmaps_.top_side->height()); + RecalculateInnerPos(); +} + +enum TexturedBox::OriginPoint TexturedBox::OriginPoint() const { + return origin_point_; +} + +void TexturedBox::SetOriginPoint(enum TexturedBox::OriginPoint origin_point) { + origin_point_ = origin_point; + RecalculateInnerPos(); } diff --git a/UI/textured_box.h b/UI/textured_box.h index fc3d82f..7a393df 100644 --- a/UI/textured_box.h +++ b/UI/textured_box.h @@ -8,6 +8,8 @@ class TexturedBox : public QGraphicsObject { public: + enum class OriginPoint { kTopLeft, kBottomLeft, kTopRight, kBottomRight }; + explicit TexturedBox( QGraphicsItem* wrapping_item, TexturedBoxPixmaps textured_box_pixmaps = @@ -21,9 +23,17 @@ class TexturedBox : public QGraphicsObject { void SetTexturedBoxPixmaps(const TexturedBoxPixmaps& pixmaps); void SetWrappingItem(QGraphicsItem* wrapping_item); + OriginPoint OriginPoint() const; + void SetOriginPoint(enum OriginPoint origin_point); + + void RecalculateInnerPos(); + protected: TexturedBox(); + QRectF ConvertRectConsideringOriginPoint(QRectF rect) const; + TexturedBoxPixmaps textured_box_pixmaps_; QGraphicsItem* wrapping_item_; + enum OriginPoint origin_point_; }; diff --git a/Utilities/Resources/pixmap_loader.cpp b/Utilities/Resources/pixmap_loader.cpp index 87fd820..46eceff 100644 --- a/Utilities/Resources/pixmap_loader.cpp +++ b/Utilities/Resources/pixmap_loader.cpp @@ -20,6 +20,9 @@ QPixmap* P::kCannonTowerLevel2; QPixmap* P::kCannonTowerLevel3; QPixmap* P::kTowerSlot; std::vector P::kLevelMaps; +QPixmap* P::kMoneyIcon; +QPixmap* P::kHealthStatus1; +QPixmap* P::kHealthStatus2; QPixmap* P::kEmpty; QPixmap* P::kBombIdleFrame; @@ -100,6 +103,9 @@ void PixmapLoader::LoadPixmaps() { P::kCannonTowerLevel1 = new QPixmap(":images/cannon_tower_level1.png"); P::kCannonTowerLevel2 = new QPixmap(":images/cannon_tower_level2.png"); P::kCannonTowerLevel3 = new QPixmap(":images/cannon_tower_level3.png"); + P::kMoneyIcon = new QPixmap(":images/money_icon.png"); + P::kHealthStatus1 = new QPixmap(":images/health_status_1.png"); + P::kHealthStatus2 = new QPixmap(":images/health_status_2.png"); for (int i = 1; i <= LevelData::kLevelsCount; ++i) { P::kLevelMaps.push_back(new QPixmap(":Levels/Level" + QString::number(i) diff --git a/Utilities/Resources/pixmap_loader.h b/Utilities/Resources/pixmap_loader.h index 2a7527c..a91f8ca 100644 --- a/Utilities/Resources/pixmap_loader.h +++ b/Utilities/Resources/pixmap_loader.h @@ -27,6 +27,9 @@ class PixmapLoader { static QPixmap* kCannonTowerLevel2; static QPixmap* kCannonTowerLevel3; static std::vector kLevelMaps; + static QPixmap* kMoneyIcon; + static QPixmap* kHealthStatus1; + static QPixmap* kHealthStatus2; static QPixmap* kEmpty; static QPixmap* kBearTrap; diff --git a/Utilities/randomaizer.cpp b/Utilities/randomaizer.cpp index d92f376..37ea037 100644 --- a/Utilities/randomaizer.cpp +++ b/Utilities/randomaizer.cpp @@ -1,17 +1,13 @@ #include "randomaizer.h" #include #include +#include -int random_seed = time(0); +std::random_device dev; +std::mt19937 rng(dev()); +std::uniform_int_distribution + dist(-100000, 100000); int Randomaizer::Random() { - srand(time(0)); - int result = rand(); // NOLINT - result %= random_seed; - result += random_seed; - result *= random_seed; - random_seed = rand(); // NOLINT - srand(random_seed); - random_seed = rand() + result; // NOLINT - return result; + return dist(rng); } From 29722b20affcfdb27ee8adf81f443c5f240c4ed7 Mon Sep 17 00:00:00 2001 From: parfen01 <99528469+parfen01@users.noreply.github.com> Date: Sat, 4 Jun 2022 08:00:08 +0300 Subject: [PATCH 19/19] Big calls (#34) --- Resources/Levels/Level1/level.json | 52 ++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/Resources/Levels/Level1/level.json b/Resources/Levels/Level1/level.json index 2e32d0c..6a480ee 100644 --- a/Resources/Levels/Level1/level.json +++ b/Resources/Levels/Level1/level.json @@ -94,7 +94,7 @@ "y": 80 }, { - "x": 1200, + "x": 1500, "y": 80 } ] @@ -122,7 +122,7 @@ "y": 80 }, { - "x": 1200, + "x": 1500, "y": 80 } ] @@ -149,7 +149,7 @@ ] }, { - "startTimeRelativeToPrevWave": 20000, + "startTimeRelativeToPrevWave": 10000, "spawnEntries": [ { "mobType": "Hedgehog", @@ -168,7 +168,7 @@ ] }, { - "startTimeRelativeToPrevWave": 20000, + "startTimeRelativeToPrevWave": 10000, "spawnEntries": [ { "mobType": "Cobra", @@ -187,7 +187,7 @@ ] }, { - "startTimeRelativeToPrevWave": 12000, + "startTimeRelativeToPrevWave": 8000, "spawnEntries": [ { "mobType": "Skeleton", @@ -206,7 +206,7 @@ ] }, { - "startTimeRelativeToPrevWave": 12000, + "startTimeRelativeToPrevWave": 8000, "spawnEntries": [ { "mobType": "Skeleton", @@ -218,7 +218,7 @@ ] }, { - "startTimeRelativeToPrevWave": 20000, + "startTimeRelativeToPrevWave": 8000, "spawnEntries": [ { "mobType": "Skeleton", @@ -238,15 +238,33 @@ } ], "GrowTimes": [ - 15000, - 16000, - 17000, - 50000, - 53000, - 87000, - 88000, - 89000, - 90000, - 91000 + 4000, + 1000, + 1000, + 3000, + 3000, + 10000, + 10000, + 1000, + 1000, + 20000, + 10000, + 1000, + 1000, + 1000, + 1000, + 1000, + 10000, + 10000, + 5000, + 3000, + 10000, + 10000, + 1000, + 1000, + 1000, + 1000, + 1000, + 1000 ] } \ No newline at end of file