ruby-processing 2.6.2 → 2.6.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rpextras.jar +0 -0
- data/lib/ruby-processing.rb +5 -8
- data/lib/ruby-processing/app.rb +26 -27
- data/lib/ruby-processing/config.rb +0 -2
- data/lib/ruby-processing/exporters/application_exporter.rb +1 -1
- data/lib/ruby-processing/exporters/base_exporter.rb +1 -1
- data/lib/ruby-processing/exporters/creator.rb +11 -11
- data/lib/ruby-processing/helper_methods.rb +33 -31
- data/lib/ruby-processing/helpers/numeric.rb +1 -1
- data/lib/ruby-processing/helpers/range.rb +11 -0
- data/lib/ruby-processing/library_loader.rb +11 -16
- data/lib/ruby-processing/runner.rb +22 -24
- data/lib/ruby-processing/runners/watch.rb +1 -1
- data/lib/ruby-processing/version.rb +1 -1
- data/library/boids/boids.rb +39 -70
- data/library/control_panel/control_panel.rb +3 -3
- data/samples/contributed/circle_collision.rb +3 -3
- data/samples/contributed/fern.rb +7 -10
- data/samples/contributed/fibonacci_sphere.rb +2 -2
- data/samples/contributed/full_screen.rb +23 -22
- data/samples/contributed/grapher.rb +3 -3
- data/samples/contributed/gravity.rb +1 -1
- data/samples/contributed/mandelbrot.rb +10 -13
- data/samples/external_library/java_processing/box2d_processing/bumpy_surface_noise.rb +1 -1
- data/samples/external_library/java_processing/box2d_processing/library/custom_shape/custom_shape.rb +2 -2
- data/samples/external_library/java_processing/box2d_processing/library/particle_system/particle_system.rb +1 -1
- data/samples/external_library/java_processing/box2d_processing/library/surface/surface.rb +2 -2
- data/samples/external_library/java_processing/box2d_processing/liquidy.rb +1 -1
- data/samples/external_library/java_processing/fisica/bubbles.rb +2 -2
- data/samples/external_library/java_processing/fisica/joints.rb +4 -4
- data/samples/external_library/java_processing/generative_design/node_spring_attractor.rb +2 -2
- data/samples/external_library/java_processing/geomerative/hello_world_rotate_firstletter.rb +7 -7
- data/samples/external_library/java_processing/hemesh/twin_iso.rb +3 -3
- data/samples/external_library/java_processing/pbox2d/bumpy_surface_noise.rb +1 -1
- data/samples/external_library/java_processing/pbox2d/library/custom_shape/custom_shape.rb +2 -2
- data/samples/external_library/java_processing/pbox2d/library/particle_system/particle_system.rb +1 -1
- data/samples/external_library/java_processing/pbox2d/library/surface/surface.rb +2 -2
- data/samples/external_library/java_processing/pbox2d/liquidy.rb +1 -1
- data/samples/external_library/java_processing/peasy_cam/library/hilbert/hilbert.rb +4 -4
- data/samples/external_library/ruby_gem/draw_test.rb +2 -2
- data/samples/external_library/ruby_gem/game_of_life.rb +3 -3
- data/samples/processing_app/basics/arrays/array_objects.rb +2 -2
- data/samples/processing_app/basics/color/hue.rb +1 -1
- data/samples/processing_app/basics/control/conditionals1.rb +5 -24
- data/samples/processing_app/basics/control/conditionals2.rb +1 -1
- data/samples/processing_app/basics/form/bezier_ellipse.rb +1 -1
- data/samples/processing_app/basics/form/brick_tower.rb +4 -8
- data/samples/processing_app/basics/form/regular_polygon.rb +1 -1
- data/samples/processing_app/basics/form/star.rb +1 -1
- data/samples/processing_app/basics/form/triangle_strip.rb +1 -1
- data/samples/processing_app/basics/input/storing_input.rb +1 -1
- data/samples/processing_app/basics/lights/spot.rb +1 -1
- data/samples/processing_app/basics/math/additive_wave.rb +2 -2
- data/samples/processing_app/basics/math/double_random.rb +2 -2
- data/samples/processing_app/basics/math/noise_wave.rb +1 -1
- data/samples/processing_app/basics/math/random.rb +1 -1
- data/samples/processing_app/basics/objects/module.rb +1 -1
- data/samples/processing_app/basics/objects/struct.rb +1 -1
- data/samples/processing_app/basics/structure/loop.rb +19 -14
- data/samples/processing_app/basics/structure/recursion2.rb +2 -2
- data/samples/processing_app/basics/textures/texture3.rb +13 -33
- data/samples/processing_app/basics/transform/birds.rb +5 -5
- data/samples/processing_app/basics/transform/cubes_in_cube.rb +3 -3
- data/samples/processing_app/basics/transform/rotate.rb +1 -1
- data/samples/processing_app/basics/typography/kinetic_type.rb +1 -1
- data/samples/processing_app/demos/graphics/bezier_patch.rb +34 -34
- data/samples/processing_app/demos/graphics/trefoil.rb +1 -1
- data/samples/processing_app/demos/graphics/wiggling.rb +5 -5
- data/samples/processing_app/demos/performance/esfera.rb +4 -4
- data/samples/processing_app/demos/performance/text_rendering.rb +1 -1
- data/samples/processing_app/library/dxf/simple_export.rb +3 -3
- data/samples/processing_app/library/pdf/complex_3D.rb +11 -11
- data/samples/processing_app/library/vecmath/vec2d/bouncing_ball.rb +1 -1
- data/samples/processing_app/library/vecmath/vec2d/circle_collision.rb +3 -3
- data/samples/processing_app/library/vecmath/vec2d/library/flock/flock.rb +5 -5
- data/samples/processing_app/library/vecmath/vec2d/library/particle/{particle_system.rb → particle.rb} +28 -21
- data/samples/processing_app/library/vecmath/vec2d/morph.rb +3 -3
- data/samples/processing_app/library/vecmath/vec2d/particle_system_pshape.rb +3 -3
- data/samples/processing_app/library/vecmath/vec2d/reflection1.rb +2 -2
- data/samples/processing_app/library/vecmath/vec2d/seeking_neural.rb +3 -2
- data/samples/processing_app/library/vecmath/vec2d/simple_particle_system.rb +1 -1
- data/samples/processing_app/library/vecmath/vec3d/frame_of_reference.rb +4 -4
- data/samples/processing_app/topics/advanced_data/library/word/word.rb +1 -1
- data/samples/processing_app/topics/advanced_data/load_save_XML.rb +1 -1
- data/samples/processing_app/topics/advanced_data/load_save_json.rb +1 -1
- data/samples/processing_app/topics/advanced_data/load_save_struct_yaml.rb +1 -1
- data/samples/processing_app/topics/advanced_data/load_save_yaml.rb +1 -1
- data/samples/processing_app/topics/advanced_data/threads_two.rb +1 -2
- data/samples/processing_app/topics/cellular_automata/game_of_life.rb +3 -3
- data/samples/processing_app/topics/cellular_automata/library/ca/ca.rb +2 -2
- data/samples/processing_app/topics/cellular_automata/library/cell/cell.rb +4 -4
- data/samples/processing_app/topics/cellular_automata/library/simple_cell/simple_cell.rb +1 -1
- data/samples/processing_app/topics/cellular_automata/spore1.rb +1 -1
- data/samples/processing_app/topics/cellular_automata/spore2.rb +1 -1
- data/samples/processing_app/topics/create_shapes/group_pshape.rb +2 -2
- data/samples/processing_app/topics/create_shapes/library/particle/particle_system.rb +3 -3
- data/samples/processing_app/topics/create_shapes/library/polygon/polygon.rb +2 -2
- data/samples/processing_app/topics/create_shapes/library/star/star.rb +3 -3
- data/samples/processing_app/topics/create_shapes/particle_system_pshape.rb +1 -1
- data/samples/processing_app/topics/create_shapes/path_pshape.rb +1 -1
- data/samples/processing_app/topics/drawing/scribble_plotter.rb +2 -2
- data/samples/processing_app/topics/gui/button.rb +16 -16
- data/samples/processing_app/topics/gui/rollover.rb +13 -13
- data/samples/processing_app/topics/image_processing/blur.rb +2 -2
- data/samples/processing_app/topics/image_processing/edge_detection.rb +2 -2
- data/samples/processing_app/topics/lsystems/cstest.rb +1 -1
- data/samples/processing_app/topics/lsystems/library/stochastic_grammar/stochastic_grammar.rb +1 -1
- data/samples/processing_app/topics/motion/bouncy_bubbles.rb +1 -1
- data/samples/processing_app/topics/motion/brownian.rb +2 -2
- data/samples/processing_app/topics/motion/circle_collision.rb +1 -1
- data/samples/processing_app/topics/motion/cubes_in_cube.rb +1 -1
- data/samples/processing_app/topics/motion/library/cube/cube.rb +2 -2
- data/samples/processing_app/topics/motion/morph.rb +11 -11
- data/samples/processing_app/topics/motion/moving_on_curves.rb +4 -4
- data/samples/processing_app/topics/motion/puff.rb +4 -4
- data/samples/processing_app/topics/motion/reflection1.rb +3 -3
- data/samples/processing_app/topics/motion/reflection2.rb +1 -1
- data/samples/processing_app/topics/shaders/bw_shader.rb +1 -1
- data/samples/processing_app/topics/shaders/glsl_heightmap_noise.rb +2 -2
- data/samples/processing_app/topics/simulate/flocking.rb +6 -6
- data/samples/processing_app/topics/simulate/library/flock/flock.rb +33 -41
- data/samples/processing_app/topics/simulate/multiple_particle_systems.rb +34 -60
- data/samples/processing_app/topics/simulate/simple_particle_system.rb +20 -32
- data/samples/processing_app/topics/simulate/smoke_particle_system.rb +45 -57
- data/samples/processing_app/topics/simulate/springs.rb +40 -44
- metadata +4 -5
- data/samples/processing_app/library/vecmath/vec2d/multiple_particle_systems.rb +0 -141
- data/samples/processing_app/library/vecmath/vec2d/smoke_particle_system.rb +0 -133
@@ -16,7 +16,7 @@ RESI=NI*10
|
|
16
16
|
RESJ=NJ*10
|
17
17
|
|
18
18
|
attr_accessor :outp, :inp, :normp, :auto_normals, :arcball, :bez_patch
|
19
|
-
|
19
|
+
|
20
20
|
def setup
|
21
21
|
size(1024, 768, P3D)
|
22
22
|
ArcBall.init(self, width/2.0, height/2.0)
|
@@ -24,14 +24,14 @@ def setup
|
|
24
24
|
build_geometry
|
25
25
|
@bez_patch = build_shape
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
def draw
|
29
29
|
background(255)
|
30
30
|
smooth(8)
|
31
31
|
lights
|
32
32
|
define_lights
|
33
33
|
scale(0.9)
|
34
|
-
no_stroke
|
34
|
+
no_stroke
|
35
35
|
shape(bez_patch)
|
36
36
|
end
|
37
37
|
|
@@ -44,34 +44,34 @@ def build_shape
|
|
44
44
|
no_stroke
|
45
45
|
bez = create_shape
|
46
46
|
bez.begin_shape(QUAD_STRIP)
|
47
|
-
bez.fill(192, 192, 192)
|
47
|
+
bez.fill(192, 192, 192)
|
48
48
|
bez.ambient(20, 20, 20)
|
49
49
|
bez.specular(30)
|
50
|
-
(0 ... RESI - 1).each do |i|
|
50
|
+
(0 ... RESI - 1).each do |i|
|
51
51
|
(0 ... RESJ).each do |j|
|
52
52
|
if (!auto_normals)
|
53
53
|
bez.normal(*normp[i][j])
|
54
54
|
end
|
55
55
|
bez.vertex(*outp[i][j])
|
56
|
-
bez.vertex(*outp[i+1][j])
|
57
|
-
end
|
56
|
+
bez.vertex(*outp[i+1][j])
|
57
|
+
end
|
58
58
|
end
|
59
|
-
bez.end_shape
|
60
|
-
return bez
|
59
|
+
bez.end_shape
|
60
|
+
return bez
|
61
61
|
end
|
62
62
|
|
63
63
|
##########
|
64
64
|
# build geometry
|
65
65
|
# for bez patch
|
66
66
|
##########
|
67
|
-
|
67
|
+
|
68
68
|
def build_geometry
|
69
69
|
@outp = []
|
70
70
|
@normp = []
|
71
|
-
@inp = Array.new(NI){|i| Array.new(NJ){|j| Vec3D.new(i, j, rand(-3.0
|
71
|
+
@inp = Array.new(NI){|i| Array.new(NJ){|j| Vec3D.new(i, j, rand(-3.0..3))}}
|
72
72
|
uitang = Vec3D.new
|
73
|
-
ujtang = Vec3D.new
|
74
|
-
|
73
|
+
ujtang = Vec3D.new
|
74
|
+
|
75
75
|
(0 ... RESI).each do |i|
|
76
76
|
mui = i.fdiv(RESI - 1)
|
77
77
|
row = []
|
@@ -88,7 +88,7 @@ def build_geometry
|
|
88
88
|
bj = bezier_blend(kj, muj, NJ)
|
89
89
|
dbj = d_bezier_blend(kj, muj, NJ)
|
90
90
|
|
91
|
-
vect += inp[ki][kj] * bi * bj
|
91
|
+
vect += inp[ki][kj] * bi * bj
|
92
92
|
|
93
93
|
uitang += inp[ki][kj] * dbi * bj
|
94
94
|
|
@@ -97,22 +97,22 @@ def build_geometry
|
|
97
97
|
end
|
98
98
|
vect += Vec3D.new(-NI / 2, -NJ / 2, 0)
|
99
99
|
vect *= 100
|
100
|
-
row << vect.to_a
|
100
|
+
row << vect.to_a
|
101
101
|
uitang.normalize!
|
102
102
|
ujtang.normalize!
|
103
|
-
row_n << uitang.cross(ujtang).to_a
|
103
|
+
row_n << uitang.cross(ujtang).to_a
|
104
104
|
end
|
105
105
|
@outp << row
|
106
106
|
@normp << row_n
|
107
107
|
end
|
108
108
|
end
|
109
|
-
|
109
|
+
|
110
110
|
def bezier_blend( k, mu, n)
|
111
|
-
blend = 1.0
|
111
|
+
blend = 1.0
|
112
112
|
nn = n
|
113
113
|
kn = k
|
114
114
|
nkn = n - k
|
115
|
-
|
115
|
+
|
116
116
|
while (nn >= 1)
|
117
117
|
blend *= nn
|
118
118
|
nn -= 1
|
@@ -124,19 +124,19 @@ def bezier_blend( k, mu, n)
|
|
124
124
|
blend = blend.fdiv(nkn)
|
125
125
|
nkn -= 1
|
126
126
|
end
|
127
|
-
end
|
128
|
-
blend *=
|
129
|
-
blend *=
|
127
|
+
end
|
128
|
+
blend *= mu**k.to_f if (k > 0)
|
129
|
+
blend *= (1 - mu)**(n - k).to_f if (n - k > 0)
|
130
130
|
return(blend)
|
131
131
|
end
|
132
132
|
|
133
133
|
def d_bezier_blend( k, mu, n)
|
134
134
|
dblendf = 1.0
|
135
|
-
|
135
|
+
|
136
136
|
nn = n
|
137
137
|
kn = k
|
138
138
|
nkn = n - k
|
139
|
-
|
139
|
+
|
140
140
|
while (nn >= 1)
|
141
141
|
dblendf *= nn
|
142
142
|
nn -= 1
|
@@ -149,25 +149,25 @@ def d_bezier_blend( k, mu, n)
|
|
149
149
|
nkn -= 1
|
150
150
|
end
|
151
151
|
end
|
152
|
-
|
152
|
+
|
153
153
|
fk = 1
|
154
154
|
dk = 0
|
155
155
|
fnk = 1
|
156
|
-
dnk = 0
|
156
|
+
dnk = 0
|
157
157
|
if (k > 0)
|
158
|
-
fk =
|
159
|
-
dk = k *
|
160
|
-
end
|
158
|
+
fk = mu**k.to_f
|
159
|
+
dk = k * (mu**(k - 1).to_f)
|
160
|
+
end
|
161
161
|
if (n - k > 0)
|
162
|
-
fnk =
|
163
|
-
dnk = (k - n)*
|
162
|
+
fnk = (1 - mu)**(n - k).to_f
|
163
|
+
dnk = (k - n) * (1 - mu)**(n - k - 1).to_f
|
164
164
|
end
|
165
165
|
dblendf *= (dk * fnk + fk * dnk)
|
166
|
-
|
167
|
-
return(dblendf)
|
166
|
+
|
167
|
+
return(dblendf)
|
168
168
|
end
|
169
169
|
|
170
|
-
def define_lights
|
170
|
+
def define_lights
|
171
171
|
ambient_light(40, 40, 40)
|
172
172
|
point_light(30, 30, 30, 0, 0, 0)
|
173
173
|
directional_light(60, 60, 60, 1, 0, 0)
|
@@ -18,10 +18,10 @@ def setup
|
|
18
18
|
@cosine = []
|
19
19
|
wiggling = false
|
20
20
|
# Dry up that processing code a tiny bit
|
21
|
-
(0
|
21
|
+
(0..TAU).step(TAU / CIRCLE_RES) do |i|
|
22
22
|
sine << CIRCLE_RAD * sin(i)
|
23
23
|
end
|
24
|
-
(0
|
24
|
+
(0..TAU).step(TAU / CIRCLE_RES) do |i|
|
25
25
|
cosine << CIRCLE_RAD * cos(i)
|
26
26
|
end
|
27
27
|
@cube = create_cube
|
@@ -41,9 +41,9 @@ def draw
|
|
41
41
|
face = cube.get_child(i)
|
42
42
|
face.get_vertex_count.times do |j|
|
43
43
|
x, y, z = face.get_vertex_x(j), face.get_vertex_y(j), face.get_vertex_z(j)
|
44
|
-
x += rand(-NOISE_MAG/2
|
45
|
-
y += rand(-NOISE_MAG/2
|
46
|
-
z += rand(-NOISE_MAG/2
|
44
|
+
x += rand(-NOISE_MAG/2..NOISE_MAG/2)
|
45
|
+
y += rand(-NOISE_MAG/2..NOISE_MAG/2)
|
46
|
+
z += rand(-NOISE_MAG/2..NOISE_MAG/2)
|
47
47
|
face.set_vertex(j, x, y, z)
|
48
48
|
end
|
49
49
|
end
|
@@ -7,7 +7,7 @@
|
|
7
7
|
#
|
8
8
|
load_library :vecmath
|
9
9
|
|
10
|
-
QUANTITY =
|
10
|
+
QUANTITY = 16_000
|
11
11
|
|
12
12
|
attr_reader :orb, :phi, :radius, :rx, :ry
|
13
13
|
|
@@ -43,9 +43,9 @@ def draw
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def create_hair radius
|
46
|
-
z = rand(-radius
|
47
|
-
phi = rand(0
|
48
|
-
len = rand(1.15
|
46
|
+
z = rand(-radius..radius)
|
47
|
+
phi = rand(0..TAU)
|
48
|
+
len = rand(1.15..1.2)
|
49
49
|
theta = Math.asin(z / radius)
|
50
50
|
Hair.new(z, phi, len, theta)
|
51
51
|
end
|
@@ -23,9 +23,9 @@ def draw
|
|
23
23
|
translate(width / 3, height / 3, -200)
|
24
24
|
rotate_z(map(mouse_y, 0, height, 0, PI))
|
25
25
|
rotateY(map(mouse_x, 0, width, 0, HALF_PI))
|
26
|
-
(-2
|
27
|
-
(-2
|
28
|
-
(-2
|
26
|
+
(-2..2).step do |y|
|
27
|
+
(-2..2).step do |x|
|
28
|
+
(-2..2).step do |z|
|
29
29
|
push_matrix
|
30
30
|
translate(120*x, 120*y, -120*z)
|
31
31
|
sphere(30)
|
@@ -21,35 +21,35 @@ def setup
|
|
21
21
|
pt << rand(TAU) # Random X axis rotation
|
22
22
|
pt << rand(TAU) # Random Y axis rotation
|
23
23
|
|
24
|
-
pt << rand(60
|
24
|
+
pt << rand(60..80) # Short to quarter-circle arcs
|
25
25
|
if (rand(100)>90)
|
26
|
-
pt[pt.length - 1] = rand(8
|
26
|
+
pt[pt.length - 1] = rand(8..27) * 10
|
27
27
|
end
|
28
|
-
pt << rand(2
|
28
|
+
pt << rand(2..50) * 5 # Radius. Space them out nicely
|
29
29
|
|
30
|
-
pt << rand(4
|
30
|
+
pt << rand(4..32) # Width of band
|
31
31
|
if (rand(100) > 90)
|
32
|
-
pt[pt.length - 1] = rand(40
|
32
|
+
pt[pt.length - 1] = rand(40..60) # Width of band
|
33
33
|
end
|
34
34
|
|
35
|
-
pt << rand(0.005
|
35
|
+
pt << rand(0.005..0.0334)# Speed of rotation
|
36
36
|
|
37
37
|
# get colors
|
38
38
|
prob = rand(100)
|
39
39
|
case prob
|
40
|
-
when (0
|
40
|
+
when (0..30)
|
41
41
|
style[i*2] = color_blended(rand, 255,0,100, 255,0,0, 210)
|
42
|
-
when (30
|
42
|
+
when (30..70)
|
43
43
|
style[i*2] = color_blended(rand, 0,153,255, 170,225,255, 210)
|
44
|
-
when (70
|
44
|
+
when (70..90)
|
45
45
|
style[i*2] = color_blended(rand, 200,255,0, 150,255,0, 210)
|
46
46
|
else
|
47
47
|
style[i*2] = color(255,255,255, 220)
|
48
48
|
end
|
49
49
|
case prob
|
50
|
-
when (0
|
50
|
+
when (0..50)
|
51
51
|
style[i*2] = color_blended(rand, 200,255,0, 50,120,0, 210)
|
52
|
-
when (50
|
52
|
+
when (50..90)
|
53
53
|
style[i*2] = color_blended(rand, 255,100,0, 255,255,0, 210)
|
54
54
|
else
|
55
55
|
style[i*2] = color(255, 255, 255, 220)
|
@@ -30,7 +30,7 @@ def draw
|
|
30
30
|
# Add gravity to velocity
|
31
31
|
@velocity += gravity
|
32
32
|
# Bounce off edges
|
33
|
-
velocity.x *= -1 unless (RADIUS
|
33
|
+
velocity.x *= -1 unless (RADIUS..width - RADIUS).include?(loc.x)
|
34
34
|
if loc.y > (height - RADIUS)
|
35
35
|
# We're reducing velocity ever so slightly
|
36
36
|
# when it hits the bottom of the window
|
@@ -72,7 +72,7 @@ end
|
|
72
72
|
def empty_space(r)
|
73
73
|
pos = nil
|
74
74
|
while !pos || !empty_space?(pos, r) do
|
75
|
-
pos = Vec2D.new(rand(r
|
75
|
+
pos = Vec2D.new(rand(r..width - r), rand(r..height - r))
|
76
76
|
end
|
77
77
|
return pos
|
78
78
|
end
|
@@ -162,8 +162,8 @@ end
|
|
162
162
|
|
163
163
|
# reverse ball velocity if at sketch boundary
|
164
164
|
def check_boundary_collision(ball)
|
165
|
-
ball.velocity.x *= -1 unless (ball.r
|
166
|
-
ball.velocity.y *= -1 unless (ball.r
|
165
|
+
ball.velocity.x *= -1 unless (ball.r..width - ball.r).include? ball.position.x
|
166
|
+
ball.velocity.y *= -1 unless (ball.r..height - ball.r).include? ball.position.y
|
167
167
|
end
|
168
168
|
|
169
169
|
|
@@ -7,7 +7,7 @@ class Flock
|
|
7
7
|
include Enumerable
|
8
8
|
|
9
9
|
def initialize(size, position)
|
10
|
-
@boids = (0
|
10
|
+
@boids = (0..size).map{ Boid.new(position) }
|
11
11
|
end
|
12
12
|
|
13
13
|
def run
|
@@ -27,7 +27,7 @@ class Boid
|
|
27
27
|
attr_reader :width, :height
|
28
28
|
def initialize(loc)
|
29
29
|
@acceleration = Vec2D.new
|
30
|
-
@velocity = Vec2D.new(rand(-1.0
|
30
|
+
@velocity = Vec2D.new(rand(-1.0..1), rand(-1.0..1))
|
31
31
|
@location = loc
|
32
32
|
@r = 2.0
|
33
33
|
@maxspeed = 2
|
@@ -122,7 +122,7 @@ class Boid
|
|
122
122
|
boids.reject{ |bd| bd.equal? self }.each do |other|
|
123
123
|
d = location.dist(other.location)
|
124
124
|
# If the distance is greater than 0 and less than an arbitrary amount
|
125
|
-
if (0.0001
|
125
|
+
if (0.0001..desiredseparation).include? d
|
126
126
|
# Calculate vector pointing away from neighbor
|
127
127
|
diff = location - other.location
|
128
128
|
diff.normalize!
|
@@ -156,7 +156,7 @@ class Boid
|
|
156
156
|
count = 0
|
157
157
|
boids.reject{ |bd| bd.equal? self }.each do |other|
|
158
158
|
d = location.dist(other.location)
|
159
|
-
if (0
|
159
|
+
if (0..neighbordist).include? d
|
160
160
|
sum += other.velocity
|
161
161
|
count += 1
|
162
162
|
end
|
@@ -180,7 +180,7 @@ class Boid
|
|
180
180
|
count = 0
|
181
181
|
boids.reject { |bd| bd.equal? self }.each do |other|
|
182
182
|
d = location.dist(other.location)
|
183
|
-
if (0.0001
|
183
|
+
if (0.0001..neighbordist).include? d
|
184
184
|
sum += other.location # Add location
|
185
185
|
count += 1
|
186
186
|
end
|
@@ -1,17 +1,17 @@
|
|
1
1
|
# The Particle System
|
2
2
|
|
3
|
-
class ParticleSystem
|
3
|
+
class ParticleSystem
|
4
4
|
include Processing::Proxy
|
5
5
|
|
6
6
|
attr_reader :particles, :particle_shape
|
7
7
|
|
8
|
-
def initialize(width, height, sprite, n)
|
8
|
+
def initialize(width, height, sprite, n)
|
9
9
|
@particles = []
|
10
10
|
# The PShape is a group
|
11
11
|
@particle_shape = create_shape(GROUP)
|
12
12
|
|
13
13
|
# Make all the Particles
|
14
|
-
n.times do |i|
|
14
|
+
n.times do |i|
|
15
15
|
particles << Particle.new(width, height, sprite)
|
16
16
|
# Each particle's PShape gets added to the System PShape
|
17
17
|
particle_shape.add_child(particles[i].s_shape)
|
@@ -24,10 +24,10 @@ class ParticleSystem
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
def set_emitter(x, y)
|
27
|
+
def set_emitter(x, y)
|
28
28
|
particles.each do |p|
|
29
|
-
# Each particle gets reborn at the emitter location
|
30
|
-
p.rebirth(x, y) if (p.dead?)
|
29
|
+
# Each particle gets reborn at the emitter location
|
30
|
+
p.rebirth(x, y) if (p.dead?)
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
@@ -41,15 +41,16 @@ end
|
|
41
41
|
class Particle
|
42
42
|
include Processing::Proxy
|
43
43
|
|
44
|
-
GRAVITY = Vec2D.new(0, 0.1)
|
45
|
-
|
46
|
-
attr_reader :center, :velocity, :lifespan, :s_shape, :part_size,
|
47
|
-
:
|
48
|
-
|
44
|
+
GRAVITY = Vec2D.new(0, 0.1)
|
45
|
+
|
46
|
+
attr_reader :center, :velocity, :lifespan, :s_shape, :part_size,
|
47
|
+
:boundary_x, :boundary_y, :sprite
|
49
48
|
|
50
49
|
def initialize width, height, sprite
|
51
|
-
@
|
52
|
-
|
50
|
+
@sprite = sprite
|
51
|
+
@boundary_x = Boundary.new(0, width)
|
52
|
+
@boundary_y = Boundary.new(0, height)
|
53
|
+
part_size = rand(10..60)
|
53
54
|
# The particle is a textured quad
|
54
55
|
@s_shape = create_shape
|
55
56
|
s_shape.begin_shape(QUAD)
|
@@ -61,10 +62,8 @@ class Particle
|
|
61
62
|
s_shape.vertex(+part_size / 2.0, +part_size / 2.0, sprite.width, sprite.height)
|
62
63
|
s_shape.vertex(-part_size / 2.0, +part_size / 2.0, 0, sprite.height)
|
63
64
|
s_shape.end_shape
|
64
|
-
|
65
65
|
# Initialize center vector
|
66
|
-
@center = Vec2D.new
|
67
|
-
|
66
|
+
@center = Vec2D.new
|
68
67
|
# Set the particle starting location
|
69
68
|
rebirth(width / 2.0, height / 2.0)
|
70
69
|
end
|
@@ -79,16 +78,17 @@ class Particle
|
|
79
78
|
@lifespan = 255
|
80
79
|
# Set location using translate
|
81
80
|
s_shape.reset_matrix
|
82
|
-
s_shape.translate(x, y)
|
83
|
-
|
81
|
+
s_shape.translate(x, y)
|
84
82
|
# Update center vector
|
85
83
|
center.x, center.y = x, y
|
86
84
|
end
|
87
85
|
|
88
86
|
# Is it off the screen, or its lifespan is over?
|
89
87
|
def dead?
|
90
|
-
|
91
|
-
|
88
|
+
return true if lifespan < 0
|
89
|
+
return true if boundary_y.exclude? center.y
|
90
|
+
return true if boundary_x.exclude? center.x
|
91
|
+
false
|
92
92
|
end
|
93
93
|
|
94
94
|
def update
|
@@ -99,8 +99,15 @@ class Particle
|
|
99
99
|
s_shape.set_tint(color(255, lifespan))
|
100
100
|
# Move the particle according to its velocity
|
101
101
|
s_shape.translate(velocity.x, velocity.y)
|
102
|
-
# and also update the center
|
102
|
+
# and also update the center location
|
103
103
|
@center += velocity
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
107
|
+
# unusually in this case we are looking for excluded values
|
108
|
+
|
109
|
+
Boundary = Struct.new(:lower, :upper) do
|
110
|
+
def exclude? val
|
111
|
+
true unless (lower...upper).cover? val
|
112
|
+
end
|
113
|
+
end
|