|  |  | @ -3281,7 +3281,6 @@ bool IsKeyPressed(int key) | 
		
	
		
			
			|  |  |  | bool pressed = false; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | if ((CORE.Input.Keyboard.previousKeyState[key] == 0) && (CORE.Input.Keyboard.currentKeyState[key] == 1)) pressed = true; | 
		
	
		
			
			|  |  |  | else pressed = false; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | return pressed; | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @ -3299,7 +3298,6 @@ bool IsKeyReleased(int key) | 
		
	
		
			
			|  |  |  | bool released = false; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | if ((CORE.Input.Keyboard.previousKeyState[key] == 1) && (CORE.Input.Keyboard.currentKeyState[key] == 0)) released = true; | 
		
	
		
			
			|  |  |  | else released = false; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | return released; | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @ -3423,7 +3421,6 @@ bool IsGamepadButtonPressed(int gamepad, int button) | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (button < MAX_GAMEPAD_BUTTONS) && | 
		
	
		
			
			|  |  |  | (CORE.Input.Gamepad.previousButtonState[gamepad][button] == 0) && (CORE.Input.Gamepad.currentButtonState[gamepad][button] == 1)) pressed = true; | 
		
	
		
			
			|  |  |  | else pressed = false; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | return pressed; | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @ -3446,7 +3443,6 @@ bool IsGamepadButtonReleased(int gamepad, int button) | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (button < MAX_GAMEPAD_BUTTONS) && | 
		
	
		
			
			|  |  |  | (CORE.Input.Gamepad.previousButtonState[gamepad][button] == 1) && (CORE.Input.Gamepad.currentButtonState[gamepad][button] == 0)) released = true; | 
		
	
		
			
			|  |  |  | else released = false; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | return released; | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @ -5059,16 +5055,24 @@ static void WindowFocusCallback(GLFWwindow *window, int focused) | 
		
	
		
			
			|  |  |  | // GLFW3 Keyboard Callback, runs on key pressed | 
		
	
		
			
			|  |  |  | static void KeyCallback(GLFWwindow *window, int key, int scancode, int action, int mods) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | //TRACELOG(LOG_DEBUG, "Key Callback: KEY:%i(%c) - SCANCODE:%i (STATE:%i)", key, key, scancode, action); | 
		
	
		
			
			|  |  |  | // WARNING: GLFW could return GLFW_REPEAT, we need to consider it as 1 | 
		
	
		
			
			|  |  |  | // to work properly with our implementation (IsKeyDown/IsKeyUp checks) | 
		
	
		
			
			|  |  |  | if (action == GLFW_RELEASE) CORE.Input.Keyboard.currentKeyState[key] = 0; | 
		
	
		
			
			|  |  |  | else CORE.Input.Keyboard.currentKeyState[key] = 1; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | if (key == CORE.Input.Keyboard.exitKey && action == GLFW_PRESS) | 
		
	
		
			
			|  |  |  | // Check if there is space available in the key queue | 
		
	
		
			
			|  |  |  | if ((CORE.Input.Keyboard.keyPressedQueueCount < MAX_KEY_PRESSED_QUEUE) && (action == GLFW_PRESS)) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | n">glfwSetWindowShouldClose(CORE.Window.handle, GLFW_TRUE); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | o">// NOTE: Before closing window, while loop must be left! | 
		
	
		
			
			|  |  |  | o">// Add character to the queue | 
		
	
		
			
			|  |  |  | CORE.Input.Keyboard.keyPressedQueue[CORE.Input.Keyboard.keyPressedQueueCount] = key; | 
		
	
		
			
			|  |  |  | n">CORE.Input.Keyboard.keyPressedQueueCount++; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // Check the exit key to set close window | 
		
	
		
			
			|  |  |  | if ((key == CORE.Input.Keyboard.exitKey) && (action == GLFW_PRESS)) glfwSetWindowShouldClose(CORE.Window.handle, GLFW_TRUE); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | #if defined(SUPPORT_SCREEN_CAPTURE) | 
		
	
		
			
			|  |  |  | else if (key == GLFW_KEY_F12 && action == GLFW_PRESS) | 
		
	
		
			
			|  |  |  | if ((key == GLFW_KEY_F12) && p">(action == GLFW_PRESS)) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | #if defined(SUPPORT_GIF_RECORDING) | 
		
	
		
			
			|  |  |  | if (mods == GLFW_MOD_CONTROL) | 
		
	
	
		
			
				|  |  | @ -5109,15 +5113,16 @@ static void KeyCallback(GLFWwindow *window, int key, int scancode, int action, i | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | #endif  // SUPPORT_SCREEN_CAPTURE | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | #if defined(SUPPORT_EVENTS_AUTOMATION) | 
		
	
		
			
			|  |  |  | else if (key == GLFW_KEY_F11 && action == GLFW_PRESS) | 
		
	
		
			
			|  |  |  | if ((key == GLFW_KEY_F11) && p">(action == GLFW_PRESS)) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | eventsRecording = !eventsRecording; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // On finish recording, we export events into a file | 
		
	
		
			
			|  |  |  | if (!eventsRecording) ExportAutomationEvents("eventsrec.rep"); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | else if (key == GLFW_KEY_F9 && action == GLFW_PRESS) | 
		
	
		
			
			|  |  |  | else if (p">(key == GLFW_KEY_F9) && p">(action == GLFW_PRESS)) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | LoadAutomationEvents("eventsrec.rep"); | 
		
	
		
			
			|  |  |  | eventsPlaying = true; | 
		
	
	
		
			
				|  |  | @ -5125,21 +5130,6 @@ static void KeyCallback(GLFWwindow *window, int key, int scancode, int action, i | 
		
	
		
			
			|  |  |  | TRACELOG(LOG_WARNING, "eventsPlaying enabled!"); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | #endif | 
		
	
		
			
			|  |  |  | else | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | // WARNING: GLFW could return GLFW_REPEAT, we need to consider it as 1 | 
		
	
		
			
			|  |  |  | // to work properly with our implementation (IsKeyDown/IsKeyUp checks) | 
		
	
		
			
			|  |  |  | if (action == GLFW_RELEASE) CORE.Input.Keyboard.currentKeyState[key] = 0; | 
		
	
		
			
			|  |  |  | else CORE.Input.Keyboard.currentKeyState[key] = 1; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // Check if there is space available in the key queue | 
		
	
		
			
			|  |  |  | if ((CORE.Input.Keyboard.keyPressedQueueCount < MAX_KEY_PRESSED_QUEUE) && (action == GLFW_PRESS)) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | // Add character to the queue | 
		
	
		
			
			|  |  |  | CORE.Input.Keyboard.keyPressedQueue[CORE.Input.Keyboard.keyPressedQueueCount] = key; | 
		
	
		
			
			|  |  |  | CORE.Input.Keyboard.keyPressedQueueCount++; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // GLFW3 Char Key Callback, runs on key down (gets equivalent unicode char value) | 
		
	
	
		
			
				|  |  |  |