From 08a3f9f307c7cfccb5b2998ce34f11d8cad86c78 Mon Sep 17 00:00:00 2001 From: MusicalProgrammer <38636805+MusicalProgrammer@users.noreply.github.com> Date: Tue, 30 Oct 2018 19:14:17 -0400 Subject: [PATCH] Open now works by pressing CTRL+O --- DataModelInstance.cpp | 83 ++++++++++++++++++++++++++++++++----------- DataModelInstance.h | 6 +++- main.cpp | 9 ++++- 3 files changed, 76 insertions(+), 22 deletions(-) diff --git a/DataModelInstance.cpp b/DataModelInstance.cpp index 0fc3ad9..979ddfc 100644 --- a/DataModelInstance.cpp +++ b/DataModelInstance.cpp @@ -3,6 +3,7 @@ #include #include #include +#include using namespace std; using namespace rapidxml; @@ -25,6 +26,7 @@ DataModelInstance::DataModelInstance(void) _modY=0; workspace->setParent(this); level->setParent(this); + _loadedFileName="..//skooter.rbxm"; } @@ -37,7 +39,7 @@ void DataModelInstance::modXMLLevel(float modY) { _modY += modY; clearLevel(); - load(); + debugGetOpen(); } #endif @@ -226,31 +228,72 @@ bool DataModelInstance::scanXMLObject(xml_node<> * scanNode) return true; } -bool DataModelInstance::load() +bool DataModelInstance::load(const char* filename) { - ifstream levelFile("..//skooter.rbxm",ios::binary); - if (levelFile) { - levelFile.seekg(0,levelFile.end); - int length = levelFile.tellg(); - levelFile.seekg(0,levelFile.beg); - char * buffer = new char[length+1]; - buffer[length]=0; - levelFile.read(buffer,length); - xml_document<> doc; - doc.parse<0>(buffer); - xml_node<> *mainNode = doc.first_node(); - _legacyLoad=false; - //std::string xmlName = mainNode->name(); - //node = node->first_node(); - //xmlName = node->name(); - scanXMLObject(mainNode); - - delete[] buffer; + ifstream levelFile(filename,ios::binary); + if (levelFile) + { + readXMLFileStream(&levelFile); + return true; } + else { + return false; + } +} +bool DataModelInstance::readXMLFileStream(std::ifstream* file) +{ + file->seekg(0,file->end); + int length = file->tellg(); + file->seekg(0,file->beg); + char * buffer = new char[length+1]; + buffer[length]=0; + file->read(buffer,length); + file->close(); + xml_document<> doc; + doc.parse<0>(buffer); + xml_node<> *mainNode = doc.first_node(); + _legacyLoad=false; + //std::string xmlName = mainNode->name(); + //node = node->first_node(); + //xmlName = node->name(); + scanXMLObject(mainNode); + delete[] buffer; return true; } +bool DataModelInstance::debugGetOpen() +{ + ifstream levelFile(_loadedFileName.c_str(),ios::binary); + if (levelFile) + readXMLFileStream(&levelFile); + else + getOpen(); + return true; +} + +bool DataModelInstance::getOpen() +{ + _modY=0; + OPENFILENAME of; + ZeroMemory( &of , sizeof( of)); + of.lStructSize = sizeof(OPENFILENAME); + of.lpstrFilter = "Roblox Files\0*.rbxm;*.rbxl\0\0"; + char szFile[512]; + of.lpstrFile = szFile ; + of.lpstrFile[0]='\0'; + of.nMaxFile=500; + of.lpstrTitle="Hello"; + of.Flags = OFN_FILEMUSTEXIST; + ShowCursor(TRUE); + BOOL file = GetOpenFileName(&of); + if (file) + { + _loadedFileName = of.lpstrFile; + load(of.lpstrFile); + } + return true; +} void DataModelInstance::setMessage(std::string msg) { message = msg; diff --git a/DataModelInstance.h b/DataModelInstance.h index e427373..554d2aa 100644 --- a/DataModelInstance.h +++ b/DataModelInstance.h @@ -13,7 +13,10 @@ public: void setMessage(std::string); void setMessageBrickCount(); void clearMessage(); - bool load(); + bool debugGetOpen(); + bool getOpen(); + bool load(const char* filename); + bool readXMLFileStream(std::ifstream* file); void drawMessage(RenderDevice*); WorkspaceInstance* getWorkspace(); WorkspaceInstance* workspace; @@ -21,6 +24,7 @@ public: LevelInstance * getLevel(); Instance* guiRoot; std::string message; + std::string _loadedFileName; bool showMessage; G3D::GFontRef font; Instance* getGuiRoot(); diff --git a/main.cpp b/main.cpp index 33788bf..f5ab1c3 100644 --- a/main.cpp +++ b/main.cpp @@ -814,7 +814,7 @@ void Demo::onInit() { test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(2,7,0)); #else - dataModel->load(); + dataModel->debugGetOpen(); #endif @@ -1430,6 +1430,13 @@ void Demo::onKeyPressed(int key) { deleteInstance(); } + if (GetHoldKeyState(VK_RCONTROL)) + { + if (key=='O') + { + dataModel->getOpen(); + } + } #ifdef _DEBUG if (key==VK_ADD) {