From a21abd929adf47b44a05292804806965f99cdeab Mon Sep 17 00:00:00 2001 From: Kapendev Date: Sun, 9 Jun 2024 20:29:02 +0300 Subject: [PATCH] Fixed bug in setup script and added sprite for examples. --- README.md | 7 +++--- dub.json | 4 ++-- examples/README.md | 3 +++ examples/atlas.png | Bin 0 -> 5733 bytes setup/source/app.d | 54 ++++++++++++++++++++++++++++++--------------- 5 files changed, 45 insertions(+), 23 deletions(-) create mode 100644 examples/atlas.png diff --git a/README.md b/README.md index 582bb45..0240838 100644 --- a/README.md +++ b/README.md @@ -55,16 +55,17 @@ dub run popka:setup The last line will download raylib and create some folders necessary for Popka to function properly. The folders: -* `assets`: This folder is used to store game assets such as images, sounds and fonts. -* `web`: This folder is used for exporting to the web. +* assets: This folder is used to store game assets such as images, sounds and fonts. +* web: This folder is used for exporting to the web. The last line also changes the default app.d file. -Once the installation is complete, you should be able to compile by running: +Once the installation is complete, you should be able to compile/run with: ```bash dub run ``` +You can pass `offline` to the script if you don't want to download raylib. For more info about exporting to web, see [this](#web-support). ## Documentation diff --git a/dub.json b/dub.json index 66473c2..1ec5762 100644 --- a/dub.json +++ b/dub.json @@ -9,11 +9,11 @@ "configurations": [ { "name": "pdefault", - "excludedSourceFiles": ["examples/*.d", "web/source/*.d"] + "excludedSourceFiles": ["examples/*.d", "setup/source/*.d", "web/source/*.d"] }, { "name": "ptest", - "excludedSourceFiles": ["examples/*.d", "web/source/*.d", "source/popka/package.d", "source/popka/game/*.d", "source/popka/vendor/*.d"] + "excludedSourceFiles": ["examples/*.d", "setup/source/*.d", "web/source/*.d", "source/popka/package.d", "source/popka/game/*.d", "source/popka/vendor/*.d"] } ], "subPackages" : [ diff --git a/examples/README.md b/examples/README.md index 2b1a013..3bc6cbd 100644 --- a/examples/README.md +++ b/examples/README.md @@ -1,5 +1,8 @@ # Examples +> [!NOTE] +> For examples that use sprites, you must download the [atlas.png](atlas.png) file and save it in your project's assets folder. + ## [Hello](hello.d) This example serves as a classic hello-world program, introducing the fundamental structure of a Popka program. diff --git a/examples/atlas.png b/examples/atlas.png new file mode 100644 index 0000000000000000000000000000000000000000..07a655d137a88c43005b5b9779cf16016490c05e GIT binary patch literal 5733 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 literal 0 HcmV?d00001 diff --git a/setup/source/app.d b/setup/source/app.d index 114c859..47049f4 100755 --- a/setup/source/app.d +++ b/setup/source/app.d @@ -9,6 +9,21 @@ import std.stdio; import std.file; import std.process; + +// The config. +// ---------- +enum noLibsArg = "offline"; + +enum dubFile = buildPath(".", "dub.json"); +enum dubyFile = buildPath(".", "dub.selections.json"); +enum appFile = buildPath(".", "source", "app.d"); +enum gitignoreFile = buildPath(".", ".gitignore"); + +enum assetsDir = buildPath(".", "assets"); +enum webDir = buildPath(".", "web"); +// ---------- + + enum defaultDubContent = `{ "name" : "game", "description" : "A game made with Popka.", @@ -39,7 +54,7 @@ enum defaultDubContent = `{ "targetType": "executable", "platforms": ["windows"], "libs": [ - "raylibdll" + "raylib" ] }, { @@ -112,33 +127,36 @@ void deleteFile(const(char)[] path) { } } -int main() { - if (check(buildPath(".", "dub.json"), false)) { +int main(string[] args) { + if (check(dubFile, false)) { writeln("Error: This is not a DUB project."); return 1; } + writeln("Info: Pass `%s` if you don't want to download raylib.".format(noLibsArg)); // Use the raylib-d script to download the raylib library files. // We also have to use `spawnShell` here because raylib-d:install does not accept arguments. // TODO: Ask the raylib-d project to do something about that. - run("dub add raylib-d"); - writeln(); - writeln(`"Saying yes to happiness means learning to say no to the things and people that stress you out." - Thema Davis`); - writeln(); - auto pid = spawnShell("dub run raylib-d:install"); - wait(pid); + if (args.length == 1 || (args.length > 1 && args[1] != noLibsArg)) { + run("dub add raylib-d"); + writeln(); + writeln(`"Saying yes to happiness means learning to say no to the things and people that stress you out." - Thema Davis`); + writeln(); + auto pid = spawnShell("dub run raylib-d:install"); + wait(pid); + } // Delete the old files. - deleteFile(buildPath(".", "dub.json")); - deleteFile(buildPath(".", "dub.selections.json")); - deleteFile(buildPath(".", ".gitignore")); - deleteFile(buildPath(".", "source", "app.d")); + deleteFile(dubFile); + deleteFile(dubyFile); + deleteFile(gitignoreFile); + deleteFile(appFile); // Create the new files. - std.file.write(buildPath(".", "dub.json"), defaultDubContent); - std.file.write(buildPath(".", ".gitignore"), defaultGitignoreContent); - std.file.write(buildPath(".", "source", "app.d"), defaultAppContent); - if (check(buildPath(".", "assets"), false)) std.file.mkdir(buildPath(".", "assets")); - if (check(buildPath(".", "web"), false)) std.file.mkdir(buildPath(".", "web")); + std.file.write(dubFile, defaultDubContent); + std.file.write(gitignoreFile, defaultGitignoreContent); + std.file.write(appFile, defaultAppContent); + if (check(assetsDir, false)) std.file.mkdir(assetsDir); + if (check(webDir, false)) std.file.mkdir(webDir); return 0; }