88 lines
1.9 KiB
C++
88 lines
1.9 KiB
C++
#include <Qt>
|
|
|
|
#include "CREAnimationControl.h"
|
|
#include "CREAnimationWidget.h"
|
|
|
|
CREAnimationControl::CREAnimationControl(QWidget* parent) : QWidget(parent)
|
|
{
|
|
myAnimation = NULL;
|
|
myStep = 0;
|
|
myLastStep = 0;
|
|
|
|
CREAnimationWidget* widget;
|
|
QGridLayout* layout = new QGridLayout(this);
|
|
|
|
for (int dir = 1; dir <= 8; dir++)
|
|
{
|
|
widget = new CREAnimationWidget(this);
|
|
widget->setVisible(false);
|
|
|
|
layout->addWidget(widget, 2 + freearr_y[dir], 2 + freearr_x[dir]);
|
|
myWidgets.append(widget);
|
|
}
|
|
|
|
QTimer* timer = new QTimer(this);
|
|
connect(timer, SIGNAL(timeout()), this, SLOT(step()));
|
|
timer->start(250);
|
|
}
|
|
|
|
void CREAnimationControl::setAnimation(const Animations* animation)
|
|
{
|
|
myAnimation = animation;
|
|
display(animation);
|
|
}
|
|
|
|
void CREAnimationControl::display(const Animations* animation)
|
|
{
|
|
myFacings = animation->facings;
|
|
|
|
int widget, widgetStep, faceCount, face, faceCurrent;
|
|
|
|
for (widget = 0; widget < 8; widget++)
|
|
myWidgets[widget]->setVisible(false);
|
|
|
|
widget = 0;
|
|
|
|
if (myFacings == 1)
|
|
{
|
|
widgetStep = 8;
|
|
faceCount = animation->num_animations;
|
|
}
|
|
else if (myFacings == 2)
|
|
{
|
|
widgetStep = 4;
|
|
faceCount = animation->num_animations / 2;
|
|
}
|
|
else if (myFacings == 4)
|
|
{
|
|
widgetStep = 2;
|
|
faceCount = animation->num_animations / 4;
|
|
}
|
|
else
|
|
{
|
|
widgetStep = 1;
|
|
faceCount = animation->num_animations / 8;
|
|
}
|
|
|
|
face = 0;
|
|
while (widget < 8)
|
|
{
|
|
myWidgets[widget]->setVisible(true);
|
|
QList<int> faces;
|
|
for (faceCurrent = 0; faceCurrent < faceCount; faceCurrent++)
|
|
faces.append(animation->faces[face++]);
|
|
myWidgets[widget]->setAnimation(faces);
|
|
|
|
widget += widgetStep;
|
|
}
|
|
}
|
|
|
|
void CREAnimationControl::step()
|
|
{
|
|
if (myAnimation == NULL)
|
|
return;
|
|
|
|
for (int w = 0; w < myWidgets.size(); w++)
|
|
myWidgets[w]->step();
|
|
}
|