hypCircle

shows a modified hyperjump ring and warp 9 circles

// ==UserScript==
// @name          hypCircle
// @description   shows a modified hyperjump ring and warp 9 circles
// @include       http://play.planets.nu/*
// @include 	  http://test.planets.nu/*
// @include 	  http://planets.nu/*
// @version       3.0.0
// @homepage      https://greasyfork.org/en/users/32642-stephen-piper
// @namespace https://greasyfork.org/en/users/32642-stephen-piper
// ==/UserScript==

function wrapper() {
  function hypTools() {
  }
  hypTools.prototype = {
    loadControls : function() {
      // debugger;
      this.putWarpCircles = false;
      this.warpcircles = [];
      this.putMultiTurnCircles = false;
      this.multiturncircles = [];
      this.addlinestart = false;
      this.addlineend = false;
      this.lines = [];
      this.lineStart = null;

      this.clearData();

      //      if (vgapMap.prototype.spMenuItem != undefined) {
      vgaPlanets.prototype.spMenuItem("Hyp Circle", "hypTools", function() {
        vgap.map.putHypCircle = true;
        $("body").css("cursor", "crosshair");
      });

      vgaPlanets.prototype.spMenuItem("Warp Circle", "hypTools", function() {
        hypTools.putWarpCircle = true;
        $("body").css("cursor", "crosshair");
      });

      vgaPlanets.prototype.spMenuItem("Warp Circle x 3", "hypTools", function() {
        hypTools.putMultiTurnCircle = true;
        $("body").css("cursor", "crosshair");
      });

      //	vgaPlanets.prototype.spMenuItem("Add Line", "addLine", function() {
      //	  if (hypTools.addlineend) {
      //	    hypTools.startlinept.pop();
      //	  }
      //	  hypTools.addlinestart = true;
      //	  hypTools.addlineend = false;
      //	});
      //
      //	vgaPlanets.prototype.spMenuItem("Delete Line", "deleteLine", function() {
      //	  hypTools.deleteline = true;
      //	   $("body").css("cursor", "crosshair");
      //	});

      vgaPlanets.prototype.spMenuItem("Clear", "_massClear", function() {
        hypTools.prototype.clearData();
      });
    //      }
    },

    clearData : function() {
      vgap.map.putHypCircle = false;
      vgap.map.hypcircles = new Array();
      hypTools.putWarpCircle = false;
      hypTools.warpcircles = [];
      hypTools.putMultiTurnCircles = false;
      hypTools.multiturncircles = [];
      hypTools.addlinestart = false;
      hypTools.addlineend = false;
      hypTools.lines = [];
      hypTools.lineStart = null;
    },

    addWarpCircle : function(a, b, c) {
      hypTools.warpcircles.push({
        x : a,
        y : b,
        w : c
      });
      $("body").css("cursor", "");
    },

    addMultiTurn : function(a, b, c) {
      hypTools.multiturncircles.push({
        x : a,
        y : b,
        w : c
      });
      $("body").css("cursor", "");
    },

    //    addLineStart : function(a, b) {
    //      hypTools.linestart = {
    //	x : a,
    //	y : b
    //      };
    //      
    //      $("body").css("cursor", "crosshair");
    //   },
    //
    //   addLineEnd : function(a, b) {
    //     hypTools.lines.push({
    //       sx : hypTools.linestart.x,
    //       sy : hypTools.linestart.y,
    //       ex : a,
    //       ey : b
    //     });
    //     hypTools.linestart = null;
    //
    //     hypTools.prototype.writeLines();
    //
    //     $("body").css("cursor", "");
    //   },
    //
    //    writeLines : function () {
    //      var p = vgap.myplanets[0];
    //      if (p.note == null)
    //	p.note = vgap.addNote(p, 1);
    //
    //      p.note.body = "{\"lines\" :" + JSON.stringify(hypTools.lines) + "}";
    ////console.log(p.note.body);
    //      
    //      $("body").css("cursor", "");
    //    },
    //    
    //    deleteLine : function(a, b) {
    //      d = 9999;
    //      
    //      for (i = 0; i<hypTools.lines.length; ++i){
    //	l = hypTools.lines[i];
    //	if (l != null) {
    //	  s = Math.min(Math.dist(l.sx, l.sy, a, b), Math.dist(l.ex, l.ey, a, b));
    //	  
    //	  if(d > s) {
    //	    d = s;
    //	    id = i;
    //	  }
    //	}
    //      }
    //	  
    //      if (id != undefined) {
    //	delete hypTools.lines[id];
    //	hypTools.prototype.writeLines();
    //      }
    //    },
    //      
    //    parsenotes : function() {
    //      for (var f = 0; f < vgap.myplanets.length; f++) {
    //	var l = vgap.myplanets[f];
    //	if (l.note != undefined && l.note.body != "") {
    //	  try {
    //	    var jn = JSON.parse(l.note.body
    //		// , function(h, k) {console.log(h+" "+k)}
    //	    );
    //	  } catch (e) {
    //	    console.log("parse error " + l.id + " " + l.note.body);
    //	    continue;
    //	  }
    //
    //	  if (jn.lines != undefined) {
    //	    l = jn.lines;
    //
    //	    for (f = 0; f < l.length; f++) {
    //	      p = l[f];
    //	      if (p != null) {
    //	
    //		console.log(p);
    //
    //		hypTools.lines.push({
    //		  sx : p.sx,
    //		  sy : p.sy,
    //		  ex : p.ex,
    //		  ey : p.ey
    //		});
    //	      }
    //	    }
    //	  }
    //	}
    //      }
    //    },

  };

  var oldRenderMapTools = vgapMap.prototype.renderMapTools;
  vgapMap.prototype.renderMapTools = function(ctx) {

    h = this.hypcircles;
    this.hypcircles = [];

    oldRenderMapTools.apply(this, arguments);

    this.hypcircles = h;

    for (var d = 0; d < this.hypcircles.length; d++) {
      var c = this.hypcircles[d];

      // planetary hypcircle
      for (var i = 0; i < vgap.planets.length; ++i) {
        var planet = vgap.planets[i];
        var dist = Math.dist(c.x, c.y, planet.x, planet.y);
        if (dist >= 340 && dist <= 360) {
          this.drawCircle(ctx, this.screenX(planet.x), this.screenY(planet.y), 12 * this.zoom, "cyan", 1);
        }
        else if (dist >= 338 && dist <= 362) {
          this.drawCircle(ctx, this.screenX(planet.x), this.screenY(planet.y), 12 * this.zoom, "orange", 1);
        }
      }

      // large hypcircle
      this.drawCircle(ctx, this.screenX(c.x), this.screenY(c.y), 340 * this.zoom, "cyan", 1);
      this.drawCircle(ctx, this.screenX(c.x), this.screenY(c.y), 360 * this.zoom, "cyan", 1);
    }

    for (var d = 0; d < hypTools.warpcircles.length; d++) {
      var c = hypTools.warpcircles[d];

      // planetary hypcircle
      for (var i = 0; i < vgap.planets.length; ++i) {
        var planet = vgap.planets[i];
        var dist = Math.dist(c.x, c.y, planet.x, planet.y);
        if (dist >= c.w && dist <= c.w + 3) {
          this.drawCircle(ctx, this.screenX(planet.x), this.screenY(planet.y), 12 * this.zoom, "blue", 1);
        }
      }

      this.drawCircle(ctx, this.screenX(c.x), this.screenY(c.y), c.w * this.zoom, "cyan", 1);
    }

    for (var d = 0; d < hypTools.multiturncircles.length; d++) {
      var c = hypTools.multiturncircles[d];
      this.drawCircle(ctx, this.screenX(c.x), this.screenY(c.y), 1 * c.w * this.zoom, "cyan", 1);
      this.drawCircle(ctx, this.screenX(c.x), this.screenY(c.y), 2 * c.w * this.zoom, "cyan", 1);
      this.drawCircle(ctx, this.screenX(c.x), this.screenY(c.y), 3 * c.w * this.zoom, "cyan", 1);
    }

  //    if (hypTools.linestart) {
  //      var l = hypTools.linestart;
  //      this.drawCircle(ctx, this.screenX(l.x), this.screenY(l.y), 1 * this.zoom, "orange", 2);
  //    }
  //
  //    for (var d = 0; d < hypTools.lines.length; ++d) {
  //      var l = hypTools.lines[d];
  //      if (l != null)
  //	this.drawLine(ctx, this.screenX(l.sx), this.screenY(l.sy), this.screenX(l.ex), this.screenY(l.ey), "orange", 1);
  //    }
  };

  var oldClick = vgapMap.prototype.click;
  vgapMap.prototype.click = function(event) {
    if (this.over) {
      a = this.over.x;
      b = this.over.y;
    }
    else {
      a = this.x;
      b = this.y;
    }
    if (vgap.shipScreen.ship != undefined) {
      s = vgap.shipScreen.ship;
      w = s.engineid * s.engineid + .4;
    }
    else {
      w = 81.4;
    }

    // snap hypcircle to closest ship or planet
    if (hypTools.putWarpCircle) {
      hypTools.prototype.addWarpCircle(a, b, w);

      hypTools.putWarpCircle = false;
      $("body").css("cursor", "");
    }

    //    if (hypTools.addlinestart) {
    //      hypTools.prototype.addLineStart(a, b);
    //
    //      hypTools.addlinestart = false;
    //      hypTools.addlineend = true;
    //      $("body").css("cursor", "crosshair");
    //      // return
    //    } else if (hypTools.addlineend) {
    //      hypTools.prototype.addLineEnd(a, b);
    //
    //      hypTools.addlinestart = false;
    //      hypTools.addlineend = false;
    //      $("body").css("cursor", "");
    //    }
    //
    //    if (hypTools.deleteline) {
    //      hypTools.prototype.deleteLine(a, b);
    //      
    //      $("body").css("cursor", "");
    //    }

    if (hypTools.putMultiTurnCircle) {
      hypTools.prototype.addMultiTurn(a, b, w);

      hypTools.putMultiTurnCircle = false;
      $("body").css("cursor", "");
    }
    if (this.putHypCircle) {
      this.hyperjump(a, b);

      this.putHypCircle = false;
      $("body").css("cursor", "");
    }

    oldClick.apply(this, arguments);

    this.draw();
  };

  //  var oldLoad = vgapMap.prototype.load;
  //  vgapMap.prototype.load = function() {
  //    oldLoad.apply(this, arguments);
  //    
  //    hypTools.prototype.parsenotes();
  //  };

  var oldLoadControls = vgapMap.prototype.loadControls;
  vgapMap.prototype.loadControls = function() {
    oldLoadControls.apply(this, arguments);

    hypTools.prototype.loadControls();
  };
}

var script = document.createElement("script");
script.type = "application/javascript";
script.textContent = "(" + wrapper + ")();";

document.body.appendChild(script);