Compare commits
2 Commits
bea13b98f3
...
4b9503eeec
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4b9503eeec | ||
|
|
735859ed58 |
31
main.cpp
31
main.cpp
@@ -85,10 +85,9 @@ std::time_t monitormodehelper;
|
||||
FPSCounter fpsCounter;
|
||||
static const int targetFPS = 144; // Celowany FPS
|
||||
//Fps counter
|
||||
|
||||
void LimitFPS(int targetFPS) {
|
||||
static auto lastTime = std::chrono::steady_clock::now();
|
||||
auto currentTime = std::chrono::steady_clock::now();
|
||||
static auto lastTime = std::chrono::high_resolution_clock::now();
|
||||
auto currentTime = std::chrono::high_resolution_clock::now();
|
||||
std::chrono::duration<double> elapsed = currentTime - lastTime;
|
||||
|
||||
// Obliczamy czas na jedną klatkę
|
||||
@@ -118,14 +117,14 @@ float MoveSpeed = 1.0f; // Prędkość poruszania się
|
||||
|
||||
|
||||
float velocity = 0.0f; // Aktualna prędkość łazika
|
||||
const float friction = 0.05f; // Współczynnik tarcia (μ)
|
||||
const float friction = 0.01f; // Współczynnik tarcia (μ)
|
||||
const float maxSpeed = 3.0f; // Maksymalna prędkość łazika
|
||||
const float acceleration = 0.2f;
|
||||
|
||||
float rotationVelocity = 0.0f; // Prędkość obrotu łazika
|
||||
|
||||
const float rotationAcceleration = 0.1f; // Przyspieszenie obrotu
|
||||
const float rotationFriction = 0.05f; // Współczynnik tarcia obrotu
|
||||
const float rotationFriction = 0.01f; // Współczynnik tarcia obrotu
|
||||
const float maxRotationSpeed = 3.0f; // Maksymalna prędkość obrotu
|
||||
|
||||
// Struktura do reprezentacji płotu
|
||||
@@ -227,15 +226,19 @@ void UpdateRover(const std::vector<Plot>& fences) {
|
||||
float newSides = Sides - velocity * cos(radRotation); // Nowa pozycja w osi X
|
||||
float newFoward = Foward - velocity * sin(radRotation); // Nowa pozycja w osi Z
|
||||
|
||||
// Wymiary łazika (połówki w osi X i Z)
|
||||
const float roverHalfWidthX = 19.0f; // 38/2
|
||||
const float roverHalfLengthZ = 12.0f; // 24/2
|
||||
|
||||
// Wyliczenie obszaru zajmowanego przez łazik
|
||||
float roverXMin = newSides - 15.0f;
|
||||
float roverXMax = newSides + 15.0f;
|
||||
float roverZMin = newFoward - 15.0f;
|
||||
float roverZMax = newFoward + 15.0f;
|
||||
float roverXMin = newSides - roverHalfWidthX;
|
||||
float roverXMax = newSides + roverHalfWidthX;
|
||||
float roverZMin = newFoward - roverHalfLengthZ;
|
||||
float roverZMax = newFoward + roverHalfLengthZ;
|
||||
|
||||
// Sprawdzanie kolizji przed aktualizacją pozycji
|
||||
if (Kolizja == true) {
|
||||
if (CheckAllFencesCollision(roverXMin, roverXMax, roverZMin, roverZMax, fences)) {
|
||||
if (CheckAllFencesCollision(roverZMin, roverZMax, roverXMin, roverXMax, fences)) {
|
||||
// Jeśli jest kolizja, zatrzymujemy łazik
|
||||
velocity = 0.0f;
|
||||
cout << "Kolizja podczas ruchu\n";
|
||||
@@ -248,13 +251,13 @@ void UpdateRover(const std::vector<Plot>& fences) {
|
||||
|
||||
// Sprawdzanie kolizji podczas obrotu
|
||||
if (rotationVelocity != 0.0f) {
|
||||
// Wyliczamy narożniki łazika po obrocie
|
||||
// Wyliczamy nową rotację
|
||||
float newRotation = Rotation + rotationVelocity;
|
||||
float radNewRotation = newRotation * GL_PI / 180.0f;
|
||||
|
||||
// Wyliczamy offsety narożników w nowych współrzędnych
|
||||
float offsetX = 15.0f * cos(radNewRotation);
|
||||
float offsetZ = 15.0f * sin(radNewRotation);
|
||||
// Wyliczamy narożniki łazika po obrocie
|
||||
float offsetX = roverHalfWidthX * cos(radNewRotation) + roverHalfLengthZ * sin(radNewRotation);
|
||||
float offsetZ = roverHalfLengthZ * cos(radNewRotation) + roverHalfWidthX * sin(radNewRotation);
|
||||
|
||||
// Wyznaczamy nowe granice łazika
|
||||
float rotatedXMin = Sides - offsetX;
|
||||
|
||||
Reference in New Issue
Block a user