From fdd228071a3112aeebda20766c7df3b20b8651aa Mon Sep 17 00:00:00 2001 From: chai Date: Thu, 2 Dec 2021 14:44:36 +0800 Subject: +Fix32 --- Client/Source/Phy2DLite/Constants.h | 24 +++++++++++++++++++++++- Client/Source/Phy2DLite/Settings.h | 23 ++++++++++++++++++----- Client/Source/Phy2DLite/World.cpp | 2 +- 3 files changed, 42 insertions(+), 7 deletions(-) (limited to 'Client/Source/Phy2DLite') 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(); -- cgit v1.1-26-g67d0