Gate working

This commit is contained in:
ViktorLjung
2014-05-29 21:25:30 +02:00
parent b8ec7e1dbd
commit a1149394bb
13 changed files with 289 additions and 21 deletions
+55
View File
@@ -13,6 +13,58 @@
// transform->Position = parentTransform->Position + transform->RelativePosition;
//}
void Systems::TransformSystem::Initialize()
{
EVENT_SUBSCRIBE_MEMBER(m_EMove, &Systems::TransformSystem::OnMove);
}
void Systems::TransformSystem::UpdateEntity( double dt, EntityID entity, EntityID parent )
{
if(m_MoveItems.find(entity) != m_MoveItems.end())
{
auto transform = m_World->GetComponent<Components::Transform>(entity);
glm::vec3 move = m_MoveItems[entity].GoalPosition - transform->Position;
move *= m_MoveItems[entity].Time;
m_MoveItems[entity].Time -= dt;
if(m_MoveItems[entity].Time <= 0)
{
float movetime = dt + m_MoveItems[entity].Time;
transform->Position += move * movetime;
m_MoveItems.erase(entity);
if(m_QueuedMoveItems.find(entity) != m_QueuedMoveItems.end())
{
auto it = m_QueuedMoveItems.find(entity);
m_MoveItems[entity] = it->second;
m_QueuedMoveItems.erase(it->first);
}
}
else
{
transform->Position += move * (float)dt;
}
}
}
bool Systems::TransformSystem::OnMove( const Events::Move &event )
{
MoveItems item;
item.Entity = event.Entity;
item.GoalPosition = event.GoalPosition;
item.Time = event.Time;
m_MoveItems[event.Entity] = item;
if(event.Queue)
{
m_QueuedMoveItems.insert(std::make_pair(event.Entity, item));
}
return true;
}
glm::vec3 Systems::TransformSystem::AbsolutePosition(EntityID entity)
{
glm::vec3 absPosition;
@@ -91,3 +143,6 @@ Components::Transform Systems::TransformSystem::AbsoluteTransform(EntityID entit
return transform;
}