#include "element.h"

 Element::Element(b2World & world, Position p, Type t)
{
	this->p = p;
	type = t;
	multiplier = 1;

	b2BodyDef bodyDef;
#ifndef BOX2D_2_0_1
	bodyDef.type = b2_dynamicBody;
#endif
	bodyDef.position.Set(p.x/100., p.y/100.);
	
	body = world.CreateBody(&bodyDef);

#ifdef BOX2D_2_0_1
	b2CircleDef circle;
	b2CircleDef &fixtureDef = circle;
	circle.radius = 1.0f;
	circle.localPosition.Set(0.,0.);
#define CreateFixture CreateShape
#else
	b2CircleShape circle;
	b2FixtureDef fixtureDef;
	fixtureDef.shape = &circle;
	circle.m_radius = 1.0f;
	circle.m_p.Set(0.,0.);
#endif

	fixtureDef.density = 1.0f;
	fixtureDef.friction = 0.4f;

	//Categorie :
	//1 - normal
	//2 - Dame or Roi
	//4 - Objet élevé
	fixtureDef.filter.maskBits = 0x3;
	fixtureDef.filter.categoryBits = 0x1;
	if(type != Pawn)
	{
		fixtureDef.filter.categoryBits = 0x2;
		fixtureDef.filter.maskBits |= 0x4;
	}
	body->CreateFixture(&fixtureDef);
#ifdef BOX2D_2_0_1
	body->SetMassFromShapes();
#endif
}

void Element::updatePos()
{
	p.x = 100.*body->GetPosition().x;
	p.y = 100.*body->GetPosition().y;

	float friction = 0.5;
	b2Vec2 velocity = body->GetLinearVelocity();
	float32 speed = velocity.Length();
	
	if(speed > FLT_EPSILON)
	{
		float32 newSpeed = speed - friction;
		if(newSpeed < 0)
			newSpeed = 0;
		velocity *= newSpeed/speed;
		body->SetLinearVelocity(velocity);
	}

	float angularFriction = 0.1;
	float angular = body->GetAngularVelocity();
	if(angular > 0)
	{
		angular -= angularFriction;
		if(angular < 0)
			angular = 0;
	}
	else
	{
		angular += angularFriction;
		if(angular > 0)
			angular = 0;
	}
	body->SetAngularVelocity(angular);
}

void Element::paint(QPainter & pa)
{

    pa.setBrush(QColor("yellow"));
    pa.setPen(QColor("yellow"));

	pa.drawEllipse(QPoint(p.x,-p.y),100,-100);

    pa.setBrush(QColor("black"));
    pa.setPen(QColor("black"));
	QFont font;
	font.setPointSize(30);
	pa.setFont(font);

	QString text;
	if(type == Pawn)
	{
		if(multiplier > 1)
			text = QString::number(multiplier);
	}
	else
	{
		if(type == Queen)
			text = "Q";
		else
			text = "K";
		if(multiplier > 1)
			text += QString::fromStdWString(L"×") + QString::number(multiplier);
	}

	pa.drawText(p.x-80, -p.y+80, 160, -160, Qt::AlignCenter, text);
}
