diff options
| author | Jared Adams | 2012-04-19 17:44:26 -0600 |
|---|---|---|
| committer | Jared Adams | 2012-04-19 17:44:26 -0600 |
| commit | f97e2bf4103cc09478220decd35c9732c10863aa (patch) | |
| tree | 0be3727bded67c3a7ae735cdb8b96a2bef653473 /plugins/tiletypes.cpp | |
| parent | c17529a79442d4a44dc13bf7516ededeaf7eb823 (diff) | |
| download | dfhack-f97e2bf4103cc09478220decd35c9732c10863aa.tar.gz dfhack-f97e2bf4103cc09478220decd35c9732c10863aa.tar.bz2 dfhack-f97e2bf4103cc09478220decd35c9732c10863aa.tar.xz | |
Make tiletypes more useful
* Add any option to clear paint/filter
* Add aquifer bit
* Stop filtering process killing execute early
* Filter on all bits, not just dig
Diffstat (limited to 'plugins/tiletypes.cpp')
| -rw-r--r-- | plugins/tiletypes.cpp | 77 |
1 files changed, 64 insertions, 13 deletions
diff --git a/plugins/tiletypes.cpp b/plugins/tiletypes.cpp index 73ec9f96..230870f8 100644 --- a/plugins/tiletypes.cpp +++ b/plugins/tiletypes.cpp @@ -86,6 +86,7 @@ void help( color_ostream & out, std::vector<std::string> &commands, int start, i << " run / (empty) : paint!" << std::endl << std::endl << "Filter/paint options:" << std::endl + << " Any: reset to default (no filter/paint)" << std::endl << " Shape / sh / s: set tile shape information" << std::endl << " Material / mat / m: set tile material information" << std::endl << " Special / sp: set special tile information" << std::endl @@ -96,6 +97,7 @@ void help( color_ostream & out, std::vector<std::string> &commands, int start, i << " Light / l: set light flag" << std::endl << " Subterranean / st: set subterranean flag" << std::endl << " Skyview / sv: set skyview flag" << std::endl + << " Aquifer / aqua: set aquifer flag" << std::endl << "See help [option] for more information" << std::endl; } else if (option == "shape" || option == "s" ||option == "sh") @@ -159,6 +161,11 @@ void help( color_ostream & out, std::vector<std::string> &commands, int start, i out << "Available skyview flags:" << std::endl << " ANY, 0, 1" << std::endl; } + else if (option == "aquifer" || option == "aqua") + { + out << "Available aquifer flags:" << std::endl + << " ANY, 0, 1" << std::endl; + } } struct TileType @@ -172,9 +179,15 @@ struct TileType int light; int subterranean; int skyview; + int aquifer; TileType() { + clear(); + } + + void clear() + { shape = tiletype_shape::NONE; material = tiletype_material::NONE; special = tiletype_special::NONE; @@ -184,13 +197,31 @@ struct TileType light = -1; subterranean = -1; skyview = -1; + aquifer = -1; } bool empty() { return shape == -1 && material == -1 && special == -1 && variant == -1 - && hidden == -1 && light == -1 && subterranean == -1 && skyview == -1 - && dig == -1; + && dig == -1 && hidden == -1 && light == -1 && subterranean == -1 + && skyview == -1 && aquifer == -1; + } + + inline bool matches(const df::tiletype source, + const df::tile_designation des) + { + bool rv = true; + rv &= (shape == -1 || shape == tileShape(source)); + rv &= (material == -1 || material == tileMaterial(source)); + rv &= (special == -1 || special == tileSpecial(source)); + rv &= (variant == -1 || variant == tileVariant(source)); + rv &= (dig == -1 || (dig != 0) == (des.bits.dig != tile_dig_designation::No)); + rv &= (hidden == -1 || (hidden != 0) == des.bits.hidden); + rv &= (light == -1 || (light != 0) == des.bits.light); + rv &= (subterranean == -1 || (subterranean != 0) == des.bits.subterranean); + rv &= (skyview == -1 || (skyview != 0) == des.bits.outside); + rv &= (aquifer == -1 || (aquifer != 0) == des.bits.water_table); + return rv; } }; @@ -310,6 +341,19 @@ std::ostream &operator<<(std::ostream &stream, const TileType &paint) needSpace = true; } + if (paint.aquifer >= 0) + { + if (needSpace) + { + stream << " "; + needSpace = false; + } + + stream << (paint.aquifer ? "AQUIFER" : "NO AQUIFER"); + used = true; + needSpace = true; + } + if (!used) { stream << "any"; @@ -437,7 +481,11 @@ bool processTileType(color_ostream & out, TileType &paint, std::vector<std::stri } bool found = false; - if (option == "shape" || option == "sh" || option == "s") + if (option == "any") + { + paint.clear(); + } + else if (option == "shape" || option == "sh" || option == "s") { if (is_valid_enum_item((df::tiletype_shape)valInt)) { @@ -619,14 +667,9 @@ command_result executePaintJob(color_ostream &out) const df::tiletype source = map.tiletypeAt(*iter); df::tile_designation des = map.designationAt(*iter); - if ((filter.shape > -1 && filter.shape != tileShape(source)) - || (filter.material > -1 && filter.material != tileMaterial(source)) - || (filter.special > -1 && filter.special != tileSpecial(source)) - || (filter.variant > -1 && filter.variant != tileVariant(source)) - || (filter.dig > -1 && (filter.dig != 0) != (des.bits.dig != tile_dig_designation::No)) - ) + if (!filter.matches(source, des)) { - return CR_OK; + continue; } df::tiletype_shape shape = paint.shape; @@ -707,6 +750,11 @@ command_result executePaintJob(color_ostream &out) des.bits.outside = paint.skyview; } + if (paint.aquifer > -1) + { + des.bits.water_table = paint.aquifer; + } + // Remove liquid from walls, etc if (type != -1 && !DFHack::FlowPassable(type)) { @@ -782,6 +830,9 @@ command_result processCommand(color_ostream &out, std::vector<std::string> &comm } if (width < 1 || height < 1) { + width = width < 1? 1 : width; + height = height < 1? 1 : height; + z_levels = z_levels < 1? 1 : z_levels; if (hasConsole) { Console &con = static_cast<Console&>(out); CommandHistory hist; @@ -804,9 +855,9 @@ command_result processCommand(color_ostream &out, std::vector<std::string> &comm } } - if (width < 1) width = 1; - if (height < 1) height = 1; - if (z_levels < 1) z_levels = 1; + width = width < 1? 1 : width; + height = height < 1? 1 : height; + z_levels = z_levels < 1? 1 : z_levels; delete brush; brush = new RectangleBrush(width, height, z_levels, 0, 0, 0); |
