diff --git a/assets b/assets index 75977fd..588da9c 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit 75977fd865557478a72053a93f08f10851838730 +Subproject commit 588da9ca0d0e6a3dd08f4373e03468f79082b359 diff --git a/src/GameWorld.cpp b/src/GameWorld.cpp index 6fe9f89..ed130c7 100755 --- a/src/GameWorld.cpp +++ b/src/GameWorld.cpp @@ -91,7 +91,7 @@ void GameWorld::Initialize() EventBroker->Publish(e); } - //CreateTerrain(); + CreateTerrain(); #pragma region Wall_Debris_Template @@ -301,8 +301,7 @@ void GameWorld::Initialize() EventBroker->Publish(e); }*/ - CreateGarage(glm::vec3(323.2f, 41.4f, -10.2f), glm::quat(), 1); // glm::vec3(0, glm::pi()/2.f, 0) - CreateGarage(glm::vec3(-323.2f, 41.4f, -10.2f), glm::quat(), 2); // glm::vec3(0, -glm::pi()/2.f, 0) + { auto flag = CreateEntity(); @@ -866,7 +865,7 @@ EntityID GameWorld::CreateGarage(glm::vec3 position, glm::quat orientation, int physics->CollisionLayer = (int)Components::Physics::CollisionLayer::STATIC; auto rotate = AddComponent(rightHatch); rotate->StartRotation = transform->Orientation; - rotate->GoalRotation = transform->Orientation * glm::angleAxis(glm::radians(110.f), glm::vec3(0, 0, 1)); + rotate->GoalRotation = transform->Orientation * glm::angleAxis(glm::radians(110.f), glm::vec3(0, 0, 1)); rotate->Time = 5.f; { auto shape = CreateEntity(rightHatch); @@ -1048,7 +1047,7 @@ void GameWorld::CreateTerrain() } CreateBase(glm::quat()); - CreateBase(glm::quat(glm::vec3(0, glm::pi()/2.f, 0))); + CreateBase(glm::quat(glm::vec3(0, glm::pi(), 0))); { auto tree = CreateEntity(); @@ -1219,4 +1218,6 @@ void GameWorld::CreateBase(glm::quat orientation) CommitEntity(groundshape); CommitEntity(road_small); } + + CreateGarage(glm::vec3(323.2f, 41.4f, -10.2f), glm::quat(glm::vec3(0, glm::pi(), 0)), 1); // glm::vec3(0, glm::pi()/2.f, 0) } \ No newline at end of file diff --git a/src/Systems/PhysicsSystem.cpp b/src/Systems/PhysicsSystem.cpp index 465e498..1e8e2dd 100644 --- a/src/Systems/PhysicsSystem.cpp +++ b/src/Systems/PhysicsSystem.cpp @@ -180,6 +180,12 @@ void Systems::PhysicsSystem::Update(double dt) rotation = GLMQUAT_TO_HKQUATERNION(transformComponent->Orientation); velocity = GLMVEC3_TO_HKVECTOR4(transformComponent->Velocity); } + + /*auto absoluteTransform = m_World->GetSystem()->AbsoluteTransform(entity); + position = GLMVEC3_TO_HKVECTOR4(absoluteTransform.Position); + rotation = GLMQUAT_TO_HKQUATERNION(absoluteTransform.Orientation); + velocity = GLMVEC3_TO_HKVECTOR4(absoluteTransform.Velocity);*/ + m_PhysicsWorld->markForWrite(); m_RigidBodies[entity]->setPositionAndRotation(position, rotation); @@ -268,17 +274,33 @@ void Systems::PhysicsSystem::UpdateEntity(double dt, EntityID entity, EntityID p else if(m_RigidBodies.find(entity) != m_RigidBodies.end()) { auto transformComponentParent = m_World->GetComponent(parent); + + /* if(transformComponentParent) + { + auto absoluteTransformParent = m_World->GetSystem()->AbsoluteTransform(parent); + transformComponent->Position = HKVECTOR4_TO_GLMVEC3(m_RigidBodies[entity]->getPosition()); + transformComponent->Orientation = glm::inverse(HKQUATERNION_TO_GLMQUAT(m_RigidBodies[entity]->getRotation())) * absoluteTransformParent.Orientation; + transformComponent->Velocity = HKVECTOR4_TO_GLMVEC3(m_RigidBodies[entity]->getLinearVelocity()); + } + else + { + auto transformComponentParent = m_World->GetComponent(parent); + transformComponent->Position = HKVECTOR4_TO_GLMVEC3(m_RigidBodies[entity]->getPosition()); + transformComponent->Orientation = HKQUATERNION_TO_GLMQUAT(m_RigidBodies[entity]->getRotation()); + transformComponent->Velocity = HKVECTOR4_TO_GLMVEC3(m_RigidBodies[entity]->getLinearVelocity()); + }*/ + transformComponent->Position = HKVECTOR4_TO_GLMVEC3(m_RigidBodies[entity]->getPosition()); transformComponent->Orientation = HKQUATERNION_TO_GLMQUAT(m_RigidBodies[entity]->getRotation()); transformComponent->Velocity = HKVECTOR4_TO_GLMVEC3(m_RigidBodies[entity]->getLinearVelocity()); - // TODO: No support for Scale, MIGHT be possible // HACK: WTF IS THIS? if (transformComponentParent) { - transformComponent->Position -= transformComponentParent->Position; - transformComponent->Position = transformComponent->Position * transformComponentParent->Orientation; - transformComponent->Orientation = transformComponent->Orientation * glm::inverse(transformComponentParent->Orientation); + auto absoluteTransformParent = m_World->GetSystem()->AbsoluteTransform(parent); + transformComponent->Position -= absoluteTransformParent.Position; + transformComponent->Position = transformComponent->Position * absoluteTransformParent.Orientation; + transformComponent->Orientation = absoluteTransformParent.Orientation * glm::inverse(transformComponent->Orientation); } } diff --git a/src/Systems/TransformSystem.cpp b/src/Systems/TransformSystem.cpp index 5823d12..7265b7a 100755 --- a/src/Systems/TransformSystem.cpp +++ b/src/Systems/TransformSystem.cpp @@ -24,7 +24,7 @@ void Systems::TransformSystem::UpdateEntity( double dt, EntityID entity, EntityI if(m_MoveItems.find(entity) != m_MoveItems.end()) { auto transform = m_World->GetComponent(entity); - + glm::vec3 direction = glm::normalize(m_MoveItems[entity].GoalPosition - transform->Position); glm::vec3 movement = direction * m_MoveItems[entity].Speed * (float)dt; @@ -54,6 +54,7 @@ void Systems::TransformSystem::UpdateEntity( double dt, EntityID entity, EntityI if(m_RotationItems.find(entity) != m_RotationItems.end()) { auto transform = m_World->GetComponent(entity); + auto absolutetransform = AbsoluteTransform(entity); float percentage = dt/m_RotationItems[entity].Time; m_RotationItems[entity].Time -= dt;