From c23801b8bc3fbb734874ed0ae6bb134e6f3e7983 Mon Sep 17 00:00:00 2001 From: Devine Lu Linvega Date: Mon, 22 May 2017 07:33:08 -1000 Subject: [PATCH] Improved brush! --- presets/blank.rin | 5 ----- presets/default.rin | 3 +-- scripts/modules/brush.js | 15 ++++++++------- scripts/modules/brush.pointer.js | 17 +++++++++++++---- scripts/modules/cursor.js | 16 ++++++++++++++++ scripts/modules/terminal.js | 2 +- 6 files changed, 39 insertions(+), 19 deletions(-) diff --git a/presets/blank.rin b/presets/blank.rin index d3fa310..871f4b6 100644 --- a/presets/blank.rin +++ b/presets/blank.rin @@ -1,9 +1,4 @@ -~ Setup - frame.resize 400x400 layer.fill #A1A1A1 - -~ Add Code Below - brush:color #333333 brush:size 3 \ No newline at end of file diff --git a/presets/default.rin b/presets/default.rin index 06db691..8c5eddd 100644 --- a/presets/default.rin +++ b/presets/default.rin @@ -13,5 +13,4 @@ type.write 38,252 "B08" brush:color #000000 brush:size 2 path:line_width 20 -path:line_color #999999 -brush.add_pointer 0,0 #000000 2 \ No newline at end of file +path:line_color #999999 \ No newline at end of file diff --git a/scripts/modules/brush.js b/scripts/modules/brush.js index 5670b0c..1bea088 100644 --- a/scripts/modules/brush.js +++ b/scripts/modules/brush.js @@ -3,7 +3,7 @@ function Brush(rune) Module.call(this,rune); this.parameters = []; - this.settings = {color:"#000000","size":2}; + this.settings = {color:"#000000",size:2}; this.pointers = [new Pointer(new Position("0,0"))]; this.add_method(new Method("add_pointer",["Position","Color","Scale"])); @@ -25,12 +25,12 @@ function Brush(rune) this.size_up = function() { - this.settings["size"] = parseInt(this.settings["size"]) + 1; + this.settings.size = parseInt(this.settings.size) + 1; } this.size_down = function() { - this.settings["size"] -= parseInt(this.settings["size"]) > 1 ? 1 : 0; + this.settings.size -= parseInt(this.settings.size) > 1 ? 1 : 0; } // Eraser @@ -46,7 +46,7 @@ function Brush(rune) ronin.frame.context().moveTo(this.position_prev.x,this.position_prev.y); ronin.frame.context().lineTo(position.x,position.y); ronin.frame.context().lineCap="round"; - ronin.frame.context().lineWidth = this.settings["size"] * 5; + ronin.frame.context().lineWidth = this.settings.size * 3; ronin.frame.context().strokeStyle = new Color("#ff0000").rgba(); ronin.frame.context().stroke(); ronin.frame.context().closePath(); @@ -58,16 +58,16 @@ function Brush(rune) this.mouse_pointer = function(position) { - return ronin.cursor.draw_pointer_circle(position,this.settings["size"]); + return keyboard.shift_held == true ? ronin.cursor.draw_pointer_circle_eraser(position,this.settings.size * 3) : ronin.cursor.draw_pointer_circle(position,this.settings.size); } this.mouse_mode = function() { if(keyboard.shift_held == true){ - return "Eraser "+this.settings["size"]; + return "Eraser "+this.settings.size; } else{ - return "Brush "+this.settings["size"]; + return "Brush "+this.settings.size; } } @@ -104,5 +104,6 @@ function Brush(rune) for (i = 0; i < ronin.brush.pointers.length; i++) { ronin.brush.pointers[i].stop(); } + this.position_prev = null; } } \ No newline at end of file diff --git a/scripts/modules/brush.pointer.js b/scripts/modules/brush.pointer.js index b657da1..ca37c6c 100644 --- a/scripts/modules/brush.pointer.js +++ b/scripts/modules/brush.pointer.js @@ -15,14 +15,15 @@ function Pointer(offset = new Position(), color = new Color().hex, scale = 1) this.thickness = function() { + var radius = parseFloat(ronin.brush.settings["size"]) * this.scale; + var ratio = 10/this.position().distance_to(this.position_prev[0]); ratio = ratio > 1 ? 1 : ratio; - var target = parseFloat(ronin.brush.settings["size"]) * ratio; - target = target * this.scale; + var target = radius * ratio; - if(this.actual_thickness < target){ this.actual_thickness += 0.4; } - if(this.actual_thickness > target){ this.actual_thickness -= 0.4; } + if(this.actual_thickness < target){ this.actual_thickness += 0.25; } + if(this.actual_thickness > target){ this.actual_thickness -= 0.25; } return this.actual_thickness; } @@ -119,6 +120,14 @@ function Pointer(offset = new Position(), color = new Color().hex, scale = 1) this.start = function() { + var radius = parseFloat(ronin.brush.settings["size"]) * this.scale; + this.actual_thickness = radius/2; + ronin.frame.context().beginPath(); + ronin.frame.context().arc(this.position().x, this.position().y, radius/2, 0, 2 * Math.PI, false); + ronin.frame.context().lineWidth = 0; + ronin.frame.context().fillStyle = this.color; + ronin.frame.context().fill(); + ronin.frame.context().closePath(); } this.stop = function() diff --git a/scripts/modules/cursor.js b/scripts/modules/cursor.js index f904ff4..0d8dcba 100644 --- a/scripts/modules/cursor.js +++ b/scripts/modules/cursor.js @@ -149,6 +149,22 @@ function Cursor(rune) this.pointer_last = position; } + this.draw_pointer_circle_eraser = function(position,size = 1) + { + if(!this.layer){ this.create_layer(); } + + this.pointer_last = this.pointer_last ? this.pointer_last : position; + + this.layer.context().beginPath(); + this.layer.context().arc(position.x, position.y, (size/2), 0, 2 * Math.PI, false); + this.layer.context().lineWidth = 1; + this.layer.context().strokeStyle = this.settings.color; + this.layer.context().stroke(); + this.layer.context().closePath(); + + this.pointer_last = position; + } + this.draw_pointer_drag = function(position) { if(!this.layer){ this.create_layer(); } diff --git a/scripts/modules/terminal.js b/scripts/modules/terminal.js index 87a086e..f79fc60 100644 --- a/scripts/modules/terminal.js +++ b/scripts/modules/terminal.js @@ -71,7 +71,7 @@ function Terminal(rune) this.run(new Command(target_line)); } - if(lines.length > 0){ setTimeout(function(){ ronin.terminal.run_multi(lines.join(";")) }, 250); } + if(lines.length > 0){ setTimeout(function(){ ronin.terminal.run_multi(lines.join(";")) }, 50); } } this.hint = function(method)