VPA-Keyboard

For planets.nu -- Add VPA-key strokes, and commands

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==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);
		}
	}
}