This commit is contained in:
Mike Welsh 2019-04-27 18:15:43 -07:00
parent b4c25f68f2
commit b7ac6dc2ce
41 changed files with 101 additions and 154 deletions

View File

@ -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

2
.gitignore vendored
View File

@ -1,4 +1,4 @@
/target
target/
**/*.rs.bk
Cargo.lock
bin/

View File

@ -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.

View File

@ -1,52 +1,9 @@
[package]
name = "fluster"
version = "0.1.0"
authors = ["Mike Welsh <mwelsh@gmail.com>"]
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" }

9
desktop/Cargo.toml Normal file
View File

@ -0,0 +1,9 @@
[package]
name = "fluster"
version = "0.1.0"
authors = ["Mike Welsh <mwelsh@gmail.com>"]
edition = "2018"
[dependencies]
fluster_core = { path = "../lib" }
structopt = "0.2.15"

View File

@ -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)]

33
lib/Cargo.toml Normal file
View File

@ -0,0 +1,33 @@
[package]
name = "fluster_core"
version = "0.1.0"
authors = ["Mike Welsh <mwelsh@gmail.com>"]
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"]

13
lib/src/lib.rs Normal file
View File

@ -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;

View File

@ -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<Cursor<Vec<u8>>>,
@ -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<Player, JsValue> {
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<u8>) -> Result<Player, Box<std::error::Error>> {
Self::new_internal(swf_data)
}

18
web/Cargo.toml Normal file
View File

@ -0,0 +1,18 @@
[package]
name = "fluster_web"
version = "0.1.0"
authors = ["Mike Welsh <mwelsh@gmail.com>"]
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"

20
web/src/lib.rs Normal file
View File

@ -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<Player, JsValue> {
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);
}
}