TODO:
- demo: ragdoll <--- maybe later
- add/remove log with TPE_LOG so that its nice, useful and not spammy

DONE:
- FOR GODS SAKE clean the code
- valgrind, cppcheck, read the whole code, refactor, test on embedded, ...
- demos for showing basic use (without using helper.h)
- expand basic tests a bit
- update the player demo (new 3D environment)
- bug: catapult demo doesn't work as expected with soft body velocity
  cancelling
- bounding box/sphere test functions/macros for optimization of environment
  building, plus a demo that tests if it actually accelerates it
- env function: heightmap
- demo: heightmap
- demo: angry-birds-like game
- demo: car
- env function: cone
- zero weight joints should behave how? <-- disallowed 0 mass
- try to make better car physics
- demo: testing different frictions on skewed plane, also different elasticities
- test env functions with a single distinct point near camera
- fast and accurate distance computation as a compile time option, dist comp is
  prolly a bottleneck
- function that tests validity of an environemnt function, i.e. if it behaves
  mathematically correct + test built in env functions with it
- bug? bodies stuck inside each other resist falling down by gravity (stack.c)
  ^ Seems to be okay now?
- test different tick lengths (demo) <-- seems OK
- test ray casting (e.g. the hit of an outside ray should always be outside)
- BUG: envBox function doesn't pass the env function test! <-- just needed a
  bigger epsilon
- current dist approx fails e.g. with heightmaps -- maybe just use the
  non-approx version at all times in places where the approx fails? Also
  TEST THE APPROX DIST with different env functions <--- the improved version
  works alright, leave the rest for the decision of the library user
- ray casting against bodies
- world state hash? for testing determinism etc.
- check if using fastBSphere vs normal BSphere doesn't affect the simulation
  result (it shouldn't) <-- on stacks.c gave the same world hash
- fine tune the number of reshapes needed for nice behavior
- elasticity doesn't really work in cases when there is an opposing joint to the
  colliding joint, the speeds always cancel out -- leave as is or somehow fix?
  ^ let's just ignore it
- body being pushed (e.g. by gravity) onto a sharp edge will likely not resist
  (due to only linear forces in connections) and will very easily be split very
  wide -- TRY AND FIX! Fix could be e.g. in a special function that checks
  whether any connection is over some tension limit and if so inverts velocities
  of its joints? OR MAYBE RATHER start applying proportional (as opposed to
  current linear) acceleration due to tension after some tension limit.
- demo: soft net (water surface?)
- try this: when reshaping body, also try to subtract velocities of joints that
  go against each other along a connection, i.e. velocities that should cancel
  out... maybe this reduces shaking?
- air friction (can be done by multiplying energy)
- collision callbacks, ability to custom handle collision response
- zero sized joints should never collide (can be useful) <- NO because 0 size
  can also mean just small size (due to size being stored divided)
- debug draw inactive bodies with different color?
- when waking a body by collision, maybe set the disable count to lower values,
  to handle situations in which two touching bodies wouldn't allow each other
  to ever get disabled
- non-rotating bodies
- demo: 2D physics
- unify naming: rotation vs orientation
- function for "faking" rotation of a single-joint body (ball): it will simply
  rotate by the axis perpendicular to its linear velocity vec
- BUG? makeCenterBox doesnt seem to add the center joint: check it out <---
  only hard to see
- tip: body center can quickly be approximated by just averaging two extreme
  points rather than averaging all points -- write this somewhere
- test/handle: collision where the velocity goes "away" from the collision (can
  happen e.g. if one body is hit by a faster body OR by manual manipulation with
  velocities) <-- seemed OK
- orthographics projection for debug draw
- demo: momentum conservation
