diff --git a/.cargo/config.toml b/.cargo/config.toml index a3e69bf..d5abc96 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -8,5 +8,5 @@ rustflags = [ # "-C", "link-args=-sALLOW_MEMORY_GROWTH=1", "-C", "link-args=-sUSE_SDL=2 -sUSE_SDL_IMAGE=2 -sUSE_SDL_MIXER=2 -sUSE_OGG=1 -sUSE_SDL_GFX=2 -sUSE_SDL_TTF=2 -sSDL2_IMAGE_FORMATS=['png']", # USE_OGG, USE_VORBIS for OGG/VORBIS usage - "-C", "link-args=--preload-file assets/", -] \ No newline at end of file + "-C", "link-args=--preload-file assets/game/", +] diff --git a/.gitignore b/.gitignore index a16b32c..b4fcd46 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,5 @@ .idea *.dll rust-sdl2-emscripten/ -assets/build.css -emsdk/ \ No newline at end of file +assets/site/build.css +emsdk/ diff --git a/assets/24/energizer.png b/assets/game/24/energizer.png similarity index 100% rename from assets/24/energizer.png rename to assets/game/24/energizer.png diff --git a/assets/24/pellet.png b/assets/game/24/pellet.png similarity index 100% rename from assets/24/pellet.png rename to assets/game/24/pellet.png diff --git a/assets/32/fruit.png b/assets/game/32/fruit.png similarity index 100% rename from assets/32/fruit.png rename to assets/game/32/fruit.png diff --git a/assets/32/game_over.png b/assets/game/32/game_over.png similarity index 100% rename from assets/32/game_over.png rename to assets/game/32/game_over.png diff --git a/assets/32/ghost_body.png b/assets/game/32/ghost_body.png similarity index 100% rename from assets/32/ghost_body.png rename to assets/game/32/ghost_body.png diff --git a/assets/32/ghost_eyes.png b/assets/game/32/ghost_eyes.png similarity index 100% rename from assets/32/ghost_eyes.png rename to assets/game/32/ghost_eyes.png diff --git a/assets/32/life.png b/assets/game/32/life.png similarity index 100% rename from assets/32/life.png rename to assets/game/32/life.png diff --git a/assets/32/pacman.png b/assets/game/32/pacman.png similarity index 100% rename from assets/32/pacman.png rename to assets/game/32/pacman.png diff --git a/assets/door.png b/assets/game/door.png similarity index 100% rename from assets/door.png rename to assets/game/door.png diff --git a/assets/font/konami.ttf b/assets/game/font/konami.ttf similarity index 100% rename from assets/font/konami.ttf rename to assets/game/font/konami.ttf diff --git a/assets/map.png b/assets/game/map.png similarity index 100% rename from assets/map.png rename to assets/game/map.png diff --git a/assets/wav/1.ogg b/assets/game/wav/1.ogg similarity index 100% rename from assets/wav/1.ogg rename to assets/game/wav/1.ogg diff --git a/assets/wav/2.ogg b/assets/game/wav/2.ogg similarity index 100% rename from assets/wav/2.ogg rename to assets/game/wav/2.ogg diff --git a/assets/wav/3.ogg b/assets/game/wav/3.ogg similarity index 100% rename from assets/wav/3.ogg rename to assets/game/wav/3.ogg diff --git a/assets/wav/4.ogg b/assets/game/wav/4.ogg similarity index 100% rename from assets/wav/4.ogg rename to assets/game/wav/4.ogg diff --git a/assets/TerminalVector.ttf b/assets/site/TerminalVector.ttf similarity index 100% rename from assets/TerminalVector.ttf rename to assets/site/TerminalVector.ttf diff --git a/assets/site/build.css b/assets/site/build.css new file mode 100644 index 0000000..009ca4f --- /dev/null +++ b/assets/site/build.css @@ -0,0 +1,23 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@font-face { + font-family: "Liberation Mono"; + src: + url("LiberationMono.woff2") format("woff2"), + url("LiberationMono.woff") format("woff"); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +canvas { + @apply w-full h-[65vh] min-h-[200px] block mx-auto bg-black; +} + +.code { + @apply px-1 rounded font-mono bg-zinc-900 border border-zinc-700 lowercase; +} + +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlcy5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6ImJ1aWxkLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIkB0YWlsd2luZCBiYXNlO1xuQHRhaWx3aW5kIGNvbXBvbmVudHM7XG5AdGFpbHdpbmQgdXRpbGl0aWVzO1xuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogXCJMaWJlcmF0aW9uIE1vbm9cIjtcbiAgICBzcmM6XG4gICAgICAgIHVybChcIkxpYmVyYXRpb25Nb25vLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLFxuICAgICAgICB1cmwoXCJMaWJlcmF0aW9uTW9uby53b2ZmXCIpIGZvcm1hdChcIndvZmZcIik7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5jYW52YXMge1xuICAgIEBhcHBseSB3LWZ1bGwgaC1bNjV2aF0gbWluLWgtWzIwMHB4XSBibG9jayBteC1hdXRvIGJnLWJsYWNrO1xufVxuXG4uY29kZSB7XG4gICAgQGFwcGx5IHB4LTEgcm91bmRlZCBmb250LW1vbm8gYmctemluYy05MDAgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBsb3dlcmNhc2U7XG59XG4iXX0= */ diff --git a/assets/favicon.ico b/assets/site/favicon.ico similarity index 100% rename from assets/favicon.ico rename to assets/site/favicon.ico diff --git a/assets/index.html b/assets/site/index.html similarity index 100% rename from assets/index.html rename to assets/site/index.html diff --git a/assets/styles.scss b/assets/site/styles.scss similarity index 100% rename from assets/styles.scss rename to assets/site/styles.scss diff --git a/assets/wav/eating.wav b/assets/wav/eating.wav deleted file mode 100644 index 1393ef2..0000000 Binary files a/assets/wav/eating.wav and /dev/null differ diff --git a/assets/wav/waka_ka.wav b/assets/wav/waka_ka.wav deleted file mode 100644 index e940019..0000000 Binary files a/assets/wav/waka_ka.wav and /dev/null differ diff --git a/assets/wav/waka_wa.wav b/assets/wav/waka_wa.wav deleted file mode 100644 index 3259f7f..0000000 Binary files a/assets/wav/waka_wa.wav and /dev/null differ diff --git a/build.sh b/build.sh index 598edc0..7b7a29e 100755 --- a/build.sh +++ b/build.sh @@ -52,20 +52,18 @@ else fi echo "Generating CSS" -pnpx postcss-cli ./assets/styles.scss -o ./assets/build.css +pnpx postcss-cli ./assets/site/styles.scss -o ./assets/site/build.css echo "Copying WASM files" mkdir -p dist output_folder="target/wasm32-unknown-emscripten/$build_type" -cp assets/index.html dist -# cp assets/*.woff* dist -cp assets/build.css dist -cp assets/favicon.ico dist -cp $output_folder/pacman.wasm dist -cp $output_folder/pacman.js dist -# only if .data file exists -cp $output_folder/deps/pacman.data dist +cp assets/site/{build.css,favicon.ico,index.html} dist +cp $output_folder/pacman.{wasm,js} dist +if [ -f $output_folder/deps/pacman.data ]; then + cp $output_folder/deps/pacman.data dist +fi + if [ -f $output_folder/pacman.wasm.map ]; then cp $output_folder/pacman.wasm.map dist fi diff --git a/build.ts b/build.ts index 54a88fb..85962ff 100644 --- a/build.ts +++ b/build.ts @@ -56,40 +56,47 @@ async function setupEmscripten() { async function buildWeb(release: boolean) { console.log("Building WASM with Emscripten..."); + const rustcFlags = [ + "-C", + "link-arg=--preload-file", + "-C", + "link-arg=assets", + ].join(" "); + if (release) { - await $`cargo build --target=wasm32-unknown-emscripten --release`; + await $`env RUSTFLAGS=${rustcFlags} cargo build --target=wasm32-unknown-emscripten --release`; } else { - await $`cargo build --target=wasm32-unknown-emscripten`; + await $`env RUSTFLAGS=${rustcFlags} cargo build --target=wasm32-unknown-emscripten`; } console.log("Generating CSS..."); - await $`pnpx postcss-cli ./assets/styles.scss -o ./assets/build.css`; + await $`pnpx postcss-cli ./assets/site/styles.scss -o ./assets/site/build.css`; console.log("Copying WASM files..."); const buildType = release ? "release" : "debug"; const outputFolder = `target/wasm32-unknown-emscripten/${buildType}`; await $`mkdir -p dist`; - await $`cp assets/index.html dist`; - await $`cp assets/*.woff* dist`; - await $`cp assets/build.css dist`; - await $`cp assets/favicon.ico dist`; - await $`cp ${outputFolder}/spiritus.wasm dist`; - await $`cp ${outputFolder}/spiritus.js dist`; + await $`cp assets/site/index.html dist`; + await $`cp assets/site/*.woff* dist`; + await $`cp assets/site/build.css dist`; + await $`cp assets/site/favicon.ico dist`; + await $`cp ${outputFolder}/pacman.wasm dist`; + await $`cp ${outputFolder}/pacman.js dist`; // Check if .data file exists before copying try { - await fs.access(`${outputFolder}/deps/spiritus.data`); - await $`cp ${outputFolder}/deps/spiritus.data dist`; + await fs.access(`${outputFolder}/pacman.data`); + await $`cp ${outputFolder}/pacman.data dist`; } catch (e) { - console.log("No spiritus.data file found, skipping copy."); + console.log("No pacman.data file found, skipping copy."); } // Check if .map file exists before copying try { - await fs.access(`${outputFolder}/spiritus.wasm.map`); - await $`cp ${outputFolder}/spiritus.wasm.map dist`; + await fs.access(`${outputFolder}/pacman.wasm.map`); + await $`cp ${outputFolder}/pacman.wasm.map dist`; } catch (e) { - console.log("No spiritus.wasm.map file found, skipping copy."); + console.log("No pacman.wasm.map file found, skipping copy."); } console.log("WASM files copied."); diff --git a/src/asset.rs b/src/asset.rs index 4dd367f..0556872 100644 --- a/src/asset.rs +++ b/src/asset.rs @@ -56,17 +56,17 @@ mod imp { macro_rules! asset_bytes_enum { ( $asset:expr ) => { match $asset { - Asset::Wav1 => Cow::Borrowed(include_bytes!("../assets/wav/1.ogg")), - Asset::Wav2 => Cow::Borrowed(include_bytes!("../assets/wav/2.ogg")), - Asset::Wav3 => Cow::Borrowed(include_bytes!("../assets/wav/3.ogg")), - Asset::Wav4 => Cow::Borrowed(include_bytes!("../assets/wav/4.ogg")), - Asset::Pacman => Cow::Borrowed(include_bytes!("../assets/32/pacman.png")), - Asset::Pellet => Cow::Borrowed(include_bytes!("../assets/24/pellet.png")), - Asset::Energizer => Cow::Borrowed(include_bytes!("../assets/24/energizer.png")), - Asset::Map => Cow::Borrowed(include_bytes!("../assets/map.png")), - Asset::FontKonami => Cow::Borrowed(include_bytes!("../assets/font/konami.ttf")), - Asset::GhostBody => Cow::Borrowed(include_bytes!("../assets/32/ghost_body.png")), - Asset::GhostEyes => Cow::Borrowed(include_bytes!("../assets/32/ghost_eyes.png")), + Asset::Wav1 => Cow::Borrowed(include_bytes!("../assets/game/wav/1.ogg")), + Asset::Wav2 => Cow::Borrowed(include_bytes!("../assets/game/wav/2.ogg")), + Asset::Wav3 => Cow::Borrowed(include_bytes!("../assets/game/wav/3.ogg")), + Asset::Wav4 => Cow::Borrowed(include_bytes!("../assets/game/wav/4.ogg")), + Asset::Pacman => Cow::Borrowed(include_bytes!("../assets/game/32/pacman.png")), + Asset::Pellet => Cow::Borrowed(include_bytes!("../assets/game/24/pellet.png")), + Asset::Energizer => Cow::Borrowed(include_bytes!("../assets/game/24/energizer.png")), + Asset::Map => Cow::Borrowed(include_bytes!("../assets/game/map.png")), + Asset::FontKonami => Cow::Borrowed(include_bytes!("../assets/game/font/konami.ttf")), + Asset::GhostBody => Cow::Borrowed(include_bytes!("../assets/game/32/ghost_body.png")), + Asset::GhostEyes => Cow::Borrowed(include_bytes!("../assets/game/32/ghost_eyes.png")), } }; } @@ -81,7 +81,7 @@ mod imp { use std::fs; use std::path::Path; pub fn get_asset_bytes(asset: Asset) -> Result, AssetError> { - let path = Path::new("assets").join(asset.path()); + let path = Path::new("assets/game").join(asset.path()); if !path.exists() { return Err(AssetError::NotFound(asset.path().to_string())); }