diff --git a/.appveyor.yml b/.appveyor.yml deleted file mode 100644 index 50910bd6f..000000000 --- a/.appveyor.yml +++ /dev/null @@ -1,11 +0,0 @@ -install: - - appveyor-retry appveyor DownloadFile https://win.rustup.rs/ -FileName rustup-init.exe - - if not defined RUSTFLAGS rustup-init.exe -y --default-host x86_64-pc-windows-msvc --default-toolchain nightly - - set PATH=%PATH%;C:\Users\appveyor\.cargo\bin - - rustc -V - - cargo -V - -build: false - -test_script: - - cargo test --locked diff --git a/.gitignore b/.gitignore index 4e301317e..235f9a23a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -/target +target/ **/*.rs.bk Cargo.lock bin/ diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 7a913256e..000000000 --- a/.travis.yml +++ /dev/null @@ -1,69 +0,0 @@ -language: rust -sudo: false - -cache: cargo - -matrix: - include: - - # Builds with wasm-pack. - - rust: beta - env: RUST_BACKTRACE=1 - addons: - firefox: latest - chrome: stable - before_script: - - (test -x $HOME/.cargo/bin/cargo-install-update || cargo install cargo-update) - - (test -x $HOME/.cargo/bin/cargo-generate || cargo install --vers "^0.2" cargo-generate) - - cargo install-update -a - - curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh -s -- -f - script: - - cargo generate --git . --name testing - # Having a broken Cargo.toml (in that it has curlies in fields) anywhere - # in any of our parent dirs is problematic. - - mv Cargo.toml Cargo.toml.tmpl - - cd testing - - wasm-pack build - - wasm-pack test --chrome --firefox --headless - - # Builds on nightly. - - rust: nightly - env: RUST_BACKTRACE=1 - before_script: - - (test -x $HOME/.cargo/bin/cargo-install-update || cargo install cargo-update) - - (test -x $HOME/.cargo/bin/cargo-generate || cargo install --vers "^0.2" cargo-generate) - - cargo install-update -a - - rustup target add wasm32-unknown-unknown - script: - - cargo generate --git . --name testing - - mv Cargo.toml Cargo.toml.tmpl - - cd testing - - cargo check - - cargo check --target wasm32-unknown-unknown - - cargo check --no-default-features - - cargo check --target wasm32-unknown-unknown --no-default-features - - cargo check --no-default-features --features console_error_panic_hook - - cargo check --target wasm32-unknown-unknown --no-default-features --features console_error_panic_hook - - cargo check --no-default-features --features "console_error_panic_hook wee_alloc" - - cargo check --target wasm32-unknown-unknown --no-default-features --features "console_error_panic_hook wee_alloc" - - # Builds on beta. - - rust: beta - env: RUST_BACKTRACE=1 - before_script: - - (test -x $HOME/.cargo/bin/cargo-install-update || cargo install cargo-update) - - (test -x $HOME/.cargo/bin/cargo-generate || cargo install --vers "^0.2" cargo-generate) - - cargo install-update -a - - rustup target add wasm32-unknown-unknown - script: - - cargo generate --git . --name testing - - mv Cargo.toml Cargo.toml.tmpl - - cd testing - - cargo check - - cargo check --target wasm32-unknown-unknown - - cargo check --no-default-features - - cargo check --target wasm32-unknown-unknown --no-default-features - - cargo check --no-default-features --features console_error_panic_hook - - cargo check --target wasm32-unknown-unknown --no-default-features --features console_error_panic_hook - # Note: no enabling the `wee_alloc` feature here because it requires - # nightly for now. diff --git a/Cargo.toml b/Cargo.toml index 0a2ea4f08..0e55eb229 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,52 +1,9 @@ -[package] -name = "fluster" -version = "0.1.0" -authors = ["Mike Welsh "] -edition = "2018" - -[lib] -crate-type = ["cdylib", "rlib"] -name = "fluster" -path = "src/lib.rs" - -[[bin]] -name = "fluster" -path = "src/lib.rs" - -[features] -default = ["console_error_panic_hook", "console_log"] - -[dependencies] -bacon_rajan_cc = "0.2" -log = "0.4" -url = "1.7.2" -svg = "0.5.12" -swf = { git = "https://github.com/Herschel/swf-rs", version = "*" } - -# Desktop dependencies -[target.'cfg(not(target_arch = "wasm32"))'.dependencies] -lyon = "0.13.1" -structopt = "0.2.15" -glium = "0.24" -glutin = "0.20" -winit = "0.19.1" - -# Wasm32 dependencies -[target.'cfg(target_arch = "wasm32")'.dependencies] -console_error_panic_hook = { version = "0.1.1", optional = true } -console_log = { version = "0.1", optional = true } -js-sys = "0.3.19" -wasm-bindgen = "0.2" - -[target.'cfg(target_arch = "wasm32")'.dev-dependencies] -wasm-bindgen-test = "0.2" - -[dependencies.web-sys] -version = "0.3.19" -features = ["CanvasRenderingContext2d", "Document", "Element", "HtmlCanvasElement", "Performance", "HtmlImageElement", "Window"] - -[dev-dependencies] -wasm-bindgen-test = "0.2" +[workspace] +members = [ + "lib", + "desktop", + "web" +] [patch.'https://github.com/Herschel/swf-rs'] swf = { path = "../swf-rs" } \ No newline at end of file diff --git a/desktop/Cargo.toml b/desktop/Cargo.toml new file mode 100644 index 000000000..4e62b245e --- /dev/null +++ b/desktop/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "fluster" +version = "0.1.0" +authors = ["Mike Welsh "] +edition = "2018" + +[dependencies] +fluster_core = { path = "../lib" } +structopt = "0.2.15" \ No newline at end of file diff --git a/src/lib.rs b/desktop/src/main.rs similarity index 71% rename from src/lib.rs rename to desktop/src/main.rs index 3809c11f1..31ae943e8 100644 --- a/src/lib.rs +++ b/desktop/src/main.rs @@ -1,16 +1,4 @@ -mod backend; -mod character; -mod color_transform; -mod display_object; -mod graphic; -mod library; -mod matrix; -mod movie_clip; -mod player; -mod stage; - -pub use player::Player; -use swf::Color; +use fluster_core::Player; #[cfg(not(target_arch = "wasm32"))] #[allow(dead_code)] diff --git a/lib/Cargo.toml b/lib/Cargo.toml new file mode 100644 index 000000000..55ca22bb9 --- /dev/null +++ b/lib/Cargo.toml @@ -0,0 +1,33 @@ +[package] +name = "fluster_core" +version = "0.1.0" +authors = ["Mike Welsh "] +edition = "2018" + +[features] +default = ["console_error_panic_hook", "console_log"] + +[dependencies] +bacon_rajan_cc = "0.2" +log = "0.4" +url = "1.7.2" +svg = "0.5.12" +swf = { git = "https://github.com/Herschel/swf-rs", version = "*" } + +# Desktop dependencies +[target.'cfg(not(target_arch = "wasm32"))'.dependencies] +lyon = "0.13.1" +glium = "0.24" +glutin = "0.20" +winit = "0.19.1" + +# Wasm32 dependencies +[target.'cfg(target_arch = "wasm32")'.dependencies] +console_error_panic_hook = { version = "0.1.1", optional = true } +console_log = { version = "0.1", optional = true } +js-sys = "0.3.19" +wasm-bindgen = "0.2" + +[dependencies.web-sys] +version = "0.3.19" +features = ["CanvasRenderingContext2d", "Document", "Element", "HtmlCanvasElement", "Performance", "HtmlImageElement", "Window"] diff --git a/src/backend.rs b/lib/src/backend.rs similarity index 100% rename from src/backend.rs rename to lib/src/backend.rs diff --git a/src/backend/render.rs b/lib/src/backend/render.rs similarity index 100% rename from src/backend/render.rs rename to lib/src/backend/render.rs diff --git a/src/backend/render/common.rs b/lib/src/backend/render/common.rs similarity index 100% rename from src/backend/render/common.rs rename to lib/src/backend/render/common.rs diff --git a/src/backend/render/glium.rs b/lib/src/backend/render/glium.rs similarity index 100% rename from src/backend/render/glium.rs rename to lib/src/backend/render/glium.rs diff --git a/src/backend/render/shape_utils.rs b/lib/src/backend/render/shape_utils.rs similarity index 100% rename from src/backend/render/shape_utils.rs rename to lib/src/backend/render/shape_utils.rs diff --git a/src/backend/render/web_canvas.rs b/lib/src/backend/render/web_canvas.rs similarity index 100% rename from src/backend/render/web_canvas.rs rename to lib/src/backend/render/web_canvas.rs diff --git a/src/backend/ui.rs b/lib/src/backend/ui.rs similarity index 100% rename from src/backend/ui.rs rename to lib/src/backend/ui.rs diff --git a/src/backend/ui/glutin.rs b/lib/src/backend/ui/glutin.rs similarity index 100% rename from src/backend/ui/glutin.rs rename to lib/src/backend/ui/glutin.rs diff --git a/src/backend/ui/web_canvas.rs b/lib/src/backend/ui/web_canvas.rs similarity index 100% rename from src/backend/ui/web_canvas.rs rename to lib/src/backend/ui/web_canvas.rs diff --git a/src/character.rs b/lib/src/character.rs similarity index 100% rename from src/character.rs rename to lib/src/character.rs diff --git a/src/color_transform.rs b/lib/src/color_transform.rs similarity index 100% rename from src/color_transform.rs rename to lib/src/color_transform.rs diff --git a/src/display_object.rs b/lib/src/display_object.rs similarity index 100% rename from src/display_object.rs rename to lib/src/display_object.rs diff --git a/src/graphic.rs b/lib/src/graphic.rs similarity index 100% rename from src/graphic.rs rename to lib/src/graphic.rs diff --git a/lib/src/lib.rs b/lib/src/lib.rs new file mode 100644 index 000000000..5edd565d7 --- /dev/null +++ b/lib/src/lib.rs @@ -0,0 +1,13 @@ +mod backend; +mod character; +mod color_transform; +mod display_object; +mod graphic; +mod library; +mod matrix; +mod movie_clip; +mod player; +mod stage; + +pub use player::Player; +use swf::Color; diff --git a/src/library.rs b/lib/src/library.rs similarity index 100% rename from src/library.rs rename to lib/src/library.rs diff --git a/src/matrix.rs b/lib/src/matrix.rs similarity index 100% rename from src/matrix.rs rename to lib/src/matrix.rs diff --git a/src/movie_clip.rs b/lib/src/movie_clip.rs similarity index 100% rename from src/movie_clip.rs rename to lib/src/movie_clip.rs diff --git a/src/player.rs b/lib/src/player.rs similarity index 85% rename from src/player.rs rename to lib/src/player.rs index 133591cc8..9b91ec043 100644 --- a/src/player.rs +++ b/lib/src/player.rs @@ -20,7 +20,6 @@ use web_sys::{CanvasRenderingContext2d, HtmlCanvasElement, HtmlImageElement}; type CharacterId = swf::CharacterId; -#[cfg_attr(target_arch = "wasm32", wasm_bindgen)] pub struct Player { tag_stream: swf::read::Reader>>, @@ -35,17 +34,7 @@ pub struct Player { frame_accumulator: f64, } -#[cfg_attr(target_arch = "wasm32", wasm_bindgen)] impl Player { - #[cfg(target_arch = "wasm32")] - pub fn new(swf_data: js_sys::Uint8Array) -> Result { - console_error_panic_hook::set_once(); - let mut data = vec![0; swf_data.length() as usize]; - swf_data.copy_to(&mut data[..]); - Self::new_internal(data).map_err(|_| JsValue::null()) - } - - #[cfg(not(target_arch = "wasm32"))] pub fn new(swf_data: Vec) -> Result> { Self::new_internal(swf_data) } diff --git a/src/stage.rs b/lib/src/stage.rs similarity index 100% rename from src/stage.rs rename to lib/src/stage.rs diff --git a/web/Cargo.toml b/web/Cargo.toml new file mode 100644 index 000000000..5cff3bd6c --- /dev/null +++ b/web/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "fluster_web" +version = "0.1.0" +authors = ["Mike Welsh "] +edition = "2018" + +[lib] +crate-type = ["cdylib", "rlib"] + +[dependencies] +console_error_panic_hook = { version = "0.1.1", optional = true } +console_log = { version = "0.1", optional = true } +fluster_core = { path = "../lib" } +js-sys = "0.3.19" +wasm-bindgen = "0.2" + +[dev-dependencies] +wasm-bindgen-test = "0.2" \ No newline at end of file diff --git a/web/src/lib.rs b/web/src/lib.rs new file mode 100644 index 000000000..684cfd170 --- /dev/null +++ b/web/src/lib.rs @@ -0,0 +1,20 @@ +use js_sys::Uint8Array; +use wasm_bindgen::{prelude::*, JsValue}; + +#[wasm_bindgen] +pub struct Player(fluster_core::Player); + +#[wasm_bindgen] +impl Player { + pub fn new(swf_data: Uint8Array) -> Result { + let mut data = vec![0; swf_data.length() as usize]; + swf_data.copy_to(&mut data[..]); + + let player = fluster_core::Player::new(data).map_err(|_| JsValue::null())?; + Ok(Player(player)) + } + + pub fn tick(&mut self, dt: f64) { + self.0.tick(dt); + } +} diff --git a/tests/web.rs b/web/tests/web.rs similarity index 100% rename from tests/web.rs rename to web/tests/web.rs diff --git a/www/.bin/create-wasm-app.js b/web/www/.bin/create-wasm-app.js similarity index 100% rename from www/.bin/create-wasm-app.js rename to web/www/.bin/create-wasm-app.js diff --git a/www/.gitignore b/web/www/.gitignore similarity index 100% rename from www/.gitignore rename to web/www/.gitignore diff --git a/www/.travis.yml b/web/www/.travis.yml similarity index 100% rename from www/.travis.yml rename to web/www/.travis.yml diff --git a/www/LICENSE-APACHE b/web/www/LICENSE-APACHE similarity index 100% rename from www/LICENSE-APACHE rename to web/www/LICENSE-APACHE diff --git a/www/LICENSE-MIT b/web/www/LICENSE-MIT similarity index 100% rename from www/LICENSE-MIT rename to web/www/LICENSE-MIT diff --git a/www/README.md b/web/www/README.md similarity index 100% rename from www/README.md rename to web/www/README.md diff --git a/www/bootstrap.js b/web/www/bootstrap.js similarity index 100% rename from www/bootstrap.js rename to web/www/bootstrap.js diff --git a/www/index.html b/web/www/index.html similarity index 100% rename from www/index.html rename to web/www/index.html diff --git a/www/index.js b/web/www/index.js similarity index 100% rename from www/index.js rename to web/www/index.js diff --git a/www/package-lock.json b/web/www/package-lock.json similarity index 100% rename from www/package-lock.json rename to web/www/package-lock.json diff --git a/www/package.json b/web/www/package.json similarity index 100% rename from www/package.json rename to web/www/package.json diff --git a/www/webpack.config.js b/web/www/webpack.config.js similarity index 100% rename from www/webpack.config.js rename to web/www/webpack.config.js