diff options
Diffstat (limited to 'js/ui')
| -rw-r--r-- | js/ui/evolver.js | 5 | ||||
| -rw-r--r-- | js/ui/nopaint.js | 37 |
2 files changed, 40 insertions, 2 deletions
diff --git a/js/ui/evolver.js b/js/ui/evolver.js index ab2e0ce..4d90893 100644 --- a/js/ui/evolver.js +++ b/js/ui/evolver.js @@ -40,8 +40,9 @@ var evolver = (function(){ modes.gray = 'gray' modes.color = 'solid hue erase random' modes.letter = 'letter random-letter' - modes.brush = [modes.gray, modes.color, 'smear clone'].join(" ") - modes.magic = 'letter random-letter fill-letter translate scale rotate cycle smear clone' + modes.shadow = 'shadow' + modes.brush = [modes.gray, modes.color, modes.shadow, 'smear clone'].join(" ") + modes.magic = 'letter random-letter fill-letter translate slice scale rotate cycle smear clone' if (opt.mode && opt.mode in modes){ nopaint.disable_all_tools() diff --git a/js/ui/nopaint.js b/js/ui/nopaint.js index 74ddadf..9011953 100644 --- a/js/ui/nopaint.js +++ b/js/ui/nopaint.js @@ -747,6 +747,42 @@ var nopaint = (function(){ }, }) + var SliceTool = ShaderTool.extend({ + type: "slice", + dx: 0, + dy: 0, + speed: 1, + is_recursive: true, + start: function(){ + this.__start() + this.is_y = Math.random() > 0.3 + this.limit = this.is_y ? canvas.h : canvas.w + this.position = randint(this.limit) + this.direction = 1 + }, + before_shade: function(){ + if (Math.random() < 0.6) { + this.position = mod(this.position + 1, this.limit) + } + if (Math.random() > 0.8) { + this.direction = randsign() + } + }, + shade: function(src, dest, lex, x, y, w, h){ + if (this.is_y) { + if (y >= this.position) { + var copy = src.get(x + this.direction, y) + lex.assign(copy) + } + } + else if (x >= this.position) { + var copy = src.get(x, y + this.direction) + lex.assign(copy) + } + return true + }, + }) + var ScaleTool = ShaderTool.extend({ type: "scale", scale: 1, @@ -848,6 +884,7 @@ var nopaint = (function(){ nopaint.add_tool( new CycleTool({ weight: 1 }) ) nopaint.add_tool( new ScaleTool({ weight: 3 }) ) nopaint.add_tool( new RotateTool({ weight: 3 }) ) + nopaint.add_tool( new SliceTool({ weight: 4 }) ) nopaint.add_tool( new ColorizeTool({ weight: 1 }) ) nopaint.regenerate_weights() |
