#pragma once

//-----------------------------------------------------
// Include Files
//-----------------------------------------------------
#include "Matrix2D.h"
#include "Character.h"
class ResourceLoader;
class Painter;
class InputState;
class Image;
class CollisionMesh;

//-----------------------------------------------------
// LevelProp Class									
//-----------------------------------------------------
class LevelProp
{
public:
	LevelProp(ResourceLoader* resourceLoaderPtr,const String& imageName);				// Constructor
	virtual ~LevelProp();		// Destructor

	//-------------------------------------------------
	// Eigen methoden								
	//-------------------------------------------------
	virtual void Paint(Painter *painterPtr, Matrix2D matTransform);
	virtual void Tick(InputState *inputStatePtr);
	virtual void CheckCollision(Character *characterPtr) const;
	virtual void CheckCollision(LevelProp *levelPropPtr, InputState *inputStatePtr) const;

	virtual Point2D GetPosition() const;
	virtual void SetPosition(Point2D pt);
	Vector2D GetVelocity() const;
	void SetVelocity(Vector2D vel);
	CollisionMesh *GetCollisionMesh() const;
	double GetWidth() const;
	double GetHeight() const;
	void SetAngularSpeed(double angularSpeed);
	bool UsesRayCast() const;
	double GetRestitution() const;
	double GetFriction() const;

protected:
	Image *m_ImagePtr;
	CollisionMesh *m_CollisionMeshPtr;
	Point2D m_Position;
	Matrix2D m_MatWorld;
	double m_Angle;
	double m_AngularSpeed;
	Vector2D m_Gravity;
	Vector2D m_Velocity;
	bool m_UseRayCast;
	double m_Restitution;
	double m_Friction;

private: 
	// -------------------------
	// Disabling default copy constructor and default 
	// assignment operator.
	// -------------------------
	LevelProp(const LevelProp& yRef);									
	LevelProp& operator=(const LevelProp& yRef);	
};

 
