1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
define.class("$server/composition",function(require, $ui$, screen, view) {
this.render = function() {
return [screen(
view({
flex:1,
init:function(){
console.log('here')
},
bgcolor:'red',
hardrect:{
color:function(){
return mix('brown',pal.pal1(mesh.depth/14+0.1*view.time),mesh.depth/12)*sin(mesh.pos.y*PI)*pow(abs(sin(mesh.pos.x*PI)),0.2)
},
mesh:define.struct({
pos:vec2,
path:float,
depth:float
}).array(),
position:function(){
var path = mesh.path
var pos = vec2(0,0)
var scale = vec2(1,1)
var dir = vec2(0,-1)
var depth = int(mesh.depth)
for(var i = 0; i < 14; i++){
if(i >= depth) break
var right = mod(path, 2.)
if(right>0.){
dir = math.rotate2d(dir, 30.*math.DEG*sin(view.time))
}
else{
dir = math.rotate2d(dir, -30.*math.DEG*sin(1.2*view.time+0.1*mesh.depth))
}
pos += (dir * scale)*1.9
scale = scale * vec2(0.8,0.8)
path = floor(path / 2.)
}
var p = (math.rotate2d(mesh.pos*scale, atan(dir.y,dir.x)) + pos) * vec2(30,30) + vec2(200,300)
return vec4(p, 0, 1) * view.totalmatrix * view.viewmatrix
},
update:function(){
var mesh = this.mesh = this.mesh.struct.array()
function recur(path, depth){
mesh.pushQuad(
-1,-1, path, depth,
1,-1, path, depth,
-1,1, path, depth,
1,1, path, depth
)
if(depth>13)return
recur(path, depth+1)
recur(path + Math.pow(2, depth), depth+1)
}
recur(0,0)
10101101
}
}
})
)]
}
})
|