diff --git a/include/Nazara/Physics/Config.hpp b/include/Nazara/Physics/Config.hpp new file mode 100644 index 000000000..a5af060c0 --- /dev/null +++ b/include/Nazara/Physics/Config.hpp @@ -0,0 +1,38 @@ +/* + Nazara Engine + + Copyright (C) 2012 AUTHORS (EMAIL) + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is furnished to do + so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ + +#pragma once + +#ifndef NAZARA_CONFIG_PHYSICS_HPP +#define NAZARA_CONFIG_PHYSICS_HPP + +/// Chaque modification d'un paramètre du module nécessite une recompilation de celui-ci + +// Utilise un tracker pour repérer les éventuels leaks (Ralentit l'exécution) +#define NAZARA_PHYSICS_MEMORYLEAKTRACKER 0 + +// Active les tests de sécurité basés sur le code (Conseillé pour le développement) +#define NAZARA_PHYSICS_SAFE 1 + +#endif // NAZARA_CONFIG_PHYSICS_HPP diff --git a/include/Nazara/Physics/Debug.hpp b/include/Nazara/Physics/Debug.hpp new file mode 100644 index 000000000..933d5db67 --- /dev/null +++ b/include/Nazara/Physics/Debug.hpp @@ -0,0 +1,11 @@ +// Copyright (C) 2012 AUTHORS +// This file is part of the "Nazara Engine". +// For conditions of distribution and use, see copyright notice in Config.hpp + +#include +#if NAZARA_PHYSICS_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) + #include + + #define delete NzMemoryManager::NextFree(__FILE__, __LINE__), delete + #define new new(__FILE__, __LINE__) +#endif diff --git a/include/Nazara/Physics/DebugOff.hpp b/include/Nazara/Physics/DebugOff.hpp new file mode 100644 index 000000000..813b9165e --- /dev/null +++ b/include/Nazara/Physics/DebugOff.hpp @@ -0,0 +1,8 @@ +// Copyright (C) 2012 AUTHORS +// This file is part of the "Nazara Engine". +// For conditions of distribution and use, see copyright notice in Config.hpp + +#if NAZARA_PHYSICS_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) + #undef delete + #undef new +#endif diff --git a/include/Nazara/Physics/Physics.hpp b/include/Nazara/Physics/Physics.hpp new file mode 100644 index 000000000..c36ce3fad --- /dev/null +++ b/include/Nazara/Physics/Physics.hpp @@ -0,0 +1,27 @@ +// Copyright (C) 2012 Jérôme Leclercq / Rémi Bèges +// This file is part of the "Nazara Engine". +// For conditions of distribution and use, see copyright notice in Config.hpp + +#pragma once + +#ifndef NAZARA_PHYSICS_HPP +#define NAZARA_PHYSICS_HPP + +#include + +class NAZARA_API NzPhysics +{ + public: + NzPhysics(); + ~NzPhysics(); + + bool Initialize(); + void Uninitialize(); + + static bool IsInitialized(); + + private: + static bool s_initialized; +}; + +#endif // NAZARA_PHYSICS_HPP diff --git a/include/Nazara/Physics/PhysicsSolver.hpp b/include/Nazara/Physics/PhysicsSolver.hpp new file mode 100644 index 000000000..86a7b0b17 --- /dev/null +++ b/include/Nazara/Physics/PhysicsSolver.hpp @@ -0,0 +1,34 @@ +// Copyright (C) 2012 Jérôme Leclercq / Rémi Bèges +// This file is part of the "Nazara Engine". +// For conditions of distribution and use, see copyright notice in Config.hpp + +#pragma once + +#ifndef PHYSICSSOLVER_HPP +#define PHYSICSSOLVER_HPP + +#include + +enum nzSolverMode +{ + nzExact, + nzAdaptative, + nzLinear +}; + +class NzPhysicsWorld; + +class NzPhysicsSolver +{ + public: + NzPhysicsSolver(nzSolverMode mode = nzLinear, unsigned int numberOfPassesLinearMode = 10); + void Configure(nzSolverMode mode, unsigned int numberOfPassesLinearMode); + void Set(NzPhysicsWorld* world); + ~NzPhysicsSolver(); + protected: + private: + nzSolverMode m_mode; + unsigned int m_numberOfPassesLinearMode; +}; + +#endif // PHYSICSSOLVER_HPP diff --git a/include/Nazara/Physics/PhysicsWorld.hpp b/include/Nazara/Physics/PhysicsWorld.hpp new file mode 100644 index 000000000..b0eda5f26 --- /dev/null +++ b/include/Nazara/Physics/PhysicsWorld.hpp @@ -0,0 +1,42 @@ +// Copyright (C) 2012 Jérôme Leclercq / Rémi Bèges +// This file is part of the "Nazara Engine". +// For conditions of distribution and use, see copyright notice in Config.hpp + +#pragma once + +#ifndef PHYSICSWORLD_HPP +#define PHYSICSWORLD_HPP + +#include +#include + +enum nzFrictionModel +{ + nzExact, + nzAdaptative +}; + +class NzPhysicsSolver; + +class NzPhysicsWorld +{ + public: + NzPhysicsWorld(); + ~NzPhysicsWorld(); + + void SetPhysicsSolver(const NzPhysicsSolver& solver); + const NzPhysicsSolver& GetPhysicsSolver() const; + + void SetFrictionModel(nzFrictionModel model); + const nzFrictionModel& GetFrictionModel(); + + void UpdatePhysics(nzUint64 timestep); + + protected: + private: + NewtonWorld* m_world; + NzPhysicsSolver m_solver; + nzFrictionModel m_frictionModel; +}; + +#endif // PHYSICSWORLD_HPP