From 8994f1e2967d650ae9ef78cb40ed5e8e0365a752 Mon Sep 17 00:00:00 2001 From: Looki2000 Date: Sun, 12 Mar 2023 02:08:44 +0100 Subject: [PATCH] fixed player movement (hopefully) --- main.cpp | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/main.cpp b/main.cpp index f0357c1..7b59dad 100644 --- a/main.cpp +++ b/main.cpp @@ -53,7 +53,7 @@ int main(int argc, char *argv[]) float leftRightVel; float angularVel; float rotVel; - float movementAngle; + irr::core::vector2df movementVec; pb.device = createDevice(irr::video::EDT_OPENGL, irr::core::dimension2d(pb.screenWidth, pb.screenHeight), 16, false, true, false, &pb.er); pb.driver = pb.device -> getVideoDriver(); @@ -133,28 +133,31 @@ int main(int argc, char *argv[]) // 180 - 200 grads // 270 - 300 grads - if(pb.er.isKeyDown(irr::KEY_KEY_W)) + movementVec = irr::core::vector2df(0, 0); + + if(pb.er.isKeyDown(irr::KEY_KEY_W) || pb.er.isKeyDown(irr::KEY_KEY_S) || pb.er.isKeyDown(irr::KEY_KEY_D) || pb.er.isKeyDown(irr::KEY_KEY_A)) { angularVel = pb.speed * frameDeltaTime; - movementAngle = 180; } - else if(pb.er.isKeyDown(irr::KEY_KEY_S)) + if(pb.er.isKeyDown(irr::KEY_KEY_W)) { - angularVel = pb.speed * frameDeltaTime; - movementAngle = 0; + movementVec.Y += angularVel; + } + + if(pb.er.isKeyDown(irr::KEY_KEY_S)) + { + movementVec.Y -= angularVel; } if(pb.er.isKeyDown(irr::KEY_KEY_A)) { - angularVel = pb.speed * frameDeltaTime; - movementAngle = 90; + movementVec.X -= angularVel; } - else if(pb.er.isKeyDown(irr::KEY_KEY_D)) + if(pb.er.isKeyDown(irr::KEY_KEY_D)) { - angularVel = pb.speed * frameDeltaTime; - movementAngle = 270; + movementVec.X += angularVel; } @@ -231,13 +234,20 @@ int main(int argc, char *argv[]) if(pb.er.isKeyDown(irr::KEY_KEY_W) || pb.er.isKeyDown(irr::KEY_KEY_S) || pb.er.isKeyDown(irr::KEY_KEY_D) || pb.er.isKeyDown(irr::KEY_KEY_A)) { - pb.player -> setPosition(irr::core::vector3df(playerPos.X - cos(irr::core::degToRad(playerRot.Y + movementAngle)) * angularVel, playerPos.Y, playerPos.Z + sin(irr::core::degToRad(playerRot.Y + movementAngle)) * angularVel)); + // rotating movementVec vector by playerRot.Y degrees + movementAngle.X = movementAngle.X * cos(irr::core::degToRad(playerRot.Y)) - movementAngle.Y * sin(irr::core::degToRad(playerRot.Y)); + movementAngle.Y = movementAngle.X * sin(irr::core::degToRad(playerRot.Y)) + movementAngle.Y * cos(irr::core::degToRad(playerRot.Y)); + + + //pb.player -> setPosition(irr::core::vector3df(playerPos.X - cos(irr::core::degToRad(playerRot.Y + movementAngle)) * angularVel, playerPos.Y, playerPos.Z + sin(irr::core::degToRad(playerRot.Y + movementAngle)) * angularVel)); + //pb.camera -> setTarget(irr::core::vector3df(playerPos.X - cos(irr::core::degToRad(playerRot.Y + movementAngle)) * angularVel, playerPos.Y + pb.verticalCamRot, playerPos.Z + sin(irr::core::degToRad(playerRot.Y + movementAngle)) * angularVel)); + + pb.player -> setPosition(irr::core::vector3df(playerPos.X - movementAngle.X * angularVel, playerPos.Y, playerPos.Z + movementAngle.Y * angularVel)); + pb.camera -> setTarget(irr::core::vector3df(playerPos.X - movementAngle.X * angularVel, playerPos.Y + pb.verticalCamRot, playerPos.Z + movementAngle.Y * angularVel)); + + pb.player -> updateAbsolutePosition(); } - - pb.camera -> setTarget(irr::core::vector3df(playerPos.X - cos(irr::core::degToRad(playerRot.Y + movementAngle)) * angularVel, playerPos.Y + pb.verticalCamRot, playerPos.Z + sin(irr::core::degToRad(playerRot.Y + movementAngle)) * angularVel)); - pb.player -> updateAbsolutePosition(); - // Water on Level 7 // if(levelSwitcher.currentLevel == 7) {