@inglorious/engine
Version:
A JavaScript game engine written with global state, immutability, and pure functions in mind. Have fun(ctional programming) with it!
35 lines (26 loc) • 864 B
JavaScript
import { seek } from "@inglorious/engine/ai/movement/dynamic/seek.js"
import { magnitude, multiply, zero } from "@inglorious/utils/math/vector.js"
import { subtract, sum } from "@inglorious/utils/math/vectors.js"
export const DEFAULT_MAX_PREDICTION = 10
export function pursue(
entity,
target,
dt,
{ maxPrediction = DEFAULT_MAX_PREDICTION } = {},
) {
const velocity = entity.velocity ?? zero()
const direction = subtract(target.position, entity.position)
const distance = magnitude(direction)
if (!distance) {
return entity
}
const speed = magnitude(velocity)
let prediction
if (speed <= distance / maxPrediction) {
prediction = maxPrediction
} else {
prediction = distance / speed
}
const position = sum(target.position, multiply(target.velocity, prediction))
return seek(entity, { ...target, position }, dt)
}