/******************************************************************************** * ReactPhysics3D physics library, http://www.reactphysics3d.com * * Copyright (c) 2010-2020 Daniel Chappuis * ********************************************************************************* * * * This software is provided 'as-is', without any express or implied warranty. * * In no event will the authors be held liable for any damages arising from the * * use of this software. * * * * Permission is granted to anyone to use this software for any purpose, * * including commercial applications, and to alter it and redistribute it * * freely, subject to the following restrictions: * * * * 1. The origin of this software must not be misrepresented; you must not claim * * that you wrote the original software. If you use this software in a * * product, an acknowledgment in the product documentation would be * * appreciated but is not required. * * * * 2. Altered source versions must be plainly marked as such, and must not be * * misrepresented as being the original software. * * * * 3. This notice may not be removed or altered from any source distribution. * * * ********************************************************************************/ #ifndef REACTPHYSICS3D_CONFIGURATION_H #define REACTPHYSICS3D_CONFIGURATION_H // Libraries #include #include #include #include #include #include #include // Windows platform #if defined(WIN32) ||defined(_WIN32) || defined(_WIN64) ||defined(__WIN32__) || defined(__WINDOWS__) #define WINDOWS_OS #elif defined(__APPLE__) // Apple platform #define APPLE_OS #elif defined(__linux__) || defined(linux) || defined(__linux) // Linux platform #define LINUX_OS #endif /// Namespace reactphysics3d namespace reactphysics3d { // ------------------- Type definitions ------------------- // using uint = unsigned int; using uchar = unsigned char; using ushort = unsigned short; using luint = long unsigned int; using int8 = std::int8_t; using uint8 = std::uint8_t; using int16 = std::int16_t; using uint16 = std::uint16_t; using int32 = std::int32_t; using uint32 = std::uint32_t; using int64 = std::int64_t; using uint64 = std::uint64_t; struct Entity; using bodypair = Pair; // ------------------- Enumerations ------------------- // /// Position correction technique used in the constraint solver (for joints). /// BAUMGARTE_JOINTS : Faster but can be innacurate in some situations. /// NON_LINEAR_GAUSS_SEIDEL : Slower but more precise. This is the option used by default. enum class JointsPositionCorrectionTechnique {BAUMGARTE_JOINTS, NON_LINEAR_GAUSS_SEIDEL}; /// Position correction technique used in the contact solver (for contacts) /// BAUMGARTE_CONTACTS : Faster but can be innacurate and can lead to unexpected bounciness /// in some situations (due to error correction factor being added to /// the bodies momentum). /// SPLIT_IMPULSES : A bit slower but the error correction factor is not added to the /// bodies momentum. This is the option used by default. enum class ContactsPositionCorrectionTechnique {BAUMGARTE_CONTACTS, SPLIT_IMPULSES}; // ------------------- Constants ------------------- // /// Smallest decimal value (negative) const decimal DECIMAL_SMALLEST = - std::numeric_limits::max(); /// Maximum decimal value const decimal DECIMAL_LARGEST = std::numeric_limits::max(); /// Machine epsilon const decimal MACHINE_EPSILON = std::numeric_limits::epsilon(); /// Pi constant constexpr decimal PI = decimal(3.14159265); /// 2*Pi constant constexpr decimal PI_TIMES_2 = decimal(6.28318530); /// In the broad-phase collision detection (dynamic AABB tree), the AABBs are /// inflated by a constant percentage of its size to allow the collision shape to move a little bit /// without triggering a large modification of the tree each frame which can be costly constexpr decimal DYNAMIC_TREE_FAT_AABB_INFLATE_PERCENTAGE = decimal(0.08); /// Current version of ReactPhysics3D const std::string RP3D_VERSION = std::string("0.8.0"); } #endif