|
@@ -0,0 +1,147 @@
|
|
|
|
|
+#define CAMERA_STEP 200
|
|
|
|
|
+
|
|
|
|
|
+#include "helper.h"
|
|
|
|
|
+
|
|
|
|
|
+TPE_Unit
|
|
|
|
|
+ ramp1[6] = { 5000,0, 5000,5000, 0,0 },
|
|
|
|
|
+ ramp2[6] = { 5000,0, 5000,3000, 0,0 },
|
|
|
|
|
+ ramp3[6] = { 5000,0, 5000,1500, 0,0 },
|
|
|
|
|
+ impale[6] = { 1500,0, 0,6000, -1500,0 };
|
|
|
|
|
+
|
|
|
|
|
+TPE_Vec3 environmentDistance(TPE_Vec3 p, TPE_Unit maxD)
|
|
|
|
|
+{
|
|
|
|
|
+ TPE_ENV_START( TPE_envGround(p,0), p)
|
|
|
|
|
+ TPE_ENV_NEXT ( TPE_envAATriPrism(p,TPE_vec3(1000,0,0),ramp1,5000,2), p)
|
|
|
|
|
+ TPE_ENV_NEXT ( TPE_envAATriPrism(p,TPE_vec3(-4000,0,0),ramp2,3500,2), p)
|
|
|
|
|
+ TPE_ENV_NEXT ( TPE_envAATriPrism(p,TPE_vec3(-7500,0,0),ramp3,3500,2), p)
|
|
|
|
|
+ TPE_ENV_NEXT ( TPE_envAATriPrism(p,TPE_vec3(8000,0,-2400),impale,3500,2), p)
|
|
|
|
|
+ TPE_ENV_END
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+uint8_t simulating = 0;
|
|
|
|
|
+
|
|
|
|
|
+TPE_Body *controlledBody;
|
|
|
|
|
+
|
|
|
|
|
+int main(void)
|
|
|
|
|
+{
|
|
|
|
|
+ helper_init();
|
|
|
|
|
+
|
|
|
|
|
+ puts("press P to start");
|
|
|
|
|
+
|
|
|
|
|
+ helper_debugDrawOn = 1;
|
|
|
|
|
+
|
|
|
|
|
+ tpe_world.environmentFunction = environmentDistance;
|
|
|
|
|
+
|
|
|
|
|
+ s3l_scene.camera.transform.translation.z = -3000;
|
|
|
|
|
+ s3l_scene.camera.transform.translation.y = 2000;
|
|
|
|
|
+ s3l_scene.camera.transform.translation.x = 0;
|
|
|
|
|
+ s3l_scene.camera.transform.rotation.y = TPE_FRACTIONS_PER_UNIT / 16;
|
|
|
|
|
+
|
|
|
|
|
+#define addBody(x,y,z,f) \
|
|
|
|
|
+ helper_addBox(700,700,700,300,500); \
|
|
|
|
|
+ TPE_bodyMove(&helper_lastBody,TPE_vec3(x,y,z)); \
|
|
|
|
|
+ helper_lastBody.elasticity = 255; \
|
|
|
|
|
+ helper_lastBody.friction = f;
|
|
|
|
|
+
|
|
|
|
|
+ // cubes on ramps:
|
|
|
|
|
+
|
|
|
|
|
+ addBody(1800,5200,4000,0)
|
|
|
|
|
+ addBody(400,5200,4000,128)
|
|
|
|
|
+ addBody(-1100,5200,4000,511)
|
|
|
|
|
+ addBody(-2800,3600,4000,300)
|
|
|
|
|
+ addBody(-4300,3600,4000,10)
|
|
|
|
|
+ addBody(-6700,2000,4000,300)
|
|
|
|
|
+ addBody(-8400,2000,4000,10)
|
|
|
|
|
+
|
|
|
|
|
+ addBody(7500,6200,-2400,10) // impaled cube
|
|
|
|
|
+
|
|
|
|
|
+#define addBody(x,y,z,e) \
|
|
|
|
|
+ helper_addRect(700,700,300,500); \
|
|
|
|
|
+ TPE_bodyMove(&helper_lastBody,TPE_vec3(x,y,z)); \
|
|
|
|
|
+ helper_lastBody.elasticity = e;
|
|
|
|
|
+
|
|
|
|
|
+ // falling bodies
|
|
|
|
|
+
|
|
|
|
|
+ addBody(7000,5000,0,511)
|
|
|
|
|
+ addBody(8800,5000,0,255)
|
|
|
|
|
+ addBody(10600,5000,0,0)
|
|
|
|
|
+
|
|
|
|
|
+ // two colliding spheres:
|
|
|
|
|
+
|
|
|
|
|
+ helper_addBall(800,2000);
|
|
|
|
|
+ TPE_bodyMove(&helper_lastBody,TPE_vec3(200,4000,-4800));
|
|
|
|
|
+ helper_lastBody.elasticity = 255;
|
|
|
|
|
+ helper_lastBody.friction = 255;
|
|
|
|
|
+ helper_lastBody.joints[0].velocity[0] = 10;
|
|
|
|
|
+
|
|
|
|
|
+ helper_addBall(800,200);
|
|
|
|
|
+ TPE_bodyMove(&helper_lastBody,TPE_vec3(3200,3800,-4800));
|
|
|
|
|
+ helper_lastBody.elasticity = 255;
|
|
|
|
|
+ helper_lastBody.friction = 255;
|
|
|
|
|
+ helper_lastBody.joints[0].velocity[0] = -300;
|
|
|
|
|
+
|
|
|
|
|
+ helper_addBall(500,200);
|
|
|
|
|
+ controlledBody = &helper_lastBody;
|
|
|
|
|
+ TPE_bodyMove(&helper_lastBody,TPE_vec3(200,2000,-3000));
|
|
|
|
|
+
|
|
|
|
|
+ // two colliding bodies:
|
|
|
|
|
+
|
|
|
|
|
+ helper_addCenterBox(700,700,700,300,500);
|
|
|
|
|
+ TPE_bodyMove(&helper_lastBody,TPE_vec3(-4000,5000,-3000));
|
|
|
|
|
+ helper_lastBody.elasticity = 255;
|
|
|
|
|
+ helper_lastBody.friction = 255;
|
|
|
|
|
+ //helper_lastBody.flags |= TPE_BODY_FLAG_SOFT;
|
|
|
|
|
+ TPE_bodyAccelerate(&helper_lastBody,TPE_vec3(-300,0,0));
|
|
|
|
|
+
|
|
|
|
|
+ helper_addCenterBox(700,700,700,300,500);
|
|
|
|
|
+ TPE_bodyMove(&helper_lastBody,TPE_vec3(-8000,5000,-3000));
|
|
|
|
|
+ helper_lastBody.elasticity = 255;
|
|
|
|
|
+ helper_lastBody.friction = 255;
|
|
|
|
|
+ helper_lastBody.flags |= TPE_BODY_FLAG_SOFT;
|
|
|
|
|
+ TPE_bodyAccelerate(&helper_lastBody,TPE_vec3(300,0,0));
|
|
|
|
|
+
|
|
|
|
|
+ while (helper_running)
|
|
|
|
|
+ {
|
|
|
|
|
+ helper_frameStart();
|
|
|
|
|
+
|
|
|
|
|
+ helper_cameraFreeMovement();
|
|
|
|
|
+
|
|
|
|
|
+if (simulating)
|
|
|
|
|
+{
|
|
|
|
|
+ TPE_worldStep(&tpe_world);
|
|
|
|
|
+
|
|
|
|
|
+for (int i = 0; i < 11; ++i)
|
|
|
|
|
+ TPE_bodyApplyGravity(&tpe_world.bodies[i],5);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+ if (helper_debugDrawOn)
|
|
|
|
|
+ helper_debugDraw(1);
|
|
|
|
|
+
|
|
|
|
|
+if (sdl_keyboard[SDL_SCANCODE_P])
|
|
|
|
|
+ simulating = 1;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+TPE_bodyMultiplyNetSpeed(controlledBody,255);
|
|
|
|
|
+
|
|
|
|
|
+#define ACC 100
|
|
|
|
|
+if (sdl_keyboard[SDL_SCANCODE_W])
|
|
|
|
|
+ TPE_bodyAccelerate(controlledBody,TPE_vec3(0,0,ACC));
|
|
|
|
|
+else if (sdl_keyboard[SDL_SCANCODE_S])
|
|
|
|
|
+ TPE_bodyAccelerate(controlledBody,TPE_vec3(0,0,-1 * ACC));
|
|
|
|
|
+else if (sdl_keyboard[SDL_SCANCODE_D])
|
|
|
|
|
+ TPE_bodyAccelerate(controlledBody,TPE_vec3(ACC,0,0));
|
|
|
|
|
+else if (sdl_keyboard[SDL_SCANCODE_A])
|
|
|
|
|
+ TPE_bodyAccelerate(controlledBody,TPE_vec3(-1 * ACC,0,0));
|
|
|
|
|
+else if (sdl_keyboard[SDL_SCANCODE_C])
|
|
|
|
|
+ TPE_bodyAccelerate(controlledBody,TPE_vec3(0,ACC,0));
|
|
|
|
|
+else if (sdl_keyboard[SDL_SCANCODE_X])
|
|
|
|
|
+ TPE_bodyAccelerate(controlledBody,TPE_vec3(0,-1 * ACC,0));
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ helper_frameEnd();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ helper_end();
|
|
|
|
|
+
|
|
|
|
|
+ return 0;
|
|
|
|
|
+}
|