fixed preview stretching, and found a workaround for the foreach segfault

This commit is contained in:
Anselme 2016-05-26 17:41:05 +02:00
parent 388794bca6
commit 927fb17353
4 changed files with 134 additions and 36 deletions

View File

@ -22,13 +22,11 @@ Simulation::Simulation(MapScene *_map, std::vector<BehaviorFunction> &_behaviors
void Simulation::update()
{
std::random_shuffle(m_dudes.begin(),m_dudes.end());
//TODO FIX : find segfault origin
if(!m_dudes.empty()){
for (auto dude : m_dudes){
auto action = m_teams[dude->getTeam()].update(dude); //get action for this dude from behavior function in team
handleAction(action,dude);
}
std::random_shuffle(m_dudes.begin(), m_dudes.end());
for (int i=0; i<m_dudes.size(); ++i){
Dude *dude = m_dudes[i];
auto action = m_teams[dude->getTeam()].update(dude); //get action for this dude from behavior function in team
handleAction(action, dude);
}
// for each team, spawn dude if condition met
for(int i=0; i<m_teams.size(); ++i){

View File

@ -17,6 +17,7 @@ SimulationDialog::SimulationDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::SimulationDialog),
m_map(NULL),
m_currentPreview(NULL),
m_availableGenerators(true)
{
ui->setupUi(this);
@ -31,13 +32,13 @@ SimulationDialog::SimulationDialog(QWidget *parent) :
SimulationDialog::~SimulationDialog()
{
delete m_currentPreview;
delete ui;
}
void SimulationDialog::resizeEvent(QResizeEvent *e)
{
int h = ui->mapPreview->height();
ui->mapPreview->resize(h*2, h);
updatePreviewPixmap();
}
void SimulationDialog::refreshBehaviors()
@ -133,7 +134,9 @@ void SimulationDialog::updatePreview()
{
int w = ui->mapSizeSpinBox->value();
int h = w/2;
QImage preview(w, h, QImage::Format_RGB32);
if(m_currentPreview != NULL)
delete m_currentPreview;
m_currentPreview = new QImage(w, h, QImage::Format_RGB32);
// init pixels
if(m_map != NULL)
{
@ -142,13 +145,23 @@ void SimulationDialog::updatePreview()
{
const Pixel &p = m_map->getPixel(Coord(i, j));
glm::vec3 color = MapScene::getColor(p.type);
preview.setPixel(i, j, qRgb(int(color.r*255), int(color.g*255), int(color.b*255)));
m_currentPreview->setPixel(i, j, qRgb(int(color.r*255), int(color.g*255), int(color.b*255)));
}
}
else
preview.fill(Qt::black);
m_currentPreview->fill(Qt::black);
// update preview
ui->mapPreview->setPixmap(QPixmap::fromImage(preview));
updatePreviewPixmap();
}
void SimulationDialog::updatePreviewPixmap()
{
QMargins margins = ui->generatorsGroup->layout()->contentsMargins();
int w = ui->generatorsGroup->width() - (margins.left() + margins.right() + 2);
QSize size = ui->generatorsGroup->layout()->closestAcceptableSize(ui->mapPreview, QSize(w, w/2));
ui->mapPreview->setMinimumWidth(size.width());
ui->mapPreview->setMinimumWidth(size.height());
ui->mapPreview->setPixmap(QPixmap::fromImage(*m_currentPreview).scaled(size.width(), size.height(), Qt::KeepAspectRatio));
}
void SimulationDialog::selectBehavior(const QModelIndex &index)

View File

@ -41,8 +41,11 @@ private:
std::vector<BehaviorFunction> m_selectedBehaviors;
MapScene *m_map;
QLibrary *m_currentGeneratorLib;
QImage *m_currentPreview;
bool m_availableGenerators;
void updatePreviewPixmap();
signals:
void sendError(QString, int);
};

View File

@ -14,23 +14,74 @@
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>5</number>
</property>
<property name="leftMargin">
<number>5</number>
</property>
<property name="topMargin">
<number>5</number>
</property>
<property name="rightMargin">
<number>5</number>
</property>
<property name="bottomMargin">
<number>5</number>
</property>
<item>
<widget class="QWidget" name="widget" native="true">
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>5</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="behaviorsGroup">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Pixel behaviors</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="1">
<widget class="QListWidget" name="behaviorsList">
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
<item row="0" column="2">
<widget class="QListWidget" name="selectedBehaviors">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
</widget>
</item>
<item row="1" column="1">
@ -40,11 +91,20 @@
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QListWidget" name="selectedBehaviors">
<item row="0" column="1">
<widget class="QListWidget" name="behaviorsList">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
</widget>
</item>
</layout>
@ -52,10 +112,28 @@
</item>
<item>
<widget class="QGroupBox" name="generatorsGroup">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>2</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Terrain generators</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
<item row="6" column="2">
<widget class="QPushButton" name="generateButton">
<property name="text">
@ -63,24 +141,14 @@
</property>
</widget>
</item>
<item row="8" column="0" colspan="3">
<widget class="QLabel" name="mapPreview">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>this is a preview</string>
</property>
<property name="scaledContents">
<bool>false</bool>
</property>
</widget>
</item>
<item row="2" column="0" rowspan="4">
<widget class="QListWidget" name="generatorsList">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
@ -119,6 +187,22 @@
</property>
</widget>
</item>
<item row="7" column="0" rowspan="2" colspan="3">
<widget class="QLabel" name="mapPreview">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>this is a preview</string>
</property>
<property name="scaledContents">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>