Improved user interaction and a little code rework.

This commit is contained in:
Steffen Fündgens 2015-01-27 11:50:51 +01:00
parent 65087ece48
commit ba0677adde
3 changed files with 27 additions and 23 deletions

View File

@ -26,12 +26,6 @@ Converter::Converter(std::string level){
dst << src.rdbuf(); dst << src.rdbuf();
} }
//Create a backup of the current Level xml file
std::string backupXML = "../Levels/ObjectSetups/BackupLevel" + level + ".xml";
std::ifstream src(xmlFile, std::ios::binary);
std::ofstream dst(backupXML, std::ios::binary);
//Load the Level xml file //Load the Level xml file
nextID.push_back(0); nextID.push_back(0);
nextID.push_back(1); nextID.push_back(1);
@ -43,8 +37,19 @@ Converter::Converter(std::string level){
idUsed[0][0] = true; idUsed[0][0] = true;
const char* charXmlFile = xmlFile.c_str(); const char* charXmlFile = xmlFile.c_str();
doc->LoadFile(charXmlFile); doc->LoadFile(charXmlFile);
//check if the xml file did not already exist
if (doc->ErrorID()!=0){ if (doc->ErrorID()!=0){
printf("Could not open xml, creating new xml.\n"); std::string answer;
printf("Could not open xml, do you want to create a new xml? (y/n)\n");
std::cin >> answer;
while(answer.compare("y") != 0 && answer.compare("n") != 0){
printf("Answer with y or n");
std::cin >> answer;
}
if(answer.compare("n") == 0){
exit(-1);
}
printf("Creating new xml.\n");
//Create all global Lightingparameters with Dummy-Values //Create all global Lightingparameters with Dummy-Values
std::vector<XMLElement*> lightAttributes; std::vector<XMLElement*> lightAttributes;
lightAttributes.push_back(doc->NewElement("xOffset")); lightAttributes.push_back(doc->NewElement("xOffset"));
@ -112,7 +117,7 @@ Converter::Converter(std::string level){
physics->InsertEndChild(playerStrength); physics->InsertEndChild(playerStrength);
doc->InsertEndChild(physics); doc->InsertEndChild(physics);
//create positionConstraint Dummy //Create positionConstraint Dummy
XMLElement* positionConstraint = doc->NewElement("positionConstraint"); XMLElement* positionConstraint = doc->NewElement("positionConstraint");
XMLElement* positionConstraintObjectNum = doc->NewElement("objectNum"); XMLElement* positionConstraintObjectNum = doc->NewElement("objectNum");
XMLElement* positionConstraintXPos = doc->NewElement("xPosition"); XMLElement* positionConstraintXPos = doc->NewElement("xPosition");
@ -131,7 +136,12 @@ Converter::Converter(std::string level){
positionConstraint->InsertEndChild(positionConstraintStrength); positionConstraint->InsertEndChild(positionConstraintStrength);
doc->InsertEndChild(positionConstraint); doc->InsertEndChild(positionConstraint);
}else{ }else{
//Create a backup of the current Level xml file
std::string backupXML = "../Levels/ObjectSetups/BackupLevel" + level + ".xml";
std::ifstream src(xmlFile, std::ios::binary);
std::ofstream dst(backupXML, std::ios::binary);
dst << src.rdbuf(); dst << src.rdbuf();
//Check what IDs are already in use
XMLElement* thisComposition = doc->FirstChildElement("composition"); XMLElement* thisComposition = doc->FirstChildElement("composition");
for(; thisComposition; thisComposition=thisComposition->NextSiblingElement("composition")){ for(; thisComposition; thisComposition=thisComposition->NextSiblingElement("composition")){
int idGreen = 0, idBlue = 0; int idGreen = 0, idBlue = 0;
@ -149,8 +159,6 @@ Converter::~Converter(){
} }
std::vector<int> Converter::newComposition(int type, float posX, float posZ){ std::vector<int> Converter::newComposition(int type, float posX, float posZ){
XMLElement* newComposition = doc->NewElement("composition");
doc->InsertFirstChild(newComposition);
while(idUsed[nextID[0]][nextID[1]]){ while(idUsed[nextID[0]][nextID[1]]){
nextID[1] += 1; nextID[1] += 1;
if (nextID[1] == 256){ if (nextID[1] == 256){
@ -162,7 +170,7 @@ std::vector<int> Converter::newComposition(int type, float posX, float posZ){
} }
} }
} }
XMLElement* newComposition = doc->NewElement("composition");
XMLElement* typeID = doc->NewElement("typeID"); XMLElement* typeID = doc->NewElement("typeID");
XMLElement* idBlue = doc->NewElement("idBlue"); XMLElement* idBlue = doc->NewElement("idBlue");
XMLElement* idGreen = doc->NewElement("idGreen"); XMLElement* idGreen = doc->NewElement("idGreen");
@ -245,14 +253,15 @@ std::vector<int> Converter::newComposition(int type, float posX, float posZ){
trigger->InsertEndChild(toChangeObjNum); trigger->InsertEndChild(toChangeObjNum);
idUsed[nextID[0]][nextID[1]] = true; idUsed[nextID[0]][nextID[1]] = true;
doc->InsertFirstChild(newComposition);
return nextID; return nextID;
} }
void Converter::updateComposition(int idG, int idB, float posX, float posZ){ void Converter::updateComposition(int idG, int idB, float posX, float posZ){
XMLElement* thisComposition = doc->FirstChildElement("composition"); XMLElement* thisComposition = doc->FirstChildElement("composition");
int idGreen = 0, idBlue = 0;
bool compositionExists = false; bool compositionExists = false;
for(; thisComposition; thisComposition=thisComposition->NextSiblingElement("composition")){ for(; thisComposition; thisComposition=thisComposition->NextSiblingElement("composition")){
int idGreen = 0, idBlue = 0;
errorCheck(thisComposition->FirstChildElement("idGreen")->QueryIntText(&idGreen)); errorCheck(thisComposition->FirstChildElement("idGreen")->QueryIntText(&idGreen));
errorCheck(thisComposition->FirstChildElement("idBlue")->QueryIntText(&idBlue)); errorCheck(thisComposition->FirstChildElement("idBlue")->QueryIntText(&idBlue));
if(idGreen == idG && idBlue == idB){ if(idGreen == idG && idBlue == idB){
@ -278,7 +287,7 @@ void Converter::updateComposition(int idG, int idB, float posX, float posZ){
void Converter::deleteComposition(int idG, int idB){ void Converter::deleteComposition(int idG, int idB){
XMLElement* thisComposition = doc->FirstChildElement("composition"); XMLElement* thisComposition = doc->FirstChildElement("composition");
for(; thisComposition; thisComposition=thisComposition->NextSiblingElement("composition")){ for(; thisComposition; thisComposition=thisComposition->NextSiblingElement("composition")){
int idGreen = 0, idBlue = 0; int idGreen = 0, idBlue = 0;
errorCheck(thisComposition->FirstChildElement("idGreen")->QueryIntText(&idGreen)); errorCheck(thisComposition->FirstChildElement("idGreen")->QueryIntText(&idGreen));
errorCheck(thisComposition->FirstChildElement("idBlue")->QueryIntText(&idBlue)); errorCheck(thisComposition->FirstChildElement("idBlue")->QueryIntText(&idBlue));
if(idGreen == idG && idBlue == idB){ if(idGreen == idG && idBlue == idB){
@ -292,10 +301,6 @@ void Converter::save(){
doc->SaveFile(charXmlFile); doc->SaveFile(charXmlFile);
} }
std::vector<int> Converter::getNextID(){
return nextID;
}
void Converter::errorCheck(XMLError error){ void Converter::errorCheck(XMLError error){
if (error) { if (error) {
printf("XMLError: "); printf("XMLError: ");

View File

@ -15,7 +15,6 @@ class Converter {
std::vector<int> newComposition(int type, float posX, float posZ);//creates a new composition and returns its ID std::vector<int> newComposition(int type, float posX, float posZ);//creates a new composition and returns its ID
void deleteComposition(int idG, int idB); void deleteComposition(int idG, int idB);
void save(); //writes the xml to file void save(); //writes the xml to file
std::vector<int> getNextID(); //returns the next unused ID
private: private:
void errorCheck(XMLError error); void errorCheck(XMLError error);

View File

@ -35,11 +35,11 @@ int main( int argc, char *argv[] ){
//if there is a composition here, adjust the xml and image //if there is a composition here, adjust the xml and image
if(image[pixel]!=0 && image[pixel]!=255){ if(image[pixel]!=0 && image[pixel]!=255){
if(image[pixel+1]==0 && image[pixel+2]==0){//composition has no ID if(image[pixel+1]==0 && image[pixel+2]==0){//composition has no ID
std::vector<int> temp; std::vector<int> newID;
temp = conv.newComposition(image[pixel], 0.5+rowNum-0.5*height, 0.5+columnNum-0.5*width); newID = conv.newComposition(image[pixel], 0.5+rowNum-0.5*height, 0.5+columnNum-0.5*width);
idFound[temp[0]][temp[1]] = true; idFound[newID[0]][newID[1]] = true;
image[pixel+1] = temp[0]; image[pixel+1] = newID[0];
image[pixel+2] = temp[1]; image[pixel+2] = newID[1];
}else{//composition has an ID }else{//composition has an ID
conv.updateComposition(image[pixel+1], image[pixel+2], 0.5+rowNum-0.5*height, 0.5+columnNum-0.5*width); conv.updateComposition(image[pixel+1], image[pixel+2], 0.5+rowNum-0.5*height, 0.5+columnNum-0.5*width);
idFound[image[pixel+1]][image[pixel+2]] = true; idFound[image[pixel+1]][image[pixel+2]] = true;