Lifebuoy working

This commit is contained in:
viktorljung
2015-10-08 17:22:19 +02:00
parent f147778d4d
commit b93013fcd8
14 changed files with 2589 additions and 31 deletions
+29 -6
View File
@@ -21,16 +21,16 @@ void dd::Systems::LifebuoySystem::Initialize()
ctransform->Position = glm::vec3(50.f, -4.8f, -10.f);
auto rectangleShape = m_World->AddComponent<Components::RectangleShape>(ent);
auto lifebuoyTemplate = m_World->AddComponent<Components::Template>(ent);
rectangleShape->Dimensions = glm::vec2(1.f, 0.1f);
rectangleShape->Dimensions = glm::vec2(0.9f, 0.19f);
auto physics = m_World->AddComponent<Components::Physics>(ent);
physics->CollisionType = CollisionType::Type::Static;
physics->Category = CollisionLayer::Type::Other;
physics->Mask = static_cast<CollisionLayer::Type>(CollisionLayer::Ball | CollisionLayer::Pad | CollisionLayer::Wall | CollisionLayer::Water);
physics->Density = 0.001;
physics->Category = CollisionLayer::LifeBuoy;
physics->Mask = static_cast<CollisionLayer::Type>(CollisionLayer::Ball | CollisionLayer::Brick | CollisionLayer::LifeBuoy | CollisionLayer::Pad | CollisionLayer::Water);
physics->Density = 1.0f;
physics->GravityScale = 1;
ctransform->Sticky = true;
auto cModel = m_World->AddComponent<Components::Model>(ent);
cModel->ModelFile = "Models/Ship/Ship.obj";
cModel->ModelFile = "Models/Lifebuoy/Lifebuoy.obj";
auto lifebuoy = m_World->AddComponent<Components::Lifebuoy>(ent);
m_World->CommitEntity(ent);
@@ -43,7 +43,24 @@ void dd::Systems::LifebuoySystem::Initialize()
void dd::Systems::LifebuoySystem::Update(double dt)
{
for (auto it = m_LifeBuoys.begin(); it != m_LifeBuoys.end();) {
it->TimeToLive -= dt;
if (it->TimeToLive < 0.f) {
m_World->RemoveEntity(it->Entity);
m_LifeBuoys.erase(it++);
}
else {
auto transformComponent = m_World->GetComponent<Components::Transform>(it->Entity);
if (transformComponent->Position.x > m_RightEdge) {
transformComponent->Position = glm::vec3(m_LeftEdge + 0.1f, transformComponent->Position.y, transformComponent->Position.z);
}
else if (transformComponent->Position.x < m_LeftEdge) {
transformComponent->Position = glm::vec3(m_RightEdge - 0.1f, transformComponent->Position.y, transformComponent->Position.z);
}
++it;
}
}
}
void dd::Systems::LifebuoySystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
@@ -79,10 +96,16 @@ bool dd::Systems::LifebuoySystem::OnContact(const dd::Events::Contact &event)
bool dd::Systems::LifebuoySystem::OnLifebuoy(const dd::Events::Lifebuoy &event)
{
auto ent = m_World->CloneEntity(m_Template);
m_World->SetProperty(ent, "Name", "Lifebuoy");
m_World->RemoveComponent<Components::Template>(ent);
auto transform = m_World->GetComponent<Components::Transform>(ent);
auto physics = m_World->GetComponent<Components::Physics>(ent);
physics->CollisionType = CollisionType::Type::Dynamic;
transform->Position = glm::vec3(event.Transform->Position.x, transform->Position.y, -10.f);
transform->Position = glm::vec3(event.Transform->Position.x, transform->Position.y + 2.f, -10.f);
transform->Velocity = glm::vec3(20.f, 3.f, 0.f);
LifeBuoyInfo info;
info.Entity = ent;
m_LifeBuoys.push_back(info);
return true;
}