summaryrefslogtreecommitdiffhomepage
path: root/app/systems/rules/alignment.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/systems/rules/alignment.rb')
-rw-r--r--app/systems/rules/alignment.rb24
1 files changed, 24 insertions, 0 deletions
diff --git a/app/systems/rules/alignment.rb b/app/systems/rules/alignment.rb
new file mode 100644
index 0000000..2c2af11
--- /dev/null
+++ b/app/systems/rules/alignment.rb
@@ -0,0 +1,24 @@
+FF::Scn::BoidRules.add(
+ FF::Sys.new('BoidsAlignment', priority: 50) do
+ group_velocity = [0.0, 0.0]
+ boids_count = FF::Cmp::BoidsCohesion.data.count
+
+ FF::Cmp::BoidsAlignment.each do |alignment|
+ boid = alignment.entities[0].components[FF::Cmp::Boid][0]
+ group_velocity[0] += boid.vx
+ group_velocity[1] += boid.vy
+ end
+
+ FF::Cmp::BoidsAlignment.each do |alignment|
+ boid_update = alignment.entities[0].components[FF::Cmp::Boid][0]
+ move_boid = group_velocity.dup
+ move_boid[0] -= boid_update.vx
+ move_boid[1] -= boid_update.vy
+ move_boid[0] /= boids_count - 1.0
+ move_boid[1] /= boids_count - 1.0
+
+ boid_update.cx += (move_boid[0] - boid_update.vx) / alignment.strength
+ boid_update.cy += (move_boid[1] - boid_update.vy) / alignment.strength
+ end
+ end
+)