#pragma once #include #include #include class Player; class deadPlayerInputComponent : public IInputComponent { Player& PlayerCharacter; float lastX = 1600 / 2.0f; float lastY = 900 / 2.0f; bool bFirstMouse = true; public: deadPlayerInputComponent(GLFWwindow* Window, Player& PlayerCharacter) : IInputComponent(Window), PlayerCharacter(PlayerCharacter) { glfwSetWindowUserPointer(Window, this); glfwSetCursorPosCallback(Window, ProcessMouse); } void Update(float DeltaTime) override { ProcessKeyboard(DeltaTime); } void ProcessKeyboard(float DeltaTime) { if (glfwGetKey(Window, GLFW_KEY_ESCAPE) == GLFW_PRESS) { //glfwSetWindowShouldClose(Window, true); glfwSetInputMode(Window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); } ; if (glfwGetKey(Window, GLFW_KEY_W) == GLFW_PRESS) PlayerCharacter.ProcessKeyboard(FORWARD, DeltaTime); if (glfwGetKey(Window, GLFW_KEY_S) == GLFW_PRESS) PlayerCharacter.ProcessKeyboard(BACKWARD, DeltaTime); if (glfwGetKey(Window, GLFW_KEY_A) == GLFW_PRESS) PlayerCharacter.ProcessKeyboard(LEFT, DeltaTime); if (glfwGetKey(Window, GLFW_KEY_D) == GLFW_PRESS) PlayerCharacter.ProcessKeyboard(RIGHT, DeltaTime); } static void ProcessMouse(GLFWwindow* Window, double xposIn, double yposIn) { deadPlayerInputComponent* instance = static_cast(glfwGetWindowUserPointer(Window)); if (!instance) { std::cout << "Player Input Component not found" << std::endl; return; } if (glfwGetMouseButton(Window, GLFW_MOUSE_BUTTON_LEFT) == GLFW_PRESS) { glfwSetInputMode(Window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); instance->bFirstMouse = true; return; } glfwSetInputMode(Window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); //std::cout << "Mouse callback" << std::endl; float xpos = static_cast(xposIn); float ypos = static_cast(yposIn); if (instance->bFirstMouse) { instance->lastX = xpos; instance->lastY = ypos; instance->bFirstMouse = false; } float xoffset = xpos - instance->lastX; float yoffset = instance->lastY - ypos; instance->lastX = xpos; instance->lastY = ypos; instance->PlayerCharacter.ProcessMouseMovement(xoffset, yoffset); } };