trying to get the Boid to arrive

This commit is contained in:
Joseph Ferano 2024-09-29 13:20:24 +07:00
parent b118508ea6
commit 88f893e933

View File

@ -77,15 +77,30 @@ player_input :: proc(using s: ^GameState) {
}
update :: proc(using s: ^GameState) {
max_speed :f32 = 15
if fpoint, ok := follow_point.?; ok {
for &boid in boids {
dist := rl.Vector2LengthSqr(fpoint - boid.pos)
if dist < 10 {
continue
}
desired := fpoint - boid.pos
desired = rl.Vector2ClampValue(desired, 10, 10)
if dist < 200 {
desired = rl.Vector2Normalize(desired) * (dist / 200 * max_speed)
} else {
desired = rl.Vector2Normalize(desired) * max_speed
}
steer := desired - boid.vel
steer = rl.Vector2ClampValue(steer, 0, 0.3)
boid.vel += steer
boid.angle = math.atan2(boid.vel.y, boid.vel.x)
steer = rl.Vector2ClampValue(steer, 0, 5)
boid.accel += steer
boid.vel += boid.accel
boid.pos += boid.vel
desired_angle := math.atan2(boid.vel.y, boid.vel.x)
angle := rl.Lerp(boid.angle, desired_angle, s.dt * 7)
boid.angle = angle
boid.accel *= 0
}
}
}
@ -106,7 +121,6 @@ main :: proc() {
rl.SetTraceLogLevel(.ERROR)
rl.InitWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "Boids")
rl.SetTargetFPS(60)
// rl.DisableCursor()
state := init_state()
defer {