checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
[[package]]
+name = "base-x"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b"
+
+[[package]]
name = "bitflags"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
[[package]]
+name = "bumpalo"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820"
+
+[[package]]
name = "c_vec"
version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
name = "cloudabi"
version = "0.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
]
[[package]]
+name = "const_fn"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28b9d6de7f49e22cf97ad17fc4036ece69300032f45f78f30b4a4482cdc3f4a6"
+
+[[package]]
+name = "discard"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0"
+
+[[package]]
name = "fuchsia-cprng"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
[[package]]
+name = "itoa"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"
+
+[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "libc"
-version = "0.2.81"
+version = "0.2.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1482821306169ec4d07f6aca392a4681f66c75c9918aa49641a2595db64053cb"
+checksum = "89203f3fba0a3795506acaad8ebce3c80c0af93f994d5a1d7a0b1eeb23271929"
+
+[[package]]
+name = "log"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcf3805d4480bb5b86070dcfeb9e2cb2ebc148adb753c5cca5f884d1d65a42b2"
+dependencies = [
+ "cfg-if 0.1.10",
+]
[[package]]
name = "num"
]
[[package]]
+name = "proc-macro-hack"
+version = "0.5.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "991431c3519a3f36861882da93630ce66b52918dcf1b8e2fd66b397fc96f28df"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
name = "rand"
version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
]
[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
+
+[[package]]
name = "sdl-test"
version = "0.1.0"
dependencies = [
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34e71125077d297d57e4c1acfe8981b5bdfbf5a20e7b589abfdcb33bf1127f86"
dependencies = [
- "cfg-if",
+ "cfg-if 0.1.10",
"libc",
]
[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+
+[[package]]
+name = "serde"
+version = "1.0.119"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bdd36f49e35b61d49efd8aa7fc068fd295961fd2286d0b2ee9a4c7a14e99cc3"
+
+[[package]]
+name = "serde_derive"
+version = "1.0.119"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "552954ce79a059ddd5fd68c271592374bd15cab2274970380c000118aeffe1cd"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fceb2595057b6891a4ee808f70054bd2d12f0e97f1cbb78689b59f676df325a"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha1"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d"
+
+[[package]]
+name = "standback"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c66a8cff4fa24853fdf6b51f75c6d7f8206d7c75cab4e467bcd7f25c2b1febe0"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "stdweb"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5"
+dependencies = [
+ "discard",
+ "rustc_version",
+ "stdweb-derive",
+ "stdweb-internal-macros",
+ "stdweb-internal-runtime",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "stdweb-derive"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_derive",
+ "syn",
+]
+
+[[package]]
+name = "stdweb-internal-macros"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11"
+dependencies = [
+ "base-x",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "sha1",
+ "syn",
+]
+
+[[package]]
+name = "stdweb-internal-runtime"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0"
+
+[[package]]
+name = "syn"
+version = "1.0.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc60a3d73ea6594cd712d830cc1f0390fd71542d8c8cd24e70cc54cdfd5e05d5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
name = "time"
-version = "0.1.44"
+version = "0.2.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
+checksum = "273d3ed44dca264b0d6b3665e8d48fb515042d42466fad93d2a45b90ec4058f7"
dependencies = [
+ "const_fn",
"libc",
- "wasi",
+ "standback",
+ "stdweb",
+ "time-macros",
+ "version_check",
"winapi",
]
[[package]]
-name = "wasi"
-version = "0.10.0+wasi-snapshot-preview1"
+name = "time-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1"
+dependencies = [
+ "proc-macro-hack",
+ "time-macros-impl",
+]
+
+[[package]]
+name = "time-macros-impl"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5c3be1edfad6027c69f5491cf4cb310d1a71ecd6af742788c6ff8bced86b8fa"
+dependencies = [
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "standback",
+ "syn",
+]
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
+
+[[package]]
+name = "version_check"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cd364751395ca0f68cafb17666eee36b63077fb5ecd972bbcd74c90c4bf736e"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1114f89ab1f4106e5b55e688b828c0ab0ea593a1ea7c094b141b14cbaaec2d62"
+dependencies = [
+ "bumpalo",
+ "lazy_static",
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6ac8995ead1f084a8dea1e65f194d0973800c7f571f6edd70adf06ecf77084"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5a48c72f299d80557c7c62e37e7225369ecc0c963964059509fbafe917c7549"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+checksum = "7e7811dd7f9398f14cc76efd356f98f03aa30419dea46aa810d71e819fc97158"
[[package]]
name = "winapi"
[dependencies]
rand = "0.6.5"
-time = "0.1.42"
+time = "0.2.24"
[dependencies.sdl2]
version = "0.32.1"
use std::ops::{Add, AddAssign, Sub, SubAssign, Mul, MulAssign, Div, DivAssign, Neg};
-pub type Nanoseconds = u64;
-
#[macro_export]
macro_rules! point {
( $x:expr, $y:expr ) => {
use boll::*;
-use common::{Nanoseconds, Point2D, Rect};
+use common::{Point2D, Rect};
use core::controller::ControllerManager;
use point; // defined in common, but loaded from main...
use rand::Rng;
use sdl2::{EventPump, VideoSubsystem};
use sprites::SpriteManager;
use std::f32::consts::PI;
-use time::PreciseTime;
+use time::{Duration, Instant, prelude::*};
const FPS: u32 = 60;
const NS_PER_FRAME: u32 = 1_000_000_000 / FPS;
}
pub fn start(&mut self) {
- // let mut frame_count: u64 = 0;
- // let mut fps_time = PreciseTime::now();
- let mut last_time = PreciseTime::now();
+ let mut last_time = Instant::now();
self.state.enter(&mut self.ctrl_man);
break 'running;
}
- let duration =
- last_time.to(PreciseTime::now()).num_nanoseconds().unwrap() as Nanoseconds;
- last_time = PreciseTime::now();
+ let duration = Instant::now() - last_time;
+ last_time = Instant::now();
+
self.ctrl_man.update(duration);
self.state.update(duration);
self.render();
-
- // frame_count += 1;
- // if frame_count == FPS as u64 {
- // let duration = fps_time.to(PreciseTime::now()).num_nanoseconds().unwrap() as f64
- // / 1_000_000_000.0;
- // // println!("fps: {}", frame_count as f64 / duration);
- // frame_count = 0;
- // fps_time = PreciseTime::now();
- // }
}
self.state.leave();
pub trait AppState {
fn enter(&mut self, ctrl_man: &mut ControllerManager);
fn leave(&mut self);
- fn update(&mut self, dt: Nanoseconds);
+ fn update(&mut self, dt: Duration);
fn render(&mut self, canvas: &mut Canvas<Window>, sprites: &mut SpriteManager);
fn handle_event(&mut self, event: Event);
}
}
impl AppState for ActiveState {
- fn enter(&mut self, ctrl_man: &mut ControllerManager) {}
+ fn enter(&mut self, _ctrl_man: &mut ControllerManager) {}
- fn update(&mut self, dt: Nanoseconds) {
+ fn update(&mut self, dt: Duration) {
for b in &mut self.bolls {
b.update();
}
match dt {
- ns if ns < (NS_PER_FRAME - 90_0000) as u64 => self.change_boll_count(100),
- ns if ns > (NS_PER_FRAME + 90_0000) as u64 => self.change_boll_count(-100),
+ ns if ns < (NS_PER_FRAME - 90_0000).nanoseconds() => self.change_boll_count(100),
+ ns if ns > (NS_PER_FRAME + 90_0000).nanoseconds() => self.change_boll_count(-100),
_ => {}
}
}
-use sdl2::JoystickSubsystem;
-use common::Nanoseconds;
-use common::Radians;
use common::Point2D;
+use common::Radians;
use sdl2::HapticSubsystem;
+use sdl2::JoystickSubsystem;
use sdl2::event::Event;
use sdl2::haptic::Haptic;
use sdl2::joystick::Joystick;
use std::cell::RefCell;
use std::collections::HashMap;
use std::rc::Rc;
+use time::{Duration, prelude::*};
#[derive(Debug, Default)]
pub struct Button {
- pub time_pressed: Nanoseconds,
- pub time_released: Nanoseconds,
+ pub time_pressed: Duration,
+ pub time_released: Duration,
pub is_pressed: bool,
pub was_pressed: bool,
pub toggle: bool,
}
impl Button {
- fn update(&mut self, device: &Joystick, dt: Nanoseconds, btn: u8) {
+ fn update(&mut self, device: &Joystick, dt: Duration, btn: u8) {
self.was_pressed = self.is_pressed;
self.is_pressed = match device.button(btn as u32) {
Ok(true) => {
if !self.was_pressed {
- self.time_pressed = 0;
+ self.time_pressed = 0.seconds();
self.toggle = !self.toggle;
}
self.time_pressed += dt;
}
Ok(false) => {
if self.was_pressed {
- self.time_released = 0;
+ self.time_released = 0.seconds();
}
self.time_released += dt;
false
impl Axis {
#[allow(dead_code)]
- fn update(&mut self, device: &Joystick, _dt: Nanoseconds, axis: u8) {
+ fn update(&mut self, device: &Joystick, _dt: Duration, axis: u8) {
self.val = match device.axis(axis as u32) {
Ok(val) => val as f32 / 32768.0,
Err(_) => panic!("invalid axis {}", axis),
}
impl Stick {
- fn update(&mut self, device: &Joystick, _dt: Nanoseconds, x_axis: u8, y_axis: u8) {
+ fn update(&mut self, device: &Joystick, _dt: Duration, x_axis: u8, y_axis: u8) {
self.x = match device.axis(x_axis as u32) {
Ok(val) => val as f32 / 32768.0,
Err(_) => panic!("invalid x axis {}", x_axis),
}
}
- pub fn update(&mut self, dt: Nanoseconds) {
+ pub fn update(&mut self, dt: Duration) {
self.mov.update(&self.device, dt, 0, 1); // left stick
self.aim.update(&self.device, dt, 3, 4); // right stick
self.jump.update(&self.device, dt, 4); // left shoulder
}
/// strength [0 - 1]
- pub fn rumble(&self, strength: f32, duration_ms: u32) {
+ pub fn rumble(&self, strength: f32, duration: Duration) {
if let Some(h) = &self.haptic {
- h.borrow_mut().rumble_play(strength, duration_ms);
+ h.borrow_mut().rumble_play(strength, duration.whole_milliseconds() as u32);
}
}
}
}
}
- pub fn update(&mut self, dt: Nanoseconds) {
+ pub fn update(&mut self, dt: Duration) {
self.controllers.iter().for_each(|(_, v)| v.borrow_mut().update(dt));
}
use AppState;
-use common::Nanoseconds;
use common::Point2D;
use core::controller::Controller;
use core::controller::ControllerManager;
use sprites::SpriteManager;
use std::cell::RefCell;
use std::rc::Rc;
+use time::Duration;
////////// GAMESTATE ///////////////////////////////////////////////////////////
fn leave(&mut self) {}
- fn update(&mut self, dt: Nanoseconds) {
+ fn update(&mut self, dt: Duration) {
self.world.update(dt);
}
}
}
- pub fn update(&mut self, dt: Nanoseconds) {
+ pub fn update(&mut self, dt: Duration) {
let mut breeding_ground = vec!();
for i in (0..self.objects.len()).rev() {
type Objects = Vec<Box<dyn Object>>;
pub trait Object {
- fn update(&mut self, objects: &mut Objects, lvl: &Level, dt: Nanoseconds) -> ObjectState;
+ fn update(&mut self, objects: &mut Objects, lvl: &Level, dt: Duration) -> ObjectState;
fn render(&self, _canvas: &mut Canvas<Window>, _sprites: &mut SpriteManager) {}
}
}
impl Object for Character {
- fn update(&mut self, objects: &mut Objects, lvl: &Level, _dt: Nanoseconds) -> ObjectState {
+ fn update(&mut self, objects: &mut Objects, lvl: &Level, dt: Duration) -> ObjectState {
self.vel += lvl.gravity;
self.pos += self.vel;
bounces: 2,
}));
}
- ctrl.rumble(1.0, _dt as u32 / 1_000_000);
+ ctrl.rumble(1.0, dt);
}
match ctrl.mov.x {
}
impl Object for Boll {
- fn update(&mut self, _objects: &mut Objects, lvl: &Level, _dt: Nanoseconds) -> ObjectState {
+ fn update(&mut self, _objects: &mut Objects, lvl: &Level, _dt: Duration) -> ObjectState {
self.vel += lvl.gravity;
self.pos += self.vel;