diff --git a/src/GameWorld.cpp b/src/GameWorld.cpp index e274828..2d0c4f3 100755 --- a/src/GameWorld.cpp +++ b/src/GameWorld.cpp @@ -22,14 +22,14 @@ void GameWorld::Initialize() { auto ground = CreateEntity(); auto transform = AddComponent(ground, "Transform"); - transform->Position = glm::vec3(0, 0, 0); - transform->Scale = glm::vec3(1000.0f, 1.0f, 1000.0f); + transform->Position = glm::vec3(0, -5, 0); + transform->Scale = glm::vec3(1000.0f, 10.0f, 1000.0f); transform->Orientation = glm::quat(glm::vec3(0.0f, 0.0f, 0.0f)); auto model = AddComponent(ground, "Model"); model->ModelFile = "Models/Placeholders/PhysicsTest/Cube.obj"; auto box = AddComponent(ground, "Box"); box->Width = 500; - box->Height = 0.5; + box->Height = 5; box->Depth = 500; auto physics = AddComponent(ground, "Physics"); @@ -37,38 +37,42 @@ void GameWorld::Initialize() physics->Static = true; } - for(int i = 0; i < 1; i++) - { - auto ball = CreateEntity(); - auto transform = AddComponent(ball, "Transform"); - transform->Position = glm::vec3(0, 5, 0); - transform->Scale = glm::vec3(1.0f, 1.0f, 1.0f); - transform->Orientation = glm::quat(glm::vec3(0.0f, 0.0f, 0.0f)); - auto model = AddComponent(ball, "Model"); - model->ModelFile = "Models/Placeholders/PhysicsTest/Sphere.obj"; - auto sphere = AddComponent(ball, "Sphere"); - sphere->Radius = 0.5; - auto physics = AddComponent(ball, "Physics"); - physics->Mass = 1; - } { auto car = CreateEntity(); auto transform = AddComponent(car, "Transform"); transform->Position = glm::vec3(0, 5, 0); - transform->Scale = glm::vec3(1.0f, 1.0f, 1.0f); + transform->Scale = glm::vec3(3, 1, 5); transform->Orientation = glm::quat(glm::vec3(0.0f, 0.0f, 0.0f)); auto model = AddComponent(car, "Model"); - model->ModelFile = "Models/Placeholders/PhysicsTest/Box.obj"; + model->ModelFile = "Models/Placeholders/PhysicsTest/Cube2.obj"; auto physics = AddComponent(car, "Physics"); - physics->Mass = 1; + physics->Mass = 1200; auto box = AddComponent(car, "Box"); - box->Width = 3; - box->Height = 1; - box->Depth = 5; + box->Width = 1.5f; + box->Height = 0.5f; + box->Depth = 2.5f; auto vehicle = AddComponent(car, "Vehicle"); } + for(int i = 0; i < 50; i++) + { + auto ball = CreateEntity(); + auto transform = AddComponent(ball, "Transform"); + transform->Position = glm::vec3(243, 10 + i*10, 0); + transform->Scale = glm::vec3(10); + transform->Orientation = glm::quat(glm::vec3(0.0f, 0.0f, 0.0f)); + auto model = AddComponent(ball, "Model"); + model->ModelFile = "Models/Placeholders/PhysicsTest/Cube2.obj"; + auto physics = AddComponent(ball, "Physics"); + physics->Mass = 100; + auto box = AddComponent(ball, "Box"); + box->Width = 5.f; + box->Height = 5.f; + box->Depth = 5.f; + + } + /*{ auto entity = CreateEntity(); AddComponent(entity, "Transform"); diff --git a/src/Physics/VehicleSetup.cpp b/src/Physics/VehicleSetup.cpp index b656c7b..44a2d26 100644 --- a/src/Physics/VehicleSetup.cpp +++ b/src/Physics/VehicleSetup.cpp @@ -21,12 +21,10 @@ void VehicleSetup::buildVehicle(const hkpWorld* world, hkpVehicleInstance& vehic // For illustrative purposes we use a custom hkpVehicleRayCastWheelCollide // which implements varying 'ground' friction in a very simple way. - //vehicle.m_wheelCollide = new hkpVehicleRayCastWheelCollide; + vehicle.m_wheelCollide = new hkpVehicleRayCastWheelCollide; setupVehicleData(world, *vehicle.m_data); - // initialise the tyremarks controller with 128 tyremark points. - vehicle.m_tyreMarks = new hkpTyremarksInfo(*vehicle.m_data, 128); setupComponent(*vehicle.m_data, *static_cast(vehicle.m_driverInput)); setupComponent(*vehicle.m_data, *static_cast(vehicle.m_steering)); @@ -39,7 +37,6 @@ void VehicleSetup::buildVehicle(const hkpWorld* world, hkpVehicleInstance& vehic setupWheelCollide(world, vehicle, *static_cast(vehicle.m_wheelCollide)); - setupTyremarks(*vehicle.m_data, *static_cast(vehicle.m_tyreMarks)); // // Check that all components are present. @@ -53,7 +50,6 @@ void VehicleSetup::buildVehicle(const hkpWorld* world, hkpVehicleInstance& vehic HK_ASSERT(0x7a7ade23, vehicle.m_suspension); HK_ASSERT(0x6ec4d0ed, vehicle.m_aerodynamics); HK_ASSERT(0x67161206, vehicle.m_wheelCollide); - HK_ASSERT(0x295015f1, vehicle.m_tyreMarks); // // Set up any variables that store cached data. @@ -92,7 +88,7 @@ void VehicleSetup::setupVehicleData(const hkpWorld* world, hkpVehicleData& data) // The coordinates of the chassis system, used for steering the vehicle. // up forward right - data.m_chassisOrientation.setCols(hkVector4(0, 1, 0), hkVector4(1, 0, 0), hkVector4(0, 0, 1)); + data.m_chassisOrientation.setCols(hkVector4(0, 1, 0), hkVector4(0, 0, 1), hkVector4(-1, 0, 0)); data.m_frictionEqualizer = 0.5f; @@ -138,8 +134,8 @@ void VehicleSetup::setupVehicleData(const hkpWorld* world, hkpVehicleData& data) for (int i = 0; i < data.m_numWheels; i++) { // This value is also used to calculate the m_primaryTransmissionRatio. - data.m_wheelParams[i].m_radius = 0.4f; - data.m_wheelParams[i].m_width = 0.2f; + data.m_wheelParams[i].m_radius = 0.6f; + data.m_wheelParams[i].m_width = 0.3f; data.m_wheelParams[i].m_mass = 10.0f; data.m_wheelParams[i].m_viscosityFriction = 0.25f; @@ -215,8 +211,8 @@ void VehicleSetup::setupComponent(const hkpVehicleData& data, hkpVehicleDefaultT transmission.m_wheelsTorqueRatio[2] = 0.3f; transmission.m_wheelsTorqueRatio[3] = 0.3f; - const hkReal vehicleTopSpeed = 130.0f; - const hkReal wheelRadius = 0.4f; + const hkReal vehicleTopSpeed = 50.0f; + const hkReal wheelRadius = 0.6f; const hkReal maxEngineRpm = 7500.0f; transmission.m_primaryTransmissionRatio = hkpVehicleDefaultTransmission::calculatePrimaryTransmissionRatio(vehicleTopSpeed, wheelRadius, @@ -332,8 +328,3 @@ void VehicleSetup::setupWheelCollide(const hkpWorld* world, const hkpVehicleInst wheelCollide.m_wheelCollisionFilterInfo = vehicle.getChassis()->getCollisionFilterInfo(); } -void VehicleSetup::setupTyremarks(const hkpVehicleData& data, hkpTyremarksInfo& tyreMarks) -{ - tyreMarks.m_minTyremarkEnergy = 100.0f; - tyreMarks.m_maxTyremarkEnergy = 1000.0f; -} \ No newline at end of file diff --git a/src/Physics/VehicleSetup.h b/src/Physics/VehicleSetup.h index 7b7d9a5..2a0ce95 100644 --- a/src/Physics/VehicleSetup.h +++ b/src/Physics/VehicleSetup.h @@ -24,7 +24,6 @@ #include #include #include -#include #include @@ -48,7 +47,6 @@ public: virtual void setupComponent(const hkpVehicleData& data, hkpVehicleDefaultVelocityDamper& velocityDamper); virtual void setupWheelCollide(const hkpWorld* world, const hkpVehicleInstance& vehicle, hkpVehicleRayCastWheelCollide& wheelCollide); - virtual void setupTyremarks(const hkpVehicleData& data, hkpTyremarksInfo& tyremarkscontroller); }; #endif // Physics_Vehicle_h__ diff --git a/src/Systems/PhysicsSystem.cpp b/src/Systems/PhysicsSystem.cpp index b77fc1b..39d2e93 100644 --- a/src/Systems/PhysicsSystem.cpp +++ b/src/Systems/PhysicsSystem.cpp @@ -75,13 +75,17 @@ void Systems::PhysicsSystem::Update(double dt) if (!transformComponent) continue; + 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); } - static const double timestep = 1 / 60.0; + + + + static const double timestep = 1 / 30.0; m_Accumulator += dt; while (m_Accumulator >= timestep) { @@ -184,17 +188,18 @@ void Systems::PhysicsSystem::SetUpPhysicsState(EntityID entity, EntityID parent) { VehicleSetup vehicleSetup; - // Create the vehicle. - m_Vehicles[entity] = new hkpVehicleInstance(rigidBody); // Create the basic vehicle. m_Vehicles[entity] = new hkpVehicleInstance(rigidBody); vehicleSetup.buildVehicle(m_PhysicsWorld, *m_Vehicles[entity]); // Add the vehicle's entities and phantoms to the world m_Vehicles[entity]->addToWorld(m_PhysicsWorld); + + m_RigidBodies[entity] = rigidBody; + // The vehicle is an action m_PhysicsWorld->addAction(m_Vehicles[entity]); - m_Vehicles[entity]->m_rpm = 0.0f; // Not sure why this one should be here + //m_Vehicles[entity]->m_rpm = 0.0f; // Not sure why this one should be here shape->removeReference(); rigidBody->removeReference();