diff --git a/index.html b/index.html
index 9abb9db..1dd3d17 100644
--- a/index.html
+++ b/index.html
@@ -11,6 +11,7 @@
+
diff --git a/links/main.css b/links/main.css
index ab8bec1..ca7e0d2 100644
--- a/links/main.css
+++ b/links/main.css
@@ -26,8 +26,9 @@ body { margin:0px; padding:0px; overflow:hidden; font-family:"input_mono_medium"
#terminal #hint .setting { display: inline-block; color:#fff; font-style: italic }
#modal { position: fixed; bottom:80px; right:20px; height:100px; background:#111; border-radius:3px; overflow:hidden; display: block}
-#modal.text { display: block;background: white;width:calc(60vw - 60px);height:calc(100vh - 160px);padding:30px;font-size:12px; white-space:pre; column-count: 2; line-height: 16px}
-#modal.text .module { font-family: 'input_mono_regular';}
+#modal.text { display: block;background: #000;width: calc(100vw - 100px);height: calc(100vh - 160px);padding: 30px;font-size: 12px;white-space: pre;column-count: 3;line-height: 20px;color:white}
+#modal.text .module { font-family: 'input_mono_regular'; border-bottom:1px solid #333; display: block; line-height: 30px}
+/*#modal.text .module:before { content: "-";margin-left:-15px;margin-right:15px;display:inline-block }*/
#modal.text .setting { font-style: italic; color:#999;}
#modal.text .mode { text-decoration: underline}
#modal.image img { display: block; max-height: 100%; width:inherit;}
diff --git a/presets/default.rin b/presets/default.rin
index 7d9bd02..c3ece22 100644
--- a/presets/default.rin
+++ b/presets/default.rin
@@ -12,6 +12,6 @@ type.write 38,262 "RONIN"
type:font "DIN Medium"
type.write 38,252 "B09"
brush:color #ff0000
-brush:size 2
+brush:size 5
path:line_width 20
path:line_color #999999
\ No newline at end of file
diff --git a/scripts/core/command.js b/scripts/core/command.js
index 23d2b9b..7073739 100644
--- a/scripts/core/command.js
+++ b/scripts/core/command.js
@@ -116,6 +116,14 @@ function Command(content)
return null;
}
+ this.option = function(name)
+ {
+ for (i = 0; i < this.parts.length; i++) {
+ if(this.parts[i].indexOf(name+"=") >= 0){ return new Option(this.parts[i]); }
+ }
+ return null;
+ }
+
this.bang = function()
{
for (i = 0; i < this.parts.length; i++) {
diff --git a/scripts/core/ronin.js b/scripts/core/ronin.js
index 7f1a622..e1921c3 100644
--- a/scripts/core/ronin.js
+++ b/scripts/core/ronin.js
@@ -63,6 +63,23 @@ function Ronin()
ronin.terminal.input.focus();
ronin.load(target_file);
}
+
+ this.hint = function(method)
+ {
+ var html = "";
+ if(this.terminal.input.value){
+ for(id in ronin.modules){
+ if(this.terminal.input.value != ronin.modules[id].name.substr(0,this.terminal.input.value.length)){ continue; }
+ html += ""+ronin.modules[id].name+" ";
+ }
+ }
+ else{
+ for(id in ronin.modules){
+ html += ""+ronin.modules[id].name+" ";
+ }
+ }
+ return html;
+ }
this.cursors = [];
diff --git a/scripts/modules/brush.js b/scripts/modules/brush.js
index 40a0a17..1e7233a 100644
--- a/scripts/modules/brush.js
+++ b/scripts/modules/brush.js
@@ -8,16 +8,31 @@ function Brush(rune)
this.add_mode(new Mode("erase","alt"));
this.add_setting(new Setting("color","#00ff00"));
this.add_setting(new Setting("size","2"));
- this.add_method(new Method("add_pointer",["Position","Color","Scale"]));
+ this.add_method(new Method("add_pointer",["Position","Color","Scale","mirror_x","mirror_y"]));
this.add_pointer = function(cmd, preview = false)
{
- if(preview){ return; }
+ if(cmd.option("mirror_x")){
+ var mirror_x = parseFloat(cmd.option("mirror_x").value);
+ ronin.overlay.draw(new Position(mirror_x+",0"))
+ }
+ if(cmd.option("mirror_y")){
+ var mirror_y = parseFloat(cmd.option("mirror_y").value);
+ ronin.overlay.draw(new Position("0,"+mirror_y))
+ }
+
+ if(preview){
+ return;
+ }
var pointer = new Pointer();
pointer.offset = cmd.position() ? cmd.position() : new Position("0,0");
- pointer.color = cmd.color().hex ? cmd.color().hex : this.settings["color"].value;
- pointer.scale = cmd.value().float ? cmd.value().float : 1;
+ pointer.color = cmd.color() ? cmd.color().hex : this.settings["color"].value;
+ pointer.scale = cmd.value() ? cmd.value().float : 1;
+
+ if(mirror_x){ pointer.mirror_x = mirror_x; }
+ if(mirror_y){ pointer.mirror_y = mirror_y; }
+
this.pointers.push(pointer);
ronin.terminal.log(new Log(this,"Added pointer at: "+pointer.offset.render()));
diff --git a/scripts/modules/brush.pointer.js b/scripts/modules/brush.pointer.js
index b3c0455..4972621 100644
--- a/scripts/modules/brush.pointer.js
+++ b/scripts/modules/brush.pointer.js
@@ -4,7 +4,9 @@ function Pointer(offset = new Position(), color = null, scale = 1)
this.color = color;
this.scale = scale;
- this.mirror = null;
+ this.mirror_x = null;
+ this.mirror_y = null;
+
this.position_prev = null;
this.angle = null;
this.distance = 0;
@@ -16,16 +18,12 @@ function Pointer(offset = new Position(), color = null, scale = 1)
this.thickness = function()
{
var radius = ronin.brush.settings["size"].to_f() * this.scale;
-
- var ratio = this.position().distance_to(this.position_prev[0]);
- // ratio = ratio > 1 ? 1 : ratio;
-
+ var ratio = 1 - this.position().distance_to((this.position_prev ? this.position_prev[0] : 1)) / 10;
var target = radius * ratio;
+ var rate = ronin.brush.settings["size"].to_f()/8;
- // return target;
-
- if(this.actual_thickness < target){ this.actual_thickness += 0.25; }
- if(this.actual_thickness > target){ this.actual_thickness -= 0.25; }
+ if(this.actual_thickness < target){ this.actual_thickness += rate; }
+ if(this.actual_thickness > target){ this.actual_thickness -= rate; }
return this.actual_thickness;
}
@@ -79,12 +77,16 @@ function Pointer(offset = new Position(), color = null, scale = 1)
this.position = function()
{
+ if(this.mirror_x && this.mirror_x > 0){
+ return this.position_mirror_x();
+ }
+ if(this.mirror_y && this.mirror_y > 0){
+ return this.position_mirror_y();
+ }
+
if(this.angle && this.offset){
return this.position_rotation();
}
- else if(this.mirror && this.mirror.width > 0){
- return this.position_mirror_x();
- }
else if(this.mirror && this.mirror.height > 0){
return this.position_mirror_y();
}
@@ -100,12 +102,12 @@ function Pointer(offset = new Position(), color = null, scale = 1)
this.position_mirror_x = function()
{
- return new Position((2 * this.mirror.width) - (ronin.cursor.position.x + this.offset.x), 0 + (ronin.cursor.position.y + this.offset.y));
+ return new Position((2 * this.mirror_x) - (ronin.cursor.position.x + this.offset.x), 0 + (ronin.cursor.position.y + this.offset.y));
}
this.position_mirror_y = function()
{
- return new Position((ronin.cursor.position.x + this.offset.x), (2 * this.mirror.height) - (ronin.cursor.position.y + this.offset.y));
+ return new Position((ronin.cursor.position.x + this.offset.x), (2 * this.mirror_y) - (ronin.cursor.position.y + this.offset.y));
}
this.position_rotation = function()
@@ -123,9 +125,9 @@ function Pointer(offset = new Position(), color = null, scale = 1)
this.start = function()
{
var radius = ronin.brush.settings["size"].to_f() * this.scale;
- this.actual_thickness = radius/2;
+ this.actual_thickness = radius/4;
ronin.frame.context().beginPath();
- ronin.frame.context().arc(this.position().x, this.position().y, radius/2, 0, 2 * Math.PI, false);
+ ronin.frame.context().arc(this.position().x, this.position().y, this.thickness(), 0, 2 * Math.PI, false);
ronin.frame.context().lineWidth = 0;
ronin.frame.context().fillStyle = this.color ? this.color : ronin.brush.settings["color"].value;
ronin.frame.context().fill();
diff --git a/scripts/modules/overlay.js b/scripts/modules/overlay.js
index 2a09134..4cdd816 100644
--- a/scripts/modules/overlay.js
+++ b/scripts/modules/overlay.js
@@ -139,7 +139,7 @@ function Overlay(rune)
this.context().beginPath();
this.context().moveTo(position.x,0);
- this.context().lineTo(position.x,this.element.height);
+ this.context().lineTo(position.x,ronin.frame.size.height);
this.context().lineCap="round";
this.context().lineWidth = 1;
@@ -153,7 +153,7 @@ function Overlay(rune)
this.context().beginPath();
this.context().moveTo(0,position.y);
- this.context().lineTo(this.element.width,position.y);
+ this.context().lineTo(ronin.frame.size.width,position.y);
this.context().lineCap="round";
this.context().lineWidth = 1;
diff --git a/scripts/modules/terminal.js b/scripts/modules/terminal.js
index 62bc182..e818a69 100644
--- a/scripts/modules/terminal.js
+++ b/scripts/modules/terminal.js
@@ -1,6 +1,6 @@
function Terminal(rune)
{
- Module.call(this,">");
+ Module.call(this);
this.element = document.createElement("div");
this.input = document.createElement("input");
@@ -13,8 +13,7 @@ function Terminal(rune)
this.history = [];
this.locks = [];
- this.add_method(new Method("save",["text"]));
- this.add_method(new Method("load",["path"]));
+ this.add_method(new Method("load",["file_name.rin"]));
// Module
this.install = function(cmd)
@@ -59,7 +58,7 @@ function Terminal(rune)
if(method){
method.preview(command);
}
- this.hint_element.innerHTML = ""+this.input.value+""+(this.input.value ? " " : "")+(module ? module.hint(method) : this.hint(method));
+ this.hint_element.innerHTML = ""+this.input.value+""+(this.input.value ? " " : "")+(module ? module.hint(method) : ronin.hint(method));
ronin.cursor.update();
}
@@ -74,23 +73,6 @@ function Terminal(rune)
if(lines.length > 0){ setTimeout(function(){ ronin.terminal.run_multi(lines.join(";")) }, 50); }
}
- this.hint = function(method)
- {
- var html = "";
- if(this.input.value){
- for(id in ronin.modules){
- if(this.input.value != ronin.modules[id].name.substr(0,this.input.value.length)){ continue; }
- html += ""+ronin.modules[id].name+" ";
- }
- }
- else{
- for(id in ronin.modules){
- html += ""+ronin.modules[id].name+" ";
- }
- }
- return html;
- }
-
this.log = function(log)
{
this.logs_element.innerHTML = "";
@@ -101,6 +83,15 @@ function Terminal(rune)
{
return new Command(this.input.value);
}
+
+ this.load = function(cmd,preview = false)
+ {
+ if(preview){ return; }
+
+ ronin.load(cmd.values());
+
+ return "Loading "+cmd.values();
+ }
}
// Log
diff --git a/scripts/units/option.js b/scripts/units/option.js
new file mode 100644
index 0000000..eaa662b
--- /dev/null
+++ b/scripts/units/option.js
@@ -0,0 +1,7 @@
+function Option(name)
+{
+ Unit.call(this);
+
+ this.name = name.split("=")[0];
+ this.value = name.split("=")[1];
+}
\ No newline at end of file