diff --git a/sources/index.html b/sources/index.html index ae8dc44..1aa4a1c 100644 --- a/sources/index.html +++ b/sources/index.html @@ -6,6 +6,7 @@ + diff --git a/sources/scripts/commander.js b/sources/scripts/commander.js index 820c1a2..a24e601 100644 --- a/sources/scripts/commander.js +++ b/sources/scripts/commander.js @@ -35,6 +35,7 @@ function Commander() ronin.commander.input_el.value = ""; ronin.hint.update(); + ronin.guide.update(); } this.on_input = function(e) @@ -56,6 +57,7 @@ function Commander() this.inject = function(str,entry_code = "$") { ronin.commander.input_el.value = ronin.commander.input_el.value.replace(entry_code,str); + ronin.guide.update(); } this.query = function() diff --git a/sources/scripts/cursor.js b/sources/scripts/cursor.js index f216300..8106ec2 100644 --- a/sources/scripts/cursor.js +++ b/sources/scripts/cursor.js @@ -41,7 +41,7 @@ function Cursor(rune) if(distance_between(ronin.cursor.line.origin,ronin.cursor.line.destination) > 10){ var offset = ronin.cursor.line.origin.x+","+ronin.cursor.line.origin.y; var rect = (ronin.cursor.line.destination.x - ronin.cursor.line.origin.x)+"x"+(ronin.cursor.line.destination.y - ronin.cursor.line.origin.y); - ronin.commander.inject(offset+"%"+rect); + ronin.commander.inject(offset+"|"+rect); } else{ ronin.commander.inject(e.clientX+","+e.clientY); diff --git a/sources/scripts/grid.js b/sources/scripts/grid.js index d1f06f6..d8b929c 100644 --- a/sources/scripts/grid.js +++ b/sources/scripts/grid.js @@ -1,21 +1,8 @@ function Grid() { - this.el = document.createElement('canvas'); this.el.id = "grid"; + Layer.call(this); - this.install = function() - { - ronin.el.appendChild(this.el); - } - - this.update = function() - { - this.el.width = window.innerWidth * 2; - this.el.height = window.innerHeight * 2; - this.el.style.width = (window.innerWidth)+"px"; - this.el.style.height = (window.innerHeight)+"px"; - - this.draw(); - } + this.el.id = "grid"; this.draw = function() { @@ -41,11 +28,6 @@ function Grid() ctx.fill(); } - this.context = function() - { - return this.el.getContext('2d'); - } - this.resize_to = function(size) { this.el.width = size.width * 2; @@ -55,9 +37,4 @@ function Grid() this.draw(); } - - this.clear = function() - { - ronin.render.context().clearRect(0, 0, this.el.width, this.el.height); - } } \ No newline at end of file diff --git a/sources/scripts/guide.js b/sources/scripts/guide.js index 4b4e4c0..3779be4 100644 --- a/sources/scripts/guide.js +++ b/sources/scripts/guide.js @@ -1,25 +1,88 @@ function Guide() { - this.el = document.createElement('canvas'); this.el.id = "guide"; - - this.install = function() - { - ronin.el.appendChild(this.el); - } + Layer.call(this); + + this.el.id = "guide"; this.update = function() { - var u = ronin.guide.find_unit(); + this.el.width = window.innerWidth * 2; + this.el.height = window.innerHeight * 2; + this.el.style.width = (window.innerWidth)+"px"; + this.el.style.height = (window.innerHeight)+"px"; - console.log(u); - // if(u.x){ this.draw_pos(u); } - // if(u.width){ this.draw_rect(u); } + var u = ronin.guide.find_unit(); + if(!u){ return; } + + this.clear(); + this.draw(u) + } + + this.draw = function(u) + { + if(u.x && u.y){ + this.draw_pos(u); + } + if(u.width && u.height){ + this.draw_rect(u); + } + } + + this.draw_rect = function(u) + { + var ctx = this.context(); + + u.x = !u.x ? 0 : u.x; + u.y = !u.y ? 0 : u.y; + + var offset = {x:u.x * 2, y:u.y * 2}; + var rect = {width:u.width * 2,height:u.height * 2}; + + ctx.beginPath(); + ctx.globalCompositeOperation="source-over"; + ctx.moveTo(offset.x,offset.y); + ctx.lineTo(offset.x + rect.width,offset.y); + ctx.lineTo(offset.x + rect.width,offset.y + rect.height); + ctx.lineTo(offset.x,offset.y + rect.height); + ctx.lineTo(offset.x,offset.y); + ctx.lineCap="round"; + ctx.lineWidth = 2; + ctx.strokeStyle = "#000"; + ctx.stroke(); + ctx.closePath(); + } + + this.draw_pos = function(u) + { + var ctx = this.context(); + + var offset = 2; + var radius = 5; + + var pos = {x:u.x * 2, y:u.y * 2}; + + ctx.beginPath(); + ctx.globalCompositeOperation="source-over"; + ctx.moveTo(pos.x+offset,pos.y); + ctx.lineTo(pos.x+radius,pos.y); + ctx.moveTo(pos.x,pos.y+offset); + ctx.lineTo(pos.x,pos.y+radius); + ctx.moveTo(pos.x-offset,pos.y); + ctx.lineTo(pos.x-radius,pos.y); + ctx.moveTo(pos.x,pos.y-offset); + ctx.lineTo(pos.x,pos.y-radius); + ctx.lineCap="round"; + ctx.lineWidth = 2; + ctx.strokeStyle = "#000"; + ctx.stroke(); + ctx.closePath(); } this.find_unit = function(q = ronin.commander.query()) { for(method_id in q.methods){ var params = q.methods[method_id]; + if(!params){ return null; } if(params.from){ return params.from[0]; } if(params[0]){ return params[0]; } return params; diff --git a/sources/scripts/layer.js b/sources/scripts/layer.js new file mode 100644 index 0000000..bd2f399 --- /dev/null +++ b/sources/scripts/layer.js @@ -0,0 +1,46 @@ +function Layer() +{ + this.el = document.createElement('canvas'); + + this.install = function() + { + ronin.el.appendChild(this.el); + } + + this.update = function() + { + this.el.width = window.innerWidth * 2; + this.el.height = window.innerHeight * 2; + this.el.style.width = (window.innerWidth)+"px"; + this.el.style.height = (window.innerHeight)+"px"; + } + + this.context = function() + { + return this.el.getContext('2d'); + } + + this.resize_to = function(size) + { + this.el.width = size.width * 2; + this.el.height = size.height * 2; + this.el.style.width = size.width+"px"; + this.el.style.height = size.height+"px"; + } + + this.select = function(x,y,width,height) + { + return this.context().getImageData(x, y, width * 2, height * 2); + } + + this.image = function() + { + return this.element.toDataURL('image/png'); + } + + this.clear = function() + { + console.log("Clear") + this.context().clearRect(0, 0, this.el.width * 2, this.el.height * 2); + } +} \ No newline at end of file diff --git a/sources/scripts/modules/frame.js b/sources/scripts/modules/frame.js index 4f3c78a..00c684f 100644 --- a/sources/scripts/modules/frame.js +++ b/sources/scripts/modules/frame.js @@ -20,7 +20,11 @@ function Frame() this.methods.crop = function(p) { - + var data = ronin.render.select(p.x,p.y,p.width,p.height); + + ronin.render.clear(); + ronin.frame.resize_to(p); + ronin.render.context().putImageData(data, 0, 0); } this.resize_to = function(size) @@ -33,5 +37,6 @@ function Frame() win.setSize(size.width,size.height); ronin.render.resize_to(size); ronin.grid.resize_to(size); + ronin.guide.resize_to(size); } } \ No newline at end of file diff --git a/sources/scripts/query.js b/sources/scripts/query.js index 65f43cb..b3e2a34 100644 --- a/sources/scripts/query.js +++ b/sources/scripts/query.js @@ -78,8 +78,8 @@ function Query(query_str) function parse_unit(unit_str) { - if(unit_str.indexOf("%") > -1 && unit_str.indexOf(",") > -1 && unit_str.indexOf("x") > -1){ - return Object.assign(parse_unit(unit_str.split("%")[0]), parse_unit(unit_str.split("%")[1])); + if(unit_str.indexOf("|") > -1 && unit_str.indexOf(",") > -1 && unit_str.indexOf("x") > -1){ + return Object.assign(parse_unit(unit_str.split("|")[0]), parse_unit(unit_str.split("|")[1])); } if(unit_str.indexOf(",") > -1){ return {x:parseInt(unit_str.split(",")[0]),y:parseInt(unit_str.split(",")[1])}; diff --git a/sources/scripts/render.js b/sources/scripts/render.js index 1adb7f5..e993d3b 100644 --- a/sources/scripts/render.js +++ b/sources/scripts/render.js @@ -1,35 +1,6 @@ function Render() { - this.el = document.createElement('canvas'); this.el.id = "render"; - - this.install = function() - { - ronin.el.appendChild(this.el); - } - - this.update = function() - { - this.el.width = window.innerWidth * 2; - this.el.height = window.innerHeight * 2; - this.el.style.width = (window.innerWidth)+"px"; - this.el.style.height = (window.innerHeight)+"px"; - } - - this.context = function() - { - return this.el.getContext('2d'); - } - - this.resize_to = function(size) - { - this.el.width = size.width * 2; - this.el.height = size.height * 2; - this.el.style.width = size.width+"px"; - this.el.style.height = size.height+"px"; - } - - this.clear = function() - { - ronin.render.context().clearRect(0, 0, this.el.width, this.el.height); - } + Layer.call(this); + + this.el.id = "render"; } \ No newline at end of file diff --git a/sources/scripts/ronin.js b/sources/scripts/ronin.js index 6ab3e1e..feee9b6 100644 --- a/sources/scripts/ronin.js +++ b/sources/scripts/ronin.js @@ -29,7 +29,9 @@ function Ronin() document.body.appendChild(this.el); this.grid.install(); + this.guide.install(); this.render.install(); + this.commander.install(); this.hint.install(); @@ -49,7 +51,8 @@ function Ronin() console.log("Ronin","Started"); this.render.update(); this.grid.update(); + this.guide.update(); - this.commander.input_el.value = "line tween:$&$&$>>$&$&$"; + this.commander.input_el.value = "frame crop:$"; } } \ No newline at end of file