summaryrefslogtreecommitdiffhomepage
path: root/app/systems
diff options
context:
space:
mode:
authorarngo <[email protected]>2021-12-17 22:13:15 -0500
committerarngo <[email protected]>2021-12-17 22:13:15 -0500
commit9cb11bdcac69471a3962397b75c3fdbb374d3962 (patch)
tree6451461a80c2a14295e2b8fe7c56ed8bba937f4f /app/systems
parent8f5eb1177dd404cfe562ca562415a0246f2cbca1 (diff)
downloadSteelWings-9cb11bdcac69471a3962397b75c3fdbb374d3962.tar.gz
SteelWings-9cb11bdcac69471a3962397b75c3fdbb374d3962.zip
implement alignment rule
Diffstat (limited to 'app/systems')
-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
+)