gamecreator Posted July 11, 2019 Share Posted July 11, 2019 Since this was a hot topic recently, I've written code to preload model files from a map and display a progress bar. Then, when you load the map, it should load much faster since you already "preloaded" the models and the ones in the map will be instances (copies) of existing ones. This is an alternative to Map::Load's hook, which may be a better way to go about this. #include "Leadwerks.h" using namespace Leadwerks; std::string mapfile = "maps/map.map"; string model_file[100]; // Stores list of model files in map Model *preload_model[100]; // Array to preload model files to int modelcount=0; // Counts total number of models found in map file int main(int argc, const char *argv[]) { Leadwerks::Window* window = Leadwerks::Window::Create(); Context* context = Context::Create(window); // Load map as just a file Stream* stream = FileSystem::ReadFile(mapfile); if(stream==NULL) { cout << "Could not open map file to read." << endl; exit(1); } // Put MDL paths/files in a list and get count while(!stream->EOF()) { string line = stream->ReadLine(); // If what we read is a model line (ends with .mdl) if(line.size()>3 && line.compare(line.size() - 4, 4, ".mdl") == 0) model_file[modelcount++]=line; } stream->Release(); cout << "Number of model files in map: " << modelcount << endl; for(int i=0; i<modelcount; i++) { cout << "Preloading file #" << i << ":" << model_file[i] << endl << endl; preload_model[i]=NULL; preload_model[i]=Model::Load(model_file[i]); // You can check if model was properly loaded here (should not be NULL) preload_model[i]->Hide(); // Preload model should not be seen // Draw progress bar context->SetColor(0.0, 0.0, 0.0); context->Clear(); context->SetColor(1.0, 0.0, 0.0); float barwidth = (float)(context->GetWidth())-20.0; barwidth *= (float)(i+1); barwidth /= (float)modelcount; context->DrawRect(10, 10, (int)barwidth, 20); // Remove the below delay line. It's put in just to show progress bar effect Sleep(500); context->Sync(); } // You can then load the map here and it should be much faster // since you already loaded the models in it above // Map::Load(mapfile); // Game code here return 0; } 1 1 Quote Link to comment Share on other sites More sharing options...
Angelwolf Posted July 11, 2019 Share Posted July 11, 2019 This could be really helpful to a lot of people here. Shame it's only C++ though ? Quote My Games: Nightmare Prism:::WolfTale:::Dungeon Creeper:::Despair of Ordinary Men:::Piano Simulator 2016:::House (W.I.P) Link to comment Share on other sites More sharing options...
gamecreator Posted July 11, 2019 Author Share Posted July 11, 2019 Thanks. As usual for sample code, I tried to make it as short and straightforward as possible, avoiding functions and classes and such. I'm hoping it's not too hard to translate to Lua since I used Leadwerks functions where possible. cout can be replaced with System:Print or removed altogether (it's just a sanity check). 1 Quote Link to comment Share on other sites More sharing options...
Yue Posted September 19, 2021 Share Posted September 19, 2021 I am going to try this in Lua, remembering old threads where this topic was discussed, today I understand what you meant, it's just that my English is very bad. Quote Link to comment Share on other sites More sharing options...
Yue Posted September 19, 2021 Share Posted September 19, 2021 Well, I'm stuck here. myMap = FileSystem:ReadFile("Map.txt") while not myMap:EOF() do line = myMap:ReadLine() System:Print(line:GetSize() ) -- here line.size end System:Print("Final") myMap = FileSystem:ReadFile("Map.txt") while not myMap:EOF() do line = myMap:ReadLine() System:Print(line.size ) end System:Print("Final") Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.