Improved brush!

This commit is contained in:
Devine Lu Linvega 2017-05-22 07:33:08 -10:00
parent fd77a81eca
commit c23801b8bc
6 changed files with 39 additions and 19 deletions

View File

@ -1,9 +1,4 @@
~ Setup
frame.resize 400x400 frame.resize 400x400
layer.fill #A1A1A1 layer.fill #A1A1A1
~ Add Code Below
brush:color #333333 brush:color #333333
brush:size 3 brush:size 3

View File

@ -14,4 +14,3 @@ brush:color #000000
brush:size 2 brush:size 2
path:line_width 20 path:line_width 20
path:line_color #999999 path:line_color #999999
brush.add_pointer 0,0 #000000 2

View File

@ -3,7 +3,7 @@ function Brush(rune)
Module.call(this,rune); Module.call(this,rune);
this.parameters = []; this.parameters = [];
this.settings = {color:"#000000","size":2}; this.settings = {color:"#000000",size:2};
this.pointers = [new Pointer(new Position("0,0"))]; this.pointers = [new Pointer(new Position("0,0"))];
this.add_method(new Method("add_pointer",["Position","Color","Scale"])); this.add_method(new Method("add_pointer",["Position","Color","Scale"]));
@ -25,12 +25,12 @@ function Brush(rune)
this.size_up = function() 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.size_down = function()
{ {
this.settings["size"] -= parseInt(this.settings["size"]) > 1 ? 1 : 0; this.settings.size -= parseInt(this.settings.size) > 1 ? 1 : 0;
} }
// Eraser // Eraser
@ -46,7 +46,7 @@ function Brush(rune)
ronin.frame.context().moveTo(this.position_prev.x,this.position_prev.y); ronin.frame.context().moveTo(this.position_prev.x,this.position_prev.y);
ronin.frame.context().lineTo(position.x,position.y); ronin.frame.context().lineTo(position.x,position.y);
ronin.frame.context().lineCap="round"; 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().strokeStyle = new Color("#ff0000").rgba();
ronin.frame.context().stroke(); ronin.frame.context().stroke();
ronin.frame.context().closePath(); ronin.frame.context().closePath();
@ -58,16 +58,16 @@ function Brush(rune)
this.mouse_pointer = function(position) 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() this.mouse_mode = function()
{ {
if(keyboard.shift_held == true){ if(keyboard.shift_held == true){
return "Eraser "+this.settings["size"]; return "Eraser "+this.settings.size;
} }
else{ else{
return "Brush <i style='color:"+this.settings["color"]+"'>&#9679;</i> "+this.settings["size"]; return "Brush <i style='color:"+this.settings["color"]+"'>&#9679;</i> "+this.settings.size;
} }
} }
@ -104,5 +104,6 @@ function Brush(rune)
for (i = 0; i < ronin.brush.pointers.length; i++) { for (i = 0; i < ronin.brush.pointers.length; i++) {
ronin.brush.pointers[i].stop(); ronin.brush.pointers[i].stop();
} }
this.position_prev = null;
} }
} }

View File

@ -15,14 +15,15 @@ function Pointer(offset = new Position(), color = new Color().hex, scale = 1)
this.thickness = function() this.thickness = function()
{ {
var radius = parseFloat(ronin.brush.settings["size"]) * this.scale;
var ratio = 10/this.position().distance_to(this.position_prev[0]); var ratio = 10/this.position().distance_to(this.position_prev[0]);
ratio = ratio > 1 ? 1 : ratio; 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.25; }
if(this.actual_thickness > target){ this.actual_thickness -= 0.4; } if(this.actual_thickness > target){ this.actual_thickness -= 0.25; }
return this.actual_thickness; return this.actual_thickness;
} }
@ -119,6 +120,14 @@ function Pointer(offset = new Position(), color = new Color().hex, scale = 1)
this.start = function() 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() this.stop = function()

View File

@ -149,6 +149,22 @@ function Cursor(rune)
this.pointer_last = position; 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) this.draw_pointer_drag = function(position)
{ {
if(!this.layer){ this.create_layer(); } if(!this.layer){ this.create_layer(); }

View File

@ -71,7 +71,7 @@ function Terminal(rune)
this.run(new Command(target_line)); 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) this.hint = function(method)