- // ==UserScript==
- // @name Kogama Keyboard Injector
- // @namespace http://tampermonkey.net/
- // @version 1.0
- // @description Injects an Apple-like keyboard script into Kogama game pages automatically, including within iframes.
- // @author YourName
- // @match *://www.kogama.com/*
- // @match *://friends.kogama.com/*
- // @match *://kogama.com.br/*
- // @match *://www.kogama.com.br/*
- // @match *://kogama.game/*
- // @grant none
- // ==/UserScript==
-
- (function() {
- 'use strict';
-
- // Function to create and inject the keyboard script
- function injectKeyboardScript() {
- const script = document.createElement('script');
- script.textContent = `
- // Your custom keyboard script here
-
- // Create keyboard container
- const keyboardContainer = document.createElement('div');
- keyboardContainer.style.position = 'fixed';
- keyboardContainer.style.bottom = '20px';
- keyboardContainer.style.left = '50%';
- keyboardContainer.style.transform = 'translateX(-50%)';
- keyboardContainer.style.width = '95%';
- keyboardContainer.style.maxWidth = '1200px';
- keyboardContainer.style.height = '300px';
- keyboardContainer.style.backgroundColor = '#d4d4d4'; // Light grey background
- keyboardContainer.style.border = '1px solid #ccc';
- keyboardContainer.style.borderRadius = '15px';
- keyboardContainer.style.zIndex = '10000';
- keyboardContainer.style.display = 'none'; // Initially hidden
- keyboardContainer.style.padding = '10px';
- keyboardContainer.style.boxShadow = '0px 4px 15px rgba(0,0,0,0.2)';
- keyboardContainer.style.userSelect = 'none';
- keyboardContainer.style.fontFamily = 'sans-serif'; // Apple-like font
- document.body.appendChild(keyboardContainer);
-
- // Function to toggle keyboard visibility
- function toggleKeyboardVisibility() {
- if (keyboardContainer.style.display === 'none') {
- keyboardContainer.style.display = 'block';
- } else {
- keyboardContainer.style.display = 'none';
- }
- }
-
- // Detect if the user is on mobile or PC
- const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
-
- if (isMobile) {
- // Mobile: Create open/close button
- const toggleButton = document.createElement('button');
- toggleButton.textContent = '⌨️ Open Keyboard';
- toggleButton.style.position = 'fixed';
- toggleButton.style.bottom = '330px';
- toggleButton.style.left = '10px';
- toggleButton.style.padding = '10px 20px';
- toggleButton.style.zIndex = '10001';
- toggleButton.style.backgroundColor = '#007aff'; // Apple blue color
- toggleButton.style.color = '#fff';
- toggleButton.style.border = 'none';
- toggleButton.style.borderRadius = '5px';
- toggleButton.style.fontSize = '16px';
- toggleButton.style.boxShadow = '0px 2px 5px rgba(0,0,0,0.2)';
- document.body.appendChild(toggleButton);
-
- // Toggle keyboard visibility when button is clicked
- toggleButton.addEventListener('click', () => {
- toggleKeyboardVisibility();
- toggleButton.textContent = keyboardContainer.style.display === 'none' ? '⌨️ Open Keyboard' : '⌨️ Close Keyboard';
- });
- } else {
- // PC: Listen for 'T' key press to toggle keyboard visibility
- document.addEventListener('keydown', (e) => {
- if (e.key.toLowerCase() === 't') {
- toggleKeyboardVisibility();
- }
- });
- }
-
- // Draggable functionality for both cursor and touch
- let isDragging = false;
- let offsetX, offsetY;
-
- function startDrag(e) {
- isDragging = true;
- offsetX = e.clientX ? e.clientX - keyboardContainer.getBoundingClientRect().left : e.touches[0].clientX - keyboardContainer.getBoundingClientRect().left;
- offsetY = e.clientY ? e.clientY - keyboardContainer.getBoundingClientRect().top : e.touches[0].clientY - keyboardContainer.getBoundingClientRect().top;
- }
-
- function drag(e) {
- if (isDragging) {
- const x = e.clientX ? e.clientX : e.touches[0].clientX;
- const y = e.clientY ? e.clientY : e.touches[0].clientY;
- keyboardContainer.style.left = \`\${x - offsetX}px\`;
- keyboardContainer.style.top = \`\${y - offsetY}px\`;
- }
- }
-
- function stopDrag() {
- isDragging = false;
- }
-
- keyboardContainer.addEventListener('mousedown', startDrag);
- document.addEventListener('mousemove', drag);
- document.addEventListener('mouseup', stopDrag);
-
- keyboardContainer.addEventListener('touchstart', startDrag);
- document.addEventListener('touchmove', drag);
- document.addEventListener('touchend', stopDrag);
-
- // Keyboard keys array (including arrow keys and spacebar)
- const keys = [
- ['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P'],
- ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L'],
- ['Z', 'X', 'C', 'V', 'B', 'N', 'M'],
- ['ArrowUp'],
- ['ArrowLeft', 'Space', 'ArrowRight'],
- ['ArrowDown']
- ];
-
- // Create key buttons
- keys.forEach(row => {
- const rowDiv = document.createElement('div');
- rowDiv.style.display = 'flex';
- rowDiv.style.justifyContent = 'center';
- rowDiv.style.marginBottom = '10px';
-
- row.forEach(key => {
- const keyButton = document.createElement('button');
- keyButton.textContent = key === 'Space' ? '' : key;
- keyButton.style.flex = key === 'Space' ? '2' : 'none';
- keyButton.style.padding = '15px';
- keyButton.style.margin = '2px';
- keyButton.style.borderRadius = '8px';
- keyButton.style.fontSize = '18px';
- keyButton.style.backgroundColor = '#ffffff'; // White keys
- keyButton.style.border = '1px solid #ddd';
- keyButton.style.boxShadow = '0px 2px 4px rgba(0,0,0,0.1)';
- keyButton.style.fontFamily = 'Arial, sans-serif';
- rowDiv.appendChild(keyButton);
-
- // Key press event listener
- keyButton.addEventListener('click', () => {
- handleKeyPress(key);
- });
- });
-
- keyboardContainer.appendChild(rowDiv);
- });
-
- // Handle key press (send key event to Kogama)
- function handleKeyPress(key) {
- const event = new KeyboardEvent('keydown', {
- key: key === 'Space' ? ' ' : key,
- code: \`Key\${key.toUpperCase()}\`,
- keyCode: key === 'Enter' ? 13 : key.charCodeAt(0),
- bubbles: true,
- cancelable: true
- });
-
- document.dispatchEvent(event);
-
- // Custom API interaction for Kogama
- if (typeof kogamaAPI !== 'undefined') {
- kogamaAPI.sendKey(key); // Example, replace with actual API function
- }
- }
-
- // Kogama API integration (example, replace with actual API calls)
- const kogamaAPI = {
- sendKey: function(key) {
- console.log(\`Sending key: \${key} to Kogama API\`);
- // Implement actual Kogama API interaction here for movement and jumping
- }
- };
-
- // Ensure the keyboard works on dynamically loaded pages
- function checkForGamePage() {
- // Check if the game or other specific page is loaded
- const gameFrame = document.querySelector('iframe[src*="game"]');
- if (gameFrame) {
- // Insert keyboard into game frame if it's loaded in an iframe
- gameFrame.contentWindow.document.body.appendChild(keyboardContainer);
- } else {
- // Attach to main document body if not in an iframe
- document.body.appendChild(keyboardContainer);
- }
- }
-
- // Run check on page load
- checkForGamePage();
-
- // Run check when navigating between pages (using MutationObserver)
- const observer = new MutationObserver(checkForGamePage);
- observer.observe(document.body, { childList: true, subtree: true });
- `;
- document.body.appendChild(script);
- }
-
- // Inject the keyboard script when the page loads
- window.addEventListener('load', injectKeyboardScript);
-
- // Optionally, re-inject on navigation within the site (e.g., when navigating to different game pages)
- const observer = new MutationObserver(() => {
- injectKeyboardScript();
- });
-
- observer.observe(document.body, { childList: true, subtree: true });
- })();