@@ -35,6 +35,11 @@ void ArbitraryResourceWorker::ExposeJson(gd::String& jsonName){
3535 // do.
3636};
3737
38+ void ArbitraryResourceWorker::ExposeTilemap (gd::String& tilemapName){
39+ // Nothing to do by default - each child class can define here the action to
40+ // do.
41+ };
42+
3843void ArbitraryResourceWorker::ExposeVideo (gd::String& videoName){
3944 // Nothing to do by default - each child class can define here the action to
4045 // do.
@@ -92,6 +97,65 @@ void ArbitraryResourceWorker::ExposeResources(
9297 }
9398}
9499
100+ void ArbitraryResourceWorker::ExposeEmbeddeds (gd::String& resourceName) {
101+ if (resourcesManagers.empty ()) return ;
102+ gd::ResourcesManager* resourcesManager = resourcesManagers[0 ];
103+
104+ gd::Resource& resource = resourcesManager->GetResource (resourceName);
105+
106+ if (!resource.GetMetadata ().empty ()) {
107+ gd::SerializerElement serializerElement =
108+ gd::Serializer::FromJSON (resource.GetMetadata ());
109+
110+ if (serializerElement.HasChild (" embeddedResourcesMapping" )) {
111+ bool anyEmbeddedResourceNameWasRenamed = false ;
112+ gd::SerializerElement& embeddedResourcesMappingElement =
113+ serializerElement.GetChild (" embeddedResourcesMapping" );
114+
115+ for (const auto & child :
116+ embeddedResourcesMappingElement.GetAllChildren ()) {
117+ const gd::String& targetResourceName =
118+ child.second ->GetValue ().GetString ();
119+
120+ if (resourcesManager->HasResource (targetResourceName)) {
121+ std::cout << targetResourceName << std::endl;
122+ gd::Resource& targetResource =
123+ resourcesManager->GetResource (targetResourceName);
124+ const gd::String& targetResourceKind = targetResource.GetKind ();
125+
126+ gd::String potentiallyUpdatedTargetResourceName = targetResourceName;
127+
128+ if (targetResourceKind == " audio" ) {
129+ ExposeAudio (potentiallyUpdatedTargetResourceName);
130+ } else if (targetResourceKind == " bitmapFont" ) {
131+ ExposeBitmapFont (potentiallyUpdatedTargetResourceName);
132+ } else if (targetResourceKind == " font" ) {
133+ ExposeFont (potentiallyUpdatedTargetResourceName);
134+ } else if (targetResourceKind == " image" ) {
135+ ExposeImage (potentiallyUpdatedTargetResourceName);
136+ } else if (targetResourceKind == " json" ) {
137+ ExposeJson (potentiallyUpdatedTargetResourceName);
138+ } else if (targetResourceKind == " tilemap" ) {
139+ ExposeTilemap (potentiallyUpdatedTargetResourceName);
140+ } else if (targetResourceKind == " video" ) {
141+ ExposeVideo (potentiallyUpdatedTargetResourceName);
142+ }
143+
144+ if (potentiallyUpdatedTargetResourceName != targetResourceName) {
145+ // The resource name was renamed. Also update the mapping.
146+ child.second ->SetStringValue (potentiallyUpdatedTargetResourceName);
147+ anyEmbeddedResourceNameWasRenamed = true ;
148+ }
149+ }
150+ }
151+
152+ if (anyEmbeddedResourceNameWasRenamed) {
153+ resource.SetMetadata (gd::Serializer::ToJSON (serializerElement));
154+ }
155+ }
156+ }
157+ }
158+
95159void ArbitraryResourceWorker::ExposeResource (gd::Resource& resource) {
96160 if (!resource.UseFile ()) return ;
97161
@@ -154,6 +218,10 @@ class ResourceWorkerInEventsWorker : public ArbitraryEventsWorker {
154218 gd::String updatedParameterValue = parameterValue;
155219 worker.ExposeJson (updatedParameterValue);
156220 instruction.SetParameter (parameterIndex, updatedParameterValue);
221+ } else if (parameterMetadata.GetType () == " tilemapResource" ) {
222+ gd::String updatedParameterValue = parameterValue;
223+ worker.ExposeTilemap (updatedParameterValue);
224+ instruction.SetParameter (parameterIndex, updatedParameterValue);
157225 }
158226 });
159227
0 commit comments