From e4a59cec616bb4c7c018548ae9a187b0ee22c3c1 Mon Sep 17 00:00:00 2001 From: ViktorLjung Date: Thu, 5 Jun 2014 06:01:49 +0200 Subject: [PATCH] Merge remote-tracking branch 'origin/master' into havok Conflicts: src/GameWorld.cpp vs11/Returngeance/Returngeance.vcxproj.filters --- assets | 2 +- src/Events/Dead.h | 16 ++++ src/Events/FlagCaptured.h | 2 +- src/Events/FlagDropped.h | 2 +- src/Events/FlagPickup.h | 2 +- src/Events/FlagReturned.h | 2 +- src/Events/GameOver.h | 2 +- src/Events/OnDead.h | 16 ---- src/GUI/GameFrame.h | 1 + src/GUI/HealthOverlay.h | 2 +- src/GUI/PlayerHUD.h | 26 +++--- src/GUI/Viewport.h | 2 +- src/GameWorld.cpp | 83 ++++++++++++------- src/GameWorld.h | 3 + src/Systems/DamageSystem.cpp | 14 ++-- src/Systems/DamageSystem.h | 2 +- src/Systems/FlagSystem.cpp | 63 ++++++++++++++ src/Systems/FlagSystem.h | 44 ++++++++++ src/Systems/GameStateSystem.cpp | 2 +- src/Systems/GarageSystem.cpp | 21 +++++ src/Systems/GarageSystem.h | 2 + src/Systems/JeepSteeringSystem.cpp | 1 - src/Systems/PhysicsSystem.cpp | 47 +++++++---- src/Systems/PhysicsSystem.h | 6 +- src/Systems/TankSteeringSystem.cpp | 2 +- src/Systems/TriggerSystem.cpp | 28 +------ src/Systems/TriggerSystem.h | 1 - src/Systems/WallSystem.h | 2 +- src/World.cpp | 10 ++- vs11/Returngeance/Returngeance.vcxproj | 4 +- .../Returngeance/Returngeance.vcxproj.filters | 8 +- 31 files changed, 288 insertions(+), 130 deletions(-) create mode 100644 src/Events/Dead.h delete mode 100644 src/Events/OnDead.h create mode 100644 src/Systems/FlagSystem.cpp create mode 100644 src/Systems/FlagSystem.h diff --git a/assets b/assets index 26839b6..5357a0c 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit 26839b66e2dd3e867332fde0bd20ec138a2a0247 +Subproject commit 5357a0c4e1020317bb8745a057d6da62ab6c6504 diff --git a/src/Events/Dead.h b/src/Events/Dead.h new file mode 100644 index 0000000..32d618a --- /dev/null +++ b/src/Events/Dead.h @@ -0,0 +1,16 @@ +#ifndef Events_Dead_h__ +#define Events_Dead_h__ +#include "Entity.h" +#include "EventBroker.h" + +namespace Events +{ + struct Dead : Event + { + EntityID Entity; + }; +} + + + +#endif // Events_Dead_h__ \ No newline at end of file diff --git a/src/Events/FlagCaptured.h b/src/Events/FlagCaptured.h index fbb0a85..482d2f8 100644 --- a/src/Events/FlagCaptured.h +++ b/src/Events/FlagCaptured.h @@ -8,7 +8,7 @@ namespace Events { struct FlagCaptured : Event { - EntityID Player; + unsigned int Player; }; } diff --git a/src/Events/FlagDropped.h b/src/Events/FlagDropped.h index eee5bbf..5340e0b 100644 --- a/src/Events/FlagDropped.h +++ b/src/Events/FlagDropped.h @@ -8,7 +8,7 @@ namespace Events { struct FlagDropped : Event { - EntityID Player; + unsigned int Player; }; } diff --git a/src/Events/FlagPickup.h b/src/Events/FlagPickup.h index d1ad727..6d45f63 100644 --- a/src/Events/FlagPickup.h +++ b/src/Events/FlagPickup.h @@ -8,7 +8,7 @@ namespace Events { struct FlagPickup : Event { - EntityID Player; + unsigned int Player; }; } diff --git a/src/Events/FlagReturned.h b/src/Events/FlagReturned.h index 9bdc55e..ac0b890 100644 --- a/src/Events/FlagReturned.h +++ b/src/Events/FlagReturned.h @@ -8,7 +8,7 @@ namespace Events { struct FlagReturned : Event { - EntityID Player; + unsigned int Player; }; } diff --git a/src/Events/GameOver.h b/src/Events/GameOver.h index b544954..7c34ce4 100644 --- a/src/Events/GameOver.h +++ b/src/Events/GameOver.h @@ -8,7 +8,7 @@ namespace Events { struct GameOver : Event { - EntityID Winner; + unsigned int Player; }; } diff --git a/src/Events/OnDead.h b/src/Events/OnDead.h deleted file mode 100644 index 0149ac1..0000000 --- a/src/Events/OnDead.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef Events_OnDead_h__ -#define Events_OnDead_h__ -#include "Entity.h" -#include "EventBroker.h" - -namespace Events -{ - struct OnDead : Event - { - EntityID Entity; - }; -} - - - -#endif // Events_OnDead_h__ \ No newline at end of file diff --git a/src/GUI/GameFrame.h b/src/GUI/GameFrame.h index 56d0391..afa4fcf 100644 --- a/src/GUI/GameFrame.h +++ b/src/GUI/GameFrame.h @@ -11,6 +11,7 @@ #include "GameWorld.h" #include "Events/GameStart.h" #include "Events/GameOver.h" +#include "Events/Dead.h" namespace GUI { diff --git a/src/GUI/HealthOverlay.h b/src/GUI/HealthOverlay.h index 3760a93..f93c243 100644 --- a/src/GUI/HealthOverlay.h +++ b/src/GUI/HealthOverlay.h @@ -37,7 +37,7 @@ namespace GUI if (!health) return false; - SetColor(glm::vec4(1.f, 1.f, 1.f, 1 - health->Amount / 100.f)); + SetColor(glm::vec4(1.f, 1.f, 1.f, 1 - (health->Amount / 100.f * 2))); return true; } diff --git a/src/GUI/PlayerHUD.h b/src/GUI/PlayerHUD.h index 63aaf14..96b9967 100644 --- a/src/GUI/PlayerHUD.h +++ b/src/GUI/PlayerHUD.h @@ -7,6 +7,7 @@ #include "GUI/GameOverFrame.h" #include "Events/GameOver.h" +#include "Events/Dead.h" #include "Components/Player.h" namespace GUI @@ -20,7 +21,8 @@ namespace GUI , m_World(world) , m_PlayerID(playerID) { - EVENT_SUBSCRIBE_MEMBER(m_EGameOver, &GUI::PlayerHUD::OnGameOver) + EVENT_SUBSCRIBE_MEMBER(m_EGameOver, &GUI::PlayerHUD::OnGameOver); + EVENT_SUBSCRIBE_MEMBER(m_EDead, &GUI::PlayerHUD::OnDead); m_HealthOverlay = new HealthOverlay(this, "HealthOverlay", m_World, m_PlayerID); @@ -35,6 +37,7 @@ namespace GUI m_VehicleSelection = new VehicleSelection(this, "VehicleSelection", m_World, m_PlayerID); m_GameOverFrame = new GameOverFrame(this, "GameOver"); + m_GameOverFrame->Hide(); } protected: @@ -49,14 +52,7 @@ namespace GUI EventRelay m_EGameOver; bool OnGameOver(const Events::GameOver &event) { - auto playerComponent = m_World->GetComponent(event.Winner); - if (!playerComponent) - { - LOG_ERROR("Winner is not a valid player!"); - return false; - } - - if (m_PlayerID == playerComponent->ID) + if (m_PlayerID == event.Player) m_GameOverFrame->Show(true); else m_GameOverFrame->Show(false); @@ -64,6 +60,14 @@ namespace GUI return true; } + EventRelay m_EDead; + bool OnDead(const Events::Dead &event) + { + m_VehicleSelection->Show(); + m_HealthOverlay->SetColor(glm::vec4(1, 1, 1, 0)); + return true; + } + bool OnCommand(const Events::InputCommand &event) { if (event.PlayerID != m_PlayerID) @@ -71,10 +75,10 @@ namespace GUI if (event.Command == "interface_confirm" && event.Value > 0) { - if (m_GameOverFrame->Visible()) + /*if (m_GameOverFrame->Visible()) { m_GameOverFrame->Hide(); - } + }*/ } return true; diff --git a/src/GUI/Viewport.h b/src/GUI/Viewport.h index 44c8e81..40d54e5 100644 --- a/src/GUI/Viewport.h +++ b/src/GUI/Viewport.h @@ -51,7 +51,7 @@ public: return; Components::Transform absoluteTransform = m_TransformSystem->AbsoluteTransform(m_CameraEntity); - + m_Camera->SetFOV(cameraComponent->FOV); m_Camera->SetNearClip(cameraComponent->NearClip); m_Camera->SetFarClip(cameraComponent->FarClip); diff --git a/src/GameWorld.cpp b/src/GameWorld.cpp index 07bab79..0b17e0c 100755 --- a/src/GameWorld.cpp +++ b/src/GameWorld.cpp @@ -296,37 +296,7 @@ void GameWorld::Initialize() - { - auto flag = CreateEntity(); - auto transform = AddComponent(flag); - transform->Position = glm::vec3(0, -50, 100); - auto model = AddComponent(flag); - model->ModelFile = "Models/Flag/FishingRod/FishingRod.obj"; - { - auto fish = CreateEntity(flag); - auto transform = AddComponent(fish); - transform->Position = glm::vec3(-1.3f, 1.0, 0); - auto model = AddComponent(fish); - model->ModelFile = "Models/Flag/LeFish/Salmon.obj"; - CommitEntity(fish); - } - - auto trigger = AddComponent(flag); - { - auto shape = CreateEntity(flag); - auto transform = AddComponent(shape); - transform->Position = glm::vec3(-0.9f, 0.9f, 0); - auto box = AddComponent(shape); - box->Width = 1.1f; - box->Depth = 0.7f; - box->Height = 3.9f; - CommitEntity(shape); - } - - auto flagComponent = AddComponent(flag); - - CommitEntity(flag); - } + //for (int i = 0; i < 500; i++) //{ @@ -418,7 +388,6 @@ void GameWorld::RegisterComponents() m_ComponentFactory.Register([]() { return new Components::Transform(); }); m_ComponentFactory.Register([]() { return new Components::Template(); }); m_ComponentFactory.Register([]() { return new Components::Player(); }); - m_ComponentFactory.Register([]() { return new Components::Flag(); }); m_ComponentFactory.Register([]() { return new Components::Move(); }); m_ComponentFactory.Register([]() { return new Components::Rotate(); }); m_ComponentFactory.Register([]() { return new Components::Team(); }); @@ -445,6 +414,8 @@ void GameWorld::RegisterSystems() m_SystemFactory.Register([this]() { return new Systems::FollowSystem(this, EventBroker, ResourceManager); }); m_SystemFactory.Register([this]() { return new Systems::GarageSystem(this, EventBroker, ResourceManager); }); m_SystemFactory.Register([this]() { return new Systems::WallSystem(this, EventBroker, ResourceManager); }); + m_SystemFactory.Register([this]() { return new Systems::FlagSystem(this, EventBroker, ResourceManager); }); + m_SystemFactory.Register([this]() { return new Systems::GameStateSystem(this, EventBroker, ResourceManager); }); m_SystemFactory.Register([this]() { return new Systems::RenderSystem(this, EventBroker, ResourceManager); }); } @@ -469,6 +440,8 @@ void GameWorld::AddSystems() AddSystem(); AddSystem(); AddSystem(); + AddSystem(); + AddSystem(); AddSystem(); } @@ -1096,6 +1069,8 @@ void GameWorld::CreateBase(glm::quat orientation, int teamID) CreateWall(base, glm::vec3(273.f, 40.3f, 25.f), glm::quat(glm::vec3(0, glm::pi() / 2.f, 0))); CreateGarage(base, glm::vec3(323.2f, 41.4f, -10.2f), glm::quat(glm::vec3(0, glm::pi() / 2.f, 0)), teamID); + + CreateFlag(base, glm::vec3(291.f, 41.7412f, -36.2f), glm::quat(glm::vec3(0, glm::pi() / 2.f, 0)), teamID); } EntityID GameWorld::CreateGarage(EntityID parent, glm::vec3 Position, glm::quat orientation, int teamID) @@ -1275,3 +1250,47 @@ EntityID GameWorld::CreateGarage(EntityID parent, glm::vec3 Position, glm::quat return garage; } + +void GameWorld::CreateFlag(EntityID parent, glm::vec3 position, glm::quat orientation, int TeamID) +{ + + auto flag = CreateEntity(parent); + SetProperty(flag, "Name", "Flag"); + auto transform = AddComponent(flag); + transform->Position = position; + transform->Orientation = orientation; + auto flagComponent = AddComponent(flag); + auto trigger = AddComponent(flag); + auto team = AddComponent(flag); + team->TeamID = TeamID; + { + auto fish = CreateEntity(flag); + auto transform = AddComponent(fish); + transform->Position = glm::vec3(-1.3f, 1.0, 0); + auto model = AddComponent(fish); + model->ModelFile = "Models/Flag/LeFish/Salmon.obj"; + CommitEntity(fish); + } + + { + auto rod = CreateEntity(flag); + auto transform = AddComponent(rod); + transform->Position = glm::vec3(-1.3f, 1.0, 0); + auto model = AddComponent(rod); + model->ModelFile = "Models/Flag/FishingRod/FishingRod.obj"; + CommitEntity(rod); + } + + { + auto shape = CreateEntity(flag); + auto transform = AddComponent(shape); + transform->Position = glm::vec3(-0.9f, 0.9f, 0); + auto box = AddComponent(shape); + box->Width = 1.1f; + box->Depth = 0.7f; + box->Height = 3.9f; + CommitEntity(shape); + } + CommitEntity(flag); + +} diff --git a/src/GameWorld.h b/src/GameWorld.h index 85539ca..fc1d2bf 100755 --- a/src/GameWorld.h +++ b/src/GameWorld.h @@ -25,6 +25,8 @@ #include "Systems/WallSystem.h" #include "Systems/GarageSystem.h" #include "Systems/JeepSteeringSystem.h" +#include "Systems/FlagSystem.h" +#include "Systems/GameStateSystem.h" #include "Components/Camera.h" #include "Components/DirectionalLight.h" @@ -88,6 +90,7 @@ private: EntityID CreateGarage(EntityID parent, glm::vec3 Position, glm::quat orientation, int teamID); void CreateTerrain(); void CreateBase(glm::quat orientation, int playerID); + void CreateFlag(EntityID parent, glm::vec3 position, glm::quat orientation, int TeamID); std::vector m_WallDebrisTemplates; }; diff --git a/src/Systems/DamageSystem.cpp b/src/Systems/DamageSystem.cpp index ffbce89..775b1bd 100644 --- a/src/Systems/DamageSystem.cpp +++ b/src/Systems/DamageSystem.cpp @@ -19,12 +19,14 @@ bool Systems::DamageSystem::OnDamage( const Events::Damage &event ) return false; auto health = m_World->GetComponent(event.Entity); health->Amount -= event.Amount; - //if(health->Amount <= 0) - //{ - // Events::OnDead e; - // e.Entity = event.Entity; - // EventBroker->Publish(e); - //} + if(health->Amount <= 0) + { + Events::Dead e; + e.Entity = event.Entity; + EventBroker->Publish(e); + } + + LOG_INFO("Damaged entity %i, Health left: %f", event.Entity, health->Amount); return true; } \ No newline at end of file diff --git a/src/Systems/DamageSystem.h b/src/Systems/DamageSystem.h index 2b1a43a..0bf5272 100644 --- a/src/Systems/DamageSystem.h +++ b/src/Systems/DamageSystem.h @@ -6,7 +6,7 @@ #include "Components/Health.h" #include "Components/DamageModel.h" #include "Events/Damage.h" -#include "Events/OnDead.h" +#include "Events/Dead.h" namespace Systems { diff --git a/src/Systems/FlagSystem.cpp b/src/Systems/FlagSystem.cpp new file mode 100644 index 0000000..cb245f2 --- /dev/null +++ b/src/Systems/FlagSystem.cpp @@ -0,0 +1,63 @@ +#include "PrecompiledHeader.h" +#include "FlagSystem.h" +#include "World.h" +void Systems::FlagSystem::RegisterComponents( ComponentFactory* cf ) +{ + cf->Register([]() { return new Components::Flag(); }); +} + +void Systems::FlagSystem::Initialize() +{ + EVENT_SUBSCRIBE_MEMBER(m_EEnterTrigger, &Systems::FlagSystem::OnEnterTrigger); +} + +void Systems::FlagSystem::Update( double dt ) +{ + +} + +void Systems::FlagSystem::UpdateEntity( double dt, EntityID entity, EntityID parent ) +{ + +} + +bool Systems::FlagSystem::OnEnterTrigger( const Events::EnterTrigger &event ) +{ + auto JeepSteeringComponent = m_World->GetComponent(event.Entity); + if(!JeepSteeringComponent) + return false; + + auto teamComponent = m_World->GetComponent(event.Trigger); + auto playerComponent = m_World->GetComponent(event.Entity); + + if(!teamComponent || !playerComponent) + return false; + if (teamComponent->TeamID == playerComponent->ID) + return false; + + + + auto flagComponent = m_World->GetComponent(event.Trigger); + if(!flagComponent) + return false; + + PickUpFlag(event.Entity, event.Trigger); + + return true; +} +void Systems::FlagSystem::PickUpFlag( EntityID entity, EntityID trigger ) +{ + m_World->RemoveComponent(trigger); + m_World->SetEntityParent(trigger, entity); + + auto triggerTransform = m_World->GetComponent(trigger); + triggerTransform->Position = glm::vec3(-1.5f, 0.1f, 2.f); + + auto teamComponent = m_World->GetComponent(trigger); + auto playerComponent = m_World->GetComponent(entity); + + Events::FlagPickup ePickup; + ePickup.Player = playerComponent->ID; + EventBroker->Publish(ePickup); +} + diff --git a/src/Systems/FlagSystem.h b/src/Systems/FlagSystem.h new file mode 100644 index 0000000..c5b720d --- /dev/null +++ b/src/Systems/FlagSystem.h @@ -0,0 +1,44 @@ +#ifndef FlagSystem_h__ +#define FlagSystem_h__ + + +#include "System.h" +#include "Components/Flag.h" +#include "Components/Player.h" +#include "Components/Team.h" +#include "Components/Trigger.h" +#include "Components/Transform.h" +#include "Components/JeepSteering.h" + +#include "Events/FlagCaptured.h" +#include "Events/FlagDropped.h" +#include "Events/FlagPickup.h" +#include "Events/FlagReturned.h" + + +#include "Events/EnterTrigger.h" + +namespace Systems +{ + class FlagSystem : public System + { + public: + + FlagSystem(World* world, std::shared_ptr<::EventBroker> eventBroker, std::shared_ptr<::ResourceManager> resourceManager) + : System(world, eventBroker, resourceManager) { } + + + void Initialize() override; + void RegisterComponents(ComponentFactory* cf) override; + void Update(double dt) override; + void UpdateEntity(double dt, EntityID entity, EntityID parent) override; + + private: + EventRelay m_EEnterTrigger; + bool OnEnterTrigger(const Events::EnterTrigger &event); + + void PickUpFlag(EntityID entity, EntityID trigger); + }; + +} +#endif // DamageSystem_h__ diff --git a/src/Systems/GameStateSystem.cpp b/src/Systems/GameStateSystem.cpp index ca17bd3..d0ed866 100644 --- a/src/Systems/GameStateSystem.cpp +++ b/src/Systems/GameStateSystem.cpp @@ -12,7 +12,7 @@ bool Systems::GameStateSystem::OnFlagCaptured(const Events::FlagCaptured &event) m_InGame = false; Events::GameOver e; - e.Winner = event.Player; + e.Player = event.Player; EventBroker->Publish(e); return true; diff --git a/src/Systems/GarageSystem.cpp b/src/Systems/GarageSystem.cpp index 9d805c5..cd10610 100644 --- a/src/Systems/GarageSystem.cpp +++ b/src/Systems/GarageSystem.cpp @@ -112,6 +112,27 @@ bool Systems::GarageSystem::OnCommand(const Events::InputCommand &event) if (triggerTeamComponent->TeamID == entityPlayerComponent->ID) { + + auto components = m_World->GetComponentsOfType(); + + for (auto &component : *components) + { + auto teamComponent = m_World->GetComponent(component->Entity); + if(!teamComponent) + continue; + + auto parent = m_World->GetEntityParent(component->Entity); + if(parent != entity) + continue; + + if(teamComponent->TeamID != entityPlayerComponent->ID) + { + Events::FlagCaptured e; + e.Player = entityPlayerComponent->ID; + EventBroker->Publish(e); + } + } + EntityID garage = m_World->GetEntityParent(trigger); auto garageComponent = m_World->GetComponent(garage); ToggleGarage(garageComponent); diff --git a/src/Systems/GarageSystem.h b/src/Systems/GarageSystem.h index af0f4cf..30074d1 100644 --- a/src/Systems/GarageSystem.h +++ b/src/Systems/GarageSystem.h @@ -19,6 +19,8 @@ #include "Components/Move.h" #include "Components/Rotate.h" #include "Components/Team.h" +#include "Components/Flag.h" +#include "Events/FlagCaptured.h" namespace Systems { diff --git a/src/Systems/JeepSteeringSystem.cpp b/src/Systems/JeepSteeringSystem.cpp index 0121a43..a6325ca 100644 --- a/src/Systems/JeepSteeringSystem.cpp +++ b/src/Systems/JeepSteeringSystem.cpp @@ -102,7 +102,6 @@ EntityID Systems::JeepSteeringSystem::CreateJeep(int playerID) { auto jeep = m_World->CreateEntity(); auto transform = m_World->AddComponent(jeep); - transform->Position = glm::vec3(0, 5, 0); //transform->Orientation = glm::angleAxis(0.f, glm::vec3(0, 1, 0)); auto physics = m_World->AddComponent(jeep); physics->Mass = 2000; diff --git a/src/Systems/PhysicsSystem.cpp b/src/Systems/PhysicsSystem.cpp index f7b34f0..eb691a4 100644 --- a/src/Systems/PhysicsSystem.cpp +++ b/src/Systems/PhysicsSystem.cpp @@ -39,6 +39,7 @@ void Systems::PhysicsSystem::Initialize() EVENT_SUBSCRIBE_MEMBER(m_EApplyPointImpulse, &Systems::PhysicsSystem::OnApplyPointImpulse); EVENT_SUBSCRIBE_MEMBER(m_EEnableCollisions, &Systems::PhysicsSystem::OnEnableCollisions); EVENT_SUBSCRIBE_MEMBER(m_EDisableCollisions, &Systems::PhysicsSystem::OnDisableCollisions); + EVENT_SUBSCRIBE_MEMBER(m_EDead, &Systems::PhysicsSystem::OnDead); hkMemorySystem::FrameInfo finfo(10000 * 1024); // Allocate 10MB of Physics solver buffer hkMemoryRouter* memoryRouter = hkMemoryInitUtil::initDefault(hkMallocAllocator::m_defaultMallocAllocator, finfo); @@ -797,27 +798,19 @@ void Systems::PhysicsSystem::OnComponentRemoved(EntityID entity, std::string typ void Systems::PhysicsSystem::OnEntityRemoved( EntityID entity ) { - if(m_RigidBodies.find(entity) != m_RigidBodies.end()) + /* + else if(m_RigidBodies.find(entity) != m_RigidBodies.end()) { - LOG_INFO("Removed rigid body of entity %i", entity); + LOG_INFO("Removed rigid body of entity %i abogfusdkifbhdzfsgiudfhghdfhgdhfögödhfgödhfödhfödfjhödgfdgföuhudgf", entity); + m_PhysicsWorld->markForWrite(); - m_RigidBodyEntities.erase(m_RigidBodies[entity]); - if(m_ListShapes.find(entity) != m_ListShapes.end()) - { - m_ListShapes[entity]->removeReference(); - m_ListShapes.erase(entity); - } - m_PhysicsWorld->removeEntity(m_RigidBodies[entity]); + m_PhysicsWorld->unmarkForWrite(); + m_RigidBodies.erase(entity); - m_PhysicsWorld->unmarkForWrite(); - } - if(m_Vehicles.find(entity) != m_Vehicles.end()) - { - m_PhysicsWorld->markForWrite(); - m_Vehicles[entity]->removeFromWorld(); - m_PhysicsWorld->unmarkForWrite(); - } + m_RigidBodyEntities.erase(m_RigidBodies[entity]); + + }*/ } bool Systems::PhysicsSystem::OnEnableCollisions( const Events::EnableCollisions &e ) @@ -900,3 +893,23 @@ bool Systems::PhysicsSystem::OnJeepSteer( const Events::JeepSteer &event ) return true; } + +bool Systems::PhysicsSystem::OnDead( const Events::Dead &e ) +{ + if(m_Vehicles.find(e.Entity) != m_Vehicles.end()) + { + EntityID camera = m_World->GetProperty(e.Entity, "Camera"); + m_World->RemoveComponent(camera); + auto transform = m_World->GetComponent(e.Entity); + transform->Position = glm::vec3(0, -10000.f, 0); + m_RigidBodies[e.Entity]->setPosition(hkVector4(0, -10000, 0)); + + /*m_Vehicles.erase(e.Entity); + m_RigidBodyEntities.erase(m_RigidBodies[e.Entity]); + m_RigidBodies.erase(e.Entity);*/ + + m_World->RemoveComponent(e.Entity); + + } + return true; +} diff --git a/src/Systems/PhysicsSystem.h b/src/Systems/PhysicsSystem.h index cdfac8a..ccaba19 100644 --- a/src/Systems/PhysicsSystem.h +++ b/src/Systems/PhysicsSystem.h @@ -86,9 +86,10 @@ #include "Events/DisableCollisions.h" #include "Components/Trigger.h" #include "Components/Template.h" - +#include "Components/Camera.h" #include "Events/EnterTrigger.h" #include "Events/JeepSteer.h" +#include "Events/Dead.h" namespace Systems { @@ -192,6 +193,9 @@ private: bool OnEnableCollisions(const Events::EnableCollisions &e); EventRelay m_EDisableCollisions; bool OnDisableCollisions(const Events::DisableCollisions &e); + EventRelay m_EDead; + bool OnDead(const Events::Dead &e); + void SetUpPhysicsState(EntityID entity, EntityID parent); void TearDownPhysicsState(EntityID entity, EntityID parent); diff --git a/src/Systems/TankSteeringSystem.cpp b/src/Systems/TankSteeringSystem.cpp index c9c1022..dbd7779 100644 --- a/src/Systems/TankSteeringSystem.cpp +++ b/src/Systems/TankSteeringSystem.cpp @@ -461,7 +461,7 @@ EntityID Systems::TankSteeringSystem::CreateTank(int playerID) auto tankSteering = m_World->AddComponent(tank); m_World->AddComponent(tank); auto health = m_World->AddComponent(tank); - health->Amount = 100.f; + health->Amount = 1.f; m_World->AddComponent(tank); { diff --git a/src/Systems/TriggerSystem.cpp b/src/Systems/TriggerSystem.cpp index b087354..ad73c3e 100644 --- a/src/Systems/TriggerSystem.cpp +++ b/src/Systems/TriggerSystem.cpp @@ -53,19 +53,7 @@ bool Systems::TriggerSystem::OnEnterTrigger( const Events::EnterTrigger &event ) if (teamComponent->TeamID != playerComponent->ID) return false; - auto flagComponent1 = m_World->GetComponent(event.Trigger); - auto flagComponent2 = m_World->GetComponent(event.Entity); - - //HACK: SIMON IS DISSING AMERICA - if(flagComponent1) - { - Flag(event.Entity, event.Trigger); - } - else if (flagComponent2) - { - Flag(event.Trigger, event.Entity); - } - + auto triggerMoveComponent = m_World->GetComponent(event.Trigger); if (triggerMoveComponent) @@ -148,20 +136,6 @@ void Systems::TriggerSystem::Move(EntityID entity, bool queue, bool swap) } } - -void Systems::TriggerSystem::Flag( EntityID entity, EntityID phantomEntity ) -{ - auto tankSteering = m_World->GetComponent(entity); - if (!tankSteering) - return; - - m_World->RemoveComponent(phantomEntity); - m_World->SetEntityParent(phantomEntity, entity); - auto phantomTransform = m_World->GetComponent(phantomEntity); - phantomTransform->Position = glm::vec3(-1.5f, 0.1f, 2.f); -} - - void Systems::TriggerSystem::Explosion( EntityID entity, EntityID phantomEntity ) { /*auto transformComponent = m_World->GetComponent(entity); diff --git a/src/Systems/TriggerSystem.h b/src/Systems/TriggerSystem.h index 8891c9e..4aec308 100644 --- a/src/Systems/TriggerSystem.h +++ b/src/Systems/TriggerSystem.h @@ -48,7 +48,6 @@ namespace Systems EventRelay m_ELeaveTrigger; bool OnLeaveTrigger(const Events::LeaveTrigger &event); private: - void Flag(EntityID entity, EntityID phantomEntity); void Explosion(EntityID entity, EntityID phantomEntity); void Move(EntityID entity, bool queue, bool swap); void Rotate(EntityID entity, bool queue, bool swap); diff --git a/src/Systems/WallSystem.h b/src/Systems/WallSystem.h index 6dbdea6..33decaa 100644 --- a/src/Systems/WallSystem.h +++ b/src/Systems/WallSystem.h @@ -4,7 +4,7 @@ #include "System.h" #include "Systems/TransformSystem.h" -#include "Events/OnDead.h" +#include "Events/Dead.h" #include "Events/Damage.h" #include "Events/ApplyPointImpulse.h" #include "Components/Model.h" diff --git a/src/World.cpp b/src/World.cpp index e5f9dfe..61f1f36 100755 --- a/src/World.cpp +++ b/src/World.cpp @@ -78,14 +78,16 @@ bool World::ValidEntity(EntityID entity) void World::RemoveEntity(EntityID entity) { - m_EntitiesToRemove.insert(entity); - for (auto pair : m_EntityParents) + auto it = m_EntityChildren.find(entity); + if (it != m_EntityChildren.end()) { - if (pair.second == entity) + for (auto entity : it->second) { - m_EntitiesToRemove.insert(pair.first); + m_EntitiesToRemove.insert(entity); } } + + m_EntitiesToRemove.insert(entity); } void World::ProcessEntityRemovals() diff --git a/vs11/Returngeance/Returngeance.vcxproj b/vs11/Returngeance/Returngeance.vcxproj index eddc0a6..f3f14ba 100755 --- a/vs11/Returngeance/Returngeance.vcxproj +++ b/vs11/Returngeance/Returngeance.vcxproj @@ -109,6 +109,7 @@ + @@ -214,7 +215,7 @@ - + @@ -251,6 +252,7 @@ + diff --git a/vs11/Returngeance/Returngeance.vcxproj.filters b/vs11/Returngeance/Returngeance.vcxproj.filters index 71d2baf..ba3e8ee 100755 --- a/vs11/Returngeance/Returngeance.vcxproj.filters +++ b/vs11/Returngeance/Returngeance.vcxproj.filters @@ -95,6 +95,9 @@ Game\Systems + + Game\Systems + @@ -585,7 +588,6 @@ Physics\Systems - GUI @@ -629,6 +631,10 @@ Rendering\Components + + Game\Systems + +