summaryrefslogtreecommitdiffstats
path: root/physics.c
diff options
context:
space:
mode:
Diffstat (limited to 'physics.c')
-rw-r--r--physics.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/physics.c b/physics.c
new file mode 100644
index 0000000..cea066d
--- /dev/null
+++ b/physics.c
@@ -0,0 +1,26 @@
+#include <neofx/physics.h>
+#include <neofx/math.h>
+#include <math.h>
+
+static VECTOR gravitation = {0, -9.8, 0};
+
+
+void SetGravitation(VECTOR v) {
+ gravitation = v;
+}
+
+void ApplyPhysics(OBJECT o, float delta) {
+ VERTEX old_pos = o.pos;
+ VECTOR old_move = o.move;
+ float e;
+
+ e = expf(-o.air_resistance*delta);
+
+ o.move = VectorAdd(VectorMul(gravitation, 1/o.air_resistance),
+ VectorMul(VectorSub(old_move, VectorMul(gravitation, 1/o.air_resistance)),
+ e));
+
+ o.pos = VectorAdd(old_pos, VectorAdd(VectorMul(gravitation, delta/o.air_resistance),
+ VectorMul(VectorSub(old_move, VectorMul(gravitation, 1/o.air_resistance)),
+ (1-e)/o.air_resistance)));
+}