UNPKG

@inglorious/engine

Version:

A JavaScript game engine written with global state, immutability, and pure functions in mind. Have fun(ctional programming) with it!

46 lines (33 loc) 1.06 kB
import { angle, clamp, magnitude, multiply, setMagnitude, zero, } from "@inglorious/utils/math/vector.js" import { subtract, sum } from "@inglorious/utils/math/vectors.js" const DEFAULT_MAX_ACCELERATION = 0 const DEFAULT_MAX_SPEED = 0 const MIN_SPEED = 0 const HALF_ACCELERATION = 0.5 export function flee(entity, target, dt) { const maxAcceleration = entity.maxAcceleration ?? DEFAULT_MAX_ACCELERATION const maxSpeed = entity.maxSpeed ?? DEFAULT_MAX_SPEED let velocity = entity.velocity ?? zero() const direction = subtract(entity.position, target.position) const distance = magnitude(direction) if (!distance) { return entity } const acceleration = setMagnitude(direction, maxAcceleration) velocity = sum(velocity, multiply(acceleration, dt)) velocity = clamp(velocity, MIN_SPEED, maxSpeed) const position = sum( entity.position, multiply(velocity, dt), multiply(acceleration, HALF_ACCELERATION * dt * dt), ) const orientation = angle(velocity) return { velocity, position, orientation } }