Open now works by pressing CTRL+O

This commit is contained in:
MusicalProgrammer
2018-10-30 19:14:17 -04:00
parent 8a097f7eb1
commit 08a3f9f307
3 changed files with 76 additions and 22 deletions

View File

@@ -3,6 +3,7 @@
#include <fstream> #include <fstream>
#include <iostream> #include <iostream>
#include <sstream> #include <sstream>
#include <commdlg.h>
using namespace std; using namespace std;
using namespace rapidxml; using namespace rapidxml;
@@ -25,6 +26,7 @@ DataModelInstance::DataModelInstance(void)
_modY=0; _modY=0;
workspace->setParent(this); workspace->setParent(this);
level->setParent(this); level->setParent(this);
_loadedFileName="..//skooter.rbxm";
} }
@@ -37,7 +39,7 @@ void DataModelInstance::modXMLLevel(float modY)
{ {
_modY += modY; _modY += modY;
clearLevel(); clearLevel();
load(); debugGetOpen();
} }
#endif #endif
@@ -226,31 +228,72 @@ bool DataModelInstance::scanXMLObject(xml_node<> * scanNode)
return true; return true;
} }
bool DataModelInstance::load() bool DataModelInstance::load(const char* filename)
{ {
ifstream levelFile("..//skooter.rbxm",ios::binary); ifstream levelFile(filename,ios::binary);
if (levelFile) { if (levelFile)
levelFile.seekg(0,levelFile.end); {
int length = levelFile.tellg(); readXMLFileStream(&levelFile);
levelFile.seekg(0,levelFile.beg); return true;
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;
} }
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; 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) void DataModelInstance::setMessage(std::string msg)
{ {
message = msg; message = msg;

View File

@@ -13,7 +13,10 @@ public:
void setMessage(std::string); void setMessage(std::string);
void setMessageBrickCount(); void setMessageBrickCount();
void clearMessage(); void clearMessage();
bool load(); bool debugGetOpen();
bool getOpen();
bool load(const char* filename);
bool readXMLFileStream(std::ifstream* file);
void drawMessage(RenderDevice*); void drawMessage(RenderDevice*);
WorkspaceInstance* getWorkspace(); WorkspaceInstance* getWorkspace();
WorkspaceInstance* workspace; WorkspaceInstance* workspace;
@@ -21,6 +24,7 @@ public:
LevelInstance * getLevel(); LevelInstance * getLevel();
Instance* guiRoot; Instance* guiRoot;
std::string message; std::string message;
std::string _loadedFileName;
bool showMessage; bool showMessage;
G3D::GFontRef font; G3D::GFontRef font;
Instance* getGuiRoot(); Instance* getGuiRoot();

View File

@@ -814,7 +814,7 @@ void Demo::onInit() {
test->setSize(Vector3(4,1,2)); test->setSize(Vector3(4,1,2));
test->setPosition(Vector3(2,7,0)); test->setPosition(Vector3(2,7,0));
#else #else
dataModel->load(); dataModel->debugGetOpen();
#endif #endif
@@ -1430,6 +1430,13 @@ void Demo::onKeyPressed(int key)
{ {
deleteInstance(); deleteInstance();
} }
if (GetHoldKeyState(VK_RCONTROL))
{
if (key=='O')
{
dataModel->getOpen();
}
}
#ifdef _DEBUG #ifdef _DEBUG
if (key==VK_ADD) if (key==VK_ADD)
{ {