Add area and flag on physics
This commit is contained in:
@@ -191,6 +191,49 @@ static void test_physicsWorldDynamicVsDynamicSeparates(void **state) {
|
||||
assert_int_equal(memoryGetAllocatedCount(), 0);
|
||||
}
|
||||
|
||||
static void test_physicsWorldCollideMaskPreventsCollision(void **state) {
|
||||
entitymanager_t mgr;
|
||||
entityManagerInit(&mgr);
|
||||
physicsworld_t world;
|
||||
physicsWorldInit(&world);
|
||||
|
||||
entityid_t entityA = entityManagerAdd(&mgr);
|
||||
componentid_t posA = entityAddComponent(
|
||||
&mgr, entityA, COMPONENT_TYPE_POSITION
|
||||
);
|
||||
componentid_t physA = entityAddComponent(
|
||||
&mgr, entityA, COMPONENT_TYPE_PHYSICS
|
||||
);
|
||||
vec3 posAStart = { 0.0f, 0.0f, 0.3f };
|
||||
entityPositionSetLocalPosition(&mgr, entityA, posA, posAStart);
|
||||
entityPhysicsGet(&mgr, entityA, physA)->gravityScale = 0.0f;
|
||||
entityPhysicsSetCollideMask(&mgr, entityA, physA, 0x1);
|
||||
|
||||
entityid_t entityB = entityManagerAdd(&mgr);
|
||||
componentid_t posB = entityAddComponent(
|
||||
&mgr, entityB, COMPONENT_TYPE_POSITION
|
||||
);
|
||||
componentid_t physB = entityAddComponent(
|
||||
&mgr, entityB, COMPONENT_TYPE_PHYSICS
|
||||
);
|
||||
vec3 posBStart = { 0.0f, 0.0f, -0.3f };
|
||||
entityPositionSetLocalPosition(&mgr, entityB, posB, posBStart);
|
||||
entityPhysicsGet(&mgr, entityB, physB)->gravityScale = 0.0f;
|
||||
entityPhysicsSetCollideMask(&mgr, entityB, physB, 0x2);
|
||||
|
||||
// Overlapping by 0.4 on Z, but masks share no bits -- no separation.
|
||||
physicsWorldStep(&world, &mgr, 1.0f / 60.0f);
|
||||
|
||||
vec3 finalA, finalB;
|
||||
entityPositionGetWorldPosition(&mgr, entityA, posA, finalA);
|
||||
entityPositionGetWorldPosition(&mgr, entityB, posB, finalB);
|
||||
assert_float_equal(finalA[2], posAStart[2], 0.0001f);
|
||||
assert_float_equal(finalB[2], posBStart[2], 0.0001f);
|
||||
|
||||
entityManagerDispose(&mgr);
|
||||
assert_int_equal(memoryGetAllocatedCount(), 0);
|
||||
}
|
||||
|
||||
static void test_physicsWorldStepNoPhysicsEntitiesIsNoop(void **state) {
|
||||
entitymanager_t mgr;
|
||||
entityManagerInit(&mgr);
|
||||
@@ -210,6 +253,7 @@ int main(int argc, char **argv) {
|
||||
cmocka_unit_test(test_physicsWorldGravityIntegratesDynamicBody),
|
||||
cmocka_unit_test(test_physicsWorldRestsOnStaticFloor),
|
||||
cmocka_unit_test(test_physicsWorldDynamicVsDynamicSeparates),
|
||||
cmocka_unit_test(test_physicsWorldCollideMaskPreventsCollision),
|
||||
cmocka_unit_test(test_physicsWorldStepNoPhysicsEntitiesIsNoop),
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user