/// //Rotates the runner controller // obj: A pointer to the game object to rotate // state: A pointer to the runner controller rotating the object void State_RunnerController_Rotate(GObject* obj, State* state) { // create a camera object Camera* cam = RenderingManager_GetRenderingBuffer()->camera; //Grab the state members struct State_RunnerController_Members* members = (struct State_RunnerController_Members*)state->members; // if player's mouse is locked if(InputManager_GetInputBuffer().mouseLock) { int deltaMouseX = (InputManager_GetInputBuffer().mousePosition[0] - InputManager_GetInputBuffer().previousMousePosition[0]); int deltaMouseY = (InputManager_GetInputBuffer().mousePosition[1] - InputManager_GetInputBuffer().previousMousePosition[1]); Vector* axis = Vector_Allocate(); Vector_Initialize(axis,3); if(deltaMouseX != 0) { axis->components[1] = 1.0f; // rotate the camera Camera_ChangeYaw(cam, members->angularVelocity * deltaMouseX); axis->components[1] = 0.0f; } if (deltaMouseY != 0) { Vector forwardVector; Vector_INIT_ON_STACK(forwardVector, 3); Matrix_SliceRow(&forwardVector, cam->rotationMatrix, 2, 0, 3); // Keep camera from overextending it's boundaries. if (deltaMouseY > 0) { if (Vector_DotProduct(&forwardVector, &Vector_E2) < 0.7f) { axis->components[0] = 1.0f; Camera_ChangePitch(cam, members->angularVelocity * deltaMouseY); axis->components[0] = 0.0f; } } else if (deltaMouseY < 0) { if (Vector_DotProduct(&forwardVector, &Vector_E2) > -0.7f) { axis->components[0] = 1.0f; Camera_ChangePitch(cam, members->angularVelocity * deltaMouseY); axis->components[0] = 0.0f; } } } } }
static void State_ParkourController_Rotate(State* state) { //Get a reference to the camera Camera* cam = RenderingManager_GetRenderingBuffer()->camera; //Grab the state members struct State_ParkourController_Members* members = (struct State_ParkourController_Members*)state->members; //If the player's mouse is locked if(InputManager_GetInputBuffer().mouseLock) { //Get the change in mouse position int deltaMouseX = (InputManager_GetInputBuffer().mousePosition[0] - InputManager_GetInputBuffer().previousMousePosition[0]); int deltaMouseY = (InputManager_GetInputBuffer().mousePosition[1] - InputManager_GetInputBuffer().previousMousePosition[1]); //If there is X rotation if(deltaMouseX != 0) { //Rotate the camera Camera_ChangeYaw(cam, (float)deltaMouseX * members->angularVelocity); } //If there is Y rotation if(deltaMouseY != 0) { //TODO: Prevent camera from looking "Too high" //Rotate the camera Camera_ChangePitch(cam, (float)deltaMouseY * members->angularVelocity); } } }