Browse Source

ADDED: Example resources for automatic removal

WARNING: Some of those resources could be shared by other examples in the category so for now we leave removed manual by users...
Ray 5 days ago
parent
commit
a457ab154e
1 changed files with 64 additions and 11 deletions
  1. 64 11
      examples/rexm.c

+ 64 - 11
examples/rexm.c

@@ -310,7 +310,7 @@ int main(int argc, char *argv[])
             // -----------------------------------------------------------------------------------------
             // Scan resources used in example to copy
             int resPathCount = 0;
-            char **resPaths = ScanExampleResources(TextFormat("%s/%s/%s.png", exBasePath, exCategory, exName), &resPathCount);
+            char **resPaths = ScanExampleResources(TextFormat("%s/%s/%s.c", exBasePath, exCategory, exName), &resPathCount);
 
             if (resPathCount > 0)
             {
@@ -467,39 +467,46 @@ int main(int argc, char *argv[])
                 FileTextReplace(exCollectionListPath, TextFormat("%s;%s", exCategory, exName), 
                     TextFormat("%s;%s", exRecategory, exRename));
 
-                // Rename all required files
+                // Edit: Rename example code and screenshot files .c and .png
                 rename(TextFormat("%s/%s/%s.c", exBasePath, exCategory, exName),
                     TextFormat("%s/%s/%s.c", exBasePath, exCategory, exRename));
                 rename(TextFormat("%s/%s/%s.png", exBasePath, exCategory, exName),
                     TextFormat("%s/%s/%s.png", exBasePath, exCategory, exRename));
 
-                // Rename example on required files
+                // NOTE: Example resource files do not need to be changed...
+                // unless the example is moved from one caegory to another
+
+                // Edit: Rename example on required files
                 FileTextReplace(TextFormat("%s/Makefile", exBasePath), exName, exRename);
                 FileTextReplace(TextFormat("%s/Makefile.Web", exBasePath), exName, exRename);
                 FileTextReplace(TextFormat("%s/README.md", exBasePath), exName, exRename);
                 FileTextReplace(TextFormat("%s/../common/examples.js", exWebPath), exName, exRename);
 
-                // Rename example project and solution
+                // Edit: Rename example project and solution
                 rename(TextFormat("%s/../projects/VS2022/examples/%s.vcxproj", exBasePath, exName),
                     TextFormat("%s/../projects/VS2022/examples/%s.vcxproj", exBasePath, exRename));
                 FileTextReplace(TextFormat("%s/../projects/VS2022/raylib.sln", exBasePath), exName, exRename);
             }
             else
             {
-                // Rename with change of category
-                // TODO: Reorder collection as required
+                // WARNING: Rename with change of category
+                // TODO: Reorder collection to place renamed example at the end of category
                 FileTextReplace(exCollectionListPath, TextFormat("%s;%s", exCategory, exName), 
                     TextFormat("%s;%s", exRecategory, exRename));
 
-                // Rename all required files
+                // TODO: Move example resources from <src_category>/resources to <dst_category>/resources
+                // WARNING: Resources can be shared with other examples in the category
+
+                // Edit: Rename example code file (copy and remove)
                 FileCopy(TextFormat("%s/%s/%s.c", exBasePath, exCategory, exName),
                     TextFormat("%s/%s/%s.c", exBasePath, exCategory, exRename));
                 remove(TextFormat("%s/%s/%s.c", exBasePath, exCategory, exName));
-
+                // Edit: Rename example screenshot file (copy and remove)
                 FileCopy(TextFormat("%s/%s/%s.png", exBasePath, exCategory, exName),
                     TextFormat("%s/%s/%s.png", exBasePath, exCategory, exRename));
                 remove(TextFormat("%s/%s/%s.png", exBasePath, exCategory, exName));
 
+                // Edit: Update required files: Makefile, Makefile.Web, README.md, examples.js
                 UpdateRequiredFiles();
             }
 
@@ -547,15 +554,47 @@ int main(int argc, char *argv[])
             else LOG("WARNING: REMOVE: Example not found in the collection\n");
             UnloadFileText(exColInfo);
             //------------------------------------------------------------------------------------------------
+           
+            // Remove: raylib/examples/<category>/resources/..
+            // WARNING: Some of those resources could be used by other examples,
+            // just leave this process to manual update for now!
+            // -----------------------------------------------------------------------------------------
+            /*
+            // Scan resources used in example to be removed
+            int resPathCount = 0;
+            char **resPaths = ScanExampleResources(TextFormat("%s/%s/%s.c", exBasePath, exCategory, exName), &resPathCount);
+
+            if (resPathCount > 0)
+            {
+                for (int r = 0; r < resPathCount; r++)
+                {
+                    // WARNING: Special case to consider: shaders, resource paths could use conditions: "glsl%i"
+                    // In this case, multiple resources are required: glsl100, glsl120, glsl330
+                    if (TextFindIndex(resPaths[r], "glsl%i") > -1)
+                    {
+                        int glslVer[3] = { 100, 120, 330 };
+
+                        for (int v = 0; v < 3; v++)
+                        {
+                            char *resPathUpdated = TextReplace(resPaths[r], "glsl%i", TextFormat("glsl%i", glslVer[v]));
+                            remove(TextFormat("%s/%s/%s", exBasePath, exCategory, resPathUpdated));
+                            RL_FREE(resPathUpdated);
+                        }
+                    }
+                    else remove(TextFormat("%s/%s/%s", exBasePath, exCategory, resPaths[r]));
+                }
+            }
+
+            ClearExampleResources(resPaths);
+            */
+            // -----------------------------------------------------------------------------------------
 
             // Remove: raylib/examples/<category>/<category>_example_name.c
             // Remove: raylib/examples/<category>/<category>_example_name.png
             remove(TextFormat("%s/%s/%s.c", exBasePath, exCategory, exName));
             remove(TextFormat("%s/%s/%s.png", exBasePath, exCategory, exName));
             
-            // TODO: Remove: raylib/examples/<category>/resources/..
-            // Get list of resources from Makefile.Web or examples ResourcesScan()
-            
+            // Edit: Update required files: Makefile, Makefile.Web, README.md, examples.js
             UpdateRequiredFiles();
             
             // Remove: raylib/projects/VS2022/examples/<category>_example_name.vcxproj
@@ -1069,6 +1108,20 @@ static int FileRemove(const char *fileName)
     return result;
 }
 
+// Move file from one directory to another
+static int FileMove(const char *srcPath, const char *dstPath)
+{
+    int result = 0;
+
+    if (FileExists(srcPath))
+    {
+        FileCopy(srcPath, dstPath);
+        remove(srcPath);
+    }
+
+    return result;
+}
+
 // Load text lines
 static char **LoadTextLines(const char *text, int *count)
 {