Physics Fixes
This commit is contained in:
@ -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)
|
||||
|
||||
Reference in New Issue
Block a user