void PolycodePlayer::loadFile(const char *fileName) { FILE *t = fopen("C:\\out.txt", "a"); fwrite(fileName, strlen(fileName), 1, t); fclose(t); String mainFile = ""; String basePath = fileName; Number red = 0.2f; Number green = 0.2f; Number blue = 0.2f; frameRate = 60; Object configFile; String nameString = fileName; bool loadingArchive = false; if(nameString != "") { String ext = nameString.substr(nameString.length() - 8, nameString.length()); Logger::log("Loading %s\n", fileName); String configPath; if(ext == ".polyapp" || _knownArchive) { ResourceManager *rman = CoreServices::getInstance()->getResourceManager(); rman->addArchive(nameString); configPath = "runinfo.polyrun"; loadingArchive = true; Logger::log("Reading configuration from POLYAPP file... (%s)\n", nameString.c_str()); } else { ResourceManager *rman = CoreServices::getInstance()->getResourceManager(); String fileDir = ""; vector<String> bits = String(fileName).split("/"); for(int i=0; i < bits.size()-1; i++) { fileDir += "/"+bits[i]; } rman->addArchive(fileDir); configPath = fileName; Logger::log("Reading configuration from .polycode file directly... (%s)\n", fileName); } if(!configFile.loadFromXML(configPath)) { Logger::log("Error loading config file\n"); } else { if(configFile.root["entryPoint"]) { mainFile = configFile.root["entryPoint"]->stringVal; } if(configFile.root["defaultWidth"]) { xRes = configFile.root["defaultWidth"]->intVal; } if(configFile.root["defaultHeight"]) { yRes = configFile.root["defaultHeight"]->intVal; } if(configFile.root["frameRate"]) { frameRate = configFile.root["frameRate"]->intVal; } if(configFile.root["antiAliasingLevel"]) { aaLevel = configFile.root["antiAliasingLevel"]->intVal; } if(configFile.root["fullScreen"]) { fullScreen = configFile.root["fullScreen"]->boolVal; } if(configFile.root["backgroundColor"]) { ObjectEntry *color = configFile.root["backgroundColor"]; if((*color)["red"] && (*color)["green"] && (*color)["blue"]) { red = (*color)["red"]->NumberVal; green = (*color)["green"]->NumberVal; blue = (*color)["blue"]->NumberVal; } } ObjectEntry *modules = configFile.root["modules"]; if(modules) { for(int i=0; i < modules->length; i++) { String moduleName = (*modules)[i]->stringVal; Logger::log("Loading module: %s\n", moduleName.c_str()); #ifdef _WINDOWS TCHAR _tempPath[4098]; TCHAR tempPath[4098]; GetTempPathW(4098, _tempPath); GetLongPathNameW(_tempPath, tempPath, 4098); String moduleDestPath = String(tempPath) + String("\\") + moduleName+ String(".dll"); String moduleFileName = String("__lib/win/") + moduleName+ String(".dll"); #else String moduleFileName = String("__lib/osx/") + moduleName+ String(".dylib"); String moduleDestPath = String("/tmp/") + moduleName+ String(".dylib"); #endif OSFILE *inFile = OSBasics::open(moduleFileName, "rb"); if(inFile) { OSBasics::seek(inFile, 0, SEEK_END); long progsize = OSBasics::tell(inFile); OSBasics::seek(inFile, 0, SEEK_SET); char *buffer = (char*)malloc(progsize+1); memset(buffer, 0, progsize+1); OSBasics::read(buffer, progsize, 1, inFile); OSFILE *outFile = OSBasics::open(moduleDestPath, "wb"); OSBasics::write(buffer, progsize, 1, outFile); OSBasics::close(outFile); free(buffer); OSBasics::close(inFile); loadedModules.push_back(moduleName); } else { Logger::log("Error loading module: %s\n", (*modules)[i]->stringVal.c_str()); } } } } Logger::log("Mainfile: %s\n", mainFile.c_str()); PolycodeDebugEvent *event = new PolycodeDebugEvent(); event->xRes = xRes; event->yRes = yRes; } createCore(); if(nameString == "") { return; } Logger::log("Core created...\n"); CoreServices::getInstance()->getResourceManager()->addArchive("api.pak"); if(configFile.root["packedItems"]) { ObjectEntry *packed = configFile.root["packedItems"]; if(packed) { for(int i=0; i < packed->length; i++) { ObjectEntry *entryIsResource = (*(*packed)[i])["isResource"]; ObjectEntry *entryPath = (*(*packed)[i])["path"]; if(entryIsResource && entryPath) { if(entryIsResource->boolVal == true) { CoreServices::getInstance()->getResourceManager()->addDirResource(entryPath->stringVal, true); } } } } } core->setUserPointer(this); //core->addEventListener(this, Core::EVENT_CORE_RESIZE); core->setVideoMode(xRes, yRes, fullScreen, aaLevel); CoreServices::getInstance()->getResourceManager()->addArchive("default.pak"); CoreServices::getInstance()->getResourceManager()->addDirResource("default", false); // dispatchEvent(event, PolycodeDebugEvent::EVENT_RESIZE); CoreServices::getInstance()->getRenderer()->setClearColor(red, green, blue); // CoreServices::getInstance()->getRenderer()->setClearColor(1,0,0); srand(core->getTicks()); String fullPath; if(loadingArchive) { fullPath = mainFile; } else { int lindex = basePath.find_last_of("/"); fullPath = basePath.substr(0, lindex); fullPath += mainFile; Logger::log(fullPath.c_str()); } runFile(fullPath); }
void PolycodePlayer::loadFile(const char *fileName) { String mainFile = ""; String basePath = fileName; Number red = 0.2f; Number green = 0.2f; Number blue = 0.2f; String textureFiltering = "linear"; frameRate = 60; Object configFile; String nameString = fileName; bool loadingArchive = false; if(nameString != "") { String ext = nameString.substr(nameString.length() - 8, nameString.length()); Logger::log("Loading %s\n", fileName); String configPath; if(ext == ".polyapp" || _knownArchive) { ResourceManager *rman = CoreServices::getInstance()->getResourceManager(); rman->addArchive(nameString); configPath = "runinfo.polyrun"; loadingArchive = true; Logger::log("Reading configuration from POLYAPP file... (%s)\n", nameString.c_str()); } else { ResourceManager *rman = CoreServices::getInstance()->getResourceManager(); String fileDir = ""; std::vector<String> bits = String(fileName).split("/"); for(int i=0; i < bits.size()-1; i++) { fileDir += "/"+bits[i]; } rman->addArchive(fileDir); configPath = fileName; Logger::log("Reading configuration from .polycode file directly... (%s)\n", fileName); } if(!configFile.loadFromXML(configPath)) { Logger::log("Error loading config file\n"); } else { if(configFile.root["entryPoint"]) { mainFile = configFile.root["entryPoint"]->stringVal; } if(configFile.root["defaultWidth"]) { xRes = configFile.root["defaultWidth"]->intVal; } if(configFile.root["defaultHeight"]) { yRes = configFile.root["defaultHeight"]->intVal; } if(configFile.root["frameRate"]) { frameRate = configFile.root["frameRate"]->intVal; } if(configFile.root["antiAliasingLevel"]) { aaLevel = configFile.root["antiAliasingLevel"]->intVal; } if(configFile.root["fullScreen"]) { fullScreen = configFile.root["fullScreen"]->boolVal; } if(configFile.root["textureFiltering"]) { textureFiltering = configFile.root["textureFiltering"]->stringVal; } if(configFile.root["backgroundColor"]) { ObjectEntry *color = configFile.root["backgroundColor"]; if((*color)["red"] && (*color)["green"] && (*color)["blue"]) { red = (*color)["red"]->NumberVal; green = (*color)["green"]->NumberVal; blue = (*color)["blue"]->NumberVal; } } ObjectEntry *fonts = configFile.root["fonts"]; if(fonts) { for(int i=0; i < fonts->length; i++) { ObjectEntry *fontName = (*(*fonts)[i])["name"]; ObjectEntry *fontPath = (*(*fonts)[i])["path"]; if(fontName && fontPath) { printf("REGISTERING FONT %s %s\n", fontName->stringVal.c_str(), fontPath->stringVal.c_str()); CoreServices::getInstance()->getFontManager()->registerFont(fontName->stringVal, fontPath->stringVal); } } } ObjectEntry *modules = configFile.root["modules"]; if(modules) { for(int i=0; i < modules->length; i++) { String moduleName = (*modules)[i]->stringVal; Logger::log("Loading module: %s\n", moduleName.c_str()); #ifdef _WINDOWS TCHAR _tempPath[4098]; TCHAR tempPath[4098]; GetTempPathW(4098, _tempPath); GetLongPathNameW(_tempPath, tempPath, 4098); String moduleDestPath = String(tempPath) + String("\\") + moduleName+ String(".dll"); String moduleFileName = String("__lib/win/") + moduleName+ String(".dll"); #else #if defined(__APPLE__) && defined(__MACH__) String moduleFileName = String("__lib/osx/") + moduleName+ String(".dylib"); String moduleDestPath = String("/tmp/") + moduleName+ String(".dylib"); #else String moduleFileName = String("__lib/linux/") + moduleName+ String(".so"); String moduleDestPath = String("/tmp/") + moduleName+ String(".so"); #endif #endif OSFILE *inFile = OSBasics::open(moduleFileName, "rb"); if(inFile) { OSBasics::seek(inFile, 0, SEEK_END); long progsize = OSBasics::tell(inFile); OSBasics::seek(inFile, 0, SEEK_SET); char *buffer = (char*)malloc(progsize+1); memset(buffer, 0, progsize+1); OSBasics::read(buffer, progsize, 1, inFile); OSFILE *outFile = OSBasics::open(moduleDestPath, "wb"); OSBasics::write(buffer, progsize, 1, outFile); OSBasics::close(outFile); free(buffer); OSBasics::close(inFile); loadedModules.push_back(moduleName); } else { Logger::log("Error loading module: %s\n", (*modules)[i]->stringVal.c_str()); } } } } Logger::log("Mainfile: %s\n", mainFile.c_str()); PolycodeDebugEvent *event = new PolycodeDebugEvent(); event->xRes = xRes; event->yRes = yRes; } createCore(); core->getInput()->addEventListener(this, InputEvent::EVENT_KEYDOWN); core->getInput()->addEventListener(this, InputEvent::EVENT_KEYUP); core->getInput()->addEventListener(this, InputEvent::EVENT_MOUSEDOWN); core->getInput()->addEventListener(this, InputEvent::EVENT_MOUSEMOVE); core->getInput()->addEventListener(this, InputEvent::EVENT_MOUSEUP); if(nameString == "") { return; } Logger::log("Core created...\n"); CoreServices::getInstance()->getResourceManager()->addArchive("UIThemes.pak"); CoreServices::getInstance()->getConfig()->loadConfig("Polycode", "UIThemes/default/theme.xml"); CoreServices::getInstance()->getResourceManager()->addArchive("api.pak"); CoreServices::getInstance()->getResourceManager()->addArchive("Physics2D.pak"); CoreServices::getInstance()->getResourceManager()->addArchive("Physics3D.pak"); CoreServices::getInstance()->getResourceManager()->addArchive("UI.pak"); if(configFile.root["packedItems"]) { ObjectEntry *packed = configFile.root["packedItems"]; if(packed) { for(int i=0; i < packed->length; i++) { ObjectEntry *entryIsResource = (*(*packed)[i])["isResource"]; ObjectEntry *entryPath = (*(*packed)[i])["path"]; if(entryIsResource && entryPath) { if(entryIsResource->boolVal == true) { CoreServices::getInstance()->getResourceManager()->addDirResource(entryPath->stringVal, true); } } } } } core->setUserPointer(this); //core->addEventListener(this, Core::EVENT_CORE_RESIZE); core->setVideoMode(xRes, yRes, fullScreen, false, 0, aaLevel); if(textureFiltering == "nearest") { CoreServices::getInstance()->getRenderer()->setTextureFilteringMode(Renderer::TEX_FILTERING_NEAREST); } else { CoreServices::getInstance()->getRenderer()->setTextureFilteringMode(Renderer::TEX_FILTERING_LINEAR); } CoreServices::getInstance()->getResourceManager()->addArchive("default.pak"); CoreServices::getInstance()->getResourceManager()->addDirResource("default", false); // dispatchEvent(event, PolycodeDebugEvent::EVENT_RESIZE); CoreServices::getInstance()->getRenderer()->setClearColor(red, green, blue); // CoreServices::getInstance()->getRenderer()->setClearColor(1,0,0); srand(core->getTicks()); if(loadingArchive) { fullPath = mainFile; } else { int lindex = basePath.find_last_of("/"); fullPath = basePath.substr(0, lindex); fullPath += mainFile; Logger::log(fullPath.c_str()); } remoteDebuggerClient = NULL; if(useDebugger) { remoteDebuggerClient = new PolycodeRemoteDebuggerClient(); remoteDebuggerClient->addEventListener(this, Event::COMPLETE_EVENT); this->addEventListener(remoteDebuggerClient, PolycodeDebugEvent::EVENT_PRINT); this->addEventListener(remoteDebuggerClient, PolycodeDebugEvent::EVENT_ERROR); remoteDebuggerClient->client->addEventListener(this, ClientEvent::EVENT_CLIENT_READY); remoteDebuggerClient->client->addEventListener(this, ClientEvent::EVENT_SERVER_DATA); debuggerTimer = new Timer(true, 5000); debuggerTimer->addEventListener(this, Timer::EVENT_TRIGGER); } else{ runFile(fullPath); } }