diff --git a/Core/GDCore/IDE/Project/ArbitraryResourceWorker.cpp b/Core/GDCore/IDE/Project/ArbitraryResourceWorker.cpp index 82b5703caf30..4a20f937d730 100644 --- a/Core/GDCore/IDE/Project/ArbitraryResourceWorker.cpp +++ b/Core/GDCore/IDE/Project/ArbitraryResourceWorker.cpp @@ -63,14 +63,10 @@ void ArbitraryResourceWorker::ExposeBitmapFont(gd::String& bitmapFontName){ }; void ArbitraryResourceWorker::ExposeAudio(gd::String& audioName) { - for (auto resources : GetResources()) { - if (!resources) continue; - - if (resources->HasResource(audioName) && - resources->GetResource(audioName).GetKind() == "audio") { - // Nothing to do, the audio is a reference to a proper resource. - return; - } + if (resourcesManager->HasResource(audioName) && + resourcesManager->GetResource(audioName).GetKind() == "audio") { + // Nothing to do, the audio is a reference to a proper resource. + return; } // For compatibility with older projects (where events were referring to files @@ -80,14 +76,10 @@ void ArbitraryResourceWorker::ExposeAudio(gd::String& audioName) { }; void ArbitraryResourceWorker::ExposeFont(gd::String& fontName) { - for (auto resources : GetResources()) { - if (!resources) continue; - - if (resources->HasResource(fontName) && - resources->GetResource(fontName).GetKind() == "font") { - // Nothing to do, the font is a reference to a proper resource. - return; - } + if (resourcesManager->HasResource(fontName) && + resourcesManager->GetResource(fontName).GetKind() == "font") { + // Nothing to do, the font is a reference to a proper resource. + return; } // For compatibility with older projects (where events were referring to files @@ -96,12 +88,7 @@ void ArbitraryResourceWorker::ExposeFont(gd::String& fontName) { ExposeFile(fontName); }; -void ArbitraryResourceWorker::ExposeResources( - gd::ResourcesManager* resourcesManager) { - if (!resourcesManager) return; - - resourcesManagers.push_back(resourcesManager); - +void ArbitraryResourceWorker::ExposeResources() { std::vector resources = resourcesManager->GetAllResourceNames(); for (std::size_t i = 0; i < resources.size(); i++) { if (resourcesManager->GetResource(resources[i]).UseFile()) @@ -110,9 +97,6 @@ void ArbitraryResourceWorker::ExposeResources( } void ArbitraryResourceWorker::ExposeEmbeddeds(gd::String& resourceName) { - if (resourcesManagers.empty()) return; - gd::ResourcesManager* resourcesManager = resourcesManagers[0]; - gd::Resource& resource = resourcesManager->GetResource(resourceName); if (!resource.GetMetadata().empty()) { @@ -176,6 +160,7 @@ void ArbitraryResourceWorker::ExposeResourceWithType( } if (resourceType == "tilemap") { ExposeTilemap(resourceName); + ExposeEmbeddeds(resourceName); return; } if (resourceType == "tileset") { @@ -184,6 +169,7 @@ void ArbitraryResourceWorker::ExposeResourceWithType( } if (resourceType == "json") { ExposeJson(resourceName); + ExposeEmbeddeds(resourceName); return; } if (resourceType == "video") { @@ -243,10 +229,12 @@ bool ResourceWorkerInEventsWorker::DoVisitInstruction(gd::Instruction& instructi } else if (parameterMetadata.GetType() == "jsonResource") { gd::String updatedParameterValue = parameterValue; worker.ExposeJson(updatedParameterValue); + worker.ExposeEmbeddeds(updatedParameterValue); instruction.SetParameter(parameterIndex, updatedParameterValue); } else if (parameterMetadata.GetType() == "tilemapResource") { gd::String updatedParameterValue = parameterValue; worker.ExposeTilemap(updatedParameterValue); + worker.ExposeEmbeddeds(updatedParameterValue); instruction.SetParameter(parameterIndex, updatedParameterValue); } else if (parameterMetadata.GetType() == "tilesetResource") { gd::String updatedParameterValue = parameterValue; diff --git a/Core/GDCore/IDE/Project/ArbitraryResourceWorker.h b/Core/GDCore/IDE/Project/ArbitraryResourceWorker.h index 0899782fd09e..d4149e33a3db 100644 --- a/Core/GDCore/IDE/Project/ArbitraryResourceWorker.h +++ b/Core/GDCore/IDE/Project/ArbitraryResourceWorker.h @@ -42,8 +42,9 @@ namespace gd { * \ingroup IDE */ class GD_CORE_API ArbitraryResourceWorker { - public: - ArbitraryResourceWorker(){}; +public: + ArbitraryResourceWorker(gd::ResourcesManager &resourcesManager_) + : resourcesManager(&resourcesManager_){}; virtual ~ArbitraryResourceWorker(); /** @@ -52,7 +53,7 @@ class GD_CORE_API ArbitraryResourceWorker { * first to ensure that resources are known so that images, shaders & audio * can make reference to them. */ - void ExposeResources(gd::ResourcesManager *resourcesManager); + void ExposeResources(); /** * \brief Expose a resource from a given type. @@ -122,11 +123,6 @@ class GD_CORE_API ArbitraryResourceWorker { */ virtual void ExposeEmbeddeds(gd::String &resourceName); - protected: - const std::vector &GetResources() { - return resourcesManagers; - }; - private: /** * \brief Expose a resource: resources that have a file are @@ -134,7 +130,7 @@ class GD_CORE_API ArbitraryResourceWorker { */ void ExposeResource(gd::Resource &resource); - std::vector resourcesManagers; + gd::ResourcesManager * resourcesManager; }; /** diff --git a/Core/GDCore/IDE/Project/ObjectsUsingResourceCollector.cpp b/Core/GDCore/IDE/Project/ObjectsUsingResourceCollector.cpp index ce5671f288ea..1c5c67103e31 100644 --- a/Core/GDCore/IDE/Project/ObjectsUsingResourceCollector.cpp +++ b/Core/GDCore/IDE/Project/ObjectsUsingResourceCollector.cpp @@ -6,7 +6,7 @@ namespace gd { void ObjectsUsingResourceCollector::DoVisitObject(gd::Object& object) { - gd::ResourceNameMatcher resourceNameMatcher(resourceName); + gd::ResourceNameMatcher resourceNameMatcher(*resourcesManager, resourceName); object.GetConfiguration().ExposeResources(resourceNameMatcher); if (resourceNameMatcher.AnyResourceMatches()) { diff --git a/Core/GDCore/IDE/Project/ObjectsUsingResourceCollector.h b/Core/GDCore/IDE/Project/ObjectsUsingResourceCollector.h index dd7ee45c93cc..1f80dfc01fa9 100644 --- a/Core/GDCore/IDE/Project/ObjectsUsingResourceCollector.h +++ b/Core/GDCore/IDE/Project/ObjectsUsingResourceCollector.h @@ -4,8 +4,7 @@ * reserved. This project is released under the MIT License. */ -#ifndef ProjectObjectsUsingResourceCollector_H -#define ProjectObjectsUsingResourceCollector_H +#pragma once #include @@ -21,9 +20,10 @@ namespace gd { class GD_CORE_API ObjectsUsingResourceCollector : public ArbitraryObjectsWorker { - public: - ObjectsUsingResourceCollector(const gd::String& resourceName_) - : resourceName(resourceName_){}; +public: + ObjectsUsingResourceCollector(gd::ResourcesManager &resourcesManager_, + const gd::String &resourceName_) + : resourcesManager(&resourcesManager_), resourceName(resourceName_){}; virtual ~ObjectsUsingResourceCollector(); std::vector& GetObjectNames() { return objectNames; } @@ -33,12 +33,16 @@ class GD_CORE_API ObjectsUsingResourceCollector std::vector objectNames; gd::String resourceName; + gd::ResourcesManager *resourcesManager; }; class GD_CORE_API ResourceNameMatcher : public ArbitraryResourceWorker { - public: - ResourceNameMatcher(const gd::String& resourceName_) - : resourceName(resourceName_), matchesResourceName(false){}; +public: + ResourceNameMatcher(gd::ResourcesManager &resourcesManager, + const gd::String &resourceName_) + : resourceName(resourceName_), + matchesResourceName(false), gd::ArbitraryResourceWorker( + resourcesManager){}; virtual ~ResourceNameMatcher(){}; bool AnyResourceMatches() { return matchesResourceName; } @@ -85,5 +89,3 @@ class GD_CORE_API ResourceNameMatcher : public ArbitraryResourceWorker { }; }; // namespace gd - -#endif // ProjectObjectsUsingResourceCollector_H diff --git a/Core/GDCore/IDE/Project/ProjectResourcesAdder.cpp b/Core/GDCore/IDE/Project/ProjectResourcesAdder.cpp index 82292eb01134..1edfeffa9655 100644 --- a/Core/GDCore/IDE/Project/ProjectResourcesAdder.cpp +++ b/Core/GDCore/IDE/Project/ProjectResourcesAdder.cpp @@ -18,8 +18,9 @@ namespace gd { std::vector ProjectResourcesAdder::GetAllUseless( gd::Project& project, const gd::String& resourceType) { std::vector unusedResources; + // Search for resources used in the project - gd::ResourcesInUseHelper resourcesInUse; + gd::ResourcesInUseHelper resourcesInUse(project.GetResourcesManager()); gd::ResourceExposer::ExposeWholeProjectResources(project, resourcesInUse); std::set& usedResources = resourcesInUse.GetAll(resourceType); diff --git a/Core/GDCore/IDE/Project/ProjectResourcesCopier.cpp b/Core/GDCore/IDE/Project/ProjectResourcesCopier.cpp index 6ba197ee5000..dca3d3fed8cf 100644 --- a/Core/GDCore/IDE/Project/ProjectResourcesCopier.cpp +++ b/Core/GDCore/IDE/Project/ProjectResourcesCopier.cpp @@ -25,8 +25,29 @@ bool ProjectResourcesCopier::CopyAllResourcesTo( bool updateOriginalProject, bool preserveAbsoluteFilenames, bool preserveDirectoryStructure) { + if (updateOriginalProject) { + gd::ProjectResourcesCopier::CopyAllResourcesTo( + originalProject, originalProject, fs, destinationDirectory, + preserveAbsoluteFilenames, preserveDirectoryStructure); + } else { + gd::Project clonedProject = originalProject; + gd::ProjectResourcesCopier::CopyAllResourcesTo( + originalProject, clonedProject, fs, destinationDirectory, + preserveAbsoluteFilenames, preserveDirectoryStructure); + } + return true; +} + +bool ProjectResourcesCopier::CopyAllResourcesTo( + gd::Project& originalProject, + gd::Project& clonedProject, + AbstractFileSystem& fs, + gd::String destinationDirectory, + bool preserveAbsoluteFilenames, + bool preserveDirectoryStructure) { + // Check if there are some resources with absolute filenames - gd::ResourcesAbsolutePathChecker absolutePathChecker(fs); + gd::ResourcesAbsolutePathChecker absolutePathChecker(originalProject.GetResourcesManager(), fs); gd::ResourceExposer::ExposeWholeProjectResources(originalProject, absolutePathChecker); auto projectDirectory = fs.DirNameFrom(originalProject.GetProjectFile()); @@ -34,19 +55,14 @@ bool ProjectResourcesCopier::CopyAllResourcesTo( << destinationDirectory << "..." << std::endl; // Get the resources to be copied - gd::ResourcesMergingHelper resourcesMergingHelper(fs); + gd::ResourcesMergingHelper resourcesMergingHelper( + clonedProject.GetResourcesManager(), fs); resourcesMergingHelper.SetBaseDirectory(projectDirectory); resourcesMergingHelper.PreserveDirectoriesStructure( preserveDirectoryStructure); - resourcesMergingHelper.PreserveAbsoluteFilenames( - preserveAbsoluteFilenames); - - if (updateOriginalProject) { - gd::ResourceExposer::ExposeWholeProjectResources(originalProject, resourcesMergingHelper); - } else { - std::shared_ptr project(new gd::Project(originalProject)); - gd::ResourceExposer::ExposeWholeProjectResources(*project, resourcesMergingHelper); - } + resourcesMergingHelper.PreserveAbsoluteFilenames(preserveAbsoluteFilenames); + gd::ResourceExposer::ExposeWholeProjectResources(clonedProject, + resourcesMergingHelper); // Copy resources map& resourcesNewFilename = diff --git a/Core/GDCore/IDE/Project/ProjectResourcesCopier.h b/Core/GDCore/IDE/Project/ProjectResourcesCopier.h index e5b47060b3af..2cd5eacdb27e 100644 --- a/Core/GDCore/IDE/Project/ProjectResourcesCopier.h +++ b/Core/GDCore/IDE/Project/ProjectResourcesCopier.h @@ -47,6 +47,13 @@ class GD_CORE_API ProjectResourcesCopier { bool updateOriginalProject, bool preserveAbsoluteFilenames = true, bool preserveDirectoryStructure = true); +private: + static bool CopyAllResourcesTo(gd::Project& originalProject, + gd::Project& clonedProject, + gd::AbstractFileSystem& fs, + gd::String destinationDirectory, + bool preserveAbsoluteFilenames = true, + bool preserveDirectoryStructure = true); }; } // namespace gd diff --git a/Core/GDCore/IDE/Project/ResourcesAbsolutePathChecker.h b/Core/GDCore/IDE/Project/ResourcesAbsolutePathChecker.h index 1fbe2aca6701..07ee7f8397f9 100644 --- a/Core/GDCore/IDE/Project/ResourcesAbsolutePathChecker.h +++ b/Core/GDCore/IDE/Project/ResourcesAbsolutePathChecker.h @@ -3,8 +3,7 @@ * Copyright 2008-2016 Florian Rival (Florian.Rival@gmail.com). All rights * reserved. This project is released under the MIT License. */ -#ifndef RESOURCESABSOLUTEPATHCHECKER_H -#define RESOURCESABSOLUTEPATHCHECKER_H +#pragma once #include "GDCore/IDE/AbstractFileSystem.h" #include "GDCore/IDE/Project/ArbitraryResourceWorker.h" @@ -22,10 +21,10 @@ namespace gd { */ class GD_CORE_API ResourcesAbsolutePathChecker : public ArbitraryResourceWorker { - public: - ResourcesAbsolutePathChecker(AbstractFileSystem& fileSystem) - : ArbitraryResourceWorker(), - hasAbsoluteFilenames(false), +public: + ResourcesAbsolutePathChecker(gd::ResourcesManager &resourcesManager, + AbstractFileSystem &fileSystem) + : ArbitraryResourceWorker(resourcesManager), hasAbsoluteFilenames(false), fs(fileSystem){}; virtual ~ResourcesAbsolutePathChecker(){}; @@ -47,5 +46,3 @@ class GD_CORE_API ResourcesAbsolutePathChecker }; } // namespace gd - -#endif // RESOURCESABSOLUTEPATHCHECKER_H diff --git a/Core/GDCore/IDE/Project/ResourcesInUseHelper.h b/Core/GDCore/IDE/Project/ResourcesInUseHelper.h index f1cf4a63752a..b995fee858c3 100644 --- a/Core/GDCore/IDE/Project/ResourcesInUseHelper.h +++ b/Core/GDCore/IDE/Project/ResourcesInUseHelper.h @@ -33,8 +33,9 @@ std::set & usedImages = resourcesInUse.GetAllImages(); * \ingroup IDE */ class ResourcesInUseHelper : public gd::ArbitraryResourceWorker { - public: - ResourcesInUseHelper() : gd::ArbitraryResourceWorker(){}; +public: + ResourcesInUseHelper(gd::ResourcesManager &resourcesManager) + : gd::ArbitraryResourceWorker(resourcesManager){}; virtual ~ResourcesInUseHelper(){}; std::set& GetAllImages() { return GetAll("image"); }; diff --git a/Core/GDCore/IDE/Project/ResourcesMergingHelper.h b/Core/GDCore/IDE/Project/ResourcesMergingHelper.h index e45c27fac757..ef8d5bc1a759 100644 --- a/Core/GDCore/IDE/Project/ResourcesMergingHelper.h +++ b/Core/GDCore/IDE/Project/ResourcesMergingHelper.h @@ -28,11 +28,11 @@ namespace gd { * \ingroup IDE */ class GD_CORE_API ResourcesMergingHelper : public ArbitraryResourceWorker { - public: - ResourcesMergingHelper(gd::AbstractFileSystem& fileSystem) - : ArbitraryResourceWorker(), - preserveDirectoriesStructure(false), - preserveAbsoluteFilenames(false), +public: + ResourcesMergingHelper(gd::ResourcesManager &resourcesManager, + gd::AbstractFileSystem &fileSystem) + : ArbitraryResourceWorker(resourcesManager), + preserveDirectoriesStructure(false), preserveAbsoluteFilenames(false), fs(fileSystem){}; virtual ~ResourcesMergingHelper(){}; diff --git a/Core/GDCore/IDE/Project/ResourcesRenamer.h b/Core/GDCore/IDE/Project/ResourcesRenamer.h index 648223ab35c8..e8de444a4f10 100644 --- a/Core/GDCore/IDE/Project/ResourcesRenamer.h +++ b/Core/GDCore/IDE/Project/ResourcesRenamer.h @@ -22,13 +22,16 @@ namespace gd { */ class ResourcesRenamer : public gd::ArbitraryResourceWorker { public: - /** - * @brief Constructor taking the map from old name to new name. - * @param oldToNewNames_ A map associating to a resource name the new name to - * use. - */ - ResourcesRenamer(const std::map& oldToNewNames_) - : gd::ArbitraryResourceWorker(), oldToNewNames(oldToNewNames_){}; + /** + * @brief Constructor taking the map from old name to new name. + * @param oldToNewNames_ A map associating to a resource name the new name to + * use. + */ + ResourcesRenamer(gd::ResourcesManager &resourcesManager, + const std::map &oldToNewNames_) + : gd::ArbitraryResourceWorker(resourcesManager), + oldToNewNames(oldToNewNames_){}; + virtual ~ResourcesRenamer(){}; virtual void ExposeFile(gd::String& resourceFileName) override{ diff --git a/Core/GDCore/IDE/Project/SceneResourcesFinder.cpp b/Core/GDCore/IDE/Project/SceneResourcesFinder.cpp index b938b2a32f09..c003ba2a1037 100644 --- a/Core/GDCore/IDE/Project/SceneResourcesFinder.cpp +++ b/Core/GDCore/IDE/Project/SceneResourcesFinder.cpp @@ -13,14 +13,16 @@ namespace gd { std::set SceneResourcesFinder::FindProjectResources(gd::Project &project) { - gd::SceneResourcesFinder resourceWorker; + gd::SceneResourcesFinder resourceWorker(project.GetResourcesManager()); + gd::ResourceExposer::ExposeProjectResources(project, resourceWorker); return resourceWorker.resourceNames; } std::set SceneResourcesFinder::FindSceneResources(gd::Project &project, gd::Layout &layout) { - gd::SceneResourcesFinder resourceWorker; + gd::SceneResourcesFinder resourceWorker(project.GetResourcesManager()); + gd::ResourceExposer::ExposeLayoutResources(project, layout, resourceWorker); return resourceWorker.resourceNames; } diff --git a/Core/GDCore/IDE/Project/SceneResourcesFinder.h b/Core/GDCore/IDE/Project/SceneResourcesFinder.h index ae688818fb38..c8ec47fad39c 100644 --- a/Core/GDCore/IDE/Project/SceneResourcesFinder.h +++ b/Core/GDCore/IDE/Project/SceneResourcesFinder.h @@ -44,7 +44,8 @@ class SceneResourcesFinder : private gd::ArbitraryResourceWorker { virtual ~SceneResourcesFinder(){}; private: - SceneResourcesFinder() : gd::ArbitraryResourceWorker(){}; + SceneResourcesFinder(gd::ResourcesManager &resourcesManager) + : gd::ArbitraryResourceWorker(resourcesManager){}; void AddUsedResource(gd::String &resourceName); diff --git a/Core/GDCore/IDE/ResourceExposer.cpp b/Core/GDCore/IDE/ResourceExposer.cpp index 7712aeec3ab6..0f0fef6f6c08 100644 --- a/Core/GDCore/IDE/ResourceExposer.cpp +++ b/Core/GDCore/IDE/ResourceExposer.cpp @@ -33,10 +33,8 @@ void ResourceExposer::ExposeWholeProjectResources(gd::Project& project, gd::Arbi // traverse the whole project (this time for events) and ExposeProjectEffects // (this time for effects). - gd::ResourcesManager* resourcesManager = &(project.GetResourcesManager()); - // Expose any project resources as files. - worker.ExposeResources(resourcesManager); + worker.ExposeResources(); project.GetPlatformSpecificAssets().ExposeResources(worker); diff --git a/Core/tests/ArbitraryResourceWorker.cpp b/Core/tests/ArbitraryResourceWorker.cpp index 45bab284ea52..c99785032ef5 100644 --- a/Core/tests/ArbitraryResourceWorker.cpp +++ b/Core/tests/ArbitraryResourceWorker.cpp @@ -29,7 +29,9 @@ #include "GDCore/Project/ExternalEvents.h" class ArbitraryResourceWorkerTest : public gd::ArbitraryResourceWorker { - public: +public: + ArbitraryResourceWorkerTest(gd::ResourcesManager &resourcesManager) + : ArbitraryResourceWorker(resourcesManager){}; virtual void ExposeFile(gd::String& file) { files.push_back(file); }; virtual void ExposeImage(gd::String& imageName) { images.push_back(imageName); @@ -59,7 +61,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res3", "path/to/file3.png", "image"); project.GetResourcesManager().AddResource( "res4", "path/to/file4.png", "audio"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); gd::ResourceExposer::ExposeWholeProjectResources(project, worker); REQUIRE(worker.files.size() == 4); @@ -81,7 +83,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res3", "path/to/file3.png", "image"); project.GetResourcesManager().AddResource( "res4", "path/to/file4.png", "audio"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); gd::SpriteObject spriteConfiguration; gd::Animation anim; @@ -126,7 +128,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res3", "path/to/file3.png", "image"); project.GetResourcesManager().AddResource( "res4", "path/to/file4.png", "audio"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& layout = project.InsertNewLayout("Scene", 0); @@ -161,7 +163,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res3", "path/to/file3.fnt", "bitmapFont"); project.GetResourcesManager().AddResource( "res4", "path/to/file4.png", "audio"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& layout = project.InsertNewLayout("Scene", 0); @@ -196,7 +198,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res3", "path/to/file3.fnt", "bitmapFont"); project.GetResourcesManager().AddResource( "res4", "path/to/file4.png", "audio"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& externalEvents = project.InsertNewExternalEvents("MyExternalEvents", 0); @@ -232,7 +234,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res2", "path/to/file2.png", "image"); project.GetResourcesManager().AddResource( "res3", "path/to/file3.png", "image"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& extension = project.InsertNewEventsFunctionsExtension("MyEventExtension", 0); auto& function = extension.InsertNewEventsFunction("MyFreeFunction", 0); @@ -269,7 +271,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res2", "path/to/file2.png", "image"); project.GetResourcesManager().AddResource( "res3", "path/to/file3.png", "image"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& extension = project.InsertNewEventsFunctionsExtension("MyEventExtension", 0); auto& behavior = extension.GetEventsBasedBehaviors().InsertNew("MyBehavior", 0); @@ -307,7 +309,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res2", "path/to/file2.png", "image"); project.GetResourcesManager().AddResource( "res3", "path/to/file3.png", "image"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& extension = project.InsertNewEventsFunctionsExtension("MyEventExtension", 0); auto& object = extension.GetEventsBasedObjects().InsertNew("MyObject", 0); @@ -345,7 +347,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res2", "path/to/file2.png", "image"); project.GetResourcesManager().AddResource( "res3", "path/to/file3.png", "image"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& layout = project.InsertNewLayout("Scene", 0); layout.InsertNewLayer("MyLayer", 0); @@ -371,7 +373,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res2", "path/to/file2.png", "image"); project.GetResourcesManager().AddResource( "res3", "path/to/file3.png", "image"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& layout = project.InsertNewLayout("Scene", 0); layout.InsertNewLayer("MyLayer", 0); @@ -402,7 +404,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res3", "path/to/file3.png", "image"); project.GetResourcesManager().AddResource( "res4", "path/to/file4.png", "audio"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& layout = project.InsertNewLayout("Scene", 0); @@ -425,7 +427,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res3", "path/to/file3.png", "image"); project.GetResourcesManager().AddResource( "res4", "path/to/file4.png", "audio"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& layout = project.InsertNewLayout("Scene", 0); @@ -459,7 +461,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res3", "path/to/file3.fnt", "bitmapFont"); project.GetResourcesManager().AddResource( "res4", "path/to/file4.png", "audio"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& layout = project.InsertNewLayout("Scene", 0); @@ -494,7 +496,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res3", "path/to/file3.fnt", "bitmapFont"); project.GetResourcesManager().AddResource( "res4", "path/to/file4.png", "audio"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& layout = project.InsertNewLayout("MyScene", 0); auto& externalEvents = project.InsertNewExternalEvents("MyExternalEvents", 0); @@ -530,7 +532,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res3", "path/to/file3.fnt", "bitmapFont"); project.GetResourcesManager().AddResource( "res4", "path/to/file4.png", "audio"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& layout = project.InsertNewLayout("MyScene", 0); auto& externalEvents = project.InsertNewExternalEvents("MyExternalEvents", 0); @@ -572,7 +574,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res3", "path/to/file3.fnt", "bitmapFont"); project.GetResourcesManager().AddResource( "res4", "path/to/file4.png", "audio"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& layout = project.InsertNewLayout("Scene", 0); auto& externalEventsA = project.InsertNewExternalEvents("MyExternalEventsA", 0); @@ -619,7 +621,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res3", "path/to/file3.fnt", "bitmapFont"); project.GetResourcesManager().AddResource( "res4", "path/to/file4.png", "audio"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& layout = project.InsertNewLayout("MyScene", 0); auto& otherLayout = project.InsertNewLayout("MyOtherScene", 0); @@ -654,7 +656,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res3", "path/to/file3.fnt", "bitmapFont"); project.GetResourcesManager().AddResource( "res4", "path/to/file4.png", "audio"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& layout = project.InsertNewLayout("MyScene", 0); auto& otherLayout = project.InsertNewLayout("MyOtherScene", 0); @@ -696,7 +698,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res3", "path/to/file3.fnt", "bitmapFont"); project.GetResourcesManager().AddResource( "res4", "path/to/file4.png", "audio"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& layout = project.InsertNewLayout("MyScene", 0); @@ -740,7 +742,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res2", "path/to/file2.png", "image"); project.GetResourcesManager().AddResource( "res3", "path/to/file3.png", "image"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& extension = project.InsertNewEventsFunctionsExtension("MyEventExtension", 0); auto& function = extension.InsertNewEventsFunction("MyFreeFunction", 0); @@ -780,7 +782,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res2", "path/to/file2.png", "image"); project.GetResourcesManager().AddResource( "res3", "path/to/file3.png", "image"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& extension = project.InsertNewEventsFunctionsExtension("MyEventExtension", 0); auto& behavior = extension.GetEventsBasedBehaviors().InsertNew("MyBehavior", 0); @@ -821,7 +823,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res2", "path/to/file2.png", "image"); project.GetResourcesManager().AddResource( "res3", "path/to/file3.png", "image"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& extension = project.InsertNewEventsFunctionsExtension("MyEventExtension", 0); auto& object = extension.GetEventsBasedObjects().InsertNew("MyObject", 0); @@ -862,7 +864,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res2", "path/to/file2.png", "image"); project.GetResourcesManager().AddResource( "res3", "path/to/file3.png", "image"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& layout = project.InsertNewLayout("Scene", 0); layout.InsertNewLayer("MyLayer", 0); @@ -887,7 +889,7 @@ TEST_CASE("ArbitraryResourceWorker", "[common][resources]") { "res2", "path/to/file2.png", "image"); project.GetResourcesManager().AddResource( "res3", "path/to/file3.png", "image"); - ArbitraryResourceWorkerTest worker; + ArbitraryResourceWorkerTest worker(project.GetResourcesManager()); auto& layout = project.InsertNewLayout("Scene", 0); layout.InsertNewLayer("MyLayer", 0); diff --git a/Core/tests/ResourcesMergingHelper.cpp b/Core/tests/ResourcesMergingHelper.cpp index 7ea847586ca2..3e59ae5013b8 100644 --- a/Core/tests/ResourcesMergingHelper.cpp +++ b/Core/tests/ResourcesMergingHelper.cpp @@ -65,11 +65,11 @@ class MockFileSystem : public gd::AbstractFileSystem { TEST_CASE("ResourcesMergingHelper", "[common]") { SECTION("Basics") { + gd::Project project; MockFileSystem fs; - gd::ResourcesMergingHelper resourcesMerger(fs); + gd::ResourcesMergingHelper resourcesMerger(project.GetResourcesManager(), fs); resourcesMerger.SetBaseDirectory("/game/base/folder/"); - gd::Project project; project.GetResourcesManager().AddResource("Image1", "/image1.png", "image"); project.GetResourcesManager().AddResource("Image2", "image2.png", "image"); project.GetResourcesManager().AddResource("Audio1", "audio1.png", "audio"); @@ -90,12 +90,12 @@ TEST_CASE("ResourcesMergingHelper", "[common]") { "FileNameFrom(MakeAbsolute(subfolder/image3.png))"); } SECTION("Can preserve directories structure") { + gd::Project project; MockFileSystem fs; - gd::ResourcesMergingHelper resourcesMerger(fs); + gd::ResourcesMergingHelper resourcesMerger(project.GetResourcesManager(), fs); resourcesMerger.SetBaseDirectory("/game/base/folder/"); resourcesMerger.PreserveDirectoriesStructure(true); - gd::Project project; project.GetResourcesManager().AddResource("Image1", "/image1.png", "image"); project.GetResourcesManager().AddResource("Image2", "image2.png", "image"); project.GetResourcesManager().AddResource("Audio1", "audio1.png", "audio"); diff --git a/Core/tests/ResourcesRenamer.cpp b/Core/tests/ResourcesRenamer.cpp index 77175aacb7e4..10484d66b5cd 100644 --- a/Core/tests/ResourcesRenamer.cpp +++ b/Core/tests/ResourcesRenamer.cpp @@ -15,11 +15,10 @@ TEST_CASE("ResourcesRenamer", "[common]") { SECTION("It renames resources that are exposed") { + gd::Project project; std::map renamings = { {"Resource1", "RenamedResource1"}}; - gd::ResourcesRenamer resourcesRenamer(renamings); - - gd::Project project; + gd::ResourcesRenamer resourcesRenamer(project.GetResourcesManager(), renamings); // Add "classic", plain resources. gd::ImageResource resource1; @@ -45,11 +44,10 @@ TEST_CASE("ResourcesRenamer", "[common]") { } SECTION("It renames embedded resources") { + gd::Project project; std::map renamings = { {"Resource1", "RenamedResource1"}}; - gd::ResourcesRenamer resourcesRenamer(renamings); - - gd::Project project; + gd::ResourcesRenamer resourcesRenamer(project.GetResourcesManager(), renamings); // Add "classic", plain resources. gd::ImageResource resource1; diff --git a/GDevelop.js/Bindings/Bindings.idl b/GDevelop.js/Bindings/Bindings.idl index 8a0c4ab39aef..853d4e3a9c18 100644 --- a/GDevelop.js/Bindings/Bindings.idl +++ b/GDevelop.js/Bindings/Bindings.idl @@ -2988,7 +2988,7 @@ interface ArbitraryResourceWorker { }; [JSImplementation=ArbitraryResourceWorker] interface ArbitraryResourceWorkerJS { - void ArbitraryResourceWorkerJS(); + void ArbitraryResourceWorkerJS([Ref] ResourcesManager resourcesManager); void ExposeImage([Ref] DOMString image); void ExposeShader([Ref] DOMString shader); @@ -2996,7 +2996,7 @@ interface ArbitraryResourceWorkerJS { }; interface ResourcesMergingHelper { - void ResourcesMergingHelper([Ref] AbstractFileSystem fs); + void ResourcesMergingHelper([Ref] ResourcesManager resourcesManager, [Ref] AbstractFileSystem fs); void SetBaseDirectory([Const] DOMString basePath); [Ref] MapStringString GetAllResourcesOldAndNewFilename(); @@ -3004,7 +3004,7 @@ interface ResourcesMergingHelper { ResourcesMergingHelper implements ArbitraryResourceWorker; interface ResourcesRenamer { - void ResourcesRenamer([Const, Ref] MapStringString oldToNewNames); + void ResourcesRenamer([Ref] ResourcesManager resourcesManager, [Const, Ref] MapStringString oldToNewNames); }; ResourcesRenamer implements ArbitraryResourceWorker; @@ -3018,7 +3018,7 @@ interface ProjectResourcesCopier { }; interface ObjectsUsingResourceCollector { - void ObjectsUsingResourceCollector([Const] DOMString resourceName); + void ObjectsUsingResourceCollector([Ref] ResourcesManager resourcesManager, [Const] DOMString resourceName); [Const, Ref] VectorString GetObjectNames(); //Inherited from ArbitraryObjectsWorker @@ -3026,7 +3026,7 @@ interface ObjectsUsingResourceCollector { }; interface ResourcesInUseHelper { - void ResourcesInUseHelper(); + void ResourcesInUseHelper([Ref] ResourcesManager resourcesManager); [Ref] SetString GetAllImages(); [Ref] SetString GetAllAudios(); diff --git a/GDevelop.js/Bindings/Wrapper.cpp b/GDevelop.js/Bindings/Wrapper.cpp index 57007cceab20..2ed2faed1c5e 100644 --- a/GDevelop.js/Bindings/Wrapper.cpp +++ b/GDevelop.js/Bindings/Wrapper.cpp @@ -120,6 +120,9 @@ */ class ArbitraryResourceWorkerJS : public ArbitraryResourceWorker { public: + ArbitraryResourceWorkerJS(gd::ResourcesManager &resourcesManager) + : ArbitraryResourceWorker(resourcesManager){}; + void ExposeImage(gd::String &arg0) { arg0 = (const char *)EM_ASM_INT( { diff --git a/GDevelop.js/__tests__/Core.js b/GDevelop.js/__tests__/Core.js index 7823012eb10a..d5f280d765fc 100644 --- a/GDevelop.js/__tests__/Core.js +++ b/GDevelop.js/__tests__/Core.js @@ -1594,7 +1594,7 @@ describe('libGD.js', function () { animation.getDirection(0).addSprite(sprite1); spriteConfiguration.addAnimation(animation); - let worker = extend(new gd.ArbitraryResourceWorkerJS(), { + let worker = extend(new gd.ArbitraryResourceWorkerJS(project.getResourcesManager()), { exposeImage: function (image) { expect(image).toBe('Used'); done(); @@ -1703,7 +1703,7 @@ describe('libGD.js', function () { spriteObject2.addAnimation(animation2); { - const objectsCollector = new gd.ObjectsUsingResourceCollector('Image1'); + const objectsCollector = new gd.ObjectsUsingResourceCollector(project.getResourcesManager(), 'Image1'); gd.ProjectBrowserHelper.exposeProjectObjects(project, objectsCollector); const objectNames = objectsCollector.getObjectNames().toJSArray(); objectsCollector.delete(); @@ -1712,7 +1712,7 @@ describe('libGD.js', function () { expect(objectNames).toContain('MyObject2'); } { - const objectsCollector = new gd.ObjectsUsingResourceCollector('Image2'); + const objectsCollector = new gd.ObjectsUsingResourceCollector(project.getResourcesManager(), 'Image2'); gd.ProjectBrowserHelper.exposeProjectObjects(project, objectsCollector); const objectNames = objectsCollector.getObjectNames().toJSArray(); objectsCollector.delete(); @@ -1720,7 +1720,7 @@ describe('libGD.js', function () { expect(objectNames).toContain('MyObject'); } { - const objectsCollector = new gd.ObjectsUsingResourceCollector('Image3'); + const objectsCollector = new gd.ObjectsUsingResourceCollector(project.getResourcesManager(), 'Image3'); gd.ProjectBrowserHelper.exposeProjectObjects(project, objectsCollector); const objectNames = objectsCollector.getObjectNames().toJSArray(); objectsCollector.delete(); @@ -3381,7 +3381,7 @@ describe('libGD.js', function () { const fs = makeFakeAbstractFileSystem(gd, {}); // Check that ResourcesMergingHelper can update the filenames - const resourcesMergingHelper = new gd.ResourcesMergingHelper(fs); + const resourcesMergingHelper = new gd.ResourcesMergingHelper(project.getResourcesManager(), fs); resourcesMergingHelper.setBaseDirectory('/my/project/'); gd.ResourceExposer.exposeWholeProjectResources( project, diff --git a/GDevelop.js/types/gdarbitraryresourceworkerjs.js b/GDevelop.js/types/gdarbitraryresourceworkerjs.js index 3cfd7528bf0a..a71237fe24e0 100644 --- a/GDevelop.js/types/gdarbitraryresourceworkerjs.js +++ b/GDevelop.js/types/gdarbitraryresourceworkerjs.js @@ -1,6 +1,6 @@ // Automatically generated by GDevelop.js/scripts/generate-types.js declare class gdArbitraryResourceWorkerJS { - constructor(): void; + constructor(resourcesManager: gdResourcesManager): void; exposeImage(image: string): void; exposeShader(shader: string): void; exposeFile(file: string): void; diff --git a/GDevelop.js/types/gdobjectsusingresourcecollector.js b/GDevelop.js/types/gdobjectsusingresourcecollector.js index 4c9d38b76688..cdce7c2cad5b 100644 --- a/GDevelop.js/types/gdobjectsusingresourcecollector.js +++ b/GDevelop.js/types/gdobjectsusingresourcecollector.js @@ -1,6 +1,6 @@ // Automatically generated by GDevelop.js/scripts/generate-types.js declare class gdObjectsUsingResourceCollector { - constructor(resourceName: string): void; + constructor(resourcesManager: gdResourcesManager, resourceName: string): void; getObjectNames(): gdVectorString; launch(container: gdObjectsContainer): void; delete(): void; diff --git a/GDevelop.js/types/gdresourcesinusehelper.js b/GDevelop.js/types/gdresourcesinusehelper.js index 32734dcb9089..447b74d62b0c 100644 --- a/GDevelop.js/types/gdresourcesinusehelper.js +++ b/GDevelop.js/types/gdresourcesinusehelper.js @@ -1,6 +1,6 @@ // Automatically generated by GDevelop.js/scripts/generate-types.js declare class gdResourcesInUseHelper extends gdArbitraryResourceWorker { - constructor(): void; + constructor(resourcesManager: gdResourcesManager): void; getAllImages(): gdSetString; getAllAudios(): gdSetString; getAllFonts(): gdSetString; diff --git a/GDevelop.js/types/gdresourcesmerginghelper.js b/GDevelop.js/types/gdresourcesmerginghelper.js index f171cdd5ddf4..6ac62b2f91f1 100644 --- a/GDevelop.js/types/gdresourcesmerginghelper.js +++ b/GDevelop.js/types/gdresourcesmerginghelper.js @@ -1,6 +1,6 @@ // Automatically generated by GDevelop.js/scripts/generate-types.js declare class gdResourcesMergingHelper extends gdArbitraryResourceWorker { - constructor(fs: gdAbstractFileSystem): void; + constructor(resourcesManager: gdResourcesManager, fs: gdAbstractFileSystem): void; setBaseDirectory(basePath: string): void; getAllResourcesOldAndNewFilename(): gdMapStringString; delete(): void; diff --git a/GDevelop.js/types/gdresourcesrenamer.js b/GDevelop.js/types/gdresourcesrenamer.js index 6eb42ce89821..101b7dd406fa 100644 --- a/GDevelop.js/types/gdresourcesrenamer.js +++ b/GDevelop.js/types/gdresourcesrenamer.js @@ -1,6 +1,6 @@ // Automatically generated by GDevelop.js/scripts/generate-types.js declare class gdResourcesRenamer extends gdArbitraryResourceWorker { - constructor(oldToNewNames: gdMapStringString): void; + constructor(resourcesManager: gdResourcesManager, oldToNewNames: gdMapStringString): void; delete(): void; ptr: number; }; \ No newline at end of file diff --git a/newIDE/app/src/AssetStore/InstallAsset.js b/newIDE/app/src/AssetStore/InstallAsset.js index 7947cbb0fe5e..7e5c80ba76e8 100644 --- a/newIDE/app/src/AssetStore/InstallAsset.js +++ b/newIDE/app/src/AssetStore/InstallAsset.js @@ -205,7 +205,10 @@ export const addAssetToProject = async ({ // Resources may have been renamed to be added to the project. // In this case, rename them in the object. const renamedResourcesMap = toNewGdMapStringString(resourceNewNames); - const resourcesRenamer = new gd.ResourcesRenamer(renamedResourcesMap); + const resourcesRenamer = new gd.ResourcesRenamer( + project.getResourcesManager(), + renamedResourcesMap + ); renamedResourcesMap.delete(); object.getConfiguration().exposeResources(resourcesRenamer); resourcesRenamer.delete(); diff --git a/newIDE/app/src/AssetStore/InstallAsset.spec.js b/newIDE/app/src/AssetStore/InstallAsset.spec.js index 8d0f8f817e07..7a1ae2cb8982 100644 --- a/newIDE/app/src/AssetStore/InstallAsset.spec.js +++ b/newIDE/app/src/AssetStore/InstallAsset.spec.js @@ -228,7 +228,9 @@ describe('InstallAsset', () => { expect(layout.hasObjectNamed('PlayerSpaceship')).toBe(true); const object = layout.getObject('PlayerSpaceship'); - const resourcesInUse = new gd.ResourcesInUseHelper(); + const resourcesInUse = new gd.ResourcesInUseHelper( + project.getResourcesManager() + ); object.getConfiguration().exposeResources(resourcesInUse); const objectResourceNames = resourcesInUse .getAllImages() diff --git a/newIDE/app/src/ResourcesList/ResourceUtils.js b/newIDE/app/src/ResourcesList/ResourceUtils.js index 4593b0b1f699..8341cde9c331 100644 --- a/newIDE/app/src/ResourcesList/ResourceUtils.js +++ b/newIDE/app/src/ResourcesList/ResourceUtils.js @@ -168,7 +168,10 @@ export const renameResourcesInProject = ( resourceNewNames: { [string]: string } ) => { const renamedResourcesMap = toNewGdMapStringString(resourceNewNames); - const resourcesRenamer = new gd.ResourcesRenamer(renamedResourcesMap); + const resourcesRenamer = new gd.ResourcesRenamer( + project.getResourcesManager(), + renamedResourcesMap + ); renamedResourcesMap.delete(); gd.ResourceExposer.exposeWholeProjectResources(project, resourcesRenamer); resourcesRenamer.delete(); diff --git a/newIDE/app/src/SceneEditor/index.js b/newIDE/app/src/SceneEditor/index.js index b5217f404c80..7f3867510d4c 100644 --- a/newIDE/app/src/SceneEditor/index.js +++ b/newIDE/app/src/SceneEditor/index.js @@ -244,6 +244,7 @@ export default class SceneEditor extends React.Component { editorDisplay.forceUpdateObjectsList(); const objectsCollector = new gd.ObjectsUsingResourceCollector( + project.getResourcesManager(), resourceName ); // $FlowIgnore - Flow does not know ObjectsUsingResourceCollector inherits from ArbitraryObjectsWorker @@ -1602,7 +1603,9 @@ export default class SceneEditor extends React.Component { reloadResourcesFor = (object: gdObject) => { const { project } = this.props; - const resourcesInUse = new gd.ResourcesInUseHelper(); + const resourcesInUse = new gd.ResourcesInUseHelper( + project.getResourcesManager() + ); object.getConfiguration().exposeResources(resourcesInUse); const objectResourceNames = resourcesInUse .getAllImages()