void MyController::
windowControlKeyboardChanged(std::shared_ptr<tygra::Window> window,
                             int key_index,
                             bool down)
{
    switch (key_index) {
    case tygra::kWindowKeyLeft:
    case 'A':
		
		if (down){
			scene_->getCamera().aa_ = !scene_->getCamera().aa_;
			std::cerr << "pressed A  " << scene_->getCamera().aa_ ? 1 : 0;
			std::cerr <<  std::endl;

		}

       // camera_move_speed_[0] = down ? 1.f : 0.f;
        break;
    case tygra::kWindowKeyRight:
    case 'D':
        camera_move_speed_[1] = down ? 1.f : 0.f;
        break;
    case tygra::kWindowKeyUp:
    case 'W':
        camera_move_speed_[2] = down ? 1.f : 0.f;
        break;
    case tygra::kWindowKeyDown:
    case 'S':
        camera_move_speed_[3] = down ? 1.f : 0.f;
        break;
    }

    updateCameraTranslation();

    if (!down)
        return;

    switch (key_index)
    {
    case tygra::kWindowKeyF2:
        scene_->toggleCameraAnimation();
        break;
    }
}
void MyController::
windowControlKeyboardChanged(std::shared_ptr<tygra::Window> window,
                             int key_index,
                             bool down)
{
	switch (key_index) {
	case tygra::kWindowKeyLeft:
	case 'A':
		camera_move_speed_[0] = down ? 1.f : 0.f;
		break;
	case tygra::kWindowKeyRight:
	case 'D':
		camera_move_speed_[1] = down ? 1.f : 0.f;
		break;
	case tygra::kWindowKeyUp:
	case 'W':
		camera_move_speed_[2] = down ? 1.f : 0.f;
		break;
	case tygra::kWindowKeyDown:
	case 'S':
		camera_move_speed_[3] = down ? 1.f : 0.f;
		break;
	}

	updateCameraTranslation();

	if (!down)
		return;

	// Added keybinds to close the window, change the rendered normal vector line length, a toggels for:
	//the outline mode, render mode and whether or not to display the normal vector lines
	switch (key_index)
	{
	case tygra::kWindowKeyF1:
		scene_->toggleCameraAnimation();
		break;
	case tygra::kWindowKeyF2:
		view_->EnableSpikey();
		break;
	case tygra::kWindowKeyF3:
		view_->ToggleOutlineMode();
		break;
	case tygra::kWindowKeyF4:
		view_->RenderMode();
		break;
	case tygra::kWindowKeyF5:
		view_->ResetConsole();
		break;
	case tygra::kWindowKeyEsc:
		window->close();
		break;
	}

	switch (key_index)
	{
	case 'Q':
		view_->AddToLength(-0.1f);
		break;
	case 'E':
		view_->AddToLength(0.1f);
		break;
	case 'Z':
		view_->AddToSpecSmudge(-1.f);
		break;
	case 'C':
		view_->AddToSpecSmudge(1.f);
		break;
	}
}
void MyController::
windowControlGamepadAxisMoved(std::shared_ptr<tygra::Window> window,
                              int gamepad_index,
                              int axis_index,
                              float pos)
{
	const float deadzone = 0.2f;
	const float rotate_speed = 3.f;
	switch (axis_index) {
	case tygra::kWindowGamepadAxisLeftThumbX:
		if (pos < -deadzone) {
			camera_move_speed_[0] = -pos;
			camera_move_speed_[1] = 0.f;
		}
		else if (pos > deadzone) {
			camera_move_speed_[0] = 0.f;
			camera_move_speed_[1] = pos;
		}
		else {
			camera_move_speed_[0] = 0.f;
			camera_move_speed_[1] = 0.f;
		}
		break;
	case tygra::kWindowGamepadAxisLeftThumbY:
		if (pos < -deadzone) {
			camera_move_speed_[3] = -pos;
			camera_move_speed_[2] = 0.f;
		}
		else if (pos > deadzone) {
			camera_move_speed_[3] = 0.f;
			camera_move_speed_[2] = pos;
		}
		else {
			camera_move_speed_[3] = 0.f;
			camera_move_speed_[2] = 0.f;
		}
		break;
	case tygra::kWindowGamepadAxisRightThumbX:
		if (pos < -deadzone || pos > deadzone) {
			camera_rotate_speed_[0] = -pos;
		}
		else {
			camera_rotate_speed_[0] = 0.f;
		}
        scene_->getCamera().setRotationalVelocity(
            glm::vec2(camera_rotate_speed_[0] * rotate_speed,
			          camera_rotate_speed_[1] * rotate_speed));
		break;
	case tygra::kWindowGamepadAxisRightThumbY:
		if (pos < -deadzone || pos > deadzone) {
			camera_rotate_speed_[1] = pos;
		}
		else {
			camera_rotate_speed_[1] = 0.f;
		}
        scene_->getCamera().setRotationalVelocity(
            glm::vec2(camera_rotate_speed_[0] * rotate_speed,
			          camera_rotate_speed_[1] * rotate_speed));
		break;
	}

	updateCameraTranslation();
}