Physics Fixes

This commit is contained in:
Isuru Samarathunga
2025-09-23 13:31:00 +05:30
parent 1573644c51
commit f5693ef0fa
5 changed files with 24 additions and 5 deletions

View File

@ -104,12 +104,13 @@ namespace ia::iae
{
for (auto &b : g_bodies)
{
const auto drawnSize = b.BodyComponent->GetNode()->DrawnSize();
const auto pos = b.BodyComponent->GetNode()->GetPosition();
auto bodyDef = b2DefaultBodyDef();
if (b.BodyComponent->IsDynamic())
bodyDef.type = b2_dynamicBody;
bodyDef.position = b2Vec2{pos.x, pos.y};
bodyDef.position = b2Vec2{pos.x + drawnSize.x/2.0f, pos.y + drawnSize.y/2.0f};
if (b.BodyId.world0 != 0xFFFF)
b2DestroyBody(b.BodyId);
b.BodyId = b2CreateBody(g_worldId, &bodyDef);
@ -119,7 +120,7 @@ namespace ia::iae
const auto rect = c.ColliderComponent->Rect();
const auto halfW = rect.z/2.0f;
const auto halfH = rect.w/2.0f;
const auto box = b2MakeOffsetBox(halfW, halfH, {rect.x, rect.y - halfH/2.0f}, b2MakeRot(0));
const auto box = b2MakeOffsetBox(halfW, halfH, {rect.x, rect.y}, b2MakeRot(0));
auto boxShapeDef = b2DefaultShapeDef();
boxShapeDef.density = 1.0f;
boxShapeDef.isSensor = c.ColliderComponent->IsTrigger();
@ -157,8 +158,9 @@ namespace ia::iae
glm::vec2 Physics::GetBodyPosition(IN Handle handle)
{
const auto &b = g_bodies[handle];
const auto drawnSize = b.BodyComponent->GetNode()->DrawnSize();
const auto v = b2Body_GetPosition(b.BodyId);
return {v.x, v.y};
return {v.x - drawnSize.x/2.0f, v.y - drawnSize.y/2.0f};
}
VOID Physics::ApplyBodyForce(IN Handle handle, IN glm::vec2 force)