From 9f48dd6e0ff9436c403521cb7e1c974d820d000d Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Wed, 25 Apr 2018 14:22:11 +0100 Subject: [PATCH 01/48] Added rocket class for spawning a rigidbody with an initial velocity --- Engine.vcxproj | 2 ++ Engine.vcxproj.filters | 6 ++++ Resources/Meshes/rocket.obj | 3 ++ Resources/Prefabs/ProjectileRocket.prefab | 15 ++++++++++ Resources/Scenes/startup.scene | 24 ++++++++++++++++ Source/Scene/GameObject.cpp | 5 ++++ Source/Scene/Rocket.cpp | 35 +++++++++++++++++++++++ Source/Scene/Rocket.h | 24 ++++++++++++++++ 8 files changed, 114 insertions(+) create mode 100644 Resources/Meshes/rocket.obj create mode 100644 Resources/Prefabs/ProjectileRocket.prefab create mode 100644 Source/Scene/Rocket.cpp create mode 100644 Source/Scene/Rocket.h diff --git a/Engine.vcxproj b/Engine.vcxproj index d876567..69ee628 100644 --- a/Engine.vcxproj +++ b/Engine.vcxproj @@ -52,6 +52,7 @@ + @@ -118,6 +119,7 @@ + diff --git a/Engine.vcxproj.filters b/Engine.vcxproj.filters index 67e3425..15047b0 100644 --- a/Engine.vcxproj.filters +++ b/Engine.vcxproj.filters @@ -221,6 +221,9 @@ Physics + + Scene + @@ -387,6 +390,9 @@ Physics + + Scene + diff --git a/Resources/Meshes/rocket.obj b/Resources/Meshes/rocket.obj new file mode 100644 index 0000000..3ff3022 --- /dev/null +++ b/Resources/Meshes/rocket.obj @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c3389885e91e14b724df41e30d3f29f49e5d281c0be1f6f1d1998948fb4e018 +size 14808 diff --git a/Resources/Prefabs/ProjectileRocket.prefab b/Resources/Prefabs/ProjectileRocket.prefab new file mode 100644 index 0000000..04fd4c8 --- /dev/null +++ b/Resources/Prefabs/ProjectileRocket.prefab @@ -0,0 +1,15 @@ +{ + name = Blank GameObject + Transform { + Position = 0 123.9 0 + Scale = 10 10 10 + } + StaticMesh { + mesh = Resources\Meshes\rocket.obj + material = Resources\Materials\cardboard.material + } + Rocket { + } + Rigidbody { + } +} \ No newline at end of file diff --git a/Resources/Scenes/startup.scene b/Resources/Scenes/startup.scene index af3be9e..d2117bb 100644 --- a/Resources/Scenes/startup.scene +++ b/Resources/Scenes/startup.scene @@ -5,6 +5,30 @@ gameobjects::1 { prefab = Resources\Prefabs\Helicopter.prefab } + gameobjects::2 { + name = Static Mesh + Transform { + Position = 0 9.4 0 + } + StaticMesh { + mesh = Resources\Meshes\car.mesh + material = Resources\Materials\cardboard.material + } + children::0 { + name = Static Mesh + Transform { + Scale = 10 10 10 + } + StaticMesh { + mesh = Resources\Meshes\rocket.obj + material = Resources\Materials\cardboard.material + } + Rocket { + } + Rigidbody { + } + } + } ambient_intensity = 1.567 sun_intensity = 5.8 sun_rotation = 27 281 diff --git a/Source/Scene/GameObject.cpp b/Source/Scene/GameObject.cpp index 4719f71..d171cca 100644 --- a/Source/Scene/GameObject.cpp +++ b/Source/Scene/GameObject.cpp @@ -12,6 +12,7 @@ #include "Scene/Transform.h" #include "Scene/Freecam.h" #include "Scene/Terrain.h" +#include "Scene/Rocket.h" #include "Physics/SphereCollider.h" #include "Physics/BoxCollider.h" @@ -185,6 +186,7 @@ void GameObject::drawAddComponentSection() if (ImGui::Selectable("Box Collider")) createComponent(); if (ImGui::Selectable("Rigidbody")) createComponent(); if (ImGui::Selectable("Terrain Collider")) createComponent(); + if (ImGui::Selectable("Rocket")) createComponent(); ImGui::EndPopup(); } @@ -433,6 +435,9 @@ Component* GameObject::createComponent(const std::string &typeName) if (typeName == "TerrainCollider") return createComponent(); + if (typeName == "Rocket") + return createComponent(); + return nullptr; } diff --git a/Source/Scene/Rocket.cpp b/Source/Scene/Rocket.cpp new file mode 100644 index 0000000..d45e1d0 --- /dev/null +++ b/Source/Scene/Rocket.cpp @@ -0,0 +1,35 @@ +#include "Rocket.h" + +#include "Scene/Transform.h" +#include "Physics/Rigidbody.h" +#include "imgui.h" + +Rocket::Rocket(GameObject* gameObject) + : Component(gameObject), + transform_(gameObject->createComponent()), + speed_(200.0f) +{ + transform_->setRotationLocal(Quaternion::identity()); +} + +void Rocket::drawProperties() +{ + ImGui::DragFloat("Rocket speed", &speed_, 0.1f); +} + +void Rocket::update(float deltaTime) +{ + if (initialised_ == false) + { + Rigidbody* collider; + if (collider = gameObject()->findComponent()) + { + Vector3 velocity = transform_->forwards() * speed_; + collider->setVelocity(velocity); + std::cout << "Forwards is " << transform_->forwards().x << ", " << transform_->forwards().y << ", " << transform_->forwards().z << std::endl; + std::cout << "Velocity is " << velocity.x << ", " << velocity.y << ", " << velocity.z << std::endl; + initialised_ = true; + } + } +} + diff --git a/Source/Scene/Rocket.h b/Source/Scene/Rocket.h new file mode 100644 index 0000000..6a762e7 --- /dev/null +++ b/Source/Scene/Rocket.h @@ -0,0 +1,24 @@ +#pragma once + +#include "Scene/Component.h" +#include "Math/Vector3.h" + +class Transform; +class RigidBody; + +class Rocket : public Component +{ +public: + Rocket(GameObject* gameObject); + + void drawProperties() override; + void update(float deltaTime) override; + +private: + Transform* transform_; + + Vector3 direction_; + float speed_; + + bool initialised_ = false; +}; \ No newline at end of file From 86e3ec99e44fb66c930ebb565b9c907dc21f6742 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Wed, 25 Apr 2018 18:36:31 +0100 Subject: [PATCH 02/48] Overridden handleCollision method for rocket class --- Source/Scene/Rocket.cpp | 10 ++++++++-- Source/Scene/Rocket.h | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Source/Scene/Rocket.cpp b/Source/Scene/Rocket.cpp index d45e1d0..3de5246 100644 --- a/Source/Scene/Rocket.cpp +++ b/Source/Scene/Rocket.cpp @@ -2,6 +2,9 @@ #include "Scene/Transform.h" #include "Physics/Rigidbody.h" + +#include "SceneManager.h" + #include "imgui.h" Rocket::Rocket(GameObject* gameObject) @@ -26,10 +29,13 @@ void Rocket::update(float deltaTime) { Vector3 velocity = transform_->forwards() * speed_; collider->setVelocity(velocity); - std::cout << "Forwards is " << transform_->forwards().x << ", " << transform_->forwards().y << ", " << transform_->forwards().z << std::endl; - std::cout << "Velocity is " << velocity.x << ", " << velocity.y << ", " << velocity.z << std::endl; + initialised_ = true; } } } +void Rocket::handleCollision(Collider* collider) +{ + delete gameObject(); +} diff --git a/Source/Scene/Rocket.h b/Source/Scene/Rocket.h index 6a762e7..ea91bd3 100644 --- a/Source/Scene/Rocket.h +++ b/Source/Scene/Rocket.h @@ -13,6 +13,7 @@ class Rocket : public Component void drawProperties() override; void update(float deltaTime) override; + void handleCollision(Collider* collider) override; private: Transform* transform_; From 017c9a2d52e4aaf6c14594d060b387fc392c5a43 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Thu, 26 Apr 2018 18:03:38 +0100 Subject: [PATCH 03/48] Turrets - Added TurretGun to project/filters and implemented class files --- Engine.vcxproj | 2 ++ Engine.vcxproj.filters | 6 +++++ Source/Scene/TurretGun.cpp | 46 ++++++++++++++++++++++++++++++++++++++ Source/Scene/TurretGun.h | 23 +++++++++++++++++++ 4 files changed, 77 insertions(+) create mode 100644 Source/Scene/TurretGun.cpp create mode 100644 Source/Scene/TurretGun.h diff --git a/Engine.vcxproj b/Engine.vcxproj index 69ee628..8aec3c1 100644 --- a/Engine.vcxproj +++ b/Engine.vcxproj @@ -55,6 +55,7 @@ + @@ -122,6 +123,7 @@ + diff --git a/Engine.vcxproj.filters b/Engine.vcxproj.filters index 15047b0..99fee68 100644 --- a/Engine.vcxproj.filters +++ b/Engine.vcxproj.filters @@ -224,6 +224,9 @@ Scene + + Scene + @@ -393,6 +396,9 @@ Scene + + Scene + diff --git a/Source/Scene/TurretGun.cpp b/Source/Scene/TurretGun.cpp new file mode 100644 index 0000000..123f33c --- /dev/null +++ b/Source/Scene/TurretGun.cpp @@ -0,0 +1,46 @@ +#include "TurretGun.h" + +#include "Scene/Transform.h" +#include "Math/Quaternion.h" +#include "Serialization/Prefab.h" + +#include "imgui.h" +#include "Utils/ImGuiExtensions.h" + +TurretGun::TurretGun(GameObject* gameObject) + : Component(gameObject), + transform_(gameObject->createComponent()), + timeSinceShot_(0.0f), + refireTime_(2.5f) +{ + transform_->setRotationLocal(Quaternion::identity()); +} + +void TurretGun::drawProperties() +{ + ImGui::ResourceSelect("Prefab", "Select Prefab", prefab_); + ImGui::DragFloat("Refire time", &refireTime_, 0.1f); +} + +void TurretGun::update(float deltaTime) +{ + // Add delta time to elapsed time since shot + timeSinceShot_ += deltaTime; + + // If elapsed time exceeds refire time, fire projectile + if (timeSinceShot_ >= refireTime_) + { + spawnPrefab(); + timeSinceShot_ = 0.0f; + } +} + +void TurretGun::spawnPrefab() +{ + if (prefab_ != nullptr) + { + // Create new gameObject using prefab and set parent transform + GameObject* projectile = new GameObject("Projectile", prefab_); + projectile->transform()->setParentTransform(transform_); + } +} \ No newline at end of file diff --git a/Source/Scene/TurretGun.h b/Source/Scene/TurretGun.h new file mode 100644 index 0000000..a98f9f3 --- /dev/null +++ b/Source/Scene/TurretGun.h @@ -0,0 +1,23 @@ +#pragma once + +#include "Scene/Component.h" + +class Prefab; + +class TurretGun : public Component +{ +public: + TurretGun(GameObject* gameObject); + + void drawProperties() override; + void update(float deltaTime) override; + + void spawnPrefab(); + +private: + Transform* transform_; + Prefab* prefab_ = nullptr; + + float timeSinceShot_; + float refireTime_; +}; \ No newline at end of file From 88ad29c965dab053f8e15d6fe6b03bded7e8c41e Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Thu, 26 Apr 2018 18:04:52 +0100 Subject: [PATCH 04/48] Turrets - Modified rocket prefab --- Resources/Prefabs/ProjectileRocket.prefab | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prefabs/ProjectileRocket.prefab b/Resources/Prefabs/ProjectileRocket.prefab index 04fd4c8..da417c8 100644 --- a/Resources/Prefabs/ProjectileRocket.prefab +++ b/Resources/Prefabs/ProjectileRocket.prefab @@ -1,8 +1,8 @@ { name = Blank GameObject Transform { - Position = 0 123.9 0 - Scale = 10 10 10 + Position = 0 0 0 + Scale = 4 4 4 } StaticMesh { mesh = Resources\Meshes\rocket.obj From 037066e290808c699f69cf440bea50a7c483fad8 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Thu, 26 Apr 2018 18:05:43 +0100 Subject: [PATCH 05/48] Turrets - Added TurretGun to GameObject file for component creation --- Source/Scene/GameObject.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/Scene/GameObject.cpp b/Source/Scene/GameObject.cpp index d171cca..d0b3d65 100644 --- a/Source/Scene/GameObject.cpp +++ b/Source/Scene/GameObject.cpp @@ -13,6 +13,7 @@ #include "Scene/Freecam.h" #include "Scene/Terrain.h" #include "Scene/Rocket.h" +#include "Scene/TurretGun.h" #include "Physics/SphereCollider.h" #include "Physics/BoxCollider.h" @@ -187,6 +188,7 @@ void GameObject::drawAddComponentSection() if (ImGui::Selectable("Rigidbody")) createComponent(); if (ImGui::Selectable("Terrain Collider")) createComponent(); if (ImGui::Selectable("Rocket")) createComponent(); + if (ImGui::Selectable("Turret Gun")) createComponent(); ImGui::EndPopup(); } @@ -438,6 +440,9 @@ Component* GameObject::createComponent(const std::string &typeName) if (typeName == "Rocket") return createComponent(); + if (typeName == "TurretGun") + return createComponent(); + return nullptr; } From 7472793b7ff4a1d683b47c8f7193b13e0dad46f8 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Thu, 26 Apr 2018 18:06:19 +0100 Subject: [PATCH 06/48] Turrets - Moved Rigidbody initialisation to rocket constructor and removed update override --- Source/Scene/Rocket.cpp | 27 +++++++++++---------------- Source/Scene/Rocket.h | 2 -- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/Source/Scene/Rocket.cpp b/Source/Scene/Rocket.cpp index 3de5246..1161cbe 100644 --- a/Source/Scene/Rocket.cpp +++ b/Source/Scene/Rocket.cpp @@ -10,9 +10,18 @@ Rocket::Rocket(GameObject* gameObject) : Component(gameObject), transform_(gameObject->createComponent()), - speed_(200.0f) + speed_(100.0f) { + // Initialise rotation transform_->setRotationLocal(Quaternion::identity()); + + // Create rigidbody for collisions + gameObject->createComponent(); + Rigidbody* collider = gameObject->findComponent(); + + // Calculate velocity and send to rigidbody component + Vector3 velocity = transform_->forwards() * speed_; + collider->setVelocity(velocity); } void Rocket::drawProperties() @@ -20,22 +29,8 @@ void Rocket::drawProperties() ImGui::DragFloat("Rocket speed", &speed_, 0.1f); } -void Rocket::update(float deltaTime) -{ - if (initialised_ == false) - { - Rigidbody* collider; - if (collider = gameObject()->findComponent()) - { - Vector3 velocity = transform_->forwards() * speed_; - collider->setVelocity(velocity); - - initialised_ = true; - } - } -} - void Rocket::handleCollision(Collider* collider) { + // Delete gameObject on collision delete gameObject(); } diff --git a/Source/Scene/Rocket.h b/Source/Scene/Rocket.h index ea91bd3..05cac40 100644 --- a/Source/Scene/Rocket.h +++ b/Source/Scene/Rocket.h @@ -4,7 +4,6 @@ #include "Math/Vector3.h" class Transform; -class RigidBody; class Rocket : public Component { @@ -12,7 +11,6 @@ class Rocket : public Component Rocket(GameObject* gameObject); void drawProperties() override; - void update(float deltaTime) override; void handleCollision(Collider* collider) override; private: From e1d1410b2560670f31e79cf04ce1a52c36dae2cc Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Fri, 27 Apr 2018 15:12:11 +0100 Subject: [PATCH 07/48] Rockets - Added rocket class files to project/filters --- Engine.vcxproj | 2 ++ Engine.vcxproj.filters | 6 ++++++ Source/Scene/Rocket.cpp | 35 +++++++++++++++++++++++++++++++++++ Source/Scene/Rocket.h | 24 ++++++++++++++++++++++++ 4 files changed, 67 insertions(+) create mode 100644 Source/Scene/Rocket.cpp create mode 100644 Source/Scene/Rocket.h diff --git a/Engine.vcxproj b/Engine.vcxproj index a7b92fd..2f09bf2 100644 --- a/Engine.vcxproj +++ b/Engine.vcxproj @@ -52,6 +52,7 @@ + @@ -119,6 +120,7 @@ + diff --git a/Engine.vcxproj.filters b/Engine.vcxproj.filters index b7931d2..1b29a23 100644 --- a/Engine.vcxproj.filters +++ b/Engine.vcxproj.filters @@ -224,6 +224,9 @@ Physics + + Scene + @@ -393,6 +396,9 @@ Physics + + Scene + diff --git a/Source/Scene/Rocket.cpp b/Source/Scene/Rocket.cpp new file mode 100644 index 0000000..d45e1d0 --- /dev/null +++ b/Source/Scene/Rocket.cpp @@ -0,0 +1,35 @@ +#include "Rocket.h" + +#include "Scene/Transform.h" +#include "Physics/Rigidbody.h" +#include "imgui.h" + +Rocket::Rocket(GameObject* gameObject) + : Component(gameObject), + transform_(gameObject->createComponent()), + speed_(200.0f) +{ + transform_->setRotationLocal(Quaternion::identity()); +} + +void Rocket::drawProperties() +{ + ImGui::DragFloat("Rocket speed", &speed_, 0.1f); +} + +void Rocket::update(float deltaTime) +{ + if (initialised_ == false) + { + Rigidbody* collider; + if (collider = gameObject()->findComponent()) + { + Vector3 velocity = transform_->forwards() * speed_; + collider->setVelocity(velocity); + std::cout << "Forwards is " << transform_->forwards().x << ", " << transform_->forwards().y << ", " << transform_->forwards().z << std::endl; + std::cout << "Velocity is " << velocity.x << ", " << velocity.y << ", " << velocity.z << std::endl; + initialised_ = true; + } + } +} + diff --git a/Source/Scene/Rocket.h b/Source/Scene/Rocket.h new file mode 100644 index 0000000..6a762e7 --- /dev/null +++ b/Source/Scene/Rocket.h @@ -0,0 +1,24 @@ +#pragma once + +#include "Scene/Component.h" +#include "Math/Vector3.h" + +class Transform; +class RigidBody; + +class Rocket : public Component +{ +public: + Rocket(GameObject* gameObject); + + void drawProperties() override; + void update(float deltaTime) override; + +private: + Transform* transform_; + + Vector3 direction_; + float speed_; + + bool initialised_ = false; +}; \ No newline at end of file From fee06bbec14fd005b0770eec71eb767b75c689cd Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Fri, 27 Apr 2018 15:14:06 +0100 Subject: [PATCH 08/48] Rockets - Added rocket component creation to GameObject class --- Source/Scene/GameObject.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/Scene/GameObject.cpp b/Source/Scene/GameObject.cpp index 56350d3..6b7c458 100644 --- a/Source/Scene/GameObject.cpp +++ b/Source/Scene/GameObject.cpp @@ -13,6 +13,7 @@ #include "Scene/Freecam.h" #include "Scene/Terrain.h" #include "Scene/StaticTurret.h" +#include "Scene/Rocket.h" #include "Physics/SphereCollider.h" #include "Physics/BoxCollider.h" @@ -186,6 +187,7 @@ void GameObject::drawAddComponentSection() if (ImGui::Selectable("Rigidbody")) createComponent(); if (ImGui::Selectable("Terrain Collider")) createComponent(); if (ImGui::Selectable("Static Turret")) createComponent(); + if (ImGui::Selectable("Rocket")) createComponent(); ImGui::EndPopup(); } @@ -437,6 +439,9 @@ Component* GameObject::createComponent(const std::string &typeName) if (typeName == "TerrainCollider") return createComponent(); + if (typeName == "Rocket") + return createComponent(); + return nullptr; } From d41539c87dd603d6aa239eca02b6b32f88ebd83b Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Fri, 27 Apr 2018 15:16:49 +0100 Subject: [PATCH 09/48] Rockets - Overridden handleCollision method in rocket class --- Resources/Meshes/rocket.obj | 3 +++ Resources/Prefabs/ProjectileRocket.prefab | 15 +++++++++++++++ Source/Scene/Rocket.cpp | 10 ++++++++-- Source/Scene/Rocket.h | 1 + 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 Resources/Meshes/rocket.obj create mode 100644 Resources/Prefabs/ProjectileRocket.prefab diff --git a/Resources/Meshes/rocket.obj b/Resources/Meshes/rocket.obj new file mode 100644 index 0000000..3ff3022 --- /dev/null +++ b/Resources/Meshes/rocket.obj @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c3389885e91e14b724df41e30d3f29f49e5d281c0be1f6f1d1998948fb4e018 +size 14808 diff --git a/Resources/Prefabs/ProjectileRocket.prefab b/Resources/Prefabs/ProjectileRocket.prefab new file mode 100644 index 0000000..04fd4c8 --- /dev/null +++ b/Resources/Prefabs/ProjectileRocket.prefab @@ -0,0 +1,15 @@ +{ + name = Blank GameObject + Transform { + Position = 0 123.9 0 + Scale = 10 10 10 + } + StaticMesh { + mesh = Resources\Meshes\rocket.obj + material = Resources\Materials\cardboard.material + } + Rocket { + } + Rigidbody { + } +} \ No newline at end of file diff --git a/Source/Scene/Rocket.cpp b/Source/Scene/Rocket.cpp index d45e1d0..3de5246 100644 --- a/Source/Scene/Rocket.cpp +++ b/Source/Scene/Rocket.cpp @@ -2,6 +2,9 @@ #include "Scene/Transform.h" #include "Physics/Rigidbody.h" + +#include "SceneManager.h" + #include "imgui.h" Rocket::Rocket(GameObject* gameObject) @@ -26,10 +29,13 @@ void Rocket::update(float deltaTime) { Vector3 velocity = transform_->forwards() * speed_; collider->setVelocity(velocity); - std::cout << "Forwards is " << transform_->forwards().x << ", " << transform_->forwards().y << ", " << transform_->forwards().z << std::endl; - std::cout << "Velocity is " << velocity.x << ", " << velocity.y << ", " << velocity.z << std::endl; + initialised_ = true; } } } +void Rocket::handleCollision(Collider* collider) +{ + delete gameObject(); +} diff --git a/Source/Scene/Rocket.h b/Source/Scene/Rocket.h index 6a762e7..ea91bd3 100644 --- a/Source/Scene/Rocket.h +++ b/Source/Scene/Rocket.h @@ -13,6 +13,7 @@ class Rocket : public Component void drawProperties() override; void update(float deltaTime) override; + void handleCollision(Collider* collider) override; private: Transform* transform_; From 03653ba3b5f6ed77b2a812cd0d981f506138a492 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Thu, 26 Apr 2018 18:03:38 +0100 Subject: [PATCH 10/48] Turrets - Added TurretGun to project/filters and implemented class files --- Engine.vcxproj | 2 ++ Engine.vcxproj.filters | 6 +++++ Source/Scene/TurretGun.cpp | 46 ++++++++++++++++++++++++++++++++++++++ Source/Scene/TurretGun.h | 23 +++++++++++++++++++ 4 files changed, 77 insertions(+) create mode 100644 Source/Scene/TurretGun.cpp create mode 100644 Source/Scene/TurretGun.h diff --git a/Engine.vcxproj b/Engine.vcxproj index 2f09bf2..af9387a 100644 --- a/Engine.vcxproj +++ b/Engine.vcxproj @@ -55,6 +55,7 @@ + @@ -123,6 +124,7 @@ + diff --git a/Engine.vcxproj.filters b/Engine.vcxproj.filters index 1b29a23..4af187e 100644 --- a/Engine.vcxproj.filters +++ b/Engine.vcxproj.filters @@ -227,6 +227,9 @@ Scene + + Scene + @@ -399,6 +402,9 @@ Scene + + Scene + diff --git a/Source/Scene/TurretGun.cpp b/Source/Scene/TurretGun.cpp new file mode 100644 index 0000000..123f33c --- /dev/null +++ b/Source/Scene/TurretGun.cpp @@ -0,0 +1,46 @@ +#include "TurretGun.h" + +#include "Scene/Transform.h" +#include "Math/Quaternion.h" +#include "Serialization/Prefab.h" + +#include "imgui.h" +#include "Utils/ImGuiExtensions.h" + +TurretGun::TurretGun(GameObject* gameObject) + : Component(gameObject), + transform_(gameObject->createComponent()), + timeSinceShot_(0.0f), + refireTime_(2.5f) +{ + transform_->setRotationLocal(Quaternion::identity()); +} + +void TurretGun::drawProperties() +{ + ImGui::ResourceSelect("Prefab", "Select Prefab", prefab_); + ImGui::DragFloat("Refire time", &refireTime_, 0.1f); +} + +void TurretGun::update(float deltaTime) +{ + // Add delta time to elapsed time since shot + timeSinceShot_ += deltaTime; + + // If elapsed time exceeds refire time, fire projectile + if (timeSinceShot_ >= refireTime_) + { + spawnPrefab(); + timeSinceShot_ = 0.0f; + } +} + +void TurretGun::spawnPrefab() +{ + if (prefab_ != nullptr) + { + // Create new gameObject using prefab and set parent transform + GameObject* projectile = new GameObject("Projectile", prefab_); + projectile->transform()->setParentTransform(transform_); + } +} \ No newline at end of file diff --git a/Source/Scene/TurretGun.h b/Source/Scene/TurretGun.h new file mode 100644 index 0000000..a98f9f3 --- /dev/null +++ b/Source/Scene/TurretGun.h @@ -0,0 +1,23 @@ +#pragma once + +#include "Scene/Component.h" + +class Prefab; + +class TurretGun : public Component +{ +public: + TurretGun(GameObject* gameObject); + + void drawProperties() override; + void update(float deltaTime) override; + + void spawnPrefab(); + +private: + Transform* transform_; + Prefab* prefab_ = nullptr; + + float timeSinceShot_; + float refireTime_; +}; \ No newline at end of file From be3b3a090ecb7ab3f23e7409c16b4cf30e0d966a Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Thu, 26 Apr 2018 18:04:52 +0100 Subject: [PATCH 11/48] Turrets - Modified rocket prefab --- Resources/Prefabs/ProjectileRocket.prefab | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prefabs/ProjectileRocket.prefab b/Resources/Prefabs/ProjectileRocket.prefab index 04fd4c8..da417c8 100644 --- a/Resources/Prefabs/ProjectileRocket.prefab +++ b/Resources/Prefabs/ProjectileRocket.prefab @@ -1,8 +1,8 @@ { name = Blank GameObject Transform { - Position = 0 123.9 0 - Scale = 10 10 10 + Position = 0 0 0 + Scale = 4 4 4 } StaticMesh { mesh = Resources\Meshes\rocket.obj From 26d99c8bc2fd324d02a35ad79d5279d5dd3fdf75 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Thu, 26 Apr 2018 18:05:43 +0100 Subject: [PATCH 12/48] Turrets - Added TurretGun to GameObject file for component creation --- Source/Scene/GameObject.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/Scene/GameObject.cpp b/Source/Scene/GameObject.cpp index 6b7c458..f55ac6d 100644 --- a/Source/Scene/GameObject.cpp +++ b/Source/Scene/GameObject.cpp @@ -14,6 +14,7 @@ #include "Scene/Terrain.h" #include "Scene/StaticTurret.h" #include "Scene/Rocket.h" +#include "Scene/TurretGun.h" #include "Physics/SphereCollider.h" #include "Physics/BoxCollider.h" @@ -188,6 +189,7 @@ void GameObject::drawAddComponentSection() if (ImGui::Selectable("Terrain Collider")) createComponent(); if (ImGui::Selectable("Static Turret")) createComponent(); if (ImGui::Selectable("Rocket")) createComponent(); + if (ImGui::Selectable("Turret Gun")) createComponent(); ImGui::EndPopup(); } @@ -442,6 +444,9 @@ Component* GameObject::createComponent(const std::string &typeName) if (typeName == "Rocket") return createComponent(); + if (typeName == "TurretGun") + return createComponent(); + return nullptr; } From 74a6b6f21ccb31a6cfd7a566ff346f7f28484058 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Thu, 26 Apr 2018 18:06:19 +0100 Subject: [PATCH 13/48] Turrets - Moved Rigidbody initialisation to rocket constructor and removed update override --- Source/Scene/Rocket.cpp | 27 +++++++++++---------------- Source/Scene/Rocket.h | 2 -- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/Source/Scene/Rocket.cpp b/Source/Scene/Rocket.cpp index 3de5246..1161cbe 100644 --- a/Source/Scene/Rocket.cpp +++ b/Source/Scene/Rocket.cpp @@ -10,9 +10,18 @@ Rocket::Rocket(GameObject* gameObject) : Component(gameObject), transform_(gameObject->createComponent()), - speed_(200.0f) + speed_(100.0f) { + // Initialise rotation transform_->setRotationLocal(Quaternion::identity()); + + // Create rigidbody for collisions + gameObject->createComponent(); + Rigidbody* collider = gameObject->findComponent(); + + // Calculate velocity and send to rigidbody component + Vector3 velocity = transform_->forwards() * speed_; + collider->setVelocity(velocity); } void Rocket::drawProperties() @@ -20,22 +29,8 @@ void Rocket::drawProperties() ImGui::DragFloat("Rocket speed", &speed_, 0.1f); } -void Rocket::update(float deltaTime) -{ - if (initialised_ == false) - { - Rigidbody* collider; - if (collider = gameObject()->findComponent()) - { - Vector3 velocity = transform_->forwards() * speed_; - collider->setVelocity(velocity); - - initialised_ = true; - } - } -} - void Rocket::handleCollision(Collider* collider) { + // Delete gameObject on collision delete gameObject(); } diff --git a/Source/Scene/Rocket.h b/Source/Scene/Rocket.h index ea91bd3..05cac40 100644 --- a/Source/Scene/Rocket.h +++ b/Source/Scene/Rocket.h @@ -4,7 +4,6 @@ #include "Math/Vector3.h" class Transform; -class RigidBody; class Rocket : public Component { @@ -12,7 +11,6 @@ class Rocket : public Component Rocket(GameObject* gameObject); void drawProperties() override; - void update(float deltaTime) override; void handleCollision(Collider* collider) override; private: From 16d22ed9db1a0f0b96cc7707d9e09eb6818f740d Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Thu, 26 Apr 2018 19:05:33 +0100 Subject: [PATCH 14/48] Rockets - Renamed spawner class and logged with project/filters --- Engine.vcxproj | 4 ++-- Engine.vcxproj.filters | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Engine.vcxproj b/Engine.vcxproj index af9387a..27ec24c 100644 --- a/Engine.vcxproj +++ b/Engine.vcxproj @@ -55,7 +55,7 @@ - + @@ -124,7 +124,7 @@ - + diff --git a/Engine.vcxproj.filters b/Engine.vcxproj.filters index 4af187e..a640a80 100644 --- a/Engine.vcxproj.filters +++ b/Engine.vcxproj.filters @@ -227,7 +227,7 @@ Scene - + Scene @@ -402,7 +402,7 @@ Scene - + Scene From 01c0fbfaac06756eee1011b5c3c4d055c152db57 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Fri, 27 Apr 2018 14:29:10 +0100 Subject: [PATCH 15/48] Rockets - Added setRocketSpeed method to class --- Source/Scene/Rocket.cpp | 5 +++++ Source/Scene/Rocket.h | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Source/Scene/Rocket.cpp b/Source/Scene/Rocket.cpp index 1161cbe..6c87a53 100644 --- a/Source/Scene/Rocket.cpp +++ b/Source/Scene/Rocket.cpp @@ -34,3 +34,8 @@ void Rocket::handleCollision(Collider* collider) // Delete gameObject on collision delete gameObject(); } + +void Rocket::setRocketSpeed(float speed) +{ + speed_ = speed; +} diff --git a/Source/Scene/Rocket.h b/Source/Scene/Rocket.h index 05cac40..2a126bd 100644 --- a/Source/Scene/Rocket.h +++ b/Source/Scene/Rocket.h @@ -13,10 +13,11 @@ class Rocket : public Component void drawProperties() override; void handleCollision(Collider* collider) override; + void setRocketSpeed(float speed); + private: Transform* transform_; - Vector3 direction_; float speed_; bool initialised_ = false; From 717b585368c78c9c86d414f3f54ca5b39aaa231b Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Fri, 27 Apr 2018 16:35:44 +0100 Subject: [PATCH 16/48] Rockets - Modified turret prefab --- Resources/Prefabs/Turret.prefab | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Resources/Prefabs/Turret.prefab b/Resources/Prefabs/Turret.prefab index 6bd2baf..c7b55b3 100644 --- a/Resources/Prefabs/Turret.prefab +++ b/Resources/Prefabs/Turret.prefab @@ -1,8 +1,7 @@ { - name = Neoturret + name = Turret Transform { - Position = 341.2 -0.8 133.7 - Scale = 2 2 2 + Position = 0 0 0 } StaticMesh { mesh = Resources\Meshes\turret_base.obj @@ -22,12 +21,15 @@ children::0 { name = Cannon Transform { - Position = 0.0 0.6 0.0 + Position = 0 0.6 0 } StaticMesh { mesh = Resources\Meshes\turret_cannon.obj material = Resources\Materials\cardboard_enemy.material } + TurretGun { + prefab = Resources\Prefabs\ProjectileRocket.prefab + } } } } \ No newline at end of file From 8836329c196b33f4a83074e5b6a5fc3dcc2b52c7 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Fri, 27 Apr 2018 16:36:47 +0100 Subject: [PATCH 17/48] Rockets - Overrode TurretGun serialisation method --- Source/Scene/TurretGun.cpp | 6 ++++++ Source/Scene/TurretGun.h | 1 + 2 files changed, 7 insertions(+) diff --git a/Source/Scene/TurretGun.cpp b/Source/Scene/TurretGun.cpp index 123f33c..cc470f5 100644 --- a/Source/Scene/TurretGun.cpp +++ b/Source/Scene/TurretGun.cpp @@ -16,6 +16,12 @@ TurretGun::TurretGun(GameObject* gameObject) transform_->setRotationLocal(Quaternion::identity()); } +void TurretGun::serialize(PropertyTable &table) +{ + table.serialize("prefab", prefab_); + table.serialize("refire_time", refireTime_, 2.5f); +} + void TurretGun::drawProperties() { ImGui::ResourceSelect("Prefab", "Select Prefab", prefab_); diff --git a/Source/Scene/TurretGun.h b/Source/Scene/TurretGun.h index a98f9f3..14e1aa3 100644 --- a/Source/Scene/TurretGun.h +++ b/Source/Scene/TurretGun.h @@ -9,6 +9,7 @@ class TurretGun : public Component public: TurretGun(GameObject* gameObject); + void serialize(PropertyTable &table); void drawProperties() override; void update(float deltaTime) override; From add6bfb72c0c1ed9ef5d7ea33a42042d53e27c5b Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Sat, 28 Apr 2018 17:35:21 +0100 Subject: [PATCH 18/48] Rockets - Added initRocket method for setting up rocket position and rotation, as well as rigidbody --- Source/Scene/Rocket.cpp | 21 +++++++++++++-------- Source/Scene/Rocket.h | 2 ++ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Source/Scene/Rocket.cpp b/Source/Scene/Rocket.cpp index 6c87a53..74009ed 100644 --- a/Source/Scene/Rocket.cpp +++ b/Source/Scene/Rocket.cpp @@ -14,14 +14,6 @@ Rocket::Rocket(GameObject* gameObject) { // Initialise rotation transform_->setRotationLocal(Quaternion::identity()); - - // Create rigidbody for collisions - gameObject->createComponent(); - Rigidbody* collider = gameObject->findComponent(); - - // Calculate velocity and send to rigidbody component - Vector3 velocity = transform_->forwards() * speed_; - collider->setVelocity(velocity); } void Rocket::drawProperties() @@ -39,3 +31,16 @@ void Rocket::setRocketSpeed(float speed) { speed_ = speed; } +void Rocket::initRocket(const Point3& pos, const Quaternion& rot) +{ + transform_->setPositionLocal(pos); + transform_->setRotationLocal(rot); + + // Create rigidbody for collisions + gameObject()->createComponent(); + Rigidbody* collider = gameObject()->findComponent(); + + // Calculate velocity and send to rigidbody component + Vector3 velocity = transform_->forwards() * speed_; + collider->setVelocity(velocity); +} diff --git a/Source/Scene/Rocket.h b/Source/Scene/Rocket.h index 96bd2b3..a448409 100644 --- a/Source/Scene/Rocket.h +++ b/Source/Scene/Rocket.h @@ -4,6 +4,7 @@ #include "Math/Vector3.h" class Transform; +class Quaternion; class Rocket : public Component { @@ -14,6 +15,7 @@ class Rocket : public Component void handleCollision(Collider* collider) override; void setRocketSpeed(float speed); + void initRocket(const Point3& pos, const Quaternion& rot); private: Transform* transform_; From f479f53300e74471785dda683048104a56e96980 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Sat, 28 Apr 2018 17:35:45 +0100 Subject: [PATCH 19/48] Rockets - Removed transform parenting on rockets in favour of initRocket method --- Source/Scene/TurretGun.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/Scene/TurretGun.cpp b/Source/Scene/TurretGun.cpp index aa68f07..1aff9f4 100644 --- a/Source/Scene/TurretGun.cpp +++ b/Source/Scene/TurretGun.cpp @@ -1,6 +1,7 @@ #include "TurretGun.h" #include "Scene/Transform.h" +#include "Scene/Rocket.h" #include "Math/Quaternion.h" #include "Serialization/Prefab.h" @@ -46,6 +47,6 @@ void TurretGun::spawnPrefab() { // Create new gameObject using prefab and set parent transform GameObject* projectile = new GameObject("Projectile", prefab_); - projectile->transform()->setParentTransform(transform_); + projectile->findComponent()->initRocket(transform_->positionWorld(), transform_->rotationWorld()); } } \ No newline at end of file From edfa963416fb2bd54f2bcb7513df74f6f1251751 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Wed, 25 Apr 2018 14:22:11 +0100 Subject: [PATCH 20/48] Added rocket class for spawning a rigidbody with an initial velocity --- Engine.vcxproj | 2 ++ Engine.vcxproj.filters | 6 ++++ Resources/Meshes/rocket.obj | 3 ++ Resources/Prefabs/ProjectileRocket.prefab | 15 ++++++++++ Resources/Scenes/startup.scene | 24 ++++++++++++++++ Source/Scene/GameObject.cpp | 5 ++++ Source/Scene/Rocket.cpp | 35 +++++++++++++++++++++++ Source/Scene/Rocket.h | 24 ++++++++++++++++ 8 files changed, 114 insertions(+) create mode 100644 Resources/Meshes/rocket.obj create mode 100644 Resources/Prefabs/ProjectileRocket.prefab create mode 100644 Source/Scene/Rocket.cpp create mode 100644 Source/Scene/Rocket.h diff --git a/Engine.vcxproj b/Engine.vcxproj index 8deb267..d5fe6bd 100644 --- a/Engine.vcxproj +++ b/Engine.vcxproj @@ -60,6 +60,7 @@ + @@ -127,6 +128,7 @@ + diff --git a/Engine.vcxproj.filters b/Engine.vcxproj.filters index b7931d2..1b29a23 100644 --- a/Engine.vcxproj.filters +++ b/Engine.vcxproj.filters @@ -224,6 +224,9 @@ Physics + + Scene + @@ -393,6 +396,9 @@ Physics + + Scene + diff --git a/Resources/Meshes/rocket.obj b/Resources/Meshes/rocket.obj new file mode 100644 index 0000000..3ff3022 --- /dev/null +++ b/Resources/Meshes/rocket.obj @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c3389885e91e14b724df41e30d3f29f49e5d281c0be1f6f1d1998948fb4e018 +size 14808 diff --git a/Resources/Prefabs/ProjectileRocket.prefab b/Resources/Prefabs/ProjectileRocket.prefab new file mode 100644 index 0000000..04fd4c8 --- /dev/null +++ b/Resources/Prefabs/ProjectileRocket.prefab @@ -0,0 +1,15 @@ +{ + name = Blank GameObject + Transform { + Position = 0 123.9 0 + Scale = 10 10 10 + } + StaticMesh { + mesh = Resources\Meshes\rocket.obj + material = Resources\Materials\cardboard.material + } + Rocket { + } + Rigidbody { + } +} \ No newline at end of file diff --git a/Resources/Scenes/startup.scene b/Resources/Scenes/startup.scene index af3be9e..d2117bb 100644 --- a/Resources/Scenes/startup.scene +++ b/Resources/Scenes/startup.scene @@ -5,6 +5,30 @@ gameobjects::1 { prefab = Resources\Prefabs\Helicopter.prefab } + gameobjects::2 { + name = Static Mesh + Transform { + Position = 0 9.4 0 + } + StaticMesh { + mesh = Resources\Meshes\car.mesh + material = Resources\Materials\cardboard.material + } + children::0 { + name = Static Mesh + Transform { + Scale = 10 10 10 + } + StaticMesh { + mesh = Resources\Meshes\rocket.obj + material = Resources\Materials\cardboard.material + } + Rocket { + } + Rigidbody { + } + } + } ambient_intensity = 1.567 sun_intensity = 5.8 sun_rotation = 27 281 diff --git a/Source/Scene/GameObject.cpp b/Source/Scene/GameObject.cpp index 81fd61d..9078496 100644 --- a/Source/Scene/GameObject.cpp +++ b/Source/Scene/GameObject.cpp @@ -13,6 +13,7 @@ #include "Scene/Freecam.h" #include "Scene/Terrain.h" #include "Scene/StaticTurret.h" +#include "Scene/Rocket.h" #include "Physics/SphereCollider.h" #include "Physics/BoxCollider.h" @@ -186,6 +187,7 @@ void GameObject::drawAddComponentSection() if (ImGui::Selectable("Rigidbody")) createComponent(); if (ImGui::Selectable("Terrain Collider")) createComponent(); if (ImGui::Selectable("Static Turret")) createComponent(); + if (ImGui::Selectable("Rocket")) createComponent(); ImGui::EndPopup(); } @@ -437,6 +439,9 @@ Component* GameObject::createComponent(const std::string &typeName) if (typeName == "TerrainCollider") return createComponent(); + if (typeName == "Rocket") + return createComponent(); + return nullptr; } diff --git a/Source/Scene/Rocket.cpp b/Source/Scene/Rocket.cpp new file mode 100644 index 0000000..d45e1d0 --- /dev/null +++ b/Source/Scene/Rocket.cpp @@ -0,0 +1,35 @@ +#include "Rocket.h" + +#include "Scene/Transform.h" +#include "Physics/Rigidbody.h" +#include "imgui.h" + +Rocket::Rocket(GameObject* gameObject) + : Component(gameObject), + transform_(gameObject->createComponent()), + speed_(200.0f) +{ + transform_->setRotationLocal(Quaternion::identity()); +} + +void Rocket::drawProperties() +{ + ImGui::DragFloat("Rocket speed", &speed_, 0.1f); +} + +void Rocket::update(float deltaTime) +{ + if (initialised_ == false) + { + Rigidbody* collider; + if (collider = gameObject()->findComponent()) + { + Vector3 velocity = transform_->forwards() * speed_; + collider->setVelocity(velocity); + std::cout << "Forwards is " << transform_->forwards().x << ", " << transform_->forwards().y << ", " << transform_->forwards().z << std::endl; + std::cout << "Velocity is " << velocity.x << ", " << velocity.y << ", " << velocity.z << std::endl; + initialised_ = true; + } + } +} + diff --git a/Source/Scene/Rocket.h b/Source/Scene/Rocket.h new file mode 100644 index 0000000..6a762e7 --- /dev/null +++ b/Source/Scene/Rocket.h @@ -0,0 +1,24 @@ +#pragma once + +#include "Scene/Component.h" +#include "Math/Vector3.h" + +class Transform; +class RigidBody; + +class Rocket : public Component +{ +public: + Rocket(GameObject* gameObject); + + void drawProperties() override; + void update(float deltaTime) override; + +private: + Transform* transform_; + + Vector3 direction_; + float speed_; + + bool initialised_ = false; +}; \ No newline at end of file From 60cafb1b86dfc1646db50e34c495d1b7da41c8e0 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Wed, 25 Apr 2018 18:36:31 +0100 Subject: [PATCH 21/48] Overridden handleCollision method for rocket class --- Source/Scene/Rocket.cpp | 10 ++++++++-- Source/Scene/Rocket.h | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Source/Scene/Rocket.cpp b/Source/Scene/Rocket.cpp index d45e1d0..3de5246 100644 --- a/Source/Scene/Rocket.cpp +++ b/Source/Scene/Rocket.cpp @@ -2,6 +2,9 @@ #include "Scene/Transform.h" #include "Physics/Rigidbody.h" + +#include "SceneManager.h" + #include "imgui.h" Rocket::Rocket(GameObject* gameObject) @@ -26,10 +29,13 @@ void Rocket::update(float deltaTime) { Vector3 velocity = transform_->forwards() * speed_; collider->setVelocity(velocity); - std::cout << "Forwards is " << transform_->forwards().x << ", " << transform_->forwards().y << ", " << transform_->forwards().z << std::endl; - std::cout << "Velocity is " << velocity.x << ", " << velocity.y << ", " << velocity.z << std::endl; + initialised_ = true; } } } +void Rocket::handleCollision(Collider* collider) +{ + delete gameObject(); +} diff --git a/Source/Scene/Rocket.h b/Source/Scene/Rocket.h index 6a762e7..ea91bd3 100644 --- a/Source/Scene/Rocket.h +++ b/Source/Scene/Rocket.h @@ -13,6 +13,7 @@ class Rocket : public Component void drawProperties() override; void update(float deltaTime) override; + void handleCollision(Collider* collider) override; private: Transform* transform_; From 4978e3b5f0135ba027b71ec30b7310933b40365c Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Thu, 26 Apr 2018 18:03:38 +0100 Subject: [PATCH 22/48] Turrets - Added TurretGun to project/filters and implemented class files --- Engine.vcxproj | 2 ++ Engine.vcxproj.filters | 6 +++++ Source/Scene/TurretGun.cpp | 46 ++++++++++++++++++++++++++++++++++++++ Source/Scene/TurretGun.h | 23 +++++++++++++++++++ 4 files changed, 77 insertions(+) create mode 100644 Source/Scene/TurretGun.cpp create mode 100644 Source/Scene/TurretGun.h diff --git a/Engine.vcxproj b/Engine.vcxproj index d5fe6bd..6294c59 100644 --- a/Engine.vcxproj +++ b/Engine.vcxproj @@ -63,6 +63,7 @@ + @@ -131,6 +132,7 @@ + diff --git a/Engine.vcxproj.filters b/Engine.vcxproj.filters index 1b29a23..4af187e 100644 --- a/Engine.vcxproj.filters +++ b/Engine.vcxproj.filters @@ -227,6 +227,9 @@ Scene + + Scene + @@ -399,6 +402,9 @@ Scene + + Scene + diff --git a/Source/Scene/TurretGun.cpp b/Source/Scene/TurretGun.cpp new file mode 100644 index 0000000..123f33c --- /dev/null +++ b/Source/Scene/TurretGun.cpp @@ -0,0 +1,46 @@ +#include "TurretGun.h" + +#include "Scene/Transform.h" +#include "Math/Quaternion.h" +#include "Serialization/Prefab.h" + +#include "imgui.h" +#include "Utils/ImGuiExtensions.h" + +TurretGun::TurretGun(GameObject* gameObject) + : Component(gameObject), + transform_(gameObject->createComponent()), + timeSinceShot_(0.0f), + refireTime_(2.5f) +{ + transform_->setRotationLocal(Quaternion::identity()); +} + +void TurretGun::drawProperties() +{ + ImGui::ResourceSelect("Prefab", "Select Prefab", prefab_); + ImGui::DragFloat("Refire time", &refireTime_, 0.1f); +} + +void TurretGun::update(float deltaTime) +{ + // Add delta time to elapsed time since shot + timeSinceShot_ += deltaTime; + + // If elapsed time exceeds refire time, fire projectile + if (timeSinceShot_ >= refireTime_) + { + spawnPrefab(); + timeSinceShot_ = 0.0f; + } +} + +void TurretGun::spawnPrefab() +{ + if (prefab_ != nullptr) + { + // Create new gameObject using prefab and set parent transform + GameObject* projectile = new GameObject("Projectile", prefab_); + projectile->transform()->setParentTransform(transform_); + } +} \ No newline at end of file diff --git a/Source/Scene/TurretGun.h b/Source/Scene/TurretGun.h new file mode 100644 index 0000000..a98f9f3 --- /dev/null +++ b/Source/Scene/TurretGun.h @@ -0,0 +1,23 @@ +#pragma once + +#include "Scene/Component.h" + +class Prefab; + +class TurretGun : public Component +{ +public: + TurretGun(GameObject* gameObject); + + void drawProperties() override; + void update(float deltaTime) override; + + void spawnPrefab(); + +private: + Transform* transform_; + Prefab* prefab_ = nullptr; + + float timeSinceShot_; + float refireTime_; +}; \ No newline at end of file From cd20bc1e40fd51f5ed6413e0940c763722b3d36a Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Thu, 26 Apr 2018 18:04:52 +0100 Subject: [PATCH 23/48] Turrets - Modified rocket prefab --- Resources/Prefabs/ProjectileRocket.prefab | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prefabs/ProjectileRocket.prefab b/Resources/Prefabs/ProjectileRocket.prefab index 04fd4c8..da417c8 100644 --- a/Resources/Prefabs/ProjectileRocket.prefab +++ b/Resources/Prefabs/ProjectileRocket.prefab @@ -1,8 +1,8 @@ { name = Blank GameObject Transform { - Position = 0 123.9 0 - Scale = 10 10 10 + Position = 0 0 0 + Scale = 4 4 4 } StaticMesh { mesh = Resources\Meshes\rocket.obj From ce4f124211876dadec102620c6fbae2a27497080 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Thu, 26 Apr 2018 18:05:43 +0100 Subject: [PATCH 24/48] Turrets - Added TurretGun to GameObject file for component creation --- Source/Scene/GameObject.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/Scene/GameObject.cpp b/Source/Scene/GameObject.cpp index 9078496..1f76289 100644 --- a/Source/Scene/GameObject.cpp +++ b/Source/Scene/GameObject.cpp @@ -14,6 +14,7 @@ #include "Scene/Terrain.h" #include "Scene/StaticTurret.h" #include "Scene/Rocket.h" +#include "Scene/TurretGun.h" #include "Physics/SphereCollider.h" #include "Physics/BoxCollider.h" @@ -188,6 +189,7 @@ void GameObject::drawAddComponentSection() if (ImGui::Selectable("Terrain Collider")) createComponent(); if (ImGui::Selectable("Static Turret")) createComponent(); if (ImGui::Selectable("Rocket")) createComponent(); + if (ImGui::Selectable("Turret Gun")) createComponent(); ImGui::EndPopup(); } @@ -442,6 +444,9 @@ Component* GameObject::createComponent(const std::string &typeName) if (typeName == "Rocket") return createComponent(); + if (typeName == "TurretGun") + return createComponent(); + return nullptr; } From c704ce9e468e2d6f773236c654785449e4e1f9ff Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Thu, 26 Apr 2018 18:06:19 +0100 Subject: [PATCH 25/48] Turrets - Moved Rigidbody initialisation to rocket constructor and removed update override --- Source/Scene/Rocket.cpp | 27 +++++++++++---------------- Source/Scene/Rocket.h | 2 -- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/Source/Scene/Rocket.cpp b/Source/Scene/Rocket.cpp index 3de5246..1161cbe 100644 --- a/Source/Scene/Rocket.cpp +++ b/Source/Scene/Rocket.cpp @@ -10,9 +10,18 @@ Rocket::Rocket(GameObject* gameObject) : Component(gameObject), transform_(gameObject->createComponent()), - speed_(200.0f) + speed_(100.0f) { + // Initialise rotation transform_->setRotationLocal(Quaternion::identity()); + + // Create rigidbody for collisions + gameObject->createComponent(); + Rigidbody* collider = gameObject->findComponent(); + + // Calculate velocity and send to rigidbody component + Vector3 velocity = transform_->forwards() * speed_; + collider->setVelocity(velocity); } void Rocket::drawProperties() @@ -20,22 +29,8 @@ void Rocket::drawProperties() ImGui::DragFloat("Rocket speed", &speed_, 0.1f); } -void Rocket::update(float deltaTime) -{ - if (initialised_ == false) - { - Rigidbody* collider; - if (collider = gameObject()->findComponent()) - { - Vector3 velocity = transform_->forwards() * speed_; - collider->setVelocity(velocity); - - initialised_ = true; - } - } -} - void Rocket::handleCollision(Collider* collider) { + // Delete gameObject on collision delete gameObject(); } diff --git a/Source/Scene/Rocket.h b/Source/Scene/Rocket.h index ea91bd3..05cac40 100644 --- a/Source/Scene/Rocket.h +++ b/Source/Scene/Rocket.h @@ -4,7 +4,6 @@ #include "Math/Vector3.h" class Transform; -class RigidBody; class Rocket : public Component { @@ -12,7 +11,6 @@ class Rocket : public Component Rocket(GameObject* gameObject); void drawProperties() override; - void update(float deltaTime) override; void handleCollision(Collider* collider) override; private: From d0ab03d69e768a16258c77461f0c4792da2ef34c Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Fri, 27 Apr 2018 15:12:11 +0100 Subject: [PATCH 26/48] Rockets - Added rocket class files to project/filters --- Engine.vcxproj.filters | 6 ------ Source/Scene/Rocket.cpp | 11 +---------- Source/Scene/Rocket.h | 1 + 3 files changed, 2 insertions(+), 16 deletions(-) diff --git a/Engine.vcxproj.filters b/Engine.vcxproj.filters index 4af187e..1b29a23 100644 --- a/Engine.vcxproj.filters +++ b/Engine.vcxproj.filters @@ -227,9 +227,6 @@ Scene - - Scene - @@ -402,9 +399,6 @@ Scene - - Scene - diff --git a/Source/Scene/Rocket.cpp b/Source/Scene/Rocket.cpp index 1161cbe..59b5201 100644 --- a/Source/Scene/Rocket.cpp +++ b/Source/Scene/Rocket.cpp @@ -10,18 +10,9 @@ Rocket::Rocket(GameObject* gameObject) : Component(gameObject), transform_(gameObject->createComponent()), - speed_(100.0f) + speed_(200.0f) { - // Initialise rotation transform_->setRotationLocal(Quaternion::identity()); - - // Create rigidbody for collisions - gameObject->createComponent(); - Rigidbody* collider = gameObject->findComponent(); - - // Calculate velocity and send to rigidbody component - Vector3 velocity = transform_->forwards() * speed_; - collider->setVelocity(velocity); } void Rocket::drawProperties() diff --git a/Source/Scene/Rocket.h b/Source/Scene/Rocket.h index 05cac40..5a75d9e 100644 --- a/Source/Scene/Rocket.h +++ b/Source/Scene/Rocket.h @@ -4,6 +4,7 @@ #include "Math/Vector3.h" class Transform; +class RigidBody; class Rocket : public Component { From 3c23a95fc50c1dce6eee399ccc91d09001b3b5e0 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Fri, 27 Apr 2018 15:16:49 +0100 Subject: [PATCH 27/48] Rockets - Overridden handleCollision method in rocket class --- Source/Scene/GameObject.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Scene/GameObject.cpp b/Source/Scene/GameObject.cpp index 1f76289..d4a3f97 100644 --- a/Source/Scene/GameObject.cpp +++ b/Source/Scene/GameObject.cpp @@ -446,7 +446,7 @@ Component* GameObject::createComponent(const std::string &typeName) if (typeName == "TurretGun") return createComponent(); - + return nullptr; } From 5586a49a2e0364d80c2f3f867db29eecdf134719 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Thu, 26 Apr 2018 18:03:38 +0100 Subject: [PATCH 28/48] Turrets - Added TurretGun to project/filters and implemented class files --- Engine.vcxproj.filters | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Engine.vcxproj.filters b/Engine.vcxproj.filters index 1b29a23..4af187e 100644 --- a/Engine.vcxproj.filters +++ b/Engine.vcxproj.filters @@ -227,6 +227,9 @@ Scene + + Scene + @@ -399,6 +402,9 @@ Scene + + Scene + From 43da3846f844050e29b006704be73eade49a6efa Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Thu, 26 Apr 2018 18:06:19 +0100 Subject: [PATCH 29/48] Turrets - Moved Rigidbody initialisation to rocket constructor and removed update override --- Source/Scene/Rocket.cpp | 11 ++++++++++- Source/Scene/Rocket.h | 1 - 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Source/Scene/Rocket.cpp b/Source/Scene/Rocket.cpp index 59b5201..1161cbe 100644 --- a/Source/Scene/Rocket.cpp +++ b/Source/Scene/Rocket.cpp @@ -10,9 +10,18 @@ Rocket::Rocket(GameObject* gameObject) : Component(gameObject), transform_(gameObject->createComponent()), - speed_(200.0f) + speed_(100.0f) { + // Initialise rotation transform_->setRotationLocal(Quaternion::identity()); + + // Create rigidbody for collisions + gameObject->createComponent(); + Rigidbody* collider = gameObject->findComponent(); + + // Calculate velocity and send to rigidbody component + Vector3 velocity = transform_->forwards() * speed_; + collider->setVelocity(velocity); } void Rocket::drawProperties() diff --git a/Source/Scene/Rocket.h b/Source/Scene/Rocket.h index 5a75d9e..05cac40 100644 --- a/Source/Scene/Rocket.h +++ b/Source/Scene/Rocket.h @@ -4,7 +4,6 @@ #include "Math/Vector3.h" class Transform; -class RigidBody; class Rocket : public Component { From 6e358d440dea729fe7ca1629b126053bf88b2724 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Thu, 26 Apr 2018 19:05:33 +0100 Subject: [PATCH 30/48] Rockets - Renamed spawner class and logged with project/filters --- Engine.vcxproj | 4 ++-- Engine.vcxproj.filters | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Engine.vcxproj b/Engine.vcxproj index 6294c59..f41d85c 100644 --- a/Engine.vcxproj +++ b/Engine.vcxproj @@ -63,7 +63,7 @@ - + @@ -132,7 +132,7 @@ - + diff --git a/Engine.vcxproj.filters b/Engine.vcxproj.filters index 4af187e..a640a80 100644 --- a/Engine.vcxproj.filters +++ b/Engine.vcxproj.filters @@ -227,7 +227,7 @@ Scene - + Scene @@ -402,7 +402,7 @@ Scene - + Scene From 35233a0201e111c9bb04d04b00c4f9665af3621c Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Fri, 27 Apr 2018 14:29:10 +0100 Subject: [PATCH 31/48] Rockets - Added setRocketSpeed method to class --- Source/Scene/Rocket.cpp | 5 +++++ Source/Scene/Rocket.h | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Source/Scene/Rocket.cpp b/Source/Scene/Rocket.cpp index 1161cbe..6c87a53 100644 --- a/Source/Scene/Rocket.cpp +++ b/Source/Scene/Rocket.cpp @@ -34,3 +34,8 @@ void Rocket::handleCollision(Collider* collider) // Delete gameObject on collision delete gameObject(); } + +void Rocket::setRocketSpeed(float speed) +{ + speed_ = speed; +} diff --git a/Source/Scene/Rocket.h b/Source/Scene/Rocket.h index 05cac40..2a126bd 100644 --- a/Source/Scene/Rocket.h +++ b/Source/Scene/Rocket.h @@ -13,10 +13,11 @@ class Rocket : public Component void drawProperties() override; void handleCollision(Collider* collider) override; + void setRocketSpeed(float speed); + private: Transform* transform_; - Vector3 direction_; float speed_; bool initialised_ = false; From f29d894d41a3b66c3621cfe7f2453a977ea6550a Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Fri, 27 Apr 2018 16:35:44 +0100 Subject: [PATCH 32/48] Rockets - Modified turret prefab --- Resources/Prefabs/Turret.prefab | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Resources/Prefabs/Turret.prefab b/Resources/Prefabs/Turret.prefab index 6bd2baf..c7b55b3 100644 --- a/Resources/Prefabs/Turret.prefab +++ b/Resources/Prefabs/Turret.prefab @@ -1,8 +1,7 @@ { - name = Neoturret + name = Turret Transform { - Position = 341.2 -0.8 133.7 - Scale = 2 2 2 + Position = 0 0 0 } StaticMesh { mesh = Resources\Meshes\turret_base.obj @@ -22,12 +21,15 @@ children::0 { name = Cannon Transform { - Position = 0.0 0.6 0.0 + Position = 0 0.6 0 } StaticMesh { mesh = Resources\Meshes\turret_cannon.obj material = Resources\Materials\cardboard_enemy.material } + TurretGun { + prefab = Resources\Prefabs\ProjectileRocket.prefab + } } } } \ No newline at end of file From cb831108ac608677a42bc139c3064206a1b3e29a Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Fri, 27 Apr 2018 16:36:47 +0100 Subject: [PATCH 33/48] Rockets - Overrode TurretGun serialisation method --- Source/Scene/TurretGun.cpp | 6 ++++++ Source/Scene/TurretGun.h | 1 + 2 files changed, 7 insertions(+) diff --git a/Source/Scene/TurretGun.cpp b/Source/Scene/TurretGun.cpp index 123f33c..cc470f5 100644 --- a/Source/Scene/TurretGun.cpp +++ b/Source/Scene/TurretGun.cpp @@ -16,6 +16,12 @@ TurretGun::TurretGun(GameObject* gameObject) transform_->setRotationLocal(Quaternion::identity()); } +void TurretGun::serialize(PropertyTable &table) +{ + table.serialize("prefab", prefab_); + table.serialize("refire_time", refireTime_, 2.5f); +} + void TurretGun::drawProperties() { ImGui::ResourceSelect("Prefab", "Select Prefab", prefab_); diff --git a/Source/Scene/TurretGun.h b/Source/Scene/TurretGun.h index a98f9f3..14e1aa3 100644 --- a/Source/Scene/TurretGun.h +++ b/Source/Scene/TurretGun.h @@ -9,6 +9,7 @@ class TurretGun : public Component public: TurretGun(GameObject* gameObject); + void serialize(PropertyTable &table); void drawProperties() override; void update(float deltaTime) override; From e97aae2588dce6c87fa3ddfb4b34110b4234c1a1 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Sat, 28 Apr 2018 17:35:21 +0100 Subject: [PATCH 34/48] Rockets - Added initRocket method for setting up rocket position and rotation, as well as rigidbody --- Source/Scene/Rocket.cpp | 21 +++++++++++++-------- Source/Scene/Rocket.h | 2 ++ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Source/Scene/Rocket.cpp b/Source/Scene/Rocket.cpp index 6c87a53..74009ed 100644 --- a/Source/Scene/Rocket.cpp +++ b/Source/Scene/Rocket.cpp @@ -14,14 +14,6 @@ Rocket::Rocket(GameObject* gameObject) { // Initialise rotation transform_->setRotationLocal(Quaternion::identity()); - - // Create rigidbody for collisions - gameObject->createComponent(); - Rigidbody* collider = gameObject->findComponent(); - - // Calculate velocity and send to rigidbody component - Vector3 velocity = transform_->forwards() * speed_; - collider->setVelocity(velocity); } void Rocket::drawProperties() @@ -39,3 +31,16 @@ void Rocket::setRocketSpeed(float speed) { speed_ = speed; } +void Rocket::initRocket(const Point3& pos, const Quaternion& rot) +{ + transform_->setPositionLocal(pos); + transform_->setRotationLocal(rot); + + // Create rigidbody for collisions + gameObject()->createComponent(); + Rigidbody* collider = gameObject()->findComponent(); + + // Calculate velocity and send to rigidbody component + Vector3 velocity = transform_->forwards() * speed_; + collider->setVelocity(velocity); +} diff --git a/Source/Scene/Rocket.h b/Source/Scene/Rocket.h index 2a126bd..13eaec4 100644 --- a/Source/Scene/Rocket.h +++ b/Source/Scene/Rocket.h @@ -4,6 +4,7 @@ #include "Math/Vector3.h" class Transform; +class Quaternion; class Rocket : public Component { @@ -14,6 +15,7 @@ class Rocket : public Component void handleCollision(Collider* collider) override; void setRocketSpeed(float speed); + void initRocket(const Point3& pos, const Quaternion& rot); private: Transform* transform_; From bcbfe153f86e6aa35abaa453399749788bf5a826 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Sat, 28 Apr 2018 17:35:45 +0100 Subject: [PATCH 35/48] Rockets - Removed transform parenting on rockets in favour of initRocket method --- Source/Scene/TurretGun.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/Scene/TurretGun.cpp b/Source/Scene/TurretGun.cpp index cc470f5..9425f6a 100644 --- a/Source/Scene/TurretGun.cpp +++ b/Source/Scene/TurretGun.cpp @@ -1,6 +1,7 @@ #include "TurretGun.h" #include "Scene/Transform.h" +#include "Scene/Rocket.h" #include "Math/Quaternion.h" #include "Serialization/Prefab.h" @@ -47,6 +48,6 @@ void TurretGun::spawnPrefab() { // Create new gameObject using prefab and set parent transform GameObject* projectile = new GameObject("Projectile", prefab_); - projectile->transform()->setParentTransform(transform_); + projectile->findComponent()->initRocket(transform_->positionWorld(), transform_->rotationWorld()); } } \ No newline at end of file From 2da94e186e5085b3fab859dd4100707b9072888c Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Sun, 29 Apr 2018 13:22:09 +0100 Subject: [PATCH 36/48] Rockets - Added velocity getter to Helicopter.h --- Source/Scene/Helicopter.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Source/Scene/Helicopter.h b/Source/Scene/Helicopter.h index cb819e2..49a8cfa 100644 --- a/Source/Scene/Helicopter.h +++ b/Source/Scene/Helicopter.h @@ -21,6 +21,8 @@ class Helicopter : public Component Transform* transform() { return transform_; }; + Vector3 velocity() { return worldVelocity_; } + private: Transform* transform_; From 7565b82c07e9257fa8682ba13551cbc60e348992 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Sun, 29 Apr 2018 17:35:58 +0100 Subject: [PATCH 37/48] Rockets - Turrets predict chopper movement and account for gravity --- Source/Scene/StaticTurret.cpp | 38 ++++++++++++++++++++++++++--------- Source/Scene/StaticTurret.h | 5 +++++ 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/Source/Scene/StaticTurret.cpp b/Source/Scene/StaticTurret.cpp index 8b81d7d..0354d72 100644 --- a/Source/Scene/StaticTurret.cpp +++ b/Source/Scene/StaticTurret.cpp @@ -1,6 +1,10 @@ #include "StaticTurret.h" #include "SceneManager.h" + #include "Scene/Helicopter.h" +#include "Physics/Rigidbody.h" + +#include "imgui.h" #define _USE_MATH_DEFINES #include @@ -36,25 +40,39 @@ void StaticTurret::update(float) return; } - // Positions of turret and chopper - const Point3 turretPosition = transform_->positionWorld(); - const Point3 chopperPosition = chopper->transform()->positionWorld(); + const std::vector children = transform_->children(); + const std::vector grandchildren = children[0]->children(); // Vector from turret to chopper - Vector3 chopperVector = chopperPosition - turretPosition; + Vector3 chopperVector = getChopperPredictedPosition(chopper); // Magnitude of lateral chopper vector for trigonometry float chopperXZ = sqrt((chopperVector.x * chopperVector.x) + (chopperVector.z * chopperVector.z)); - // Get vertical and lateral angles to chopper separately + /*float deltaH = getPredictedVerticalDisplacement(t); + chopperVector.y -= deltaH + 3.0f;*/ + float verticalAngle = atan2f(chopperVector.y, chopperXZ) * (-180.0f / (float)M_PI); float lateralAngle = atan2f(chopperVector.x, chopperVector.z) * (180.0f / (float)M_PI); - // Rotate first component child (turret pivot) in world space - const std::vector children = transform_->children(); children[0]->setRotationWorld(Quaternion::euler(0.0f, lateralAngle, 0.0f)); - - // Rotate second component child (turret cannon) in local space - const std::vector grandchildren = children[0]->children(); grandchildren[0]->setRotationLocal(Quaternion::euler(verticalAngle, 0.0f, 0.0f)); +} + +Vector3 StaticTurret::getChopperPredictedPosition(Helicopter* chopper) +{ + const Point3 turretPos = transform_->positionWorld(); + const Point3 chopperPos = chopper->transform()->positionWorld(); + + Vector3 vectorToChopper = chopperPos - turretPos; + + // Get time for rocket to laterally reach chopper + float t = vectorToChopper.magnitude() / 100.0f; + + // Predict chopper movement using time step + Vector3 predictedChopperPos = vectorToChopper + (t * chopper->velocity()); + // Account for gravity + predictedChopperPos.y += (0.5 * 9.7 * t * t); + + return predictedChopperPos; } \ No newline at end of file diff --git a/Source/Scene/StaticTurret.h b/Source/Scene/StaticTurret.h index 07121dd..22c33fd 100644 --- a/Source/Scene/StaticTurret.h +++ b/Source/Scene/StaticTurret.h @@ -12,4 +12,9 @@ class StaticTurret : public Component private: Transform* transform_; + + float rotationCap_ = 45.0f; + float rotationSpeed_ = 90.0f; + + Vector3 getChopperPredictedPosition(Helicopter* chopper, float yVel); }; \ No newline at end of file From 474ac10fff4369ece3c2a260fb89f5dc6b86b7ba Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Sun, 29 Apr 2018 17:37:27 +0100 Subject: [PATCH 38/48] Rockets - Increased helicopter hitbox size --- Resources/Prefabs/Helicopter.prefab | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prefabs/Helicopter.prefab b/Resources/Prefabs/Helicopter.prefab index 51e8ee1..11a0799 100644 --- a/Resources/Prefabs/Helicopter.prefab +++ b/Resources/Prefabs/Helicopter.prefab @@ -16,8 +16,8 @@ Rotation = 0 -0.286003 0 -0.958229 } BoxCollider { - size = 2.694 3.253 5.317 - offset = 0 0.733 2.037 + size = 2.694 5 8 + offset = 0 0.733 0 } StaticMesh { mesh = Resources\Meshes\helicopter.obj From e7868783a9b085e324f7b41a529ee27d28eb7442 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Sun, 29 Apr 2018 17:37:46 +0100 Subject: [PATCH 39/48] Rockets - Changed rocket material to make rockets more visible --- Resources/Prefabs/ProjectileRocket.prefab | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prefabs/ProjectileRocket.prefab b/Resources/Prefabs/ProjectileRocket.prefab index da417c8..22a7cc1 100644 --- a/Resources/Prefabs/ProjectileRocket.prefab +++ b/Resources/Prefabs/ProjectileRocket.prefab @@ -6,7 +6,7 @@ } StaticMesh { mesh = Resources\Meshes\rocket.obj - material = Resources\Materials\cardboard.material + material = Resources\Materials\cardboard_enemy.material } Rocket { } From 3d2555b85bf12353b64a1452d187a0e1462a98bc Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Sun, 29 Apr 2018 17:47:41 +0100 Subject: [PATCH 40/48] Rockets - Helicopter can now be damaged by rockets on collision --- Source/Scene/Helicopter.cpp | 10 ++++++++++ Source/Scene/Helicopter.h | 4 ++++ Source/Scene/Rocket.cpp | 11 ++++++++++- Source/Scene/Rocket.h | 1 + 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Source/Scene/Helicopter.cpp b/Source/Scene/Helicopter.cpp index 413a950..18f7e98 100644 --- a/Source/Scene/Helicopter.cpp +++ b/Source/Scene/Helicopter.cpp @@ -11,6 +11,7 @@ Helicopter::Helicopter(GameObject* gameObject) transform_(gameObject->createComponent()), worldVelocity_(Vector3::zero()), worldRotation_(Quaternion::identity()), + HP(100.0f), horizontalMaxSpeed_(60.0f), upMaxSpeed_(25.0f), downMaxSpeed_(80.0f), @@ -118,3 +119,12 @@ void Helicopter::handleInput(const InputCmd& inputs) remainingPitch_ -= remainingPitch_ * decelerationFactor_; } +void Helicopter::takeDamage(float damage) +{ + HP -= damage; + + if (HP <= 0.0f) + { + delete gameObject(); + } +} \ No newline at end of file diff --git a/Source/Scene/Helicopter.h b/Source/Scene/Helicopter.h index 49a8cfa..600ff48 100644 --- a/Source/Scene/Helicopter.h +++ b/Source/Scene/Helicopter.h @@ -23,12 +23,16 @@ class Helicopter : public Component Vector3 velocity() { return worldVelocity_; } + void takeDamage(float damage); + private: Transform* transform_; Vector3 worldVelocity_; Quaternion worldRotation_; + float HP; + float currentTilt_; float horizontalMaxSpeed_; diff --git a/Source/Scene/Rocket.cpp b/Source/Scene/Rocket.cpp index 74009ed..4a897a9 100644 --- a/Source/Scene/Rocket.cpp +++ b/Source/Scene/Rocket.cpp @@ -1,6 +1,8 @@ #include "Rocket.h" #include "Scene/Transform.h" +#include "Scene/Helicopter.h" + #include "Physics/Rigidbody.h" #include "SceneManager.h" @@ -10,7 +12,8 @@ Rocket::Rocket(GameObject* gameObject) : Component(gameObject), transform_(gameObject->createComponent()), - speed_(100.0f) + speed_(100.0f), + damage_(15.0f) { // Initialise rotation transform_->setRotationLocal(Quaternion::identity()); @@ -23,6 +26,12 @@ void Rocket::drawProperties() void Rocket::handleCollision(Collider* collider) { + Helicopter* chopper = collider->gameObject()->findComponent(); + if (chopper != nullptr) + { + chopper->takeDamage(damage_); + } + // Delete gameObject on collision delete gameObject(); } diff --git a/Source/Scene/Rocket.h b/Source/Scene/Rocket.h index 13eaec4..2b441d1 100644 --- a/Source/Scene/Rocket.h +++ b/Source/Scene/Rocket.h @@ -21,6 +21,7 @@ class Rocket : public Component Transform* transform_; float speed_; + float damage_; bool initialised_ = false; }; \ No newline at end of file From 0f69422201819b66ac529b69bb8c429f6f0ae56b Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Mon, 30 Apr 2018 17:30:38 +0100 Subject: [PATCH 41/48] Rockets - modified getChopperPredictedPosition method --- Source/Scene/StaticTurret.cpp | 1 - Source/Scene/StaticTurret.h | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Scene/StaticTurret.cpp b/Source/Scene/StaticTurret.cpp index 0354d72..60e1cea 100644 --- a/Source/Scene/StaticTurret.cpp +++ b/Source/Scene/StaticTurret.cpp @@ -1,7 +1,6 @@ #include "StaticTurret.h" #include "SceneManager.h" -#include "Scene/Helicopter.h" #include "Physics/Rigidbody.h" #include "imgui.h" diff --git a/Source/Scene/StaticTurret.h b/Source/Scene/StaticTurret.h index 22c33fd..9f92a96 100644 --- a/Source/Scene/StaticTurret.h +++ b/Source/Scene/StaticTurret.h @@ -2,6 +2,7 @@ #include "Scene/Component.h" #include "Scene/Transform.h" +#include "Scene/Helicopter.h" class StaticTurret : public Component { @@ -16,5 +17,5 @@ class StaticTurret : public Component float rotationCap_ = 45.0f; float rotationSpeed_ = 90.0f; - Vector3 getChopperPredictedPosition(Helicopter* chopper, float yVel); + Vector3 getChopperPredictedPosition(Helicopter* chopper); }; \ No newline at end of file From d9682b76f75af5bbd6585902a4e84ccf92b8fa51 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Mon, 30 Apr 2018 17:48:09 +0100 Subject: [PATCH 42/48] Rockets - Added setMaterial method to StaticMesh --- Source/Scene/StaticMesh.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/Scene/StaticMesh.cpp b/Source/Scene/StaticMesh.cpp index d9d1b76..64caaa8 100644 --- a/Source/Scene/StaticMesh.cpp +++ b/Source/Scene/StaticMesh.cpp @@ -20,4 +20,9 @@ void StaticMesh::serialize(PropertyTable &table) { table.serialize("mesh", mesh_); table.serialize("material", material_); +} + +void StaticMesh::setMaterial(Material* material) +{ + material_ = material; } \ No newline at end of file From f89c355beb20ee08b03a770745e9022bf5053bd8 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Mon, 30 Apr 2018 17:54:05 +0100 Subject: [PATCH 43/48] Rockets - Added setMaterial method to StaticMesh --- Source/Scene/StaticMesh.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Source/Scene/StaticMesh.h b/Source/Scene/StaticMesh.h index afe581b..cd20a12 100644 --- a/Source/Scene/StaticMesh.h +++ b/Source/Scene/StaticMesh.h @@ -18,6 +18,8 @@ class StaticMesh : public Component // Handles component serialization void serialize(PropertyTable &table) override; + void setMaterial(Material* material); + Material* material() const { return material_; } Mesh* mesh() const { return mesh_; } From 8c789f12ca7d98c01d2dc6ab5c6423441cc2d74e Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Mon, 30 Apr 2018 17:54:30 +0100 Subject: [PATCH 44/48] Rockets - Implemented freeze & pause on death instead of deletion of gameObject --- Source/Scene/Helicopter.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Source/Scene/Helicopter.cpp b/Source/Scene/Helicopter.cpp index 18f7e98..ff2d9b3 100644 --- a/Source/Scene/Helicopter.cpp +++ b/Source/Scene/Helicopter.cpp @@ -2,6 +2,9 @@ #include "InputManager.h" #include "Scene/Transform.h" +#include "Scene/StaticMesh.h" +#include "Utils/Clock.h" + #include "imgui.h" #include @@ -125,6 +128,7 @@ void Helicopter::takeDamage(float damage) if (HP <= 0.0f) { - delete gameObject(); + gameObject()->findComponent()->setMaterial(ResourceManager::instance()->load("Resources/Materials/cardboard_enemy.material")); + Clock::instance()->setPaused(true); } } \ No newline at end of file From 97b9150088ffe49dacbe524137a28bf26a4a4d17 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Mon, 30 Apr 2018 20:29:50 +0100 Subject: [PATCH 45/48] Rockets - Overrode handleCollision method in helicopter.h and implemented destruction method --- Source/Scene/Helicopter.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/Scene/Helicopter.h b/Source/Scene/Helicopter.h index 600ff48..8476906 100644 --- a/Source/Scene/Helicopter.h +++ b/Source/Scene/Helicopter.h @@ -1,6 +1,7 @@ #pragma once #include "Scene/Component.h" +#include "Physics/Collider.h" #include "Math/Vector3.h" #include "Math/Quaternion.h" @@ -14,6 +15,8 @@ class Helicopter : public Component void drawProperties() override; + void handleCollision(Collider* collider) override; + // Serialisation method void serialize(PropertyTable &table) override; @@ -25,6 +28,8 @@ class Helicopter : public Component void takeDamage(float damage); + void die(); + private: Transform* transform_; From f799d89f7b79dcb1526514a0129921e7f9a4f5b3 Mon Sep 17 00:00:00 2001 From: Joshua Crinall Date: Mon, 30 Apr 2018 20:30:10 +0100 Subject: [PATCH 46/48] Rockets - Helicopter.cpp die() definition --- Source/Scene/Helicopter.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Source/Scene/Helicopter.cpp b/Source/Scene/Helicopter.cpp index ff2d9b3..69aa227 100644 --- a/Source/Scene/Helicopter.cpp +++ b/Source/Scene/Helicopter.cpp @@ -37,6 +37,14 @@ void Helicopter::drawProperties() ImGui::DragFloat("Yaw rotation factor", &turnFactor_, 0.1f); } +void Helicopter::handleCollision(Collider* collider) +{ + if (collider->gameObject()->findComponent() != nullptr) + { + die(); + } +} + void Helicopter::serialize(PropertyTable &table) { table.serialize("horizontal_max_speed", horizontalMaxSpeed_, 60.0f); @@ -128,7 +136,12 @@ void Helicopter::takeDamage(float damage) if (HP <= 0.0f) { - gameObject()->findComponent()->setMaterial(ResourceManager::instance()->load("Resources/Materials/cardboard_enemy.material")); - Clock::instance()->setPaused(true); + die(); } +} + +void Helicopter::die() +{ + gameObject()->findComponent()->setMaterial(ResourceManager::instance()->load("Resources/Materials/cardboard_enemy.material")); + Clock::instance()->setPaused(true); } \ No newline at end of file From 066127c0fe3514e87f3382f1e057393cfb82c1cc Mon Sep 17 00:00:00 2001 From: George Loines Date: Mon, 30 Apr 2018 21:00:29 +0100 Subject: [PATCH 47/48] Turrets - [Fix] Remove merge conflict markers from TurretGun.h --- Source/Scene/TurretGun.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/Source/Scene/TurretGun.cpp b/Source/Scene/TurretGun.cpp index dea34d8..9425f6a 100644 --- a/Source/Scene/TurretGun.cpp +++ b/Source/Scene/TurretGun.cpp @@ -22,10 +22,7 @@ void TurretGun::serialize(PropertyTable &table) table.serialize("prefab", prefab_); table.serialize("refire_time", refireTime_, 2.5f); } -<<<<<<< HEAD -======= ->>>>>>> f479f53300e74471785dda683048104a56e96980 void TurretGun::drawProperties() { ImGui::ResourceSelect("Prefab", "Select Prefab", prefab_); From 3ee9aa947f2efe422df5ff6758038535f6766878 Mon Sep 17 00:00:00 2001 From: George Loines Date: Mon, 30 Apr 2018 21:09:22 +0100 Subject: [PATCH 48/48] Rockets - Give rocket prefab a name and make smaller --- Resources/Prefabs/ProjectileRocket.prefab | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Resources/Prefabs/ProjectileRocket.prefab b/Resources/Prefabs/ProjectileRocket.prefab index 22a7cc1..3db0c3b 100644 --- a/Resources/Prefabs/ProjectileRocket.prefab +++ b/Resources/Prefabs/ProjectileRocket.prefab @@ -1,8 +1,8 @@ { - name = Blank GameObject + name = Rocket + Rigidbody { + } Transform { - Position = 0 0 0 - Scale = 4 4 4 } StaticMesh { mesh = Resources\Meshes\rocket.obj @@ -10,6 +10,4 @@ } Rocket { } - Rigidbody { - } } \ No newline at end of file