lib.rs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. use fourteen_screws::{ Camera, Scene, Renderer };
  2. use fourteen_screws::trig;
  3. use serde_json;
  4. use wasm_bindgen::prelude::*;
  5. extern crate web_sys;
  6. mod player;
  7. const PLAYER_MARGIN: i32 = 28;
  8. const PLAYER_MOVE_SPEED: i32 = 8;
  9. const PLAYER_TURN_SPEED: i32 = trig::ANGLE_5;
  10. #[wasm_bindgen]
  11. pub struct FourteenScrewsDemo {
  12. scene: Scene,
  13. player: player::Player,
  14. renderer: Renderer,
  15. }
  16. #[wasm_bindgen]
  17. impl FourteenScrewsDemo {
  18. pub fn player_forward(&mut self) {
  19. self.player.forward(&self.scene);
  20. }
  21. pub fn player_back(&mut self) {
  22. self.player.back(&self.scene);
  23. }
  24. pub fn player_strafe_left(&mut self) {
  25. self.player.strafe_left(&self.scene);
  26. }
  27. pub fn player_strafe_right(&mut self) {
  28. self.player.strafe_right(&self.scene);
  29. }
  30. pub fn player_turn_left(&mut self) {
  31. self.player.turn_left();
  32. }
  33. pub fn player_turn_right(&mut self) {
  34. self.player.turn_right();
  35. }
  36. pub fn load_level(json_str: &str) -> FourteenScrewsDemo {
  37. let json: serde_json::Value = serde_json::from_str(json_str).ok().unwrap();
  38. let scene = Scene::from_json(&json["scene"]).ok().unwrap();
  39. let camera = Camera::from_json(&json["camera"]).ok().unwrap();
  40. let renderer = Renderer::from_json(&json["renderer"]).ok().unwrap();
  41. let player = player::Player::new(camera, PLAYER_MOVE_SPEED, PLAYER_TURN_SPEED, PLAYER_MARGIN);
  42. FourteenScrewsDemo { scene, player, renderer }
  43. }
  44. pub fn render(&mut self, buf: &mut[u8]) {
  45. self.renderer.render(buf, &self.scene, &self.player.camera);
  46. }
  47. }