|
2 | 2 |
|
3 | 3 | #include "i18n.h" |
4 | 4 | #include "ui/imainframe.h" |
5 | | -#include "imap.h" |
6 | | -#include "ipatch.h" |
| 5 | +#include "icommandsystem.h" |
7 | 6 | #include "iselection.h" |
8 | 7 | #include "icameraview.h" |
9 | | -#include "iscenegraph.h" |
10 | 8 | #include "ishaderclipboard.h" |
11 | | -#include "iundo.h" |
12 | 9 |
|
13 | 10 | #include "string/convert.h" |
14 | 11 | #include "selectionlib.h" |
15 | | -#include "scenelib.h" |
16 | 12 | #include "shaderlib.h" |
17 | 13 |
|
18 | 14 | #include <random> |
@@ -246,72 +242,25 @@ void TerrainGeneratorDialog::Show(const cmd::ArgumentList& args) |
246 | 242 | return; |
247 | 243 | } |
248 | 244 |
|
249 | | - noise::NoiseParameters params; |
250 | | - params.algorithm = dialog.getAlgorithm(); |
251 | | - params.seed = dialog.getSeed(); |
252 | | - params.frequency = dialog.getFrequency(); |
253 | | - params.amplitude = dialog.getAmplitude(); |
254 | | - params.octaves = dialog.getOctaves(); |
255 | | - params.persistence = dialog.getPersistence(); |
256 | | - params.lacunarity = dialog.getLacunarity(); |
257 | | - params.offset = dialog.getOffset(); |
258 | | - |
259 | | - std::size_t columns = dialog.getColumns(); |
260 | | - std::size_t rows = dialog.getRows(); |
261 | | - float physicalWidth = dialog.getPhysicalWidth(); |
262 | | - float physicalHeight = dialog.getPhysicalHeight(); |
263 | | - std::string material = dialog.getMaterial(); |
264 | | - |
265 | 245 | Vector3 spawnPos = getSpawnPosition(); |
266 | 246 |
|
267 | | - UndoableCommand undo("terrainGeneratorCreate"); |
268 | | - |
269 | | - GlobalSelectionSystem().setSelectedAll(false); |
270 | | - |
271 | | - scene::INodePtr node = GlobalPatchModule().createPatch(patch::PatchDefType::Def2); |
272 | | - |
273 | | - GlobalMapModule().findOrInsertWorldspawn()->addChildNode(node); |
274 | | - |
275 | | - IPatch* patch = Node_getIPatch(node); |
276 | | - if (!patch) |
277 | | - { |
278 | | - return; |
279 | | - } |
280 | | - |
281 | | - patch->setDims(columns, rows); |
282 | | - |
283 | | - // Create noise generator |
284 | | - noise::NoiseGenerator noiseGen(params); |
285 | | - float spacingX = physicalWidth / static_cast<float>(columns - 1); |
286 | | - float spacingY = physicalHeight / static_cast<float>(rows - 1); |
287 | | - float offsetX = spawnPos.x() - physicalWidth / 2.0f; |
288 | | - float offsetY = spawnPos.y() - physicalHeight / 2.0f; |
289 | | - float baseZ = spawnPos.z(); |
290 | | - |
291 | | - // Fill in points based on thr noise |
292 | | - for (std::size_t row = 0; row < rows; ++row) |
293 | | - { |
294 | | - for (std::size_t col = 0; col < columns; ++col) |
295 | | - { |
296 | | - PatchControl& ctrl = patch->ctrlAt(row, col); |
297 | | - |
298 | | - float worldX = offsetX + col * spacingX; |
299 | | - float worldY = offsetY + row * spacingY; |
300 | | - float noiseValue = static_cast<float>(noiseGen.sample(worldX, worldY)); |
301 | | - |
302 | | - ctrl.vertex.x() = worldX; |
303 | | - ctrl.vertex.y() = worldY; |
304 | | - ctrl.vertex.z() = baseZ + noiseValue; |
305 | | - ctrl.texcoord.x() = static_cast<float>(col) / static_cast<float>(columns - 1); |
306 | | - ctrl.texcoord.y() = static_cast<float>(row) / static_cast<float>(rows - 1); |
307 | | - } |
308 | | - } |
309 | | - |
310 | | - patch->controlPointsChanged(); |
311 | | - patch->setShader(material); |
312 | | - patch->scaleTextureNaturally(); |
313 | | - |
314 | | - Node_setSelected(node, true); |
| 247 | + GlobalCommandSystem().executeCommand("GenerateTerrain", |
| 248 | + { cmd::Argument(static_cast<int>(dialog.getAlgorithm())), |
| 249 | + cmd::Argument(static_cast<int>(dialog.getSeed())), |
| 250 | + cmd::Argument(static_cast<double>(dialog.getFrequency())), |
| 251 | + cmd::Argument(static_cast<double>(dialog.getAmplitude())), |
| 252 | + cmd::Argument(dialog.getOctaves()), |
| 253 | + cmd::Argument(static_cast<double>(dialog.getPersistence())), |
| 254 | + cmd::Argument(static_cast<double>(dialog.getLacunarity())), |
| 255 | + cmd::Argument(static_cast<double>(dialog.getOffset())), |
| 256 | + cmd::Argument(static_cast<int>(dialog.getColumns())), |
| 257 | + cmd::Argument(static_cast<int>(dialog.getRows())), |
| 258 | + cmd::Argument(static_cast<double>(dialog.getPhysicalWidth())), |
| 259 | + cmd::Argument(static_cast<double>(dialog.getPhysicalHeight())), |
| 260 | + cmd::Argument(spawnPos.x()), |
| 261 | + cmd::Argument(spawnPos.y()), |
| 262 | + cmd::Argument(spawnPos.z()), |
| 263 | + cmd::Argument(dialog.getMaterial()) }); |
315 | 264 | } |
316 | 265 |
|
317 | 266 | } // namespace ui |
0 commit comments