This commit is contained in:
ViktorLjung
2014-05-27 09:10:59 +02:00
parent c37df5c178
commit f775864ed2
12 changed files with 106 additions and 21 deletions
+1 -1
Submodule assets updated: 72b93d5750...bc811a1b39
+17
View File
@@ -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__
+32 -1
View File
@@ -114,7 +114,37 @@ void GameWorld::Initialize()
CommitEntity(ground);
}
{
auto flag = CreateEntity();
auto transform = AddComponent<Components::Transform>(flag);
transform->Position = glm::vec3(0, -50, 100);
auto model = AddComponent<Components::Model>(flag);
model->ModelFile = "Models/Flag/FishingRod/FishingRod.obj";
{
auto fish = CreateEntity(flag);
auto transform = AddComponent<Components::Transform>(fish);
transform->Position = glm::vec3(-1.3f, 1.0, 0);
auto model = AddComponent<Components::Model>(fish);
model->ModelFile = "Models/Flag/LeFish/Salmon.obj";
CommitEntity(fish);
}
auto trigger = AddComponent<Components::Trigger>(flag);
{
auto shape = CreateEntity(flag);
auto transform = AddComponent<Components::Transform>(shape);
transform->Position = glm::vec3(-0.9f, 0.9f, 0);
auto box = AddComponent<Components::BoxShape>(shape);
box->Width = 1.1f;
box->Depth = 0.7f;
box->Height = 3.9f;
CommitEntity(shape);
}
auto flagComponent = AddComponent<Components::Flag>(flag);
CommitEntity(flag);
}
/*{
auto jeep = CreateEntity();
@@ -1172,6 +1202,7 @@ void GameWorld::RegisterComponents()
m_ComponentFactory.Register<Components::Transform>([]() { return new Components::Transform(); });
m_ComponentFactory.Register<Components::Template>([]() { return new Components::Template(); });
m_ComponentFactory.Register<Components::Player>([]() { return new Components::Player(); });
m_ComponentFactory.Register<Components::Flag>([]() { return new Components::Flag(); });
}
void GameWorld::RegisterSystems()
+1
View File
@@ -46,6 +46,7 @@
#include "Components/Player.h"
#include "Components/Health.h"
#include "Components/Trigger.h"
#include "Components/Flag.h"
class GameWorld : public World
{
+9 -10
View File
@@ -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();
}
}
-5
View File
@@ -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<Components::Trigger>(entity1);
if(trigger->TriggerOnce)
{
m_PhysicsSystem->m_World->RemoveComponent<Components::Trigger>(entity1);
}
Events::EnterTrigger e;
e.Entity1 = entity1;
e.Entity2 = entity2;
+29 -3
View File
@@ -45,7 +45,7 @@ void Systems::TriggerSystem::OnEntityRemoved( EntityID entity )
bool Systems::TriggerSystem::OnEnterTrigger( const Events::EnterTrigger &event )
{
auto explosionComponent1 = m_World->GetComponent<Components::TriggerExplosion>(event.Entity1);
/*auto explosionComponent1 = m_World->GetComponent<Components::TriggerExplosion>(event.Entity1);
auto explosionComponent2 = m_World->GetComponent<Components::TriggerExplosion>(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<Components::Flag>(event.Entity1);
auto flagComponent2 = m_World->GetComponent<Components::Flag>(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<Components::TankSteering>(entity);
if (!tankSteering)
return;
m_World->RemoveComponent<Components::Trigger>(phantomEntity);
m_World->SetEntityParent(phantomEntity, entity);
auto phantomTransform = m_World->GetComponent<Components::Transform>(phantomEntity);
phantomTransform->Position = glm::vec3(1.f, 0.1f, 2.f);
}
void Systems::TriggerSystem::Explosion( EntityID entity, EntityID phantomEntity )
{
auto transformComponent = m_World->GetComponent<Components::Transform>(entity);
/*auto transformComponent = m_World->GetComponent<Components::Transform>(entity);
auto PhantomTransformComponent = m_World->GetComponent<Components::Transform>(phantomEntity);
auto explosionComponent = m_World->GetComponent<Components::TriggerExplosion>(phantomEntity);
@@ -82,7 +108,7 @@ void Systems::TriggerSystem::Explosion( EntityID entity, EntityID phantomEntity
EventBroker->Publish(e);
m_World->RemoveEntity(phantomEntity);
}
}*/
}
+3
View File
@@ -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 <math.h>
namespace Systems
{
@@ -35,6 +37,7 @@ namespace Systems
EventRelay<TriggerSystem, Events::EnterTrigger> m_EEnterTrigger;
bool OnEnterTrigger(const Events::EnterTrigger &event);
private:
void Flag(EntityID entity, EntityID phantomEntity);
void Explosion(EntityID entity, EntityID phantomEntity);
};
+8
View File
@@ -204,3 +204,11 @@ std::list<EntityID> 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);
}
+2 -1
View File
@@ -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<EntityID> GetEntityChildren(EntityID entity);
void SetEntityParent(EntityID entity, EntityID newParent);
template <class T>
T GetProperty(EntityID entity, std::string property)
{
+1
View File
@@ -133,6 +133,7 @@
<ClInclude Include="..\..\src\Components\BoxShape.h" />
<ClInclude Include="..\..\src\Components\Camera.h" />
<ClInclude Include="..\..\src\Components\DirectionalLight.h" />
<ClInclude Include="..\..\src\Components\Flag.h" />
<ClInclude Include="..\..\src\Components\FrameTimer.h" />
<ClInclude Include="..\..\src\Components\Timer.h" />
<ClInclude Include="..\..\src\Components\TriggerExplosion.h" />
@@ -451,6 +451,9 @@
<ClInclude Include="..\..\src\Events\Damage.h">
<Filter>Gameplay\Events</Filter>
</ClInclude>
<ClInclude Include="..\..\src\Components\Flag.h">
<Filter>Gameplay\Components</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\..\src\Shaders\Fragment2.glsl">