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() void Simulation::update()
{ {
std::random_shuffle(m_dudes.begin(),m_dudes.end()); std::random_shuffle(m_dudes.begin(), m_dudes.end());
//TODO FIX : find segfault origin for (int i=0; i<m_dudes.size(); ++i){
if(!m_dudes.empty()){ Dude *dude = m_dudes[i];
for (auto dude : m_dudes){ auto action = m_teams[dude->getTeam()].update(dude); //get action for this dude from behavior function in team
auto action = m_teams[dude->getTeam()].update(dude); //get action for this dude from behavior function in team handleAction(action, dude);
handleAction(action,dude);
}
} }
// for each team, spawn dude if condition met // for each team, spawn dude if condition met
for(int i=0; i<m_teams.size(); ++i){ for(int i=0; i<m_teams.size(); ++i){

View File

@ -17,6 +17,7 @@ SimulationDialog::SimulationDialog(QWidget *parent) :
QDialog(parent), QDialog(parent),
ui(new Ui::SimulationDialog), ui(new Ui::SimulationDialog),
m_map(NULL), m_map(NULL),
m_currentPreview(NULL),
m_availableGenerators(true) m_availableGenerators(true)
{ {
ui->setupUi(this); ui->setupUi(this);
@ -31,13 +32,13 @@ SimulationDialog::SimulationDialog(QWidget *parent) :
SimulationDialog::~SimulationDialog() SimulationDialog::~SimulationDialog()
{ {
delete m_currentPreview;
delete ui; delete ui;
} }
void SimulationDialog::resizeEvent(QResizeEvent *e) void SimulationDialog::resizeEvent(QResizeEvent *e)
{ {
int h = ui->mapPreview->height(); updatePreviewPixmap();
ui->mapPreview->resize(h*2, h);
} }
void SimulationDialog::refreshBehaviors() void SimulationDialog::refreshBehaviors()
@ -133,7 +134,9 @@ void SimulationDialog::updatePreview()
{ {
int w = ui->mapSizeSpinBox->value(); int w = ui->mapSizeSpinBox->value();
int h = w/2; 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 // init pixels
if(m_map != NULL) if(m_map != NULL)
{ {
@ -142,13 +145,23 @@ void SimulationDialog::updatePreview()
{ {
const Pixel &p = m_map->getPixel(Coord(i, j)); const Pixel &p = m_map->getPixel(Coord(i, j));
glm::vec3 color = MapScene::getColor(p.type); 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 else
preview.fill(Qt::black); m_currentPreview->fill(Qt::black);
// update preview // 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) void SimulationDialog::selectBehavior(const QModelIndex &index)

View File

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

View File

@ -14,23 +14,74 @@
<string>Dialog</string> <string>Dialog</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <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> <item>
<widget class="QWidget" name="widget" native="true"> <widget class="QWidget" name="widget" native="true">
<layout class="QVBoxLayout" name="verticalLayout_2"> <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> <item>
<widget class="QGroupBox" name="behaviorsGroup"> <widget class="QGroupBox" name="behaviorsGroup">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="title"> <property name="title">
<string>Pixel behaviors</string> <string>Pixel behaviors</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_2"> <layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="1"> <property name="leftMargin">
<widget class="QListWidget" name="behaviorsList"> <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"> <property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum> <enum>QAbstractItemView::NoSelection</enum>
</property> </property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="1" column="1">
@ -40,11 +91,20 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="2"> <item row="0" column="1">
<widget class="QListWidget" name="selectedBehaviors"> <widget class="QListWidget" name="behaviorsList">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="selectionMode"> <property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum> <enum>QAbstractItemView::NoSelection</enum>
</property> </property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>
@ -52,10 +112,28 @@
</item> </item>
<item> <item>
<widget class="QGroupBox" name="generatorsGroup"> <widget class="QGroupBox" name="generatorsGroup">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>2</verstretch>
</sizepolicy>
</property>
<property name="title"> <property name="title">
<string>Terrain generators</string> <string>Terrain generators</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <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"> <item row="6" column="2">
<widget class="QPushButton" name="generateButton"> <widget class="QPushButton" name="generateButton">
<property name="text"> <property name="text">
@ -63,24 +141,14 @@
</property> </property>
</widget> </widget>
</item> </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"> <item row="2" column="0" rowspan="4">
<widget class="QListWidget" name="generatorsList"> <widget class="QListWidget" name="generatorsList">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="selectionBehavior"> <property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum> <enum>QAbstractItemView::SelectRows</enum>
</property> </property>
@ -119,6 +187,22 @@
</property> </property>
</widget> </widget>
</item> </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> </layout>
</widget> </widget>
</item> </item>