diff --git a/Makefile b/Makefile
index 6e08bdf..e3308d6 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-BUILDMODE=debug
+BUILDMODE=release
BUILDPATH=./build/${BUILDMODE}
CC=gcc
MAKE=make
@@ -26,6 +26,9 @@ clean:
rm -f ${BUILDPATH}/libpaysages_exploring.so
rm -f ${BUILDPATH}/libpaysages_rendering.so
+debug:
+ make BUILDMODE=debug all
+
release:
make BUILDMODE=release all
diff --git a/data/ui_pictures.qrc b/data/ui_pictures.qrc
index 189785a..b16e299 100644
--- a/data/ui_pictures.qrc
+++ b/data/ui_pictures.qrc
@@ -5,6 +5,7 @@
images/revert.png
images/explore.png
images/render.png
+ images/about.png
images/tab_atmosphere.png
diff --git a/src/editing/terrain/dialogterrainpainting.cpp b/src/editing/terrain/dialogterrainpainting.cpp
index 79bf742..e362a28 100644
--- a/src/editing/terrain/dialogterrainpainting.cpp
+++ b/src/editing/terrain/dialogterrainpainting.cpp
@@ -2,6 +2,9 @@
#include "ui_dialogterrainpainting.h"
#include "tools.h"
+#include
+#include
+#include
DialogTerrainPainting::DialogTerrainPainting(QWidget*parent, TerrainDefinition* terrain) :
QDialog(parent),
@@ -12,6 +15,12 @@ DialogTerrainPainting::DialogTerrainPainting(QWidget*parent, TerrainDefinition*
_terrain_original = terrain;
_terrain_modified = (TerrainDefinition*)TerrainDefinitionClass.create();
+ QWidget* widget = findChild("widget_commands");
+ if (widget)
+ {
+ widget->hide();
+ }
+
revert();
brushConfigChanged();
@@ -22,6 +31,88 @@ DialogTerrainPainting::~DialogTerrainPainting()
delete ui;
}
+void DialogTerrainPainting::keyReleaseEvent(QKeyEvent* event)
+{
+ QComboBox* input_brush_mode = findChild("input_brush_mode");
+
+ switch (event->key())
+ {
+ case Qt::Key_F2:
+ if (input_brush_mode)
+ {
+ input_brush_mode->setCurrentIndex(0);
+ }
+ event->accept();
+ break;
+ case Qt::Key_F3:
+ if (input_brush_mode)
+ {
+ input_brush_mode->setCurrentIndex(1);
+ }
+ event->accept();
+ break;
+ case Qt::Key_F4:
+ if (input_brush_mode)
+ {
+ input_brush_mode->setCurrentIndex(2);
+ }
+ event->accept();
+ break;
+ case Qt::Key_F11:
+ if (input_brush_mode)
+ {
+ input_brush_mode->setCurrentIndex(3);
+ }
+ event->accept();
+ break;
+ case Qt::Key_F12:
+ if (input_brush_mode)
+ {
+ input_brush_mode->setCurrentIndex(4);
+ }
+ event->accept();
+ break;
+ default:
+ QDialog::keyReleaseEvent(event);
+ }
+}
+
+void DialogTerrainPainting::wheelEvent(QWheelEvent* event)
+{
+ QSlider* input_brush_size = findChild("input_brush_size");
+ QSlider* input_brush_smoothing = findChild("input_brush_smoothing");
+ QSlider* input_brush_strength = findChild("input_brush_strength");
+
+ if (event->modifiers() & Qt::ControlModifier)
+ {
+ if (input_brush_size)
+ {
+ input_brush_size->setValue(input_brush_size->value() + (event->delta() > 0 ? 1 : -1));
+ }
+ event->accept();
+ }
+ else if (event->modifiers() & Qt::ShiftModifier)
+ {
+ if (input_brush_strength)
+ {
+ input_brush_strength->setValue(input_brush_strength->value() + (event->delta() > 0 ? 1 : -1));
+ }
+ event->accept();
+ }
+ else if (event->modifiers() & Qt::AltModifier)
+ {
+ if (input_brush_smoothing)
+ {
+ input_brush_smoothing->setValue(input_brush_smoothing->value() + (event->delta() > 0 ? 1 : -1));
+ }
+ event->accept();
+ }
+ else
+ {
+ event->ignore();
+ }
+}
+
void DialogTerrainPainting::accept()
{
TerrainDefinitionClass.copy(_terrain_modified, _terrain_original);
diff --git a/src/editing/terrain/dialogterrainpainting.h b/src/editing/terrain/dialogterrainpainting.h
index 74d546d..4cbf109 100644
--- a/src/editing/terrain/dialogterrainpainting.h
+++ b/src/editing/terrain/dialogterrainpainting.h
@@ -17,6 +17,10 @@ public:
explicit DialogTerrainPainting(QWidget *parent, TerrainDefinition* terrain);
~DialogTerrainPainting();
+protected:
+ virtual void keyReleaseEvent(QKeyEvent* event);
+ virtual void wheelEvent(QWheelEvent* event);
+
public slots:
void brushConfigChanged();
void heightmapChanged();
diff --git a/src/editing/terrain/dialogterrainpainting.ui b/src/editing/terrain/dialogterrainpainting.ui
index 85a4e0c..e50addc 100644
--- a/src/editing/terrain/dialogterrainpainting.ui
+++ b/src/editing/terrain/dialogterrainpainting.ui
@@ -6,8 +6,8 @@
0
0
- 949
- 618
+ 1116
+ 726
@@ -29,19 +29,487 @@
-
-
-
+
-
+
1
- 0
+ 1
-
-
- 400
- 400
-
-
+
+
+ QLayout::SetDefaultConstraint
+
+
-
+
+
+ 20
+
+
-
+
+
+ Water
+
+
+ true
+
+
+
+ -
+
+
+ Grid
+
+
+ true
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Commands
+
+
+
+ :/buttons/logo/images/about.png:/buttons/logo/images/about.png
+
+
+
+ 16
+ 16
+
+
+
+ F1
+
+
+ true
+
+
+ false
+
+
+ false
+
+
+
+
+
+ -
+
+
+
+
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+ Shortcuts
+
+
+ true
+
+
+
-
+
+
+ 16
+
+
-
+
+
+ Switch to raise/lower tool
+
+
+ true
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ F3
+
+
+ true
+
+
+
+ -
+
+
+ Show these commands
+
+
+ true
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ F4
+
+
+ true
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ F1
+
+
+ true
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ F2
+
+
+ true
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ F11
+
+
+ true
+
+
+
+ -
+
+
+ Switch to noise/smooth tool
+
+
+ true
+
+
+
+ -
+
+
+ Switch to flatten tool
+
+
+ true
+
+
+
+ -
+
+
+ Switch to magix fix tool
+
+
+ true
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ F12
+
+
+ true
+
+
+
+ -
+
+
+ Switch to restore tool
+
+
+ true
+
+
+
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Brush control
+
+
+ true
+
+
+
-
+
+
+ 16
+
+
-
+
+
+ Set brush smoothing
+
+
+ true
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ SHIFT + Mouse wheel
+
+
+ true
+
+
+
+ -
+
+
+ Set brush size
+
+
+ true
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ CTRL + Mouse wheel
+
+
+ true
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ ALT + Mouse wheel
+
+
+ true
+
+
+
+ -
+
+
+ Set brush strength
+
+
+ true
+
+
+
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Camera control
+
+
+ true
+
+
+
-
+
+
+ 16
+
+
-
+
+
+
+ 75
+ true
+
+
+
+ Mouse wheel
+
+
+ true
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ Borders
+
+
+ true
+
+
+
+ -
+
+
+ Scroll view
+
+
+ true
+
+
+
+ -
+
+
+ Zoom
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+ 1
+ 1
+
+
+
+
+ 400
+ 400
+
+
+
+
+
-
@@ -72,17 +540,17 @@
-
- Raise / Lower (F1)
+ Raise / Lower (F2)
-
- Add noise / Smooth (F2)
+ Add noise / Smooth (F3)
-
- Flatten terrain (F3)
+ Flatten terrain (F4)
-
@@ -325,6 +793,8 @@
1
heightmapChanged()
+ toggleWater(bool)
+ toggleGrid(bool)
@@ -334,7 +804,9 @@
input_brush_smoothing
input_brush_strength
-
+
+
+
input_brush_smoothing
@@ -343,8 +815,8 @@
brushConfigChanged()
- 728
- 97
+ 919
+ 94
437
@@ -375,8 +847,8 @@
brushConfigChanged()
- 762
- 135
+ 919
+ 115
437
@@ -391,8 +863,8 @@
brushConfigChanged()
- 676
- 67
+ 919
+ 73
437
@@ -400,22 +872,6 @@
-
- widget_heightmap
- heightmapChanged()
- DialogTerrainPainting
- heightmapChanged()
-
-
- 396
- 566
-
-
- 445
- 618
-
-
-
widget_4
cancelClicked()
@@ -423,12 +879,12 @@
reject()
- 870
- 600
+ 875
+ 580
711
- 618
+ 597
@@ -439,12 +895,12 @@
accept()
- 816
- 593
+ 943
+ 587
683
- 615
+ 597
@@ -455,12 +911,76 @@
revert()
- 827
- 606
+ 943
+ 587
747
- 618
+ 597
+
+
+
+
+ checkBox
+ toggled(bool)
+ widget_heightmap
+ toggleWater(bool)
+
+
+ 40
+ 21
+
+
+ 39
+ 160
+
+
+
+
+ checkBox_2
+ toggled(bool)
+ widget_heightmap
+ toggleGrid(bool)
+
+
+ 102
+ 17
+
+
+ 102
+ 143
+
+
+
+
+ widget_heightmap
+ heightmapChanged()
+ DialogTerrainPainting
+ heightmapChanged()
+
+
+ 465
+ 523
+
+
+ 481
+ 569
+
+
+
+
+ pushButton
+ toggled(bool)
+ widget_commands
+ setShown(bool)
+
+
+ 516
+ 20
+
+
+ 517
+ 50
@@ -469,5 +989,6 @@
brushConfigChanged()
heightmapChanged()
revert()
+ displayCommands()
diff --git a/src/editing/terrain/mainterrainform.ui b/src/editing/terrain/mainterrainform.ui
index 10bba5b..96abd77 100644
--- a/src/editing/terrain/mainterrainform.ui
+++ b/src/editing/terrain/mainterrainform.ui
@@ -24,6 +24,9 @@
Infinite base shape
+
+ true
+
-
@@ -76,6 +79,9 @@
Manual modifications
+
+ true
+
-
@@ -115,6 +121,9 @@
Global modifiers
+
+ true
+
-
@@ -181,6 +190,9 @@
Rendering control
+
+ true
+
-
@@ -217,6 +229,9 @@
Links to other modules
+
+ true
+
-
@@ -318,6 +333,9 @@
Result preview
+
+ true
+
-
@@ -384,6 +402,9 @@
Actions
+
+ true
+
-
diff --git a/src/editing/widgetheightmap.cpp b/src/editing/widgetheightmap.cpp
index 2a7120c..fc8fa8c 100644
--- a/src/editing/widgetheightmap.cpp
+++ b/src/editing/widgetheightmap.cpp
@@ -90,6 +90,18 @@ void WidgetHeightMap::revert()
updateGL();
}
+void WidgetHeightMap::toggleWater(bool enabled)
+{
+ _water = enabled;
+ updateGL();
+}
+
+void WidgetHeightMap::toggleGrid(bool enabled)
+{
+ _wireframe = enabled;
+ updateGL();
+}
+
void WidgetHeightMap::keyPressEvent(QKeyEvent* event)
{
if (event->key() == Qt::Key_Up)
@@ -124,11 +136,18 @@ void WidgetHeightMap::keyPressEvent(QKeyEvent* event)
void WidgetHeightMap::wheelEvent(QWheelEvent* event)
{
- if (event->orientation() == Qt::Vertical)
+ if (event->modifiers() == Qt::NoModifier)
{
- zoomTopCamera(-0.05 * (double) event->delta());
+ if (event->orientation() == Qt::Vertical)
+ {
+ zoomTopCamera(-0.05 * (double) event->delta());
+ }
+ event->accept();
+ }
+ else
+ {
+ event->ignore();
}
- event->accept();
}
void WidgetHeightMap::mousePressEvent(QMouseEvent* event)
diff --git a/src/editing/widgetheightmap.h b/src/editing/widgetheightmap.h
index 64a8781..f218e49 100644
--- a/src/editing/widgetheightmap.h
+++ b/src/editing/widgetheightmap.h
@@ -28,6 +28,8 @@ public:
public slots:
void revert();
+ void toggleWater(bool enabled);
+ void toggleGrid(bool enabled);
signals:
void heightmapChanged();
diff --git a/src/exploring/chunk.c b/src/exploring/chunk.c
index 3a07abc..d70e8dc 100644
--- a/src/exploring/chunk.c
+++ b/src/exploring/chunk.c
@@ -1 +1,89 @@
#include "chunk.h"
+
+#include
+
+struct ExplorerChunk
+{
+ /* Links */
+ Renderer* renderer;
+ ColorProfile* color_profile;
+
+ /* Protected override */
+ ExplorerChunkOverride override;
+
+ /* Bounding box */
+ double xmin;
+ double xmax;
+ double ymin;
+ double ymax;
+ double zmin;
+ double zmax;
+
+ /* General status */
+ int reset_needed;
+ double distance_to_camera;
+
+ /* Tesselation */
+ Vector3* vertex_data;
+ int tessellation_max_size;
+ int tessellation_current_size;
+ double tessellation_step;
+
+ /* Texture */
+ /*GLuint texture_opengl_id;
+ int texture_changed;
+ int texture_current_size;
+ int texture_max_size;*/
+};
+
+ExplorerChunk* exporerChunkCreate(Renderer* renderer, ColorProfile* color_profile, ExplorerChunkOverride override)
+{
+ ExplorerChunk* result;
+
+ result = malloc(sizeof(ExplorerChunk));
+
+ result->renderer = renderer;
+ result->color_profile = color_profile;
+
+ result->override = override;
+
+ result->xmin = 0.0;
+ result->xmax = 0.0;
+ result->ymin = 0.0;
+ result->ymax = 0.0;
+ result->zmin = 0.0;
+ result->zmax = 0.0;
+
+ result->reset_needed = 0;
+ result->distance_to_camera = 0.0;
+
+ result->vertex_data = malloc(sizeof(Vector3) * 4);
+ result->tessellation_max_size = 1;
+ result->tessellation_current_size = 0;
+
+ explorerChunkMarkForReset(result);
+
+ /* TODO Insert in chunk list */
+
+ return result;
+}
+
+void explorerChunkDelete(ExplorerChunk* chunk)
+{
+ free(chunk);
+}
+
+void explorerChunkUpdateBoundingBox(ExplorerChunk* chunk, double xmin, double xmax, double ymin, double ymax, double zmin, double zmax)
+{
+ chunk->xmin = xmin;
+ chunk->xmax = xmax;
+ chunk->ymin = ymin;
+ chunk->ymax = ymax;
+ chunk->zmin = zmin;
+ chunk->zmax = zmax;
+}
+
+void explorerChunkMarkForReset(ExplorerChunk* chunk)
+{
+
+}
diff --git a/src/exploring/chunk.h b/src/exploring/chunk.h
index b1368c6..2f27c1c 100644
--- a/src/exploring/chunk.h
+++ b/src/exploring/chunk.h
@@ -1,10 +1,32 @@
#ifndef _PAYSAGES_EXPLORING_CHUNK_H_
#define _PAYSAGES_EXPLORING_CHUNK_H_
+#include "rendering/tools/euclid.h"
+#include "rendering/tools/color.h"
+#include "rendering/renderer.h"
+
#ifdef __cplusplus
extern "C" {
#endif
+typedef struct ExplorerChunk ExplorerChunk;
+
+typedef struct
+{
+ void (*getStatus)(ExplorerChunk* chunk);
+ Vector3 (*getVertex)(ExplorerChunk* chunk, Renderer* renderer, double x, double y);
+ Color (*getColor)(ExplorerChunk* chunk, Renderer* renderer, double x, double y, Vector3 vertex);
+ void (*onBeforeDelete)(ExplorerChunk* chunk, void* private_data);
+ void* private_data;
+} ExplorerChunkOverride;
+
+/* Public methods */
+ExplorerChunk* exporerChunkCreate(Renderer* renderer, ColorProfile* color_profile, ExplorerChunkOverride override);
+void explorerChunkDelete(ExplorerChunk* chunk);
+
+/* Methods to call from an updateStatus() callback only (never to be called twice concurrently on the same chunk) */
+void explorerChunkUpdateBoundingBox(ExplorerChunk* chunk, double xmin, double xmax, double ymin, double ymax, double zmin, double zmax);
+void explorerChunkMarkForReset(ExplorerChunk* chunk);
#ifdef __cplusplus
}