Vehicle spawning

This commit is contained in:
2014-06-03 00:51:21 +02:00
parent 46f377c94c
commit 4596fffb91
11 changed files with 461 additions and 313 deletions
+39 -1
View File
@@ -5,12 +5,14 @@
void Systems::GarageSystem::RegisterComponents( ComponentFactory* cf )
{
cf->Register<Components::Garage>([]() { return new Components::Garage(); });
cf->Register<Components::SpawnPoint>([]() { return new Components::SpawnPoint(); });
}
void Systems::GarageSystem::Initialize()
{
EVENT_SUBSCRIBE_MEMBER(m_EEnterTrigger, &Systems::GarageSystem::OnEnterTrigger);
EVENT_SUBSCRIBE_MEMBER(m_ELeaveTrigger, &Systems::GarageSystem::OnLeaveTrigger);
EVENT_SUBSCRIBE_MEMBER(m_ECommand, &Systems::GarageSystem::OnCommand);
}
void Systems::GarageSystem::Update(double dt)
@@ -34,11 +36,13 @@ bool Systems::GarageSystem::OnEnterTrigger(const Events::EnterTrigger &event)
std::string name = m_World->GetProperty<std::string>(event.Trigger, "Name");
if (name == "BoundsTrigger" || name == "ElevatorShaftTrigger")
if (name == "BoundsTrigger")
{
ToggleGarage(garageComponent);
}
m_EntitiesInTrigger[event.Trigger].insert(event.Entity);
return true;
}
@@ -59,6 +63,40 @@ bool Systems::GarageSystem::OnLeaveTrigger(const Events::LeaveTrigger &event)
ToggleGarage(garageComponent);
}
m_EntitiesInTrigger[event.Trigger].erase(event.Entity);
return true;
}
bool Systems::GarageSystem::OnCommand(const Events::InputCommand &event)
{
if (event.Command == "use" && event.Value > 0)
{
for (auto &pair : m_EntitiesInTrigger)
{
EntityID trigger = pair.first;
auto entities = pair.second;
std::string name = m_World->GetProperty<std::string>(trigger, "Name");
if (name != "ElevatorShaftTrigger")
continue;
auto triggerBaseParent = m_World->GetEntityBaseParent(trigger);
auto triggerPlayerComponent = m_World->GetComponent<Components::Player>(triggerBaseParent);
for (EntityID entity : entities)
{
auto entityPlayerComponent = m_World->GetComponent<Components::Player>(triggerBaseParent);
if (triggerPlayerComponent == entityPlayerComponent)
{
EntityID garage = m_World->GetEntityParent(trigger);
auto garageComponent = m_World->GetComponent<Components::Garage>(garage);
ToggleGarage(garageComponent);
}
}
}
}
return true;
}