/* ----------------------------------------------------------------------------- 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 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__