From f775864ed23e28fc9bf8e7cb1fd8f8caa828bc80 Mon Sep 17 00:00:00 2001 From: ViktorLjung Date: Tue, 27 May 2014 09:10:59 +0200 Subject: [PATCH] Fishy --- assets | 2 +- src/Components/Flag.h | 17 ++++++++++ src/GameWorld.cpp | 33 ++++++++++++++++++- src/GameWorld.h | 1 + src/Systems/PhysicsSystem.cpp | 19 +++++------ src/Systems/PhysicsSystem.h | 5 --- src/Systems/TriggerSystem.cpp | 32 ++++++++++++++++-- src/Systems/TriggerSystem.h | 3 ++ src/World.cpp | 8 +++++ src/World.h | 3 +- vs11/Returngeance/Returngeance.vcxproj | 1 + .../Returngeance/Returngeance.vcxproj.filters | 3 ++ 12 files changed, 106 insertions(+), 21 deletions(-) create mode 100644 src/Components/Flag.h diff --git a/assets b/assets index 72b93d5..bc811a1 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit 72b93d5750283864f244241e65a38436d05c5f96 +Subproject commit bc811a1b392782213d0823e418bc1d773e1a9641 diff --git a/src/Components/Flag.h b/src/Components/Flag.h new file mode 100644 index 0000000..eca2e24 --- /dev/null +++ b/src/Components/Flag.h @@ -0,0 +1,17 @@ +#ifndef Components_Flag_h__ +#define Components_Flag_h__ + +#include "Component.h" + +namespace Components +{ + + struct Flag : Component + { + + virtual Flag* Clone() const override { return new Flag(*this); } + }; + +} + +#endif // Components_TankShell_h__ diff --git a/src/GameWorld.cpp b/src/GameWorld.cpp index 3984e9e..e3bd7a3 100755 --- a/src/GameWorld.cpp +++ b/src/GameWorld.cpp @@ -114,7 +114,37 @@ void GameWorld::Initialize() CommitEntity(ground); } - + { + 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); + } /*{ auto jeep = CreateEntity(); @@ -1172,6 +1202,7 @@ 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(); }); } void GameWorld::RegisterSystems() diff --git a/src/GameWorld.h b/src/GameWorld.h index a5746d8..039792d 100755 --- a/src/GameWorld.h +++ b/src/GameWorld.h @@ -46,6 +46,7 @@ #include "Components/Player.h" #include "Components/Health.h" #include "Components/Trigger.h" +#include "Components/Flag.h" class GameWorld : public World { diff --git a/src/Systems/PhysicsSystem.cpp b/src/Systems/PhysicsSystem.cpp index 89d7693..fa23048 100644 --- a/src/Systems/PhysicsSystem.cpp +++ b/src/Systems/PhysicsSystem.cpp @@ -758,18 +758,17 @@ bool Systems::PhysicsSystem::OnApplyPointImpulse( const Events::ApplyPointImpuls void Systems::PhysicsSystem::OnComponentRemoved(EntityID entity, std::string type, Component* component) { - if(type == "Trigger") + + if(m_RigidBodies.find(entity) != m_RigidBodies.end()) { - if(m_RigidBodies.find(entity) != m_RigidBodies.end()) - { - LOG_INFO("Removed Trigger of entity %i", entity); - m_PhysicsWorld->markForWrite(); - m_RigidBodyEntities.erase(m_RigidBodies[entity]); - m_PhysicsWorld->removeEntity(m_RigidBodies[entity]); - m_RigidBodies.erase(entity); - m_PhysicsWorld->unmarkForWrite(); - } + LOG_INFO("Removed Trigger of entity %i", entity); + m_PhysicsWorld->markForWrite(); + m_RigidBodyEntities.erase(m_RigidBodies[entity]); + m_PhysicsWorld->removeEntity(m_RigidBodies[entity]); + m_RigidBodies.erase(entity); + m_PhysicsWorld->unmarkForWrite(); } + } diff --git a/src/Systems/PhysicsSystem.h b/src/Systems/PhysicsSystem.h index 1aae3ec..b8138f4 100644 --- a/src/Systems/PhysicsSystem.h +++ b/src/Systems/PhysicsSystem.h @@ -130,11 +130,6 @@ public: if(m_PhysicsSystem->m_World->ValidEntity(entity1) && m_PhysicsSystem->m_World->ValidEntity(entity2)) { - auto trigger = m_PhysicsSystem->m_World->GetComponent(entity1); - if(trigger->TriggerOnce) - { - m_PhysicsSystem->m_World->RemoveComponent(entity1); - } Events::EnterTrigger e; e.Entity1 = entity1; e.Entity2 = entity2; diff --git a/src/Systems/TriggerSystem.cpp b/src/Systems/TriggerSystem.cpp index 9a4d548..41ea333 100644 --- a/src/Systems/TriggerSystem.cpp +++ b/src/Systems/TriggerSystem.cpp @@ -45,7 +45,7 @@ void Systems::TriggerSystem::OnEntityRemoved( EntityID entity ) bool Systems::TriggerSystem::OnEnterTrigger( const Events::EnterTrigger &event ) { - auto explosionComponent1 = m_World->GetComponent(event.Entity1); + /*auto explosionComponent1 = m_World->GetComponent(event.Entity1); auto explosionComponent2 = m_World->GetComponent(event.Entity2); if(explosionComponent1) @@ -55,14 +55,40 @@ bool Systems::TriggerSystem::OnEnterTrigger( const Events::EnterTrigger &event ) else if (explosionComponent2) { Explosion(event.Entity1, event.Entity2); + }*/ + + auto flagComponent1 = m_World->GetComponent(event.Entity1); + auto flagComponent2 = m_World->GetComponent(event.Entity2); + + if(flagComponent1) + { + Flag(event.Entity2, event.Entity1); + } + else if (flagComponent2) + { + Flag(event.Entity1, event.Entity2); } return true; } + +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.f, 0.1f, 2.f); +} + + void Systems::TriggerSystem::Explosion( EntityID entity, EntityID phantomEntity ) { - auto transformComponent = m_World->GetComponent(entity); + /*auto transformComponent = m_World->GetComponent(entity); auto PhantomTransformComponent = m_World->GetComponent(phantomEntity); auto explosionComponent = m_World->GetComponent(phantomEntity); @@ -82,7 +108,7 @@ void Systems::TriggerSystem::Explosion( EntityID entity, EntityID phantomEntity EventBroker->Publish(e); m_World->RemoveEntity(phantomEntity); - } + }*/ } diff --git a/src/Systems/TriggerSystem.h b/src/Systems/TriggerSystem.h index d073433..0d248c6 100644 --- a/src/Systems/TriggerSystem.h +++ b/src/Systems/TriggerSystem.h @@ -4,6 +4,7 @@ #include "System.h" #include "Components/Transform.h" +#include "Components/TankSteering.h" #include "Events/SetVelocity.h" #include "Events/ApplyForce.h" #include "Events/ApplyPointImpulse.h" @@ -13,6 +14,7 @@ #include "Components/Trigger.h" #include "Components/TriggerExplosion.h" #include "Events/EnterTrigger.h" +#include "Components/Flag.h" #include namespace Systems { @@ -35,6 +37,7 @@ namespace Systems EventRelay m_EEnterTrigger; bool OnEnterTrigger(const Events::EnterTrigger &event); private: + void Flag(EntityID entity, EntityID phantomEntity); void Explosion(EntityID entity, EntityID phantomEntity); }; diff --git a/src/World.cpp b/src/World.cpp index 309f36d..275e750 100755 --- a/src/World.cpp +++ b/src/World.cpp @@ -204,3 +204,11 @@ std::list World::GetEntityChildren(EntityID entity) return it->second; } } + +void World::SetEntityParent(EntityID entity, EntityID newParent) +{ + EntityID currentParent = m_EntityParents[entity]; + m_EntityChildren[currentParent].remove(entity); + m_EntityParents[entity] = newParent; + m_EntityChildren[newParent].push_back(entity); +} diff --git a/src/World.h b/src/World.h index 7c085b4..475a465 100755 --- a/src/World.h +++ b/src/World.h @@ -44,7 +44,6 @@ public: EntityID CreateEntity(EntityID parent = 0); EntityID CloneEntity(EntityID entity, EntityID parent = 0); - void RemoveEntity(EntityID entity); bool ValidEntity(EntityID entity); @@ -53,6 +52,8 @@ public: EntityID GetEntityBaseParent(EntityID entity); std::list GetEntityChildren(EntityID entity); + void SetEntityParent(EntityID entity, EntityID newParent); + template T GetProperty(EntityID entity, std::string property) { diff --git a/vs11/Returngeance/Returngeance.vcxproj b/vs11/Returngeance/Returngeance.vcxproj index 2026fd0..7cb70e9 100755 --- a/vs11/Returngeance/Returngeance.vcxproj +++ b/vs11/Returngeance/Returngeance.vcxproj @@ -133,6 +133,7 @@ + diff --git a/vs11/Returngeance/Returngeance.vcxproj.filters b/vs11/Returngeance/Returngeance.vcxproj.filters index 0448d88..e8db376 100755 --- a/vs11/Returngeance/Returngeance.vcxproj.filters +++ b/vs11/Returngeance/Returngeance.vcxproj.filters @@ -451,6 +451,9 @@ Gameplay\Events + + Gameplay\Components +