For planets.nu -- Add VPA-key strokes, and commands
// ==UserScript== // @name VPA-Keyboard // @author Quapla // @copyright Basecode: Kero van Gelder, 2016 - latest: Quapla // @license Lesser Gnu Public License, version 3 // @downloadURL // @description For planets.nu -- Add VPA-key strokes, and commands // @namespace quapla/VPA-Keyboard // @include http://planets.nu/* // @include http://play.planets.nu/* // @include http://test.planets.nu/* // @version 1.0.8 // @grant none // ==/UserScript== // Reference: Kero van Gelder's Keyboard: http://chmeee.org/ext/planets.nu/Keyboard.user.js // Changes by Quapla: // Use Arrows to select ships // --> LEFT/RIGHT numerical previous/next // --> UP/DOWN previous/next at same position as planet -> base -> ships (numerical) -> again planet // --> '#' sets all ships at position "ready" and moves to next ship (not ready yet) // --> ' ' toggles move mode to set waypoints with cursors, use SHIFT for 81LY sharedContent.prototype.planetSurvey_ori = sharedContent.prototype.planetSurvey; sharedContent.prototype.planetSurvey = function (planetId) { vgap.currentPlanetSurvey = planetId; this.planetSurvey_ori(planetId); } sharedContent.prototype.editNote_ori = sharedContent.prototype.editNote; sharedContent.prototype.editNote = function (noteId, noteType) { vgap.currentNoteId = noteId; vgap.currentNoteType = noteType; this.editNote_ori(noteId, noteType); $("#EditNote").focus(); } vgapShipScreen.prototype.shipMission_ori = vgapShipScreen.prototype.shipMission; vgapShipScreen.prototype.shipMission = function () { this.shipMissionOpen = true; this.shipMission_ori(); } vgapShipScreen.prototype.selectMission_ori = vgapShipScreen.prototype.selectMission; vgapShipScreen.prototype.selectMission = function (missionId) { this.selectMission_ori(missionId); this.shipMissionOpen = false; } vgapShipScreen.prototype.primaryEnemy_ori = vgapShipScreen.prototype.primaryEnemy; vgapShipScreen.prototype.primaryEnemy = function () { this.primaryEnemyOpen = true; this.primaryEnemy_ori(); } vgapShipScreen.prototype.selectEnemy_ori = vgapShipScreen.prototype.selectEnemy; vgapShipScreen.prototype.selectEnemy = function (enemyId) { this.selectEnemy_ori(enemyId); this.primaryEnemyOpen = false; } vgaPlanets.prototype.closeMore_ori = vgaPlanets.prototype.closeMore; vgaPlanets.prototype.closeMore = function (callback) { vgap.closeMore_ori(callback); this.primaryEnemyOpen = false; vgap.currentPlanetSurvey = null; vgap.shipScreen.shipMissionOpen = false; } vgapMap.prototype.selectPlanet_ori = vgapMap.prototype.selectPlanet; vgapMap.prototype.selectPlanet = function (planet) { vgaPlanets.prototype.Quapla_Move = false; this.selectPlanet_ori(planet); } vgapMap.prototype.selectShip_ori = vgapMap.prototype.selectShip; vgapMap.prototype.selectShip = function (ship) { vgaPlanets.prototype.Quapla_Move = false; this.selectShip_ori(ship); } vgapMap.prototype.drawPlanetNames = function (e, f) { if (vgap.map.planetnames) { for (var a = 0; a < vgap.planets.length; a++) { var c = vgap.planets[a]; if (this.isVisible(c.x, c.y, this.planetRad(c))) { var show = c.id + "- " + c.name; var ctx = vgap.map.ctx; ctx.textAlign = "center"; //ctx.fillStyle = color; ctx.fillText(show, this.screenX(c.x), (this.screenY(c.y)-10)); } } } else { //$(".PlanetName").remove() vgapMap.prototype.reload(); } /* drawPlanetNames : function (x, y) { for (var i = 0; i < vgap.planets.length; i++) { var planet = vgap.planets[i]; var left = this.screenX(planet.x) + 10; var top = this.screenY(planet.y) - 15; $("<div class='PlanetName' style='left:" + left + "px;top:" + top + "px;'>" + planet.id + ": " + planet.name + "</div>").appendTo(this.mapCover); } */ } var hotkey_ori = vgaPlanets.prototype.hotkey; vgaPlanets.prototype.hotkey = function (event) { //console.log("KC: "+event.keyCode); if (vgap.shipScreen.primaryEnemyOpen) { var enemy = 0; if (event.keyCode >= 48 && event.keyCode <= 57) enemy = event.keyCode - 48; if (event.keyCode >= 65 && event.keyCode <= 90) enemy = event.keyCode - 65 + 10; if (enemy <= vgap.players.length) { vgap.shipScreen.selectEnemy(enemy); return; } } if (vgap.shipScreen.shipMissionOpen) { var missionId = -1; if (event.keyCode == 67) missionId = 9; // 'c', Cloak else if (event.keyCode == 69) missionId = 0; // 'e', Explore else if (event.keyCode == 73) missionId = 7; // 'i', Intercept else if (event.keyCode == 75) missionId = 3; // 'k', Kill else if (event.keyCode == 76) missionId = 2; // 'l', Lay Mines else if (event.keyCode == 77) missionId = 1; // 'm', Mine Sweep else if (event.keyCode == 83 && event.shiftKey) missionId = 8; // 'S', Special / Super Spy else if (event.keyCode == 83) missionId = 4; // 's', Sensor Sweep else if (event.keyCode == 84) missionId = 6; // 't', Tow if (missionId >= 0) { vgap.shipScreen.selectMission(missionId); return; } } if (vgap.editNoteOpen) { if (event.keyCode == 13 && event.ctrlKey) { this.saveNote(vgap.currentNoteId, vgap.currentNoteType); return; } } if (event.keyCode == 27) { if (this.findObjectFeatureActivated) vgap.map.hideFindObjectFeature(); else if (vgap.moreOpen) this.closeMore(); else if (this.lcOpen) this.deselectAll(); return; } /* TAB not working properly in browsers if (event.keyCode == 9) { //TAB} if (event.shiftKey) vgap.map.zoomout() else vgap.map.zoomin() return; } */ if (vgap.hotkeysOn) { switch (event.keyCode) { case 8: if ((this.starbaseScreenOpen || this.planetScreenOpen || this.shipScreenOpen) && !this.moreOpen) { vgap.rPrev(); return; } case 78: // 'n' if (event.shiftKey) { if (this.planetScreenOpen) { shtml.editNote(vgap.planetScreen.planet.id, 1); return; } else if (vgap.currentPlanetSurvey > 0) { // ship screen is open, but unowned planet is selected shtml.editNote(vgap.currentPlanetSurvey, 1); return } else if (this.shipScreenOpen) { shtml.editNote(vgap.shipScreen.ship.id, 2); return; } else if (this.starbaseScreenOpen) { shtml.editNote(vgap.starbaseScreen.starbase.id, 3); return; } } break; case 88: // 'x' this.map.clearTools(); return; case 90: // 'z' this.map.zoomFarInOrOut_OnWaypointOrPlanet(); return; case 32: //space bar if (this.planetScreenOpen || this.shipScreenOpen) { vgaPlanets.prototype.Quapla_Move = !vgaPlanets.prototype.Quapla_Move; return; } //case 188: // '<' if (event.shiftKey) case 38: // Arrow up if (vgaPlanets.prototype.Quapla_Move) if (event.shiftKey) this.map.moveSelect(0, 81); else this.map.moveSelect(0, 1); else vgap.unrotateActiveObject(); return; // case 190: // '>' case 40: // Arrow-Down if (event.shiftKey) if (vgaPlanets.prototype.Quapla_Move) if (event.shiftKey) this.map.moveSelect(0, -81); else this.map.moveSelect(0, -1); else vgap.rotateActiveObject(); return; case 39: // Arrow right // if (ev.keyCode == 39 && this.shipScreenOpen || this.planetScreenOpen) if (vgaPlanets.prototype.Quapla_Move) if (event.shiftKey) this.map.moveSelect(81, 0); else this.map.moveSelect(1, 0); else this.rNext(); return; case 37: // Arrow left // if (ev.keyCode == 39 && this.shipScreenOpen || this.planetScreenOpen) if (vgaPlanets.prototype.Quapla_Move) if (event.shiftKey) this.map.moveSelect(-81, 0); else this.map.moveSelect(-1, 0); else this.rPrev(); return; case 163: // '#' set ships/planet ready "Firefox" case 191: // Opera { var item = 0; var item2 = 0; if (this.planetScreenOpen) { var item = vgap.planetScreen.planet.id; vgap.planetScreen.planet.readystatus = 1; } else if (this.starbaseScreenOpen) { item = vgap.starbaseScreen.starbase.id; vgap.starbaseScreen.starbase.readystatus = 1; } else if (this.shipScreenOpen) { var ship = vgap.shipScreen.ship; item = ship.id; ship.readystatus = 1; // Set ready var ships = vgap.shipsAt(ship.x, ship.y) var index = ships.indexOf(ship); for (var i = 0; i < ships.length; i++) { if (ships[i].ownerid == vgap.player.id) if (ships[i].readystatus == 0) ships[i].readystatus = 1; } } do { this.rNext(); if (this.planetScreenOpen) { if (vgap.planetScreen.planet.readystatus < 1) break; // This is the next "unready" one... item2 = vgap.planetScreen.planet.id; } else if (this.starbaseScreenOpen) { if (vgap.starbaseScreen.starbase.readystatus < 1) break; item2 = vgap.starbaseScreen.starbase.id; } else if (this.shipScreenOpen) { if (vgap.shipScreen.ship.readystatus < 1) break; item2 = vgap.shipScreen.ship.id; } } while (item != item2); // until return; } case 80: // 'P' && (!this.planetScreenOpen && !this.starbaseScreenOpen)) case 112: // 'p' { vgap.map.planetnames = !vgap.map.planetnames; vgap.map.drawPlanetNames(); return; } } // End Case } hotkey_ori.apply(this, arguments); //this.hotkey_ori(event); } vgapMap.prototype.zoomFarInOrOut_OnWaypointOrPlanet = function () { var zoomedOut = (this.zoom < 29); if (zoomedOut) { this.zoomFactorBeforeZoomingInDeeply = this.zoom; this.setZoom(42); } else { this.setZoom(this.zoomFactorBeforeZoomingInDeeply); } var x, y; if (this.activeShip) { x = this.activeShip.targetx; y = this.activeShip.targety; } else if (this.activePlanet) { x = this.activePlanet.x; y = this.activePlanet.y; } else { x = this.centerX; y = this.centerY; } this.centerX = x; this.centerY = y; this.canvas.x = x - $(window).width() / 2 / this.zoom; this.canvas.y = y - $(window).height() / 2 / this.zoom; this.draw(); } vgaPlanets.prototype.rotateActiveObject = function () { if (vgap.planetScreenOpen) { var planet = vgap.map.activePlanet; if (planet.isbase) { vgap.map.selectStarbase(planet.id); } else { var ships = vgap.shipsAt(planet.x, planet.y); if (ships.length > 0) vgap.map.selectShip(ships[0].id); // else only a planet } } else if (vgap.starbaseScreenOpen) { var planet = vgap.map.activePlanet; var ships = vgap.shipsAt(planet.x, planet.y); if (ships.length > 0) { vgap.map.selectShip(ships[0].id); } else { vgap.map.selectPlanet(planet.id); } } else if (vgap.shipScreenOpen) { var ship = vgap.map.activeShip; var ships = vgap.shipsAt(ship.x, ship.y) var index = ships.indexOf(ship); if (index == ships.length - 1) { var planet = vgap.planetAt(ship.x, ship.y) if (planet) { vgap.map.selectPlanet(planet.id); } else if (ships.length > 1) { vgap.map.selectShip(ships[0].id); } // else Cannot rotate 1 ship } else { vgap.map.selectShip(ships[index + 1].id); } } } vgaPlanets.prototype.unrotateActiveObject = function () { if (vgap.planetScreenOpen) { var planet = vgap.map.activePlanet; var ships = vgap.shipsAt(planet.x, planet.y); if (ships.length > 0) { vgap.map.selectShip(ships[ships.length - 1].id); } else if (planet.isbase) { vgap.map.selectStarbase(planet.id); } // else only a planet } else if (vgap.starbaseScreenOpen) { var planet = vgap.map.activePlanet; vgap.map.selectPlanet(planet.id); } else if (vgap.shipScreenOpen) { var ship = vgap.map.activeShip; var ships = vgap.shipsAt(ship.x, ship.y) var index = ships.indexOf(ship); if (index == 0) { var planet = vgap.planetAt(ship.x, ship.y) if (planet) { if (planet.isbase) { vgap.map.selectStarbase(planet.id); } else { vgap.map.selectPlanet(planet.id); } } else { if (ships.length > 1) vgap.map.selectShip(ships[ships.length - 1].id); } } else { vgap.map.selectShip(ships[index - 1].id); } } }