Files
GDevelop/Core/GDCore/IDE/Project/SceneResourcesFinder.cpp
D8H 8e50ddefe4 Allow to configure object resources to be loaded independently from the scene (#8514)
- This is an advanced, experimental feature which is subject to changes. It's in most cases not useful, unless you have a large game or low end devices for which controlling memory usage is important. It's mostly useful to delay loading of large custom objects.
- Objects can be configured so that its resources are not loaded when the scene is loaded. Instead, you can use an action to manually load the resources used by it. When the loading is done (this can be checked using a condition), the object can then be created.
  Be careful: if an object assets are not loaded, it will be broken when displayed on screen.
2026-05-04 10:45:51 +02:00

68 lines
2.5 KiB
C++

/*
* GDevelop JS Platform
* Copyright 2008-2023 Florian Rival (Florian.Rival@gmail.com). All rights
* reserved. This project is released under the MIT License.
*/
#include "SceneResourcesFinder.h"
#include "GDCore/IDE/ResourceExposer.h"
#include "GDCore/Project/EventsBasedObjectVariant.h"
#include "GDCore/Project/Layout.h"
#include "GDCore/Project/Project.h"
#include "GDCore/Project/Object.h"
#include "GDCore/Serialization/SerializerElement.h"
namespace gd {
std::set<gd::String> SceneResourcesFinder::FindProjectResources(gd::Project &project) {
gd::SceneResourcesFinder resourceWorker(project.GetResourcesManager());
gd::ResourceExposer::ExposeProjectResources(project, resourceWorker);
return resourceWorker.resourceNames;
}
std::set<gd::String>
SceneResourcesFinder::FindSceneResources(gd::Project &project,
gd::Layout &layout,
bool ignoreObjectResourcePreloading) {
gd::SceneResourcesFinder resourceWorker(project.GetResourcesManager());
std::function<bool(const gd::Object &)> shouldCheckObject =
[ignoreObjectResourcePreloading](const gd::Object &object) {
return ignoreObjectResourcePreloading ||
object.GetResourcesPreloading() != "manually";
};
gd::ResourceExposer::ExposeLayoutResources(project, layout, resourceWorker,
shouldCheckObject);
return resourceWorker.resourceNames;
}
std::set<gd::String>
SceneResourcesFinder::FindObjectResources(gd::Project &project,
gd::Object &object) {
gd::SceneResourcesFinder resourceWorker(project.GetResourcesManager());
auto objectWorker = gd::GetResourceWorkerOnObjects(project, resourceWorker);
objectWorker.Launch(object);
return resourceWorker.resourceNames;
}
std::set<gd::String> SceneResourcesFinder::FindEventsBasedObjectVariantResources(gd::Project &project,
gd::EventsBasedObjectVariant &variant) {
gd::SceneResourcesFinder resourceWorker(project.GetResourcesManager());
gd::ResourceExposer::ExposeEventsBasedObjectVariantResources(project, variant, resourceWorker);
return resourceWorker.resourceNames;
}
void SceneResourcesFinder::AddUsedResource(gd::String &resourceName) {
if (resourceName.empty() ||
// It avoids to list resource parameters and properties.
!resourcesManager->HasResource(resourceName)) {
return;
}
resourceNames.insert(resourceName);
}
} // namespace gd