#include "platform_world.h" #include namespace ns_game { MovementBody PlatformMover::Step(const MovementBody& body, const PlatformWorld& world, float gravity, float deltaTime) const { MovementBody next = body; const frostbite2D::Vec2 previousPosition = next.position; next.velocity.y += gravity * deltaTime; next.position += next.velocity * deltaTime; next.grounded = false; const float previousBottom = previousPosition.y + next.size.y; const float newBottom = next.position.y + next.size.y; for (const auto& platform : world.platforms) { const bool horizontallyOverlaps = next.position.x + next.size.x > platform.left() && next.position.x < platform.right(); const bool wasAbove = previousBottom <= platform.top() + 4.0f; const bool crossedTop = newBottom >= platform.top(); if (next.velocity.y >= 0.0f && horizontallyOverlaps && wasAbove && crossedTop) { next.position.y = platform.top() - next.size.y; next.velocity.y = 0.0f; next.grounded = true; } } next.position.x = std::clamp(next.position.x, world.levelLeft, world.levelRight - next.size.x); return next; } } // namespace ns_game