Cafu Engine
Physics.hpp
1 /*
2 =================================================================================
3 This file is part of Cafu, the open-source game engine and graphics engine
4 for multiplayer, cross-platform, real-time 3D action.
5 Copyright (C) 2002-2013 Carsten Fuchs Software.
6 
7 Cafu is free software: you can redistribute it and/or modify it under the terms
8 of the GNU General Public License as published by the Free Software Foundation,
9 either version 3 of the License, or (at your option) any later version.
10 
11 Cafu is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
12 without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
13 PURPOSE. See the GNU General Public License for more details.
14 
15 You should have received a copy of the GNU General Public License
16 along with Cafu. If not, see <http://www.gnu.org/licenses/>.
17 
18 For support and more information about Cafu, visit us at <http://www.cafu.de>.
19 =================================================================================
20 */
21 
22 #ifndef CAFU_PHYSICS_HPP_INCLUDED
23 #define CAFU_PHYSICS_HPP_INCLUDED
24 
25 #include "Math3D/BoundingBox.hpp"
26 
27 
28 namespace cf { namespace ClipSys { class ClipModelT; } }
29 namespace cf { namespace ClipSys { class ClipWorldT; } }
30 
31 
32 namespace GAME_NAME
33 {
34  /// This class implements the physics for moving entities through the world.
36  {
37  public:
38 
39  PhysicsHelperT(Vector3dT& Origin, Vector3dT& Velocity, const BoundingBox3dT& Dimensions,
40  const cf::ClipSys::ClipModelT& ClipModel, const cf::ClipSys::ClipWorldT& ClipWorld);
41 
42  void MoveHuman(float FrameTime, unsigned short Heading, const VectorT& WishVelocity,
43  const VectorT& WishVelLadder, bool WishJump, bool& OldWishJump, double StepHeight);
44 
45 
46  private:
47 
48  enum PosCatT { InAir, OnSolid };
49 
50  PosCatT CategorizePosition() const;
51  void ApplyFriction(double FrameTime, PosCatT PosCat);
52  void ApplyAcceleration(double FrameTime, PosCatT PosCat, const VectorT& WishVelocity);
53  void ApplyGravity(double FrameTime, PosCatT PosCat);
54  void FlyMove(double TimeLeft);
55  void GroundMove(double FrameTime, double StepHeight);
56 
57  Vector3dT& m_Origin;
58  Vector3dT& m_Velocity;
59  const BoundingBox3dT& m_Dimensions;
60  const cf::ClipSys::ClipModelT& m_ClipModel;
61  const cf::ClipSys::ClipWorldT& m_ClipWorld;
62  };
63 }
64 
65 #endif
This class implements the physics for moving entities through the world.
Definition: Physics.hpp:35
A clip model represents an object in the world against which clipping queries can be performed...
Definition: ClipModel.hpp:46
The clip world manages all the clip models that exist in a world (their "union"). ...
Definition: ClipWorld.hpp:42