[008] Flocking
[008] Flocking
[25h] Group Flocking using Circle Collision Detection
[Sep 05, 2023] 9h
- Circle Collision Detection review
- Vector Math review
- StaticBody2D units
- CharacterBody2D units
[Sep 06, 2023] 5h
- Area2D units
- Collision Solution experiments
[Sep 07, 2023] 7h
- Tracked Units Test
- Area Manager Test
- PhysicsServer Review
[Sep 08, 2023] 4h
- PhysicsServer
- Data Oriented
- Area2D units
- Upload and Review
StaticBody2D
- 2,200 units at 60 fps (get's slower in time)
- 700 units at 60 fps (browser)
- use of move_and_collide()
- forms lines when moving towards player
- feels very rigid w/ high friction against each unit
- tons of gap in formation
- jitter in movement
CharacterBody2D
- 650 units at 60 fps (slow at spawn, stabilizes afterwards)
- 200 units at 60 fps (browser)
- use of move_and_slide()
- flows a bit better when moving towards player
- smaller gaps in formation (but still there)
- jitter in movement
Area2D
- 1,400 units at 60 fps (windows)
- 700 units at 60 fps (browser)
- uses Circle Collision Solution
- very smooth consistent speed movement towards players
- no gaps in between circles
- no jitter in movemement
Physics Server
- 1,900 units at 60 fps (windows)
- 900 units at 60 fps (browser)
- further optimized using a Data Oriented approach
- does not use any Nodes, only array to hold information
- docs.godotengine.org/en/latest/classes/class_physicsserver2d.html
Circle Collision Solution
[youtu.be/9IULfQH7E90]
var distance: float = 0.0
var distance_min: int = 16 # sum of radius
var direction: Vector2 = Vector2.ZERO
var overlap: float = 0.0
for object_a in objects_array: # naive detection
for object_b in objects_array:
if object_a == object_b:
continue
distance = object_a.distance_to(object_b)
if distance < distance_min: # is colliding if distance is less than sum of radius
direction = object_a.direction_to(object_b) # get axis between the 2 objects
overlap = distance_min - distance
object_a += 0.5 * overlap * direction # move each object by half of overlap
object_b -= 0.5 * overlap * direction # !!! which one gets + / - is important
| Status | Released |
| Platforms | HTML5 |
| Author | QuietGodot |
| Made with | Godot |

Leave a comment
Log in with itch.io to leave a comment.