Sterowanie na ocene chyba 4.0
This commit is contained in:
138
main.cpp
138
main.cpp
@@ -76,7 +76,7 @@ int monitormodecounter = 0;
|
||||
std::time_t monitormodehelper;
|
||||
|
||||
//Zmienne do ruchu ##############################################
|
||||
|
||||
/*
|
||||
float Foward = 0.0f; // Pozycja łazika w przód/tył
|
||||
float Sides = 0.0f; // Pozycja łazika w lewo/prawo
|
||||
float Rotation = 0.0f; // Rotacja łazika (w stopniach)
|
||||
@@ -110,6 +110,92 @@ void RotateRoverAndCamera(float angle) {
|
||||
if (Rotation >= 360.0f) Rotation -= 360.0f;
|
||||
if (Rotation < 0.0f) Rotation += 360.0f;
|
||||
}
|
||||
*/
|
||||
//Zmienne do ruchu ##############################################^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
bool keyWPressed = false;
|
||||
bool keySPressed = false;
|
||||
bool keyAPressed = false;
|
||||
bool keyDPressed = false;
|
||||
|
||||
float Foward = 0.0f; // Pozycja łazika w przód/tył
|
||||
float Sides = 0.0f; // Pozycja łazika w lewo/prawo
|
||||
float Rotation = 0.0f; // Rotacja łazika (w stopniach)
|
||||
|
||||
float CameraHeight = 50.0f; // Wysokość kamery
|
||||
float MoveSpeed = 3.0f; // Prędkość poruszania się
|
||||
|
||||
// Funkcja do poruszania łazikiem
|
||||
void MoveRover(bool forward) {
|
||||
// Zamieniamy kąt na radiany
|
||||
float radRotation = Rotation * GL_PI / 180.0f;
|
||||
|
||||
// Wektor ruchu w kierunku przód/tył (kierunek łazika)
|
||||
float moveX = cos(radRotation);
|
||||
float moveZ = sin(radRotation);
|
||||
|
||||
// Ruch w przód
|
||||
if (forward) {
|
||||
Sides -= MoveSpeed * moveX;
|
||||
Foward -= MoveSpeed * moveZ;
|
||||
}
|
||||
// Ruch w tył
|
||||
else {
|
||||
Sides += MoveSpeed * moveX;
|
||||
Foward += MoveSpeed * moveZ;
|
||||
}
|
||||
}
|
||||
|
||||
// Funkcja do obracania łazika wokół osi Y
|
||||
void RotateRoverAndCamera(float angle) {
|
||||
Rotation += angle;
|
||||
if (Rotation >= 360.0f) Rotation -= 360.0f;
|
||||
if (Rotation < 0.0f) Rotation += 360.0f;
|
||||
}
|
||||
|
||||
void UpdateRover() {
|
||||
if (keyWPressed) {
|
||||
if (keyAPressed) {
|
||||
// Ruch do przodu i skręt w lewo
|
||||
RotateRoverAndCamera(3.0f); // Dostosuj wartość kąta według potrzeb
|
||||
MoveRover(true);
|
||||
}
|
||||
else if (keyDPressed) {
|
||||
// Ruch do przodu i skręt w prawo
|
||||
RotateRoverAndCamera(-3.0f); // Dostosuj wartość kąta według potrzeb
|
||||
MoveRover(true);
|
||||
}
|
||||
else {
|
||||
// Ruch do przodu bez skrętu
|
||||
MoveRover(true);
|
||||
}
|
||||
}
|
||||
else if (keySPressed) {
|
||||
if (keyAPressed) {
|
||||
// Ruch do tyłu i skręt w lewo
|
||||
RotateRoverAndCamera(-3.0f); // Dostosuj wartość kąta według potrzeb
|
||||
MoveRover(false);
|
||||
}
|
||||
else if (keyDPressed) {
|
||||
// Ruch do tyłu i skręt w prawo
|
||||
RotateRoverAndCamera(3.0f); // Dostosuj wartość kąta według potrzeb
|
||||
MoveRover(false);
|
||||
}
|
||||
else {
|
||||
// Ruch do tyłu bez skrętu
|
||||
MoveRover(false);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (keyAPressed) {
|
||||
// Obrót w miejscu w lewo
|
||||
RotateRoverAndCamera(3.0f); // Dostosuj wartość kąta według potrzeb
|
||||
}
|
||||
else if (keyDPressed) {
|
||||
// Obrót w miejscu w prawo
|
||||
RotateRoverAndCamera(-3.0f); // Dostosuj wartość kąta według potrzeb
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Change viewing volume and viewport. Called when window is resized
|
||||
void ChangeSize(GLsizei w, GLsizei h) {
|
||||
@@ -385,10 +471,12 @@ void RenderScene(void) {
|
||||
|
||||
// Rysowanie łazika (porusza się i obraca)
|
||||
glPushMatrix();
|
||||
|
||||
glTranslatef(Foward, 0.0f, Sides); // Translacja łazika na jego pozycję
|
||||
glRotatef(Rotation, 0.0f, 1.0f, 0.0f); // Obrót łazika wokół własnej osi
|
||||
glColor3f(1.0, 0.0, 0.0); // Czerwony kolor dla łazika
|
||||
user.draw();
|
||||
UpdateRover();
|
||||
glPopMatrix();
|
||||
|
||||
|
||||
@@ -681,11 +769,31 @@ float radRotation = Rotation * GL_PI / 180.0f;
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
case WM_KEYUP:
|
||||
switch (wParam) {
|
||||
case 'W':
|
||||
keyWPressed = false;
|
||||
break;
|
||||
case 'S':
|
||||
keySPressed = false;
|
||||
break;
|
||||
case 'A':
|
||||
keyAPressed = false;
|
||||
break;
|
||||
case 'D':
|
||||
keyDPressed = false;
|
||||
break;
|
||||
// Obsługa innych klawiszy
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
// Key press, check for arrow keys to do cube rotation.
|
||||
case WM_KEYDOWN:
|
||||
|
||||
|
||||
|
||||
switch (wParam) {
|
||||
|
||||
case VK_UP:
|
||||
xRot -= 5.0f;
|
||||
break;
|
||||
@@ -721,27 +829,17 @@ float radRotation = Rotation * GL_PI / 180.0f;
|
||||
if (polygonmode) timestampedCout("Uwaga! Tryb wireframe jest niewydajny i powinien sluzyc tylko do debugowania!");
|
||||
break;
|
||||
|
||||
case 'W': // Ruch w przód
|
||||
MoveRover(true);
|
||||
case 'W':
|
||||
keyWPressed = true;
|
||||
break;
|
||||
case 'S': // Ruch w tył
|
||||
MoveRover(false);
|
||||
case 'S':
|
||||
keySPressed = true;
|
||||
break;
|
||||
|
||||
case 'A': // Obrót w lewo
|
||||
RotateRoverAndCamera(5.0f); // Obrót łazika i kamery w lewo
|
||||
case 'A':
|
||||
keyAPressed = true;
|
||||
break;
|
||||
case 'D': // Obrót w prawo
|
||||
RotateRoverAndCamera(-5.0f); // Obrót łazika i kamery w prawo
|
||||
break;
|
||||
|
||||
case 'J': // Obrót w lewo (wokół własnej osi)
|
||||
Rotation += 5.0f;
|
||||
if (Rotation > 360.0f || Rotation < 0.0f) Rotation -= 360.0f;
|
||||
break;
|
||||
case 'K': // Obrót w prawo (wokół własnej osi)
|
||||
Rotation -= 5.0f;
|
||||
if (Rotation > 360.0f || Rotation < 0.0f) Rotation += 360.0f;
|
||||
case 'D':
|
||||
keyDPressed = true;
|
||||
break;
|
||||
|
||||
case 114: // F3
|
||||
|
||||
Reference in New Issue
Block a user