trying to get the Boid to arrive
This commit is contained in:
parent
b118508ea6
commit
88f893e933
24
boids.odin
24
boids.odin
@ -77,15 +77,30 @@ player_input :: proc(using s: ^GameState) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
update :: proc(using s: ^GameState) {
|
update :: proc(using s: ^GameState) {
|
||||||
|
max_speed :f32 = 15
|
||||||
if fpoint, ok := follow_point.?; ok {
|
if fpoint, ok := follow_point.?; ok {
|
||||||
for &boid in boids {
|
for &boid in boids {
|
||||||
|
dist := rl.Vector2LengthSqr(fpoint - boid.pos)
|
||||||
|
if dist < 10 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
desired := fpoint - boid.pos
|
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 := desired - boid.vel
|
||||||
steer = rl.Vector2ClampValue(steer, 0, 0.3)
|
steer = rl.Vector2ClampValue(steer, 0, 5)
|
||||||
boid.vel += steer
|
boid.accel += steer
|
||||||
boid.angle = math.atan2(boid.vel.y, boid.vel.x)
|
boid.vel += boid.accel
|
||||||
boid.pos += boid.vel
|
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.SetTraceLogLevel(.ERROR)
|
||||||
rl.InitWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "Boids")
|
rl.InitWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "Boids")
|
||||||
rl.SetTargetFPS(60)
|
rl.SetTargetFPS(60)
|
||||||
// rl.DisableCursor()
|
|
||||||
|
|
||||||
state := init_state()
|
state := init_state()
|
||||||
defer {
|
defer {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user