summaryrefslogtreecommitdiff
path: root/js/ui
diff options
context:
space:
mode:
Diffstat (limited to 'js/ui')
-rw-r--r--js/ui/evolver.js5
-rw-r--r--js/ui/nopaint.js37
2 files changed, 40 insertions, 2 deletions
diff --git a/js/ui/evolver.js b/js/ui/evolver.js
index a7d423b..6a85c7d 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()