#ifndef _PROTO_SIMPLEOBJECT_HPP_ #define _PROTO_SIMPLEOBJECT_HPP_ #ifndef _COMMON_SMARTPOINTER_HPP_ #include #endif #ifndef _COMMON_BITMAP_HPP_ #include #endif #ifndef _ENGINE_VECTOR3D_HPP_ #include #endif #ifndef _ENGINE_TEXTURE_HPP_ #include #endif #ifndef _PROTO_PUREOBJECT_HPP_ #include #endif class SimpleObject : public PureObject { public: SimpleObject(void); SimpleObject(const Vector3D &vector3D,UINT id=0); virtual ~SimpleObject(); Point3D &operator[](unsigned short index); void setVector(const Vector3D &vector3D); const Vector3D &getInitVector(void)const; void setTexture(SmartPointer &textureBitmap,bool ownIt=false); const SmartPointer &getTexture(void)const; virtual void rotate(const PureAngle &pureAngle,RotationMatrix::Orientation orientation); virtual void translate(const Point &uvPoint,TranslationMatrix::Orientation orientation); virtual void map(SmartPointer &displayBitmap); virtual void normalize(void); virtual bool isInView(SmartPointer &displayBitmap); virtual const Vector3D &getVector(void)const; private: SimpleObject(const SimpleObject &someSimpleObject); SimpleObject &operator=(const SimpleObject &someSimpleObject); SmartPointer mTextureBitmap; Vector3D mVector3D; Vector3D mInitVector3D; }; inline SimpleObject::SimpleObject(void) { } inline SimpleObject::SimpleObject(const Vector3D &vector3D,UINT id) : PureObject(id), mVector3D(vector3D), mInitVector3D(vector3D) { } inline SimpleObject::SimpleObject(const SimpleObject &someSimpleObject) { // private implementation *this=someSimpleObject; } inline SimpleObject::~SimpleObject() { } inline Point3D &SimpleObject::operator[](unsigned short index) { return mVector3D[index]; } inline SimpleObject &SimpleObject::operator=(const SimpleObject &someSimpleObject) { mVector3D=someSimpleObject.mVector3D; mTextureBitmap=someSimpleObject.mTextureBitmap; setState(someSimpleObject.getState()); setID(someSimpleObject.getID()); return *this; } inline void SimpleObject::setVector(const Vector3D &vector3D) { mVector3D=vector3D; } inline const Vector3D &SimpleObject::getVector(void)const { return mVector3D; } inline const Vector3D &SimpleObject::getInitVector(void)const { return mInitVector3D; } inline void SimpleObject::setTexture(SmartPointer &textureBitmap,bool ownIt) { mTextureBitmap=textureBitmap; if(ownIt)mTextureBitmap.disposition(PointerDisposition::Delete); } inline const SmartPointer &SimpleObject::getTexture(void)const { return mTextureBitmap; } // virtuals inline void SimpleObject::map(SmartPointer &displayBitmap) { Texture textureMapper(mVector3D,*mTextureBitmap,*displayBitmap); textureMapper.mapTexture(); } inline void SimpleObject::rotate(const PureAngle &pureAngle,RotationMatrix::Orientation orientation) { RotationMatrix rotationMatrix; rotationMatrix.orientation(orientation); rotationMatrix.angle(pureAngle); rotationMatrix.evaluate(mVector3D[0]); rotationMatrix.evaluate(mVector3D[1]); rotationMatrix.evaluate(mVector3D[2]); rotationMatrix.evaluate(mVector3D[3]); } inline void SimpleObject::translate(const Point &uvPoint,TranslationMatrix::Orientation orientation) { TranslationMatrix translationMatrix; translationMatrix.orientation(orientation); translationMatrix.uvPoint(uvPoint); translationMatrix.evaluate(mVector3D[0]); translationMatrix.evaluate(mVector3D[1]); translationMatrix.evaluate(mVector3D[2]); translationMatrix.evaluate(mVector3D[3]); } inline void SimpleObject::normalize(void) { mVector3D.normalize(); } inline bool SimpleObject::isInView(SmartPointer &displayBitmap) { return displayBitmap->isInView(mVector3D); } #endif