Dreikblack Posted February 18 Share Posted February 18 After save: After load: #include "UltraEngine.h" using namespace UltraEngine; int main(int argc, const char* argv[]) { //Get the displays auto displays = GetDisplays(); //Create a window auto window = CreateWindow("Ultra Engine", 0, 0, 1280, 720, displays[0], WINDOW_CENTER | WINDOW_TITLEBAR); //Create a world auto world = CreateWorld(); //Create a framebuffer auto framebuffer = CreateFramebuffer(window); //Create a camera auto camera = CreateCamera(world); camera->SetClearColor(0.125); camera->SetPosition(0, 1, -4); //Create light auto light = CreateBoxLight(world); light->SetRange(-10, 10); light->SetArea(15, 15); light->SetRotation(45, 35, 0); light->SetColor(2); //Create the ground auto ground = CreateBox(world, 20, 1, 20); ground->SetPosition(0, -0.5, 0); ground->SetColor(0, 1, 0); //Create a scene auto scene0 = CreateMap(); scene0->AddEntity(ground); scene0->AddEntity(light); ground = NULL; light = NULL; auto scene = CreateMap(); //Add some boxes for (int n = 0; n < 2; ++n) { auto box = CreateBox(world); box->SetColor(0, 0, 1); box->SetPosition(Random(-5, 5), Random(5, 10), Random(-5, 5)); box->SetMass(1); scene->AddEntity(box); } //Main loop while (window->Closed() == false and window->KeyDown(KEY_ESCAPE) == false) { if (window->KeyHit(KEY_A)) { auto box = CreateBox(world); box->SetColor(1, 0, 1); box->SetPosition(1, 1, 1); box->SetMass(1); scene->AddEntity(box); } if (window->KeyHit(KEY_D)) { for (auto box : scene->entities) { if (box->As<Model>()) scene->RemoveEntity(box); break; } } if (window->KeyHit(KEY_S)) { //Save the scene to a file scene->Save("game.sav"); } //Load the scene when space key is pressed if (window->KeyHit(KEY_SPACE)) { scene = LoadMap(world, "game.sav"); } world->Update(); world->Render(framebuffer); } return 0; } Quote Link to comment Share on other sites More sharing options...
Dreikblack Posted July 12 Author Share Posted July 12 Light stays in last build. Debugged a bit and i found out that scene have an entities after a load but they are invisible for unknown reason. Quote Link to comment Share on other sites More sharing options...
Josh Posted August 16 Share Posted August 16 I do not understand what the purpose of scene0 in the above example is. I changed the code and it now works as I would expect. The scene file format currently does not embed procedurally created model geometry into files. All models must be loaded from a file. This might be something we change in the future, but for now that is part of the design. #include "UltraEngine.h" using namespace UltraEngine; int main(int argc, const char* argv[]) { //Get the displays auto displays = GetDisplays(); //Create a window auto window = CreateWindow("Ultra Engine", 0, 0, 1280, 720, displays[0], WINDOW_CENTER | WINDOW_TITLEBAR); //Create a world auto world = CreateWorld(); //Create a framebuffer auto framebuffer = CreateFramebuffer(window); //Create a camera auto camera = CreateCamera(world); camera->SetClearColor(0.125); camera->SetPosition(0, 1, -4); //Create light auto light = CreateBoxLight(world); light->SetRange(-10, 10); light->SetArea(15, 15); light->SetRotation(45, 35, 0); light->SetColor(2); //Create the ground auto ground = CreateBox(world, 20, 1, 20); ground->SetPosition(0, -0.5, 0); ground->SetColor(0, 1, 0); //Create a scene auto scene = CreateMap(); scene->AddEntity(ground); scene->AddEntity(light); ground = NULL; light = NULL; //Add some boxes for (int n = 0; n < 2; ++n) { auto box = CreateBox(world); box->SetColor(0, 0, 1); box->SetPosition(Random(-5, 5), Random(5, 10), Random(-5, 5)); box->SetMass(1); scene->AddEntity(box); } //Main loop while (window->Closed() == false and window->KeyDown(KEY_ESCAPE) == false) { if (window->KeyHit(KEY_A)) { auto box = CreateBox(world); box->SetColor(1, 0, 1); box->SetPosition(1, 1, 1); box->SetMass(1); scene->AddEntity(box); } if (window->KeyHit(KEY_D)) { for (auto box : scene->entities) { if (box->As<Model>()) scene->RemoveEntity(box); break; } } if (window->KeyHit(KEY_S)) { //Save the scene to a file scene->Save(GetPath(PATH_DESKTOP) + "/game.sav"); } //Load the scene when space key is pressed if (window->KeyHit(KEY_SPACE)) { scene = LoadMap(world, GetPath(PATH_DESKTOP) + "/game.sav"); } world->Update(); world->Render(framebuffer); } return 0; } Quote My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Dreikblack Posted August 17 Author Share Posted August 17 10 hours ago, Josh said: I changed the code and it now works as I would expect. By saving nothing? If i change boxes to brushes, they fall through ground brush but now being saved, but lightning is broken after load. Before load: After load #include "UltraEngine.h" using namespace UltraEngine; int main(int argc, const char* argv[]) { auto displays = GetDisplays(); auto window = CreateWindow("Ultra Engine", 0, 0, 1280, 720, displays[0], WINDOW_CENTER | WINDOW_TITLEBAR); auto world = CreateWorld(); auto framebuffer = CreateFramebuffer(window); auto camera = CreateCamera(world); camera->SetClearColor(0.125); camera->SetPosition(0, 15, -8); camera->SetRotation(70, 0, 0); auto light = CreateBoxLight(world); light->SetRange(-10, 10); light->SetArea(30, 30); light->SetRotation(45, 45, 0); light->SetColor(2); //Create the ground auto ground = CreateBoxBrush(world, 30, 1, 30); ground->SetPosition(0, -0.5, 0); ground->SetColor(0, 1, 0); //Create a scene auto scene = CreateMap(); scene->AddEntity(ground); scene->AddEntity(light); //ground = NULL; light = NULL; //Add some boxes for (int n = 0; n < 5; ++n) { auto box = CreateBoxBrush(world, 0.5, 0.5, 0.5); box->SetColor(0, 0, 1); box->SetPosition(Random(-10, 10), Random(1, 5), Random(-10, 10)); //box->SetMass(1); scene->AddEntity(box); } WString filePath = GetPath(PATH_DESKTOP) + "/game.sav"; //Main loop while (window->Closed() == false and window->KeyDown(KEY_ESCAPE) == false) { if (window->KeyHit(KEY_A)) { auto box = CreateBoxBrush(world, 0.5, 0.5, 0.5); box->SetColor(1, 0, 1); // box->SetMass(1); box->SetPosition(Random(-10, 10), Random(1, 2), Random(-10, 10)); scene->AddEntity(box); } if (window->KeyHit(KEY_D)) { for (auto box : scene->entities) { if (box->As<Brush>() && box != ground) { scene->RemoveEntity(box); break; } } } if (window->KeyHit(KEY_S)) { //Save the scene to a file scene->Save(filePath); } if (window->KeyHit(KEY_R)) { //Save the scene to a file if (scene->Reload(filePath)) { Print("Reloaded"); } } //Load the scene when space key is pressed if (window->KeyHit(KEY_SPACE)) { scene = LoadMap(world, filePath); } world->Update(); world->Render(framebuffer); } return 0; } 1 Quote Link to comment Share on other sites More sharing options...
Dreikblack Posted August 17 Author Share Posted August 17 Reload does not restore deleted entities and don't delete that were added after a save. All those entities in same reloaded scene Quote Link to comment Share on other sites More sharing options...
Josh Posted August 19 Share Posted August 19 I think we probably need a flag or save command that saves the state of objects without resaving the brush and other data. It seems like saving a scene is not exactly like saving a scene... 1 Quote My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted August 27 Share Posted August 27 On 8/18/2024 at 5:39 PM, Josh said: I think we probably need a flag or save command that saves the state of objects without resaving the brush and other data. It seems like saving a scene is not exactly like saving a scene... What I meant to say is that saving a game state is not exactly the same thing as saving a scene. 1 Quote My job is to make tools you love, with the features you want, and performance you can't live without. 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.