Initial commit
This commit is contained in:
377
engines/scumm/he/moonbase/dialog-mapgenerator.cpp
Normal file
377
engines/scumm/he/moonbase/dialog-mapgenerator.cpp
Normal file
@@ -0,0 +1,377 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "common/config-manager.h"
|
||||
#include "common/translation.h"
|
||||
|
||||
#include "scumm/he/moonbase/map_main.h"
|
||||
#include "scumm/he/moonbase/dialog-mapgenerator.h"
|
||||
|
||||
namespace Scumm {
|
||||
|
||||
enum {
|
||||
kAlgorCmd = 'ALGR',
|
||||
kAlgorRandCmd = 'ALRM',
|
||||
|
||||
kSizeCmd = 'SIZE',
|
||||
kSizeRandCmd = 'SZRM',
|
||||
|
||||
kTileCmd = 'TILE',
|
||||
kTileRandCmd = 'TLRM',
|
||||
|
||||
kEnergyCmd = 'ENGY',
|
||||
kEnergyRandCmd = 'EGRM',
|
||||
|
||||
kTerrainCmd = 'TRIN',
|
||||
kTerrainRandCmd = 'TRRM',
|
||||
|
||||
kWaterCmd = 'WTER',
|
||||
kWaterRandCmd = 'WTRM',
|
||||
|
||||
kCancelCmd = 'CNCL',
|
||||
kGenerateCmd = 'GNRT'
|
||||
};
|
||||
|
||||
MapGeneratorDialog::MapGeneratorDialog(bool demo) : Dialog("MapGenerator"), _refreshing(false) {
|
||||
// I18N: Random map generator for Moonbase Commander
|
||||
_dialogTitle = new GUI::StaticTextWidget(this, "MapGenerator.Title", _("Random Map Options"));
|
||||
_dialogTitle->setAlign(Graphics::kTextAlignCenter);
|
||||
|
||||
// I18N: Map generator algorithms
|
||||
_algorDesc = new GUI::StaticTextWidget(this, "MapGenerator.Algorithm", _("Algorithm"));
|
||||
_algorDesc->setAlign(Graphics::kTextAlignLeft);
|
||||
_algorGroup = new GUI::RadiobuttonGroup(this, kAlgorCmd);
|
||||
// I18N: Spiff algorithm
|
||||
_algorSpiff = new GUI::RadiobuttonWidget(this, "MapGenerator.AlgorithmSpiff", _algorGroup, SPIFF_GEN, _("Spiff"));
|
||||
// I18N: Katton algorithm
|
||||
_algorSpiff = new GUI::RadiobuttonWidget(this, "MapGenerator.AlgorithmKatton", _algorGroup, KATTON_GEN, _("Katton"));
|
||||
// I18N: Random algorithm
|
||||
_algorRandom = new GUI::CheckboxWidget(this, "MapGenerator.AlgorithmRandom", _("Random"), _("Picks the map algorithm randomly."), kAlgorRandCmd);
|
||||
|
||||
// I18N: Map sizes
|
||||
_sizeDesc = new GUI::StaticTextWidget(this, "MapGenerator.Size", _("Size"));
|
||||
_sizeDesc->setAlign(Graphics::kTextAlignCenter);
|
||||
|
||||
_sizeGroup = new GUI::RadiobuttonGroup(this, kSizeCmd);
|
||||
_sizeSmall = new GUI::RadiobuttonWidget(this, "MapGenerator.SizeSmall", _sizeGroup, 4, _("Small"));
|
||||
_sizeMedium = new GUI::RadiobuttonWidget(this, "MapGenerator.SizeMedium", _sizeGroup, 5, _("Medium"));
|
||||
_sizeLarge = new GUI::RadiobuttonWidget(this, "MapGenerator.SizeLarge", _sizeGroup, 6, _("Large"));
|
||||
_sizeHuge = new GUI::RadiobuttonWidget(this, "MapGenerator.SizeHuge", _sizeGroup, 7, _("Huge"));
|
||||
_sizeSAI = new GUI::RadiobuttonWidget(this, "MapGenerator.SizeSAI", _sizeGroup, 8, _("SAI"));
|
||||
_sizeRidiculous = new GUI::RadiobuttonWidget(this, "MapGenerator.SizeRidiculous", _sizeGroup, 9, _("Ridiculous"));
|
||||
_sizeMax = new GUI::RadiobuttonWidget(this, "MapGenerator.SizeMax", _sizeGroup, 10, _("Max"));
|
||||
// I18N: Random map size
|
||||
_sizeRandom = new GUI::CheckboxWidget(this, "MapGenerator.SizeRandom", _("Random"), _("Picks the map size randomly."), kSizeRandCmd);
|
||||
|
||||
// I18N: Map tile sets
|
||||
_tileDesc = new GUI::StaticTextWidget(this, "MapGenerator.Tileset", _("Tileset"));
|
||||
_tileDesc->setAlign(Graphics::kTextAlignCenter);
|
||||
_tileGroup = new GUI::RadiobuttonGroup(this, kTileCmd);
|
||||
_tileTerrandra = new GUI::RadiobuttonWidget(this, "MapGenerator.TilesetTerrandra", _tileGroup, 1, Common::U32String("Terrandra"));
|
||||
_tileZanateros = new GUI::RadiobuttonWidget(this, "MapGenerator.TilesetZanateros", _tileGroup, 2, Common::U32String("Zanateros"));
|
||||
// Demo version of the game only has tilesets 1, 2, 4 and 6. Don't create buttons for
|
||||
// missing tiles.
|
||||
if (!demo)
|
||||
_tileDrijim = new GUI::RadiobuttonWidget(this, "MapGenerator.TilesetDaijim", _tileGroup, 3, Common::U32String("Daijim 3"));
|
||||
_tileKyanite = new GUI::RadiobuttonWidget(this, "MapGenerator.TilesetKyanite", _tileGroup, 4, Common::U32String("Kyanite"));
|
||||
if (!demo)
|
||||
_tileEmerau = new GUI::RadiobuttonWidget(this, "MapGenerator.TilesetEmerau", _tileGroup, 5, Common::U32String("Emerau Glyph"));
|
||||
_tileAblation = new GUI::RadiobuttonWidget(this, "MapGenerator.TilesetAblation", _tileGroup, 6, Common::U32String("Ablation Land"));
|
||||
// I18N: Random tileset
|
||||
_tileRandom = new GUI::CheckboxWidget(this, "MapGenerator.TilesetRandom", _("Random"), _("Picks the map tileset randomly."), kTileRandCmd);
|
||||
|
||||
// I18N: Percentage of energy pools
|
||||
_energyDesc = new GUI::StaticTextWidget(this, "MapGenerator.Energy", _("Energy"));
|
||||
_energyDesc->setAlign(Graphics::kTextAlignCenter);
|
||||
_energySlider = new GUI::SliderWidget(this, "MapGenerator.EnergySlider", Common::U32String(), kEnergyCmd);
|
||||
_energySlider->setMinValue(0); _energySlider->setMaxValue(6);
|
||||
// I18N: Energy slider label
|
||||
_energyLabel = new GUI::StaticTextWidget(this, "MapGenerator.EnergySliderLabel", _("Scarce - Lots"), Common::U32String());
|
||||
_energyLabel->setAlign(Graphics::kTextAlignCenter);
|
||||
|
||||
|
||||
// I18N: Random percentage of energy pools
|
||||
_energyRandom = new GUI::CheckboxWidget(this, "MapGenerator.EnergyRandom", _("Random"), _("Picks the random amount of energy pools."), kEnergyRandCmd);
|
||||
|
||||
// I18N: Percentage of terrain
|
||||
_terrainDesc = new GUI::StaticTextWidget(this, "MapGenerator.Terrain", _("Terrain"));
|
||||
_terrainDesc->setAlign(Graphics::kTextAlignCenter);
|
||||
_terrainSlider = new GUI::SliderWidget(this, "MapGenerator.TerrainSlider", Common::U32String(), kTerrainCmd);
|
||||
_terrainSlider->setMinValue(0); _terrainSlider->setMaxValue(6);
|
||||
// I18N: Terrain slider label
|
||||
_terrainLabel = new GUI::StaticTextWidget(this, "MapGenerator.TerrainSliderLabel", _("Barren - Rough"), Common::U32String());
|
||||
_terrainLabel->setAlign(Graphics::kTextAlignCenter);
|
||||
|
||||
// I18N: Random percentage of terrain
|
||||
_terrainRandom = new GUI::CheckboxWidget(this, "MapGenerator.TerrainRandom", _("Random"), _("Picks the random amount of terrain level."), kTerrainRandCmd);
|
||||
|
||||
// I18N: Percentage of water
|
||||
_waterDesc = new GUI::StaticTextWidget(this, "MapGenerator.Water", _("Water"));
|
||||
_waterDesc->setAlign(Graphics::kTextAlignCenter);
|
||||
_waterSlider = new GUI::SliderWidget(this, "MapGenerator.WaterSlider", Common::U32String(), kWaterCmd);
|
||||
_waterSlider->setMinValue(0); _waterSlider->setMaxValue(6);
|
||||
// I18N: Water slider label
|
||||
_waterLabel = new GUI::StaticTextWidget(this, "MapGenerator.WaterSliderLabel", _("Driest - Wettest"), Common::U32String());
|
||||
_waterLabel->setAlign(Graphics::kTextAlignCenter);
|
||||
|
||||
// I18N: Random percentage of water
|
||||
_waterRandom = new GUI::CheckboxWidget(this, "MapGenerator.WaterRandom", _("Random"), _("Picks the random amount of water."), kWaterRandCmd);
|
||||
|
||||
_cancelButton = new GUI::ButtonWidget(this, "MapGenerator.Cancel", _("Cancel"), Common::U32String(), kCancelCmd);
|
||||
// I18N: Generate new map
|
||||
_generateButton = new GUI::ButtonWidget(this, "MapGenerator.Generate", _("Generate"), Common::U32String(), kGenerateCmd);
|
||||
refresh();
|
||||
}
|
||||
|
||||
void MapGeneratorDialog::refresh() {
|
||||
_refreshing = true;
|
||||
|
||||
// ALGORITHM
|
||||
bool randomAlgorithm = true;
|
||||
if (ConfMan.hasKey("map_algorithm"))
|
||||
randomAlgorithm = ConfMan.getInt("map_algorithm") == 0;
|
||||
|
||||
_algorGroup->setEnabled(!randomAlgorithm);
|
||||
_algorRandom->setState(randomAlgorithm);
|
||||
|
||||
if (!randomAlgorithm)
|
||||
_algorGroup->setValue(ConfMan.getInt("map_algorithm"));
|
||||
|
||||
// SIZE
|
||||
bool randomSize = true;
|
||||
if (ConfMan.hasKey("map_size"))
|
||||
randomSize = ConfMan.getInt("map_size") == 0;
|
||||
|
||||
_sizeGroup->setEnabled(!randomSize);
|
||||
_sizeRandom->setState(randomSize);
|
||||
|
||||
if (!randomSize)
|
||||
_sizeGroup->setValue(ConfMan.getInt("map_size"));
|
||||
|
||||
// TILESET
|
||||
bool randomTileset = true;
|
||||
if (ConfMan.hasKey("map_tileset"))
|
||||
randomTileset = ConfMan.getInt("map_tileset") == 0;
|
||||
|
||||
_tileGroup->setEnabled(!randomTileset);
|
||||
_tileRandom->setState(randomTileset);
|
||||
|
||||
if (!randomTileset)
|
||||
_tileGroup->setValue(ConfMan.getInt("map_tileset"));
|
||||
|
||||
// ENERGY
|
||||
bool randomEnergy = true;
|
||||
if (ConfMan.hasKey("map_energy"))
|
||||
randomEnergy = ConfMan.getInt("map_energy") == -1;
|
||||
|
||||
_energySlider->setEnabled(!randomEnergy);
|
||||
_energyRandom->setState(randomEnergy);
|
||||
|
||||
if (!randomEnergy)
|
||||
_energySlider->setValue(ConfMan.getInt("map_energy"));
|
||||
else if (ConfMan.hasKey("prev_map_energy"))
|
||||
_energySlider->setValue(ConfMan.getInt("prev_map_energy"));
|
||||
else
|
||||
_energySlider->setValue(3);
|
||||
|
||||
// TERRAIN
|
||||
bool randomTerrain = true;
|
||||
if (ConfMan.hasKey("map_terrain"))
|
||||
randomTerrain = ConfMan.getInt("map_terrain") == -1;
|
||||
|
||||
_terrainSlider->setEnabled(!randomTerrain);
|
||||
_terrainRandom->setState(randomTerrain);
|
||||
|
||||
if (!randomTerrain)
|
||||
_terrainSlider->setValue(ConfMan.getInt("map_terrain"));
|
||||
else if (ConfMan.hasKey("prev_map_terrain"))
|
||||
_terrainSlider->setValue(ConfMan.getInt("prev_map_terrain"));
|
||||
else
|
||||
_terrainSlider->setValue(3);
|
||||
|
||||
|
||||
// WATER
|
||||
bool randomWater = true;
|
||||
if (ConfMan.hasKey("map_water"))
|
||||
randomWater = ConfMan.getInt("map_water") == -1;
|
||||
|
||||
_waterSlider->setEnabled(!randomWater);
|
||||
_waterRandom->setState(randomWater);
|
||||
|
||||
if (!randomWater)
|
||||
_waterSlider->setValue(ConfMan.getInt("map_water"));
|
||||
else if (ConfMan.hasKey("prev_map_water"))
|
||||
_waterSlider->setValue(ConfMan.getInt("prev_map_water"));
|
||||
else
|
||||
_waterSlider->setValue(3);
|
||||
|
||||
drawDialog(GUI::kDrawLayerForeground);
|
||||
|
||||
_refreshing = false;
|
||||
}
|
||||
|
||||
void MapGeneratorDialog::handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) {
|
||||
if (_refreshing)
|
||||
return;
|
||||
|
||||
switch(cmd) {
|
||||
case kAlgorCmd:
|
||||
ConfMan.setInt("map_algorithm", data);
|
||||
break;
|
||||
case kAlgorRandCmd:
|
||||
if (data == 1) {
|
||||
if (ConfMan.hasKey("map_algorithm") && ConfMan.getInt("map_algorithm") != 0)
|
||||
// Store previous value
|
||||
ConfMan.setInt("prev_map_algorithm", ConfMan.getInt("map_algorithm"));
|
||||
ConfMan.setInt("map_algorithm", 0);
|
||||
} else {
|
||||
// Restore previous value
|
||||
int previousValue = SPIFF_GEN;
|
||||
if (ConfMan.hasKey("prev_map_algorithm"))
|
||||
previousValue = ConfMan.getInt("prev_map_algorithm");
|
||||
ConfMan.setInt("map_algorithm", previousValue);
|
||||
}
|
||||
|
||||
refresh();
|
||||
break;
|
||||
case kSizeCmd:
|
||||
ConfMan.setInt("map_size", data);
|
||||
break;
|
||||
case kSizeRandCmd:
|
||||
if (data == 1) {
|
||||
if (ConfMan.hasKey("map_size") && ConfMan.getInt("map_size") != 0)
|
||||
// Store previous value
|
||||
ConfMan.setInt("prev_map_size", ConfMan.getInt("map_size"));
|
||||
ConfMan.setInt("map_size", 0);
|
||||
} else {
|
||||
// Restore previous value
|
||||
int previousValue = 4;
|
||||
if (ConfMan.hasKey("prev_map_size"))
|
||||
previousValue = ConfMan.getInt("prev_map_size");
|
||||
ConfMan.setInt("map_size", previousValue);
|
||||
}
|
||||
|
||||
refresh();
|
||||
break;
|
||||
case kTileCmd:
|
||||
ConfMan.setInt("map_tileset", data);
|
||||
break;
|
||||
case kTileRandCmd:
|
||||
if (data == 1) {
|
||||
if (ConfMan.hasKey("map_tileset") && ConfMan.getInt("map_tileset") != 0)
|
||||
// Store previous value
|
||||
ConfMan.setInt("prev_map_tileset", ConfMan.getInt("map_tileset"));
|
||||
ConfMan.setInt("map_tileset", 0);
|
||||
} else {
|
||||
// Restore previous value
|
||||
int previousValue = 5;
|
||||
if (ConfMan.hasKey("prev_map_tileset"))
|
||||
previousValue = ConfMan.getInt("prev_map_tileset");
|
||||
ConfMan.setInt("map_tileset", previousValue);
|
||||
}
|
||||
|
||||
refresh();
|
||||
break;
|
||||
case kEnergyCmd:
|
||||
ConfMan.setInt("map_energy", data);
|
||||
break;
|
||||
case kEnergyRandCmd:
|
||||
if (data == 1) {
|
||||
if (ConfMan.hasKey("map_energy") && ConfMan.getInt("map_energy") != -1)
|
||||
// Store previous value
|
||||
ConfMan.setInt("prev_map_energy", ConfMan.getInt("map_energy"));
|
||||
ConfMan.setInt("map_energy", -1);
|
||||
} else {
|
||||
// Restore previous value
|
||||
int previousValue = 3;
|
||||
if (ConfMan.hasKey("prev_map_energy"))
|
||||
previousValue = ConfMan.getInt("prev_map_energy");
|
||||
ConfMan.setInt("map_energy", previousValue);
|
||||
}
|
||||
|
||||
refresh();
|
||||
break;
|
||||
case kTerrainCmd:
|
||||
ConfMan.setInt("map_terrain", data);
|
||||
break;
|
||||
case kTerrainRandCmd:
|
||||
if (data == 1) {
|
||||
if (ConfMan.hasKey("map_terrain") && ConfMan.getInt("map_terrain") != -1)
|
||||
// Store previous value
|
||||
ConfMan.setInt("prev_map_terrain", ConfMan.getInt("map_terrain"));
|
||||
ConfMan.setInt("map_terrain", -1);
|
||||
} else {
|
||||
// Restore previous value
|
||||
int previousValue = 3;
|
||||
if (ConfMan.hasKey("prev_map_terrain"))
|
||||
previousValue = ConfMan.getInt("prev_map_terrain");
|
||||
ConfMan.setInt("map_terrain", previousValue);
|
||||
}
|
||||
|
||||
refresh();
|
||||
break;
|
||||
case kWaterCmd:
|
||||
ConfMan.setInt("map_water", data);
|
||||
break;
|
||||
case kWaterRandCmd:
|
||||
if (data == 1) {
|
||||
if (ConfMan.hasKey("map_water") && ConfMan.getInt("map_water") != -1)
|
||||
// Store previous value
|
||||
ConfMan.setInt("prev_map_water", ConfMan.getInt("map_water"));
|
||||
ConfMan.setInt("map_water", -1);
|
||||
} else {
|
||||
// Restore previous value
|
||||
int previousValue = 3;
|
||||
if (ConfMan.hasKey("prev_map_water"))
|
||||
previousValue = ConfMan.getInt("prev_map_water");
|
||||
ConfMan.setInt("map_water", previousValue);
|
||||
}
|
||||
|
||||
refresh();
|
||||
break;
|
||||
case kCancelCmd:
|
||||
setResult(0);
|
||||
close();
|
||||
break;
|
||||
case kGenerateCmd:
|
||||
ConfMan.flushToDisk();
|
||||
setResult(1);
|
||||
close();
|
||||
break;
|
||||
default:
|
||||
Dialog::handleCommand(sender, cmd, data);
|
||||
}
|
||||
}
|
||||
|
||||
void MapGeneratorDialog::handleKeyDown(Common::KeyState state) {
|
||||
switch (state.keycode) {
|
||||
case Common::KEYCODE_RETURN:
|
||||
case Common::KEYCODE_KP_ENTER:
|
||||
ConfMan.flushToDisk();
|
||||
setResult(1);
|
||||
close();
|
||||
break;
|
||||
default:
|
||||
Dialog::handleKeyDown(state);
|
||||
}
|
||||
}
|
||||
|
||||
} // End of namespace Scumm
|
||||
Reference in New Issue
Block a user