68 lines
1.3 KiB
C++
68 lines
1.3 KiB
C++
#ifndef _PHYSICS_MODULE_H_
|
|
#define _PHYSICS_MODULE_H_
|
|
#include <flecs.h>
|
|
#include <Ogre.h>
|
|
class JoltPhysicsWrapper;
|
|
namespace JPH
|
|
{
|
|
class Shape;
|
|
class CharacterBase;
|
|
class BodyID;
|
|
}
|
|
namespace Ogre
|
|
{
|
|
class TerrainGroup;
|
|
}
|
|
namespace ECS
|
|
{
|
|
struct Physics {
|
|
JoltPhysicsWrapper *physics;
|
|
};
|
|
struct PhysicsNode {
|
|
Ogre::SceneNode *node;
|
|
};
|
|
struct PhysicsMeshName {
|
|
Ogre::String meshName;
|
|
};
|
|
struct PhysicsMeshPtr {
|
|
Ogre::MeshPtr mesh;
|
|
};
|
|
struct PhysicsBody {
|
|
uint32_t motion;
|
|
uint32_t layer;
|
|
};
|
|
struct CharacterBody {
|
|
std::shared_ptr<JPH::CharacterBase> ch;
|
|
};
|
|
struct BoatBody {
|
|
void *tmp;
|
|
};
|
|
struct PhysicsHeightfieldData {
|
|
const float *samples;
|
|
Ogre::Vector3 offset;
|
|
Ogre::Vector3 scale;
|
|
int sampleCount;
|
|
};
|
|
struct CharacterVelocity {
|
|
Ogre::Vector3 gvelocity;
|
|
Ogre::Vector3 velocity;
|
|
};
|
|
struct CachedMass {
|
|
float mass;
|
|
};
|
|
struct PhysicsModule {
|
|
PhysicsModule(flecs::world &ecs);
|
|
static flecs::entity createTerrainChunkBody(Ogre::SceneNode *node,
|
|
float *samples,
|
|
const Ogre::Vector3 &offset,
|
|
const Ogre::Vector3 &scale,
|
|
int sampleCount);
|
|
static void controlPhysics(flecs::entity e, bool enable);
|
|
static bool raycastQuery(const Ogre::Vector3 &startPos,
|
|
const Ogre::Vector3 &endPos,
|
|
Ogre::Vector3 &position, JPH::BodyID &id);
|
|
static void setDebugDraw(bool enable);
|
|
};
|
|
}
|
|
#endif
|