From a457ab154e7cc7ed675f0dd315216db100f340dd Mon Sep 17 00:00:00 2001 From: Ray Date: Mon, 4 Aug 2025 18:11:57 +0200 Subject: [PATCH] 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... --- examples/rexm.c | 75 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 64 insertions(+), 11 deletions(-) diff --git a/examples/rexm.c b/examples/rexm.c index 9e7fbf899..7a0f24dc9 100644 --- a/examples/rexm.c +++ b/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 /resources to /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//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//_example_name.c // Remove: raylib/examples//_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//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/_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) {