Go to the documentation of this file.00001 #pragma once
00002 #include <util.h>
00003
00006 class IBody
00007 {
00008 public:
00011 IBody(const float3& position, const float3& rotation)
00012 {
00013 transformation.identity();
00014 setRotation(rotation);
00015 setPosition(position);
00016 radius = 0.f;
00017 }
00018
00020 virtual ~IBody(void) {}
00021
00024 virtual void applyForce(float3 vec) = 0;
00025
00027 inline void setPosition(const float3& position)
00028 {
00029 transformation(0,3) = position[0];
00030 transformation(1,3) = position[1];
00031 transformation(2,3) = position[2];
00032 }
00033
00035 inline void setRotation(const float3& rotation)
00036 {
00037
00038
00039 float4x4 R = RotationY(rotation[1]) * RotationX(rotation[0]) * RotationZ(rotation[2]);
00040 transformation(0,0) = R(0,0);
00041 transformation(0,1) = R(0,1);
00042 transformation(0,2) = R(0,2);
00043 transformation(1,0) = R(1,0);
00044 transformation(1,1) = R(1,1);
00045 transformation(1,2) = R(1,2);
00046 transformation(2,0) = R(2,0);
00047 transformation(2,1) = R(2,1);
00048 transformation(2,2) = R(2,2);
00049 }
00050
00052 virtual float3 getPosition() = 0;
00053
00055 virtual void setGlobalPosition(float3 position) = 0;
00056
00058 virtual void stopMotion() = 0;
00059
00061 virtual void setMass(int mass) = 0;
00062
00064 virtual bool isMoving() = 0;
00065
00067 virtual void slowDown() = 0;
00068
00070 void setRadius(float r) { radius = r; }
00071
00073 float getRadius() { return radius; }
00074
00076 inline void setIdentity()
00077 {
00078 transformation.identity();
00079 }
00080
00082 inline float4x4& getTransformation(void)
00083 {
00084 return transformation;
00085 }
00086
00087 protected:
00088 float4x4 transformation;
00089 float radius;
00090 };
00091
00092 typedef IBody* pIBody;