From a82fddb0bc2748b9072e263ff8bbaed65ec0c80b Mon Sep 17 00:00:00 2001 From: Hjalte Sorgenfrei Mac Dalland Date: Mon, 5 Feb 2024 23:38:37 +0100 Subject: [PATCH] Adding way to move settings around --- TODO.md | 1 + src/client/Application.cpp | 4 +++- src/engine/Components.hpp | 14 +++++++------- src/engine/Physics.cpp | 26 ++++++++++++++------------ 4 files changed, 25 insertions(+), 20 deletions(-) diff --git a/TODO.md b/TODO.md index 7c34b5a..f2eee66 100644 --- a/TODO.md +++ b/TODO.md @@ -18,6 +18,7 @@ Remove tasks and tick them in the todo as they get done. - PhysicsWorld - CurrentFrame - Network to send messages +- [ ] Save and load struct from json ## Rendering diff --git a/src/client/Application.cpp b/src/client/Application.cpp index 98e7e84..f6938c2 100644 --- a/src/client/Application.cpp +++ b/src/client/Application.cpp @@ -608,7 +608,9 @@ void App::drawDebugForCarSettings(entt::entity entity, CarSettings* carSettings) bool changed = false; ImGui::Begin("Car Settings"); changed |= ImGui::InputFloat("Max Torgue", &carSettings->maxEngineTorque); - changed |= ImGui::InputFloat("Wheel Radius", &carSettings->wheelRadius); + changed |= ImGui::DragFloat("Wheel Radius", &carSettings->wheelRadius, 0.05f, 0.f, 3.f); + changed |= ImGui::DragFloat3("Front Wheel Offset", (float*)&carSettings->frontWheelOffset, 0.05f, -2.f, 5.f); + changed |= ImGui::DragFloat3("Rear Wheel Offset", (float*)&carSettings->rearWheelOffset, 0.05f, -2.f, 5.f); ImGui::End(); if (changed) { physicsWorld->createCarFromSettings(registry, entity); diff --git a/src/engine/Components.hpp b/src/engine/Components.hpp index 16eb9ac..0ad095e 100644 --- a/src/engine/Components.hpp +++ b/src/engine/Components.hpp @@ -1,8 +1,4 @@ #pragma once - -#ifndef COMPONENTS_H -#define COMPONENTS_H - #include #include @@ -92,6 +88,12 @@ struct CarSettings { float halfVehicleWidth = 0.9f; float halfVehicleHeight = 0.2f; + struct Wheeloffset { + float Length = 0.9f; + float Height = 0.0f; + float Width = 0.0f; + } frontWheelOffset, rearWheelOffset; + float wheelRadius = 0.3f; float wheelWidth = 0.1f; @@ -153,6 +155,4 @@ struct SensorTag {}; struct ActiveCameraTag {}; -struct PlayerCube {}; - -#endif \ No newline at end of file +struct PlayerCube {}; \ No newline at end of file diff --git a/src/engine/Physics.cpp b/src/engine/Physics.cpp index 2886b0c..479ba1a 100644 --- a/src/engine/Physics.cpp +++ b/src/engine/Physics.cpp @@ -441,14 +441,13 @@ void PhysicsWorld::createCarFromSettings(entt::registry ®istry, entt::entity Vec3 rear_wheel_forward = Vec3(-Sin(settings->rear.toe), 0, Cos(settings->rear.toe)); Vec3 flip_x(-1, 1, 1); - // Wheels, left front - WheelSettingsWV *w1 = new WheelSettingsWV; - // Clamp the values to avoid crashing Jolt float wheelRadius = std::clamp(0.001f, settings->wheelRadius, FLT_MAX); - // TODO: What are these positions magic values??? 0.9f, 2.0f - w1->mPosition = Vec3(settings->halfVehicleWidth, -0.9f * settings->halfVehicleHeight, - settings->halfVehicleLength - 2.0f * wheelRadius); + // Wheels, left front + WheelSettingsWV *w1 = new WheelSettingsWV; + w1->mPosition = Vec3(settings->halfVehicleWidth + settings->frontWheelOffset.Width, + settings->halfVehicleHeight + settings->frontWheelOffset.Height, + settings->halfVehicleLength + settings->frontWheelOffset.Length); w1->mSuspensionDirection = front_suspension_dir; w1->mSteeringAxis = front_steering_axis; w1->mWheelUp = front_wheel_up; @@ -462,8 +461,9 @@ void PhysicsWorld::createCarFromSettings(entt::registry ®istry, entt::entity // Right front WheelSettingsWV *w2 = new WheelSettingsWV; - w2->mPosition = Vec3(-settings->halfVehicleWidth, -0.9f * settings->halfVehicleHeight, - settings->halfVehicleLength - 2.0f * wheelRadius); + w2->mPosition = Vec3(-settings->halfVehicleWidth + settings->frontWheelOffset.Width, + settings->halfVehicleHeight + settings->frontWheelOffset.Height, + settings->halfVehicleLength + settings->frontWheelOffset.Length); w2->mSuspensionDirection = flip_x * front_suspension_dir; w2->mSteeringAxis = flip_x * front_steering_axis; w2->mWheelUp = flip_x * front_wheel_up; @@ -477,8 +477,9 @@ void PhysicsWorld::createCarFromSettings(entt::registry ®istry, entt::entity // Left rear WheelSettingsWV *w3 = new WheelSettingsWV; - w3->mPosition = Vec3(settings->halfVehicleWidth, -0.9f * settings->halfVehicleHeight, - -settings->halfVehicleLength + 2.0f * wheelRadius); + w3->mPosition = Vec3(settings->halfVehicleWidth + settings->rearWheelOffset.Width, + settings->halfVehicleHeight + settings->rearWheelOffset.Height, + -settings->halfVehicleLength + settings->rearWheelOffset.Length); w3->mSuspensionDirection = rear_suspension_dir; w3->mSteeringAxis = rear_steering_axis; w3->mWheelUp = rear_wheel_up; @@ -491,8 +492,9 @@ void PhysicsWorld::createCarFromSettings(entt::registry ®istry, entt::entity // Right rear WheelSettingsWV *w4 = new WheelSettingsWV; - w4->mPosition = Vec3(-settings->halfVehicleWidth, -0.9f * settings->halfVehicleHeight, - -settings->halfVehicleLength + 2.0f * wheelRadius); + w4->mPosition = Vec3(-settings->halfVehicleWidth + settings->rearWheelOffset.Width, + settings->halfVehicleHeight + settings->rearWheelOffset.Height, + -settings->halfVehicleLength + settings->rearWheelOffset.Length); w4->mSuspensionDirection = flip_x * rear_suspension_dir; w4->mSteeringAxis = flip_x * rear_steering_axis; w4->mWheelUp = flip_x * rear_wheel_up;