Compare commits

...

5 Commits

Author SHA1 Message Date
2ddf2611d9 ci: add wasm32 cargo flags 2025-06-17 11:47:52 -05:00
b3a3664578 feat: game loop 2025-06-17 11:47:43 -05:00
2b667bb6a2 ci: add deploy workflow + build script 2025-06-17 11:47:25 -05:00
9a88e71202 chore: .idea folder in .gitignore 2025-06-17 11:47:18 -05:00
084428e775 feat: setup basic texture rendering, setup SLD2 DLLs & required features 2025-06-17 11:47:08 -05:00
15 changed files with 240 additions and 0 deletions

28
.cargo/config.toml Normal file
View File

@@ -0,0 +1,28 @@
[target.wasm32-unknown-emscripten]
rustflags = [
"-C",
"link-arg=-s",
"-C",
"link-arg=FULL_ES2",
"-C",
"link-arg=-s",
"-C",
"link-arg=FULL_ES3",
"-C",
"link-arg=-s",
"-C",
"link-arg=USE_SDL=2",
"-C",
"link-arg=-s",
"-C",
"link-arg=MAX_WEBGL_VERSION=2 ",
"-C",
"link-arg=-s",
"-C",
"link-arg=MIN_WEBGL_VERSION=2",
"-C",
"link-arg=-s",
"-C",
"link-arg=ERROR_ON_UNDEFINED_SYMBOLS=0", # for ignoring some egl symbols. needed for wgpu
]

28
.github/workflows/deploy.yaml vendored Normal file
View File

@@ -0,0 +1,28 @@
name: Github Pages
on: [push]
permissions:
contents: write
jobs:
build-github-pages:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2 # repo checkout
- uses: mymindstorm/setup-emsdk@v11 # setup emscripten toolchain
# with:
# version: 3.1.35
- uses: actions-rs/toolchain@v1 # get rust toolchain for wasm
with:
toolchain: stable
target: wasm32-unknown-emscripten
override: true
- name: Rust Cache # cache the rust build artefacts
uses: Swatinem/rust-cache@v1
- name: Build # build
run: ./build.sh
- name: Deploy
uses: JamesIves/github-pages-deploy-action@v4
with:
folder: dist

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/target
.idea

63
Cargo.lock generated Normal file
View File

@@ -0,0 +1,63 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "Pac-Man"
version = "0.1.0"
dependencies = [
"sdl2",
]
[[package]]
name = "bitflags"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
version = "0.2.147"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
[[package]]
name = "sdl2"
version = "0.35.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7959277b623f1fb9e04aea73686c3ca52f01b2145f8ea16f4ff30d8b7623b1a"
dependencies = [
"bitflags",
"lazy_static",
"libc",
"sdl2-sys",
]
[[package]]
name = "sdl2-sys"
version = "0.35.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3586be2cf6c0a8099a79a12b4084357aa9b3e0b0d7980e3b67aaf7a9d55f9f0"
dependencies = [
"cfg-if",
"libc",
"version-compare",
]
[[package]]
name = "version-compare"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"

9
Cargo.toml Normal file
View File

@@ -0,0 +1,9 @@
[package]
name = "Pac-Man"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
sdl2 = { version = "0.35", features = ["image", "ttf", "mixer"] }

BIN
SDL2.dll Normal file
View File

Binary file not shown.

BIN
SDL2_image.dll Normal file
View File

Binary file not shown.

BIN
SDL2_mixer.dll Normal file
View File

Binary file not shown.

BIN
SDL2_ttf.dll Normal file
View File

Binary file not shown.

BIN
assets/map.png Normal file
View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

10
build.sh Executable file
View File

@@ -0,0 +1,10 @@
#!/bin/sh
set -eux
cargo build --target=wasm32-unknown-emscripten --release
mkdir -p dist
cp target/wasm32-unknown-emscripten/release/rust_sdl2_wasm.wasm dist
cp target/wasm32-unknown-emscripten/release/rust-sdl2-wasm.js dist
cp index.html dist

0
src/board.rs Normal file
View File

44
src/constants.rs Normal file
View File

@@ -0,0 +1,44 @@
pub const BOARD_WIDTH: u32 = 28;
pub const BOARD_HEIGHT: u32 = 36;
pub const BLOCK_SIZE_24: u32 = 24;
pub const BLOCK_SIZE_32: u32 = 32;
pub const WINDOW_WIDTH: u32 = BLOCK_SIZE_24 * BOARD_WIDTH;
pub const WINDOW_HEIGHT: u32 = BLOCK_SIZE_24 * BOARD_HEIGHT;
pub const RAW_BOARD: &str = r###"
############################
#............##............#
#.####.#####.##.#####.####.#
#o####.#####.##.#####.####o#
#.####.#####.##.#####.####.#
#..........................#
#.####.##.########.##.####.#
#.####.##.########.##.####.#
#......##....##....##......#
######.##### ## #####.######
#.##### ## #####.#
#.## 1 ##.#
#.## ###==### ##.#
######.## # # ##.######
. #2 3 4 # .
######.## # # ##.######
#.## ######## ##.#
#.## ##.#
#.## ######## ##.#
######.## ######## ##.######
#............##............#
#.####.#####.##.#####.####.#
#.####.#####.##.#####.####.#
#o..##.......0 .......##..o#
###.##.##.########.##.##.###
###.##.##.########.##.##.###
#......##....##....##......#
#.##########.##.##########.#
#.##########.##.##########.#
#..........................#
############################
"###;

11
src/game.rs Normal file
View File

@@ -0,0 +1,11 @@
pub struct Game {}
impl Game {
pub fn new() -> Game {
Game {}
}
pub fn tick() {}
pub fn draw() {}
}

45
src/main.rs Normal file
View File

@@ -0,0 +1,45 @@
use sdl2::pixels::Color;
use sdl2::event::Event;
use sdl2::image::LoadTexture;
use sdl2::keyboard::{Keycode, Mod};
use std::time::Duration;
use crate::constants::{WINDOW_WIDTH, WINDOW_HEIGHT};
mod constants;
mod board;
mod game;
pub fn main() {
let sdl_context = sdl2::init().unwrap();
let video_subsystem = sdl_context.video().unwrap();
let window = video_subsystem.window("Pac-Man", WINDOW_WIDTH, WINDOW_HEIGHT)
.position_centered()
.build()
.expect("Could not initialize window");
let mut canvas = window.into_canvas().build().expect("Could not build canvas");
let texture_creator= canvas.texture_creator();
let map_texture = texture_creator.load_texture("assets/map.png").expect("Could not load pacman texture");
canvas.copy(&map_texture, None, None).expect("Could not render texture on canvas");
let mut event_pump = sdl_context.event_pump().expect("Could not get SDL EventPump");
'main: loop {
for event in event_pump.poll_iter() {
match event {
Event::Quit { .. } |
Event::KeyDown { keycode: Some(Keycode::Q), .. } => {
break 'main;
}
event @ Event::KeyDown { .. } => {
println!("{:?}", event);
},
_ => {}
}
}
canvas.present();
::std::thread::sleep(Duration::from_millis(10));
}
}