90 lines
1.7 KiB
C++
90 lines
1.7 KiB
C++
/* -----------------------------------------------------------------------------
|
|
GSFramework
|
|
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
|
----------------------------------------------------------------------------- */
|
|
|
|
|
|
#ifndef __NPHYSICSHAPE__
|
|
#define __NPHYSICSHAPE__
|
|
|
|
|
|
#include "physic/physic_wheel.h"
|
|
#include "container/narray.h"
|
|
#include "nstring/nstring.h"
|
|
|
|
|
|
namespace GS {
|
|
namespace NML { class Tag; }
|
|
namespace S3D {
|
|
|
|
/*!
|
|
@short Physic shape.
|
|
@author Emmanuel Julien (ejulien@gsworks.fr)
|
|
*/
|
|
struct PhysicShape
|
|
{
|
|
enum Type
|
|
{
|
|
TypeNone = 0,
|
|
TypeBox,
|
|
TypeSphere,
|
|
TypeConvex,
|
|
TypeCylinder,
|
|
TypeCone,
|
|
TypeCapsule,
|
|
TypeMesh,
|
|
TypeHeightmap
|
|
};
|
|
|
|
protected:
|
|
|
|
Type type;
|
|
|
|
int width, height;
|
|
Array <float> heightmap;
|
|
|
|
float resolution;
|
|
|
|
public:
|
|
|
|
void Free();
|
|
|
|
Matrix4 GetMatrix();
|
|
void SetMatrix(const Matrix4 &);
|
|
|
|
String path;
|
|
|
|
Vector4 position, ///< Position.
|
|
rotation, ///< Rotation.
|
|
scale, ///< Scale.
|
|
dimensions; ///< Dimensions.
|
|
|
|
float mass,
|
|
restitution,
|
|
dynamic_friction,
|
|
static_friction;
|
|
|
|
float *GetHeightmap() const { return heightmap; }
|
|
int GetWidth() const { return width; }
|
|
int GetHeight() const { return height; }
|
|
float GetResolution() const { return resolution; }
|
|
|
|
bool Set(float *heightmap, int width, int height, float resolution);
|
|
bool Set(Type, const char *path);
|
|
bool Set(Type = TypeNone, const Vector4 & = Vector4(1, 1, 1));
|
|
|
|
Type GetType() const { return type; }
|
|
|
|
bool FromMetaTag(NML::Tag &);
|
|
NML::Tag *AsMetaTag() const;
|
|
|
|
PhysicShape();
|
|
~PhysicShape();
|
|
};
|
|
|
|
} // S3D
|
|
} // GS
|
|
|
|
|
|
#endif // __NPHYSICSHAPE__
|