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();
}
//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
nextID.push_back(0);
nextID.push_back(1);
@ -43,8 +37,19 @@ Converter::Converter(std::string level){
idUsed[0][0] = true;
const char* charXmlFile = xmlFile.c_str();
doc->LoadFile(charXmlFile);
//check if the xml file did not already exist
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
std::vector<XMLElement*> lightAttributes;
lightAttributes.push_back(doc->NewElement("xOffset"));
@ -112,7 +117,7 @@ Converter::Converter(std::string level){
physics->InsertEndChild(playerStrength);
doc->InsertEndChild(physics);
//create positionConstraint Dummy
//Create positionConstraint Dummy
XMLElement* positionConstraint = doc->NewElement("positionConstraint");
XMLElement* positionConstraintObjectNum = doc->NewElement("objectNum");
XMLElement* positionConstraintXPos = doc->NewElement("xPosition");
@ -131,7 +136,12 @@ Converter::Converter(std::string level){
positionConstraint->InsertEndChild(positionConstraintStrength);
doc->InsertEndChild(positionConstraint);
}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();
//Check what IDs are already in use
XMLElement* thisComposition = doc->FirstChildElement("composition");
for(; thisComposition; thisComposition=thisComposition->NextSiblingElement("composition")){
int idGreen = 0, idBlue = 0;
@ -149,8 +159,6 @@ Converter::~Converter(){
}
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]]){
nextID[1] += 1;
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* idBlue = doc->NewElement("idBlue");
XMLElement* idGreen = doc->NewElement("idGreen");
@ -245,14 +253,15 @@ std::vector<int> Converter::newComposition(int type, float posX, float posZ){
trigger->InsertEndChild(toChangeObjNum);
idUsed[nextID[0]][nextID[1]] = true;
doc->InsertFirstChild(newComposition);
return nextID;
}
void Converter::updateComposition(int idG, int idB, float posX, float posZ){
XMLElement* thisComposition = doc->FirstChildElement("composition");
int idGreen = 0, idBlue = 0;
bool compositionExists = false;
for(; thisComposition; thisComposition=thisComposition->NextSiblingElement("composition")){
int idGreen = 0, idBlue = 0;
errorCheck(thisComposition->FirstChildElement("idGreen")->QueryIntText(&idGreen));
errorCheck(thisComposition->FirstChildElement("idBlue")->QueryIntText(&idBlue));
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){
XMLElement* thisComposition = doc->FirstChildElement("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("idBlue")->QueryIntText(&idBlue));
if(idGreen == idG && idBlue == idB){
@ -292,10 +301,6 @@ void Converter::save(){
doc->SaveFile(charXmlFile);
}
std::vector<int> Converter::getNextID(){
return nextID;
}
void Converter::errorCheck(XMLError error){
if (error) {
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
void deleteComposition(int idG, int idB);
void save(); //writes the xml to file
std::vector<int> getNextID(); //returns the next unused ID
private:
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(image[pixel]!=0 && image[pixel]!=255){
if(image[pixel+1]==0 && image[pixel+2]==0){//composition has no ID
std::vector<int> temp;
temp = conv.newComposition(image[pixel], 0.5+rowNum-0.5*height, 0.5+columnNum-0.5*width);
idFound[temp[0]][temp[1]] = true;
image[pixel+1] = temp[0];
image[pixel+2] = temp[1];
std::vector<int> newID;
newID = conv.newComposition(image[pixel], 0.5+rowNum-0.5*height, 0.5+columnNum-0.5*width);
idFound[newID[0]][newID[1]] = true;
image[pixel+1] = newID[0];
image[pixel+2] = newID[1];
}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);
idFound[image[pixel+1]][image[pixel+2]] = true;