#pragma once

#include "Model.h"
#include "vector.h"
#include "IvOBB.h"
#include "IvLineSegment3.h"


namespace AssimpRendererD3d
{
	class AssetHelper;
}


class GameObject3D
{

private:    

protected:
    virtual void Initialize(void);
    void InitializeBoundingBoxByModel(void);    
    bool m_Active;                              // active object will be cycled

public:
    GameObject3D();
    ~GameObject3D();
    GameObject3D(LPCTSTR file, LPCTSTR path, float calibrationAngleX, float calibrationAngleY, float calibrationAngleZ);
    GameObject3D(const Model &model);

    void UpdatePosition(float deltaMs);  
    void UpdateBoundingBox();
    void Draw();
    bool IsActive() {return m_Active; };
    IvOBB GetBoundingBoxOfFlightPath();
    
    float m_ScaleFactorX, m_ScaleFactorY, m_ScaleFactorZ;                                  // vergrößerungsfaktoren 
    CVector m_Position, m_LastPosition;

    Model m_Model;
	AssimpRendererD3d::AssetHelper*	m_AssetHelper;										// falls ein assimp asset benutzt werden soll

    IvOBB m_BoundingBox;																	// the object oriented boundingBox
    IvLineSegment3 m_RayTraveledInLastCycle;            

    float m_RotX, m_RotY, m_RotZ;										 // angles in degrees
    float m_Speed;														 // gesamtGeschwindigkeit (Betrag)
																			//float m_SpeedX, m_SpeedY, m_SpeedZ;
    CVector m_Velocity;
    float m_RotationSpeed;                  // die maximale Winkelgeschwindigkeit, mit der sich das Objekt drehen kann
    float m_SpeedDefault;                   // die maximale absolute Geschwindigkeit, mit der das Objekt fliegen kann
};