Skip to content
objet.cpp 2.1 KiB
Newer Older
#include "simul/objet.h"

Objet::Objet(b2World & world, Position p, Type type)
{
    this->p = p;
    this->type = type;
    theta = 0.;

    b2BodyDef bodyDef;
    bodyDef.type = b2_dynamicBody;
    bodyDef.position.Set(p.x/100.,p.y/100.);

    body = world.CreateBody(&bodyDef);

    if (type == blackCoin || type == whiteCoin )
    {
        b2CircleShape circle;
        b2FixtureDef fixtureDef;
        fixtureDef.shape = &circle;
        circle.m_radius = 0.6f;
        circle.m_p.Set(0.,0.);
        fixtureDef.density = 1.0f;
        fixtureDef.friction = 0.4f;
        fixtureDef.filter.maskBits = 0x3;
        fixtureDef.filter.categoryBits = 0x1;
        body->CreateFixture(&fixtureDef);
    }
    else
    {

    }

}

Objet::~Objet()
{
    //dtor
}

void Objet::paint(QPainter &pa)
{
    switch (type)
    {
        case blackCoin:
        {
            pa.setBrush(QBrush(QColor("black")));
            pa.setPen(QBrush(QColor("black")));

            pa.drawEllipse(QPoint(p.x,-p.y),60,-60);
            break;
        }
        case whiteCoin:
        {
            pa.setBrush(QBrush(QColor("white")));
            pa.setPen(QBrush(QColor("white")));

            pa.drawEllipse(QPoint(p.x,-p.y),60,-60);
            break;
        }
        case goldBar:
        {
            pa.setBrush(QBrush(QColor("yellow")));
            pa.setPen(QBrush(QColor("yellow")));

            pa.drawRect(p.x,-p.y,150,-70);
            break;
        }
    }
    return;
}

void Objet::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);

}