@inglorious/engine
Version:
A JavaScript game engine written with global state, immutability, and pure functions in mind. Have fun(ctional programming) with it!
44 lines (34 loc) • 1.35 kB
JavaScript
const HALF = 2
export function calculateLandingPosition(
entity,
target,
collisionGroup = "platform",
) {
const entityShape = entity.collisions[collisionGroup]?.shape
if (CalculatePY[entityShape]) {
return CalculatePY[entityShape](entity, target, collisionGroup)
}
return calculatePYForPoint(entity, target, collisionGroup)
}
function calculatePYForPoint(entity, target, collisionGroup) {
const [, targetY] = target.position
const [, targetHeight] = target.collisions[collisionGroup].size ?? target.size
return targetY + targetHeight / HALF
}
function calculatePYForCircle(entity, target, collisionGroup) {
const entityRadius = entity.collisions[collisionGroup].radius ?? entity.radius
const [, targetY] = target.position
const [, targetHeight] = target.collisions[collisionGroup].size ?? target.size
return targetY + targetHeight / HALF + entityRadius
}
function calculatePYForRectangle(entity, target, collisionGroup) {
const [, entityHeight] = entity.collisions[collisionGroup].size ?? entity.size
const [, targetY] = target.position
const [, targetHeight] = target.collisions[collisionGroup].size ?? target.size
return targetY + targetHeight / HALF + entityHeight / HALF
}
const CalculatePY = {
point: calculatePYForPoint,
circle: calculatePYForCircle,
rectangle: calculatePYForRectangle,
}