From 8facd9dc9a3d44f6561a3627efcc1260d74e362e Mon Sep 17 00:00:00 2001 From: ViktorLjung Date: Thu, 24 Apr 2014 23:10:59 +0200 Subject: [PATCH] Rigidbody physics fixed. --- src/Components/Wheel.h | 7 ------ src/GameWorld.cpp | 43 +++++++++++++++++++---------------- src/Systems/PhysicsSystem.cpp | 23 +++++++++++-------- 3 files changed, 37 insertions(+), 36 deletions(-) diff --git a/src/Components/Wheel.h b/src/Components/Wheel.h index 5c005c7..d4917db 100644 --- a/src/Components/Wheel.h +++ b/src/Components/Wheel.h @@ -38,10 +38,3 @@ private: } #endif // Components_Wheel_h__ - -/* -m_currentSuspensionLength -m_suspension -m_steeringOrientationChassisSpace -m_spinAngle -*/ \ No newline at end of file diff --git a/src/GameWorld.cpp b/src/GameWorld.cpp index 06b965f..72ca4a6 100755 --- a/src/GameWorld.cpp +++ b/src/GameWorld.cpp @@ -6,18 +6,7 @@ void GameWorld::Initialize() World::Initialize(); - { - auto camera = CreateEntity(); - auto transform = AddComponent(camera, "Transform"); - transform->Position.z = 20.f; - transform->Position.y = 20.f; - transform->Orientation = glm::quat(glm::vec3(glm::pi() / 8.f, 0.f, 0.f)); - auto cameraComp = AddComponent(camera, "Camera"); - cameraComp->FarClip = 2000.f; - AddComponent(camera, "Input"); - auto freeSteering = AddComponent(camera, "FreeSteering"); - CommitEntity(camera); - } + { @@ -53,16 +42,30 @@ void GameWorld::Initialize() box->Height = 0.727f; box->Depth = 2.594f; auto vehicle = AddComponent(jeep, "Vehicle"); - vehicle->TopSpeed = 500.f; - vehicle->MaxTorque = 1000.f; + AddComponent(jeep, "Input"); + + { + auto camera = CreateEntity(); + auto transform = AddComponent(camera, "Transform"); + transform->Position.z = 20.f; + transform->Position.y = 10.f; + transform->Orientation = glm::quat(glm::vec3(-glm::pi() / 8.f, 0.f, 0.f)); + auto cameraComp = AddComponent(camera, "Camera"); + cameraComp->FarClip = 2000.f; + AddComponent(camera, "Input"); + auto freeSteering = AddComponent(camera, "FreeSteering"); + CommitEntity(camera); + } + { auto chassis = CreateEntity(jeep); auto transform = AddComponent(chassis, "Transform"); transform->Position = glm::vec3(0, -0.6577f, 0); auto model = AddComponent(chassis, "Model"); model->ModelFile = "Models/JeepV2/Chassi/chassi.OBJ"; + } { @@ -75,10 +78,10 @@ void GameWorld::Initialize() auto Wheel = AddComponent(wheel, "Wheel"); Wheel->Hardpoint = transform->Position + glm::vec3(0.f, 1.f, 0.f); Wheel->AxleID = 0; - Wheel->Mass = 10; + Wheel->Mass = 50; Wheel->Radius = 0.837f; Wheel->Steering = true; - Wheel->SuspensionStrength = 50.f; + Wheel->SuspensionStrength = 40.f; Wheel->Friction = 4.0f; Wheel->ConnectedToHandbrake = true; CommitEntity(wheel); @@ -95,10 +98,10 @@ void GameWorld::Initialize() auto Wheel = AddComponent(wheel, "Wheel"); Wheel->Hardpoint = transform->Position + glm::vec3(0.f, 1.f, 0.f); Wheel->AxleID = 0; - Wheel->Mass = 10; + Wheel->Mass = 50; Wheel->Radius = 0.837f; Wheel->Steering = true; - Wheel->SuspensionStrength = 50.f; + Wheel->SuspensionStrength = 40.f; Wheel->Friction = 4.0f; Wheel->ConnectedToHandbrake = true; CommitEntity(wheel); @@ -239,7 +242,7 @@ void GameWorld::Initialize() CommitEntity(cube); } - { + /*{ auto entity = CreateEntity(); AddComponent(entity, "Transform"); auto emitter = AddComponent(entity, "SoundEmitter"); @@ -247,7 +250,7 @@ void GameWorld::Initialize() emitter->Loop = true; GetSystem("SoundSystem")->PlaySound(emitter); CommitEntity(entity); - } + }*/ } void GameWorld::Update(double dt) diff --git a/src/Systems/PhysicsSystem.cpp b/src/Systems/PhysicsSystem.cpp index 9fc476d..702233d 100644 --- a/src/Systems/PhysicsSystem.cpp +++ b/src/Systems/PhysicsSystem.cpp @@ -126,17 +126,22 @@ void Systems::PhysicsSystem::UpdateEntity(double dt, EntityID entity, EntityID p transformComponent->Orientation = orientation * wheelComponent->OriginalOrientation; } } - else + else if(m_Vehicles.find(entity) != m_Vehicles.end()) { - if(m_Vehicles.find(entity) != m_Vehicles.end()) + hkVector4 position = m_RigidBodies[entity]->getPosition(); + transformComponent->Position = glm::vec3(position(0), position(1), position(2)); + hkQuaternion orientation = m_RigidBodies[entity]->getRotation(); + transformComponent->Orientation = glm::quat(orientation(3),orientation(0), orientation(1), orientation(2)); + + } + else if(m_RigidBodies.find(entity) != m_RigidBodies.end()) + { + if(m_RigidBodies[entity]->isActive()) { - if(m_RigidBodies[entity]->isActive()) - { - hkVector4 position = m_RigidBodies[entity]->getPosition(); - transformComponent->Position = glm::vec3(position(0), position(1), position(2)); - hkQuaternion orientation = m_RigidBodies[entity]->getRotation(); - transformComponent->Orientation = glm::quat(orientation(3),orientation(0), orientation(1), orientation(2)); - } + hkVector4 position = m_RigidBodies[entity]->getPosition(); + transformComponent->Position = glm::vec3(position(0), position(1), position(2)); + hkQuaternion orientation = m_RigidBodies[entity]->getRotation(); + transformComponent->Orientation = glm::quat(orientation(3),orientation(0), orientation(1), orientation(2)); } }