2019-04-28 06:08:59 +00:00
|
|
|
use fluster_core::backend::render::web_canvas::WebCanvasRenderBackend;
|
2019-04-28 01:15:43 +00:00
|
|
|
use js_sys::Uint8Array;
|
|
|
|
use wasm_bindgen::{prelude::*, JsValue};
|
2019-04-28 06:08:59 +00:00
|
|
|
use web_sys::HtmlCanvasElement;
|
2019-04-28 01:15:43 +00:00
|
|
|
|
|
|
|
#[wasm_bindgen]
|
|
|
|
pub struct Player(fluster_core::Player);
|
|
|
|
|
|
|
|
#[wasm_bindgen]
|
|
|
|
impl Player {
|
2019-04-28 06:08:59 +00:00
|
|
|
pub fn new(canvas: HtmlCanvasElement, swf_data: Uint8Array) -> Result<Player, JsValue> {
|
|
|
|
Player::new_internal(canvas, swf_data).map_err(|_| "Error creating player".into())
|
2019-04-28 01:15:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn tick(&mut self, dt: f64) {
|
|
|
|
self.0.tick(dt);
|
|
|
|
}
|
|
|
|
}
|
2019-04-28 06:08:59 +00:00
|
|
|
|
|
|
|
impl Player {
|
|
|
|
fn new_internal(
|
|
|
|
canvas: HtmlCanvasElement,
|
|
|
|
swf_data: Uint8Array,
|
|
|
|
) -> Result<Player, Box<std::error::Error>> {
|
|
|
|
let mut data = vec![0; swf_data.length() as usize];
|
|
|
|
swf_data.copy_to(&mut data[..]);
|
|
|
|
|
|
|
|
let renderer = WebCanvasRenderBackend::new(canvas)?;
|
|
|
|
|
|
|
|
let player = fluster_core::Player::new(Box::new(renderer), data)?;
|
|
|
|
Ok(Player(player))
|
|
|
|
}
|
|
|
|
}
|