diff --git a/generators/realWorld.cpp b/generators/realWorld.cpp
index 1df4a96..da61c15 100644
--- a/generators/realWorld.cpp
+++ b/generators/realWorld.cpp
@@ -3,10 +3,10 @@
#include "image.h"
// windows MinGW
-// g++ -shared realWorld.cpp -o realWorld.dll -I../include
+// g++ -shared realWorld.cpp -o realWorld.dll -I../src -funsigned-char -std=c++11
// linux gcc
-// g++ -shared realWorld.cpp -o realWorld.so -I../include -fPIC
+// g++ -shared realWorld.cpp -o realWorld.so -I../src -fPIC -funsigned-char -std=c++11
extern "C" void generate(Map *mapPtr)
{
diff --git a/shaders/skybox.frag.glsl b/shaders/skybox.frag.glsl
index 67fb03f..869ee92 100644
--- a/shaders/skybox.frag.glsl
+++ b/shaders/skybox.frag.glsl
@@ -5,7 +5,6 @@ uniform sampler2D backMap;
uniform vec3 camera;
uniform vec2 worldSize;
-uniform vec2 screenSize;
uniform float flatSphere;
uniform float surfaceRatio;
diff --git a/shaders/skybox.vert.glsl b/shaders/skybox.vert.glsl
index 5bd6a27..f097c24 100644
--- a/shaders/skybox.vert.glsl
+++ b/shaders/skybox.vert.glsl
@@ -5,7 +5,6 @@ layout(location = 2)in vec2 inTexCoord;
layout(location = 1)in vec3 inNormal;
uniform float flatSphere;
-uniform vec2 screenSize;
uniform mat4 mvp;
uniform vec3 camera;
diff --git a/shaders/world.frag.glsl b/shaders/world.frag.glsl
index d41e1d8..9e2ff42 100644
--- a/shaders/world.frag.glsl
+++ b/shaders/world.frag.glsl
@@ -4,7 +4,6 @@ uniform sampler2DRect colorMap;
uniform vec3 camera;
uniform vec2 worldSize;
-uniform vec2 screenSize;
uniform float flatSphere;
uniform float surfaceRatio;
diff --git a/shaders/world.vert.glsl b/shaders/world.vert.glsl
index db0eaec..6208599 100644
--- a/shaders/world.vert.glsl
+++ b/shaders/world.vert.glsl
@@ -5,7 +5,6 @@ layout(location = 2)in vec2 inTexCoord;
layout(location = 1)in vec3 inNormal;
uniform float flatSphere;
-uniform vec2 screenSize;
uniform mat4 mvp;
uniform vec3 camera;
@@ -18,7 +17,7 @@ void main(void)
vec2 flatTexCoord = texCoord;
texCoord = mix(texCoord, flatTexCoord, vec2(flatSphere));
normal = inNormal.xyz;
- vec4 flatPos = vec4(inTexCoord.x*2 -1, inTexCoord.y*2 -1, 0.0, 1.0);
+ vec4 flatPos = vec4((inTexCoord.x*2 -1)*camera.z, (inTexCoord.y*2 -1)*camera.z, 0.0, 1.0);
vec3 position = vec3(inPosition.xy, inPosition.z - 1);
vec4 projPos = mvp * vec4(position*camera.z, 1.0);
gl_Position = mix(projPos, flatPos, vec4(flatSphere));
diff --git a/src/coord.h b/src/coord.h
index 1ae4fca..63b0b2f 100644
--- a/src/coord.h
+++ b/src/coord.h
@@ -33,6 +33,8 @@ struct Coord
default : x= 0; y= 0; break;
}
}
+ bool operator==(const Coord &c) const
+ { return x==c.x&&y==c.y;}
Coord operator+(const Coord &c) const
{ return Coord(x+c.x, y+c.y);}
Coord& operator+=(const Coord &c)
@@ -69,6 +71,13 @@ struct Coord
{ return dist(*this, c); }
int dist(int x, int y) const
{ return dist(*this, Coord(x, y)); }
+
+};
+
+struct CoordHash{
+ size_t operator()(const Coord& val) const{
+ return val.x+10000*val.y;
+ }
};
#endif // COORD_H
diff --git a/src/drawwidget.cpp b/src/drawwidget.cpp
index 9d53182..acd68c3 100644
--- a/src/drawwidget.cpp
+++ b/src/drawwidget.cpp
@@ -13,6 +13,8 @@
DrawWidget::DrawWidget(QWidget *parent) :
QOpenGLWidget(parent),
+ m_grabbedMouseLeft(false),
+ m_grabbedMouseRight(false),
m_Qt_fbo(NULL),
m_pipeline(NULL)
{
@@ -94,11 +96,15 @@ void DrawWidget::stopSimulation()
void DrawWidget::mouseMoveEvent(QMouseEvent *event)
{
- if(grabbedMouse && m_pipeline != NULL)
+ if(m_grabbedMouseLeft && m_pipeline != NULL)
{
m_pipeline->cameraMove(event->globalX() - lastMousePos.x(), event->globalY() - lastMousePos.y());
repaint();
}
+ if(m_grabbedMouseRight && m_pipeline != NULL)
+ {
+ m_pipeline->getToreillerPos(event->x(), event->y());
+ }
lastMousePos = event->globalPos();
}
@@ -107,7 +113,10 @@ void DrawWidget::mousePressEvent(QMouseEvent* event)
switch(event->button())
{
case Qt::LeftButton :
- grabbedMouse = true;
+ m_grabbedMouseLeft = true;
+ break;
+ case Qt::RightButton :
+ m_grabbedMouseRight = true;
break;
default:
break;
@@ -125,7 +134,10 @@ void DrawWidget::mouseReleaseEvent(QMouseEvent* event)
switch(event->button())
{
case Qt::LeftButton :
- grabbedMouse = false;
+ m_grabbedMouseLeft = false;
+ break;
+ case Qt::RightButton :
+ m_grabbedMouseRight = false;
break;
default:
break;
diff --git a/src/drawwidget.h b/src/drawwidget.h
index 7da88d1..f1b524f 100644
--- a/src/drawwidget.h
+++ b/src/drawwidget.h
@@ -21,7 +21,8 @@ class DrawWidget : public QOpenGLWidget
// camera handling variables
QPoint lastMousePos;
- bool grabbedMouse;
+ bool m_grabbedMouseLeft;
+ bool m_grabbedMouseRight;
MapScene *m_map;
MapScene *m_dummyMap;
FrameBuffer *m_Qt_fbo;
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 4f2782f..61cf92d 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -30,6 +30,7 @@ MainWindow::MainWindow(QWidget *parent) :
connect(ui->actionPlayPause, SIGNAL(toggled(bool)), this, SLOT(pauseSimu(bool)));
connect(ui->actionAction_step, SIGNAL(triggered(bool)), this, SLOT(stepSimu()));
connect(ui->actionStop, SIGNAL(triggered(bool)), this, SLOT(stopSimu()));
+ connect(ui->resetToDefaultAdvanced, SIGNAL(pressed()), this, SLOT(resetAdvancedToDefault()));
changeSimSpeed(ui->simSpeedSlider->value());
ui->advancedGroupBox->hide();
}
@@ -75,6 +76,8 @@ void MainWindow::updateSimu()
ui->dateLabel->setText(QString::number(++m_date));
ui->populationLabel->setText(QString::number(p_simu->getPopulation()));
ui->drawWidget->updateDudesBehavior();
+ ui->drawWidget->setFlatSphere(ui->flatSphereSlider->value());
+ ui->drawWidget->setSurfaceRatio(ui->surfaceRatioSlider->value());
ui->drawWidget->repaint();
}
if(m_simSpeedChanged)
@@ -100,6 +103,12 @@ void MainWindow::stopSimu()
delete p_simu;
}
+void MainWindow::resetAdvancedToDefault()
+{
+ ui->flatSphereSlider->setValue(0);
+ ui->surfaceRatioSlider->setValue(50);
+}
+
void MainWindow::pauseSimu(bool pause)
{
m_paused = pause;
diff --git a/src/mainwindow.h b/src/mainwindow.h
index faeccd8..5a94c57 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -32,6 +32,7 @@ private slots:
void updateSimu();
void stepSimu();
void stopSimu();
+ void resetAdvancedToDefault();
void pauseSimu(bool);
};
diff --git a/src/mainwindow.ui b/src/mainwindow.ui
index 08b94e0..9ec00bf 100644
--- a/src/mainwindow.ui
+++ b/src/mainwindow.ui
@@ -6,8 +6,8 @@
0
0
- 744
- 490
+ 683
+ 499
@@ -190,14 +190,14 @@
5
- -
+
-
Spherical / Flat
- -
+
-
true
@@ -225,14 +225,14 @@
- -
+
-
surface ratio
- -
+
-
true
@@ -263,6 +263,13 @@
+ -
+
+
+ Reset to default
+
+
+
diff --git a/src/map.h b/src/map.h
index 44f4dc0..edc7a60 100644
--- a/src/map.h
+++ b/src/map.h
@@ -66,6 +66,10 @@ public:
Coord &toreillerLoop(Coord &c)
{
+ while(c.x < 0)
+ c.x += m_width;
+ while(c.y < 0)
+ c.y += m_width;
// this is the shader implementation of the toreiller
Coord nbRevolutions(c.x/m_width, c.y/m_height);
if(std::abs(nbRevolutions.y % 2))
diff --git a/src/mapscene.cpp b/src/mapscene.cpp
index 2cccbc1..6c727e2 100644
--- a/src/mapscene.cpp
+++ b/src/mapscene.cpp
@@ -104,5 +104,6 @@ void MapScene::draw()
// clearing temporary data structures
m_updatedCoordMap.clear();
+ m_updatedCoordMap.rehash(0);
m_pixels.clear();
}
diff --git a/src/mapscene.h b/src/mapscene.h
index 457f882..e006eec 100644
--- a/src/mapscene.h
+++ b/src/mapscene.h
@@ -6,7 +6,7 @@
#include
#include
#include
-#include