aboutsummaryrefslogtreecommitdiff
path: root/Client/Source/Phy2DLite
diff options
context:
space:
mode:
Diffstat (limited to 'Client/Source/Phy2DLite')
-rw-r--r--Client/Source/Phy2DLite/Constants.h24
-rw-r--r--Client/Source/Phy2DLite/Settings.h23
-rw-r--r--Client/Source/Phy2DLite/World.cpp2
3 files changed, 42 insertions, 7 deletions
diff --git a/Client/Source/Phy2DLite/Constants.h b/Client/Source/Phy2DLite/Constants.h
index f116ca8..59a8c09 100644
--- a/Client/Source/Phy2DLite/Constants.h
+++ b/Client/Source/Phy2DLite/Constants.h
@@ -5,7 +5,7 @@
namespace Phy2D
{
#if NUMBER_ALIAS == NUMBER_FPM
-#define CONSTANT(name, value) static fixed name = fixed::from_raw_value(value)
+#define CONSTANT(name, value) static constexpr fixed name = fixed::from_raw_value(value)
CONSTANT(_1, 65536);
CONSTANT(_n1, -65536);
@@ -16,5 +16,27 @@ namespace Phy2D
CONSTANT(_0_95, 62259);
CONSTANT(_12, 786432);
+#elif NUMBER_ALIAS == NUMBER_FLOAT
+
+ static const float _1 = 1;
+ static const float _n1 = -1;
+ static const float _0 = 0;
+ static const float _0_01 = 0.01;
+ static const float _0_2 = 0.2;
+ static const float _0_5 = 0.5;
+ static const float _0_95 = 0.95;
+ static const float _12 = 12;
+
+#elif NUMBER_ALIAS == NUMBER_FIX32
+
+ static const float _1 = 1;
+ static const float _n1 = -1;
+ static const float _0 = 0;
+ static const float _0_01 = 0.01;
+ static const float _0_2 = 0.2;
+ static const float _0_5 = 0.5;
+ static const float _0_95 = 0.95;
+ static const float _12 = 12;
+
#endif
} \ No newline at end of file
diff --git a/Client/Source/Phy2DLite/Settings.h b/Client/Source/Phy2DLite/Settings.h
index 9345b32..6454943 100644
--- a/Client/Source/Phy2DLite/Settings.h
+++ b/Client/Source/Phy2DLite/Settings.h
@@ -1,16 +1,19 @@
#pragma once
-#define NUMBER_FLOAT 1
-#define NUMBER_LIBFIX 2
-#define NUMBER_FPM 3
+#define NUMBER_FLOAT 1
+#define NUMBER_LIBFIX 2
+#define NUMBER_FPM 3
+#define NUMBER_FIX32 4
-#define NUMBER_ALIAS NUMBER_FPM
+#define NUMBER_ALIAS NUMBER_FIX32
#if NUMBER_ALIAS == NUMBER_LIBFIX
#include "libfixmath/libfixmath/fixmath.h"
#elif NUMBER_ALIAS == NUMBER_FPM
#include "fpm/include/fpm/fixed.hpp"
#include "fpm/include/fpm/math.hpp"
+#elif NUMBER_ALIAS == NUMBER_FIX32
+#include "fix32/fix32.hpp"
#endif
namespace Phy2D
@@ -24,10 +27,10 @@ typedef float fixed;
#define SQRT(a) (sqrt((a)))
#define SIN(a) (sin((a)))
#define COS(a) (cos((a)))
+#define PI (3.1415925f)
#elif NUMBER_ALIAS == NUMBER_LIBFIX
-// 同时一定要开启内联函数扩展,否则执行效率会非常低
typedef Fix16 fixed;
#define NUMBER_MAX (fix16_maximum)
#define NUMBER_MIN (fix16_minimum)
@@ -91,6 +94,16 @@ typedef fpm::fixed_16_16 fixed;
#define COS(a) (fpm::cos((a)))
#define PI (fixed::pi())
+#elif NUMBER_ALIAS == NUMBER_FIX32
+
+ typedef Fix32 fixed;
+#define NUMBER_MAX (CONST_MAX)
+#define NUMBER_MIN (CONST_MIN)
+#define SQRT(a) ((a).sqrt())
+#define SIN(a) ((a).sin())
+#define COS(a) ((a).cos())
+#define PI (CONST_PI)
+
#endif
} \ No newline at end of file
diff --git a/Client/Source/Phy2DLite/World.cpp b/Client/Source/Phy2DLite/World.cpp
index f20be5f..76e57ea 100644
--- a/Client/Source/Phy2DLite/World.cpp
+++ b/Client/Source/Phy2DLite/World.cpp
@@ -73,7 +73,7 @@ void World::BroadPhase()
void World::Step(fixed dt)
{
- fixed inv_dt = dt > _0 ? _1 / dt : _0;
+ fixed inv_dt = dt > _0 ? (fixed)_1 / dt : (fixed)_0;
// Determine overlapping bodies and update contact points.
BroadPhase();