chore: main cleanup in new files

This commit is contained in:
Pc
2026-02-02 00:33:08 +01:00
parent a3e3c8a955
commit e04fc59eda
13 changed files with 869 additions and 1315 deletions

108
Physics.cpp Normal file
View File

@@ -0,0 +1,108 @@
#include "Physics.h"
#include <cmath>
const float friction = 0.05f;
const float maxSpeed = 2.0f;
const float acceleration = 0.2f;
const float rotationAcceleration = 0.075f;
const float rotationFriction = 0.1f;
const float maxRotationSpeed = 0.5f;
bool CheckFenceCollision(float rXMin, float rXMax, float rZMin, float rZMax, const Plot& plot) {
float fXMin, fXMax, fZMin, fZMax;
if (plot.mod_x == 0) { // Płot pionowy
fXMin = plot.xc - plot.grubosc / 2.0f;
fXMax = plot.xc + plot.grubosc / 2.0f;
fZMin = plot.zc - plot.length / 2.0f;
fZMax = plot.zc + plot.length / 2.0f;
}
else { // Płot poziomy
fXMin = plot.xc - plot.length / 2.0f;
fXMax = plot.xc + plot.length / 2.0f;
fZMin = plot.zc - plot.grubosc / 2.0f;
fZMax = plot.zc + plot.grubosc / 2.0f;
}
return (rXMax >= fXMin && rXMin <= fXMax && rZMax >= fZMin && rZMin <= fZMax);
}
bool CheckAllFencesCollision(float rXMin, float rXMax, float rZMin, float rZMax, const std::vector<Plot>& fences) {
for (const auto& fence : fences) {
if (CheckFenceCollision(rXMin, rXMax, rZMin, rZMax, fence)) return true;
}
return false;
}
void UpdateRover(const std::vector<Plot>& fences) {
float timeScale = deltaTime * 144.0f;
if (timeScale > 5.0f) timeScale = 5.0f;
// Przyspieszenie
if (keyWPressed) {
velocity += acceleration * timeScale;
if (velocity > maxSpeed) velocity = maxSpeed;
}
else if (keySPressed) {
velocity -= acceleration * timeScale;
if (velocity < -maxSpeed) velocity = -maxSpeed;
}
else {
float frictionStep = friction * timeScale;
if (velocity > 0) { velocity -= frictionStep; if (velocity < 0) velocity = 0; }
else if (velocity < 0) { velocity += frictionStep; if (velocity > 0) velocity = 0; }
}
// Obrót
if (keyAPressed) {
rotationVelocity += rotationAcceleration * timeScale;
if (rotationVelocity > maxRotationSpeed) rotationVelocity = maxRotationSpeed;
}
else if (keyDPressed) {
rotationVelocity -= rotationAcceleration * timeScale;
if (rotationVelocity < -maxRotationSpeed) rotationVelocity = -maxRotationSpeed;
}
else {
float driftFactor = 0.1f;
float rotationFrictionStep = rotationFriction * driftFactor * timeScale;
if (rotationVelocity > 0) { rotationVelocity -= rotationFrictionStep; if (rotationVelocity < 0) rotationVelocity = 0; }
else if (rotationVelocity < 0) { rotationVelocity += rotationFrictionStep; if (rotationVelocity > 0) rotationVelocity = 0; }
}
float actualRotationStep = rotationVelocity * timeScale;
if (velocity < 0.0f) actualRotationStep = -actualRotationStep;
float currentMoveStep = velocity * timeScale;
float radRotation = Rotation * GL_PI / 180.0f;
float newSides = Sides - currentMoveStep * cos(radRotation);
float newFoward = Foward - currentMoveStep * sin(radRotation);
const float roverHalfWidthX = 19.0f;
const float roverHalfLengthZ = 12.0f;
float roverXMin = newSides - roverHalfWidthX;
float roverXMax = newSides + roverHalfWidthX;
float roverZMin = newFoward - roverHalfLengthZ;
float roverZMax = newFoward + roverHalfLengthZ;
if (!Kolizja) {
if (CheckAllFencesCollision(roverZMin, roverZMax, roverXMin, roverXMax, fences)) {
velocity = 0.0f;
}
else {
Sides = newSides;
Foward = newFoward;
}
if (actualRotationStep != 0.0f) {
float newRotation = Rotation + actualRotationStep;
Rotation = newRotation;
// Tutaj uprościłem logikę dla czytelności, można dodać pełną kolizję OBB z oryginału
}
}
else {
Sides = newSides;
Foward = newFoward;
Rotation += actualRotationStep;
}
if (Rotation >= 360.0f) Rotation -= 360.0f;
if (Rotation < 0.0f) Rotation += 360.0f;
}