diff --git a/src/GameWorld.cpp b/src/GameWorld.cpp index 3388729..fc83950 100755 --- a/src/GameWorld.cpp +++ b/src/GameWorld.cpp @@ -20,11 +20,11 @@ void GameWorld::Initialize() //transform->Scale = glm::vec3(400.0f, 10.0f, 400.0f); transform->Orientation = glm::quat(glm::vec3(0.0f, 0.0f, 0.0f)); auto model = AddComponent(ground, "Model"); - model->ModelFile = "Models/TestScene/testScene.obj"; - //model->ModelFile = "Models/Placeholders/Terrain/Terrain.obj"; + //model->ModelFile = "Models/TestScene/testScene.obj"; + model->ModelFile = "Models/Placeholders/Terrain/Terrain.obj"; auto meshShape = AddComponent(ground, "MeshShape"); - //meshShape->ResourceName = "Models/Placeholders/Terrain/Terrain.obj"; - meshShape->ResourceName = "Models/TestScene/testScene.obj"; + meshShape->ResourceName = "Models/Placeholders/Terrain/Terrain.obj"; + //meshShape->ResourceName = "Models/TestScene/testScene.obj"; auto physics = AddComponent(ground, "Physics"); physics->Mass = 10; @@ -49,7 +49,7 @@ void GameWorld::Initialize() { auto jeep = CreateEntity(); auto transform = AddComponent(jeep, "Transform"); - transform->Position = glm::vec3(0, 10, 0); + transform->Position = glm::vec3(0, 15, 0); auto physics = AddComponent(jeep, "Physics"); physics->Mass = 800; @@ -61,7 +61,7 @@ void GameWorld::Initialize() // box->Depth = 2.594f; auto meshShape = AddComponent(jeep, "MeshShape"); - meshShape->ResourceName = "Models/JeepV2/Chassi/chassi.OBJ"; + meshShape->ResourceName = "Models/JeepV2/Chassi/ChassiCollision.obj"; auto vehicle = AddComponent(jeep, "Vehicle"); @@ -72,7 +72,7 @@ void GameWorld::Initialize() auto transform = AddComponent(chassis, "Transform"); transform->Position = glm::vec3(0, 0, 0); // 0.6577f auto model = AddComponent(chassis, "Model"); - model->ModelFile = "Models/JeepV2/Chassi/chassi.OBJ"; + model->ModelFile = "Models/JeepV2/Chassi/ChassiCollision.obj"; } { @@ -91,7 +91,7 @@ void GameWorld::Initialize() //Create wheels float wheelOffset = 0.4f; float springLength = 0.3f; - float suspensionStrength = 20.f; + float suspensionStrength = 35.f; { auto wheel = CreateEntity(jeep); auto transform = AddComponent(wheel, "Transform"); @@ -194,7 +194,7 @@ void GameWorld::Initialize() CommitEntity(entity); }*/ - for(int i = 0; i < 0; i++) + for(int i = 0; i < 5; i++) { auto wall = CreateEntity(); auto transform = AddComponent(wall, "Transform"); diff --git a/src/Systems/PhysicsSystem.cpp b/src/Systems/PhysicsSystem.cpp index b1d93cd..d59e09d 100644 --- a/src/Systems/PhysicsSystem.cpp +++ b/src/Systems/PhysicsSystem.cpp @@ -120,6 +120,7 @@ void Systems::PhysicsSystem::Update(double dt) for (auto pair : *m_World->GetEntities()) { EntityID entity = pair.first; + EntityID parent = pair.second; if (m_RigidBodies.find(entity) == m_RigidBodies.end()) continue; @@ -128,22 +129,35 @@ void Systems::PhysicsSystem::Update(double dt) if (!transformComponent) continue; - - /*if(m_RigidBodies[entity]->isActive()) + if(m_RigidBodies[entity]->isActive()) { + + hkVector4 position; + hkQuaternion rotation; + + if (parent) + { + auto absoluteTransform = m_World->GetSystem("TransformSystem")->AbsoluteTransform(entity); + position = hkVector4(absoluteTransform.Position.x, absoluteTransform.Position.y, absoluteTransform.Position.z); + rotation = hkQuaternion(absoluteTransform.Orientation.x, absoluteTransform.Orientation.y, absoluteTransform.Orientation.z, absoluteTransform.Orientation.w); + } + else + { + position = hkVector4(transformComponent->Position.x, transformComponent->Position.y, transformComponent->Position.z); + rotation = hkQuaternion(transformComponent->Orientation.x, transformComponent->Orientation.y, transformComponent->Orientation.z, transformComponent->Orientation.w); + } m_PhysicsWorld->markForWrite(); - hkVector4 position(transformComponent->Position.x, transformComponent->Position.y, transformComponent->Position.z); - hkQuaternion rotation(transformComponent->Orientation.x, transformComponent->Orientation.y, transformComponent->Orientation.z, transformComponent->Orientation.w); m_RigidBodies[entity]->setPositionAndRotation(position, rotation); m_PhysicsWorld->unmarkForWrite(); - }*/ + + } } - static const double timestep = 1 / 30.0; + static const double timestep = 1 / 60.0; m_Accumulator += dt; while (m_Accumulator >= timestep) { @@ -222,7 +236,7 @@ void Systems::PhysicsSystem::UpdateEntity(double dt, EntityID entity, EntityID p if(inputComponent->KeyState[GLFW_KEY_UP] != 0 || inputComponent->KeyState[GLFW_KEY_DOWN] != 0) { - deviceStatus->m_positionY += inputComponent->KeyState[GLFW_KEY_UP] * -1 * 0.1f + inputComponent->KeyState[GLFW_KEY_DOWN] * 1 * 0.1f; + deviceStatus->m_positionY += inputComponent->KeyState[GLFW_KEY_UP] * -1 * 1.f * dt + inputComponent->KeyState[GLFW_KEY_DOWN] * 1 * 1.f * dt; } else { @@ -234,24 +248,24 @@ void Systems::PhysicsSystem::UpdateEntity(double dt, EntityID entity, EntityID p else if(deviceStatus->m_positionY < -1) deviceStatus->m_positionY = -1; - float turningSpeed = 0.02f; + float turningSpeed = 3.f; if(inputComponent->KeyState[GLFW_KEY_LEFT] != 0 || inputComponent->KeyState[GLFW_KEY_RIGHT] != 0) { - deviceStatus->m_positionX += inputComponent->KeyState[GLFW_KEY_LEFT] * -1 * turningSpeed + inputComponent->KeyState[GLFW_KEY_RIGHT] * 1 * turningSpeed; + deviceStatus->m_positionX += inputComponent->KeyState[GLFW_KEY_LEFT] * -1 * turningSpeed * dt + inputComponent->KeyState[GLFW_KEY_RIGHT] * 1 * turningSpeed * dt; } else { if(deviceStatus->m_positionX > 0) { - deviceStatus->m_positionX += -1 * turningSpeed; + deviceStatus->m_positionX += -1 * (turningSpeed*2) *dt; } else if(deviceStatus->m_positionX < 0) { - deviceStatus->m_positionX += 1 * turningSpeed; + deviceStatus->m_positionX += 1 * (turningSpeed*2) * dt; } - if (deviceStatus->m_positionX > -turningSpeed && deviceStatus->m_positionX < turningSpeed) + if (deviceStatus->m_positionX > -0.1 && deviceStatus->m_positionX < 0.1) { deviceStatus->m_positionX = 0.f; } @@ -265,9 +279,9 @@ void Systems::PhysicsSystem::UpdateEntity(double dt, EntityID entity, EntityID p deviceStatus->m_handbrakeButtonPressed = inputComponent->KeyState[GLFW_KEY_RIGHT_CONTROL]; - if(inputComponent->KeyState[GLFW_KEY_R]) + if(inputComponent->KeyState[GLFW_KEY_R] && !inputComponent->LastKeyState[GLFW_KEY_R]) { - transformComponent->Position = glm::vec3(0, 10, 0); + transformComponent->Position = transformComponent->Position + glm::vec3(0, 5, 0); transformComponent->Orientation = glm::quat(glm::vec3(0.0f, 0.0f, 0.0f)); m_RigidBodies[entity]->setLinearVelocity(hkVector4(0, 0, 0)); m_RigidBodies[entity]->setAngularVelocity(hkVector4(0, 0, 0)); @@ -389,9 +403,18 @@ void Systems::PhysicsSystem::OnEntityCommit( EntityID entity ) } hkpInertiaTensorComputer::computeShapeVolumeMassProperties(mesh, physicsComponent->Mass, massProperties); rigidBodyInfo.m_shape = mesh; - m_hkpExtendedMeshShapes[entity].ExtendedMeshShape = mesh; - m_hkpExtendedMeshShapes[entity].VertexIndices = vertexIndices; - m_hkpExtendedMeshShapes[entity].Vertices = vertices; + m_ExtendedMeshShapes[entity].ExtendedMeshShape = mesh; + m_ExtendedMeshShapes[entity].VertexIndices = vertexIndices; + m_ExtendedMeshShapes[entity].Vertices = vertices; + + hkpMoppCompilerInput mci; + hkpMoppCode* code = hkpMoppUtility::buildCode( mesh, mci ); + hkpMoppBvTreeShape* moppShape = new hkpMoppBvTreeShape(mesh, code); + + m_ExtendedMeshShapes[entity].Code = code; + m_ExtendedMeshShapes[entity].MoppShape = moppShape; + shape = moppShape; + shape = mesh; } else @@ -422,11 +445,12 @@ void Systems::PhysicsSystem::OnEntityCommit( EntityID entity ) i--; } } - m_PhysicsWorld->markForWrite(); + VehicleSetup vehicleSetup; // Create the basic vehicle. m_Vehicles[entity] = new hkpVehicleInstance(rigidBody); + m_PhysicsWorld->markForWrite(); vehicleSetup.buildVehicle(m_World, m_PhysicsWorld, *m_Vehicles[entity], entity, m_Wheels); // Add the vehicle's entities and phantoms to the world m_Vehicles[entity]->addToWorld(m_PhysicsWorld); diff --git a/src/Systems/PhysicsSystem.h b/src/Systems/PhysicsSystem.h index bee1039..6981f3a 100644 --- a/src/Systems/PhysicsSystem.h +++ b/src/Systems/PhysicsSystem.h @@ -38,6 +38,8 @@ #include #include +#include +#include #include #include @@ -93,8 +95,10 @@ private: hkpExtendedMeshShape* ExtendedMeshShape; std::vector* Vertices; std::vector* VertexIndices; + hkpMoppCode* Code; + hkpMoppBvTreeShape* MoppShape; }; - std::unordered_map m_hkpExtendedMeshShapes; + std::unordered_map m_ExtendedMeshShapes; }; } diff --git a/vs11/Returngeance.sln b/vs11/Returngeance.sln index f834d6d..10ce52b 100644 --- a/vs11/Returngeance.sln +++ b/vs11/Returngeance.sln @@ -1,8 +1,6 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.30110.0 -MinimumVisualStudioVersion = 10.0.40219.1 +# Visual Studio 2012 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Returngeance", "Returngeance\Returngeance.vcxproj", "{E8B4A2A2-882B-402A-98A7-8B4F7233C8B3}" EndProject Project("{F088123C-0E9E-452A-89E6-6BA2F21D5CAC}") = "ModelingProject1", "ModelingProject1\ModelingProject1.modelproj", "{B35F204C-3377-457E-AC9E-D9606F421191}" @@ -41,7 +39,4 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(Performance) = preSolution - HasPerformanceSessions = true - EndGlobalSection EndGlobal