Fix range on tiletypes and make it saner for both plugins.

develop
Jared Adams 2012-04-21 11:26:40 -06:00
parent 52138d8998
commit 567b3e2a52
3 changed files with 50 additions and 49 deletions

@ -197,47 +197,72 @@ private:
}; };
command_result parseRectangle(color_ostream & out, command_result parseRectangle(color_ostream & out,
vector<string> & input, int start, int end,
int & width, int & height, int & zLevels, int & width, int & height, int & zLevels,
int oldWidth, int oldHeight, int oldZLevels,
bool hasConsole = true) bool hasConsole = true)
{ {
out << "Parse:" << endl int newWidth = 0, newHeight = 0, newZLevels = 1;
<< "\tW:" << width << " - " << oldWidth << endl // z is different so 'range w h' won't ask for it.
<< "\tW:" << height << " - " << oldHeight << endl
<< "\tW:" << zLevels << " - " << oldZLevels << endl if (end > start + 1)
<< "Console: " << hasConsole << endl; {
if (width < 1 || height < 1) { newWidth = atoi(input[start++].c_str());
if (hasConsole) { newHeight = atoi(input[start++].c_str());
}
if (end > start) {
newZLevels = atoi(input[start++].c_str());
}
string command = ""; string command = "";
std::stringstream str; std::stringstream str;
Console &con = static_cast<Console&>(out);
CommandHistory hist; CommandHistory hist;
if (newWidth < 1) {
if (hasConsole) {
Console &con = static_cast<Console&>(out);
str.str(""); str.str("");
str << "Set range width <" << oldWidth << "> "; str << "Set range width <" << width << "> ";
con.lineedit(str.str(), command, hist); con.lineedit(str.str(), command, hist);
hist.add(command); hist.add(command);
width = command == "" ? oldWidth : atoi(command.c_str()); newWidth = command == "" ? width : atoi(command.c_str());
} else {
return CR_WRONG_USAGE;
}
}
if (newHeight < 1) {
if (hasConsole) {
Console &con = static_cast<Console&>(out);
str.str(""); str.str("");
str << "Set range height <" << oldHeight << "> "; str << "Set range height <" << height << "> ";
con.lineedit(str.str(), command, hist); con.lineedit(str.str(), command, hist);
hist.add(command); hist.add(command);
height = command == "" ? oldHeight : atoi(command.c_str()); newHeight = command == "" ? height : atoi(command.c_str());
} else {
return CR_WRONG_USAGE;
}
}
if (newZLevels < 1) {
if (hasConsole) {
Console &con = static_cast<Console&>(out);
str.str(""); str.str("");
str << "Set range z-levels <" << oldZLevels << "> "; str << "Set range z-levels <" << zLevels << "> ";
con.lineedit(str.str(), command, hist); con.lineedit(str.str(), command, hist);
hist.add(command); hist.add(command);
zLevels = command == "" ? oldZLevels : atoi(command.c_str()); newZLevels = command == "" ? zLevels : atoi(command.c_str());
} else { } else {
return CR_WRONG_USAGE; return CR_WRONG_USAGE;
} }
} }
width = width < 1? 1 : width; width = newWidth < 1? 1 : newWidth;
height = height < 1? 1 : height; height = newHeight < 1? 1 : newHeight;
zLevels = zLevels < 1? 1 : zLevels; zLevels = newZLevels < 1? 1 : zLevels;
return CR_OK; return CR_OK;
} }

@ -200,22 +200,8 @@ command_result df_liquids (color_ostream &out_, vector <string> & parameters)
} }
else if(command == "range" || command == "r") else if(command == "range" || command == "r")
{ {
int oldWidth = width, oldHeight = height, oldZLevels = z_levels; command_result res = parseRectangle(out, commands, 1, commands.size(),
width = height = z_levels = 0; width, height, z_levels);
if (commands.size() >= 3)
{
width = atoi(commands[1].c_str());
height = atoi(commands[2].c_str());
if (commands.size() >= 4) {
z_levels = atoi(commands[3].c_str());
}
}
command_result res = parseRectangle(out, width, height, z_levels,
oldWidth, oldHeight, oldZLevels);
if (res != CR_OK) if (res != CR_OK)
{ {
return res; return res;

@ -788,7 +788,6 @@ command_result processCommand(color_ostream &out, std::vector<std::string> &comm
return executePaintJob(out); return executePaintJob(out);
} }
std::ostringstream ss_o;
int loc = start; int loc = start;
std::string command = commands[loc++]; std::string command = commands[loc++];
@ -817,26 +816,17 @@ command_result processCommand(color_ostream &out, std::vector<std::string> &comm
} }
else if (command == "range" || command == "r") else if (command == "range" || command == "r")
{ {
int width = 0, height = 0, z_levels = 0; int width = 1, height = 1, zLevels = 1;
if (commands.size() >= loc) command_result res = parseRectangle(out, commands, loc, end,
{ width, height, zLevels, hasConsole);
width = toint(commands[loc++]);
height = toint(commands[loc++]);
if (commands.size() >= loc) {
z_levels = toint(commands[loc++]);
}
}
command_result res = parseRectangle(out, width, height, z_levels, width, height, z_levels, hasConsole);
if (res != CR_OK) if (res != CR_OK)
{ {
return res; return res;
} }
delete brush; delete brush;
brush = new RectangleBrush(width, height, z_levels, 0, 0, 0); brush = new RectangleBrush(width, height, zLevels, 0, 0, 0);
} }
else if (command == "block") else if (command == "block")
{ {