2017-09-28 11:16:24 +13:00

107 lines
2.4 KiB
JavaScript

function Cursor(rune)
{
this.line = {origin:null,from:null,to:null,destination:null};
this.is_down = false;
this.query = null;
this.mode = "vertex";
// default vertex
// shift rect
// alt -> arc_to_clockwise
// ctrl -> arc_to_counterclockwise
this.mouse_down = function(e)
{
e.preventDefault();
ronin.cursor.line.origin = {x:e.clientX,y:e.clientY};
ronin.cursor.line.from = {x:e.clientX,y:e.clientY};
// Save original query
ronin.cursor.query = ronin.commander.input_el.value;
if(e.shiftKey){ ronin.cursor.mode = "rect"; }
if(e.altKey){ ronin.cursor.mode = "arc_to"; }
if(e.ctrlKey){ ronin.cursor.mode = "cc_arc_to"; }
}
this.mouse_move = function(e)
{
e.preventDefault();
if(!ronin.cursor.line.from){ return; }
ronin.cursor.line.to = {x:e.clientX,y:e.clientY};
if(ronin.commander.active_module()){
}
else if(e.altKey){
ronin.eraser.stroke(ronin.cursor.line);
}
else{
ronin.brush.stroke(ronin.cursor.line);
}
ronin.cursor.inject_query();
ronin.cursor.line.from = {x:e.clientX,y:e.clientY};
}
this.mouse_up = function(e)
{
e.preventDefault();
ronin.cursor.line.destination = {x:e.clientX,y:e.clientY};
ronin.cursor.inject_query();
ronin.cursor.is_down = false;
ronin.cursor.line = {};
ronin.cursor.mode = "vertex";
ronin.cursor.query = ronin.commander.input_el.value;
}
this.inject_query = function()
{
if(ronin.cursor.query.indexOf("$") < 0){ return; }
var a = ronin.cursor.line.origin;
var b = ronin.cursor.line.destination ? ronin.cursor.line.destination : ronin.cursor.line.from;
var str = "<error>";
if(ronin.cursor.mode == "vertex"){
str = b.x+","+b.y;
}
else if(ronin.cursor.mode == "rect"){
var offset = a.x+","+a.y;
var rect = (b.x - a.x)+"x"+(b.y - a.y);
str = offset+"|"+rect;
}
else if(ronin.cursor.mode == "arc_to"){
str = "@>"+b.x+","+b.y;
}
else if(ronin.cursor.mode == "cc_arc_to"){
str = "@<"+b.x+","+b.y;
}
//
var i = ronin.cursor.query.indexOf("$");
var i1 = ronin.cursor.query.substr(i,1);
if(i1 == "$"){
ronin.commander.inject(ronin.cursor.query.replace("$+",str+"&$+"));
}
else{
ronin.commander.inject(ronin.cursor.query.replace("$",str));
}
}
function distance_between(a,b)
{
return Math.sqrt( (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y) );
}
}