Some code cleanup
This commit is contained in:
parent
81c3b5be55
commit
2e225ccd09
|
@ -886,16 +886,6 @@ dependencies = [
|
||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "hecs"
|
|
||||||
version = "0.10.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9d2711ad60b74f2f3d0c0ac338a58410a5249da44005971ae806d2925e6b5167"
|
|
||||||
dependencies = [
|
|
||||||
"hashbrown 0.13.2",
|
|
||||||
"spin",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hermit-abi"
|
name = "hermit-abi"
|
||||||
version = "0.3.2"
|
version = "0.3.2"
|
||||||
|
@ -1113,7 +1103,6 @@ dependencies = [
|
||||||
"edict",
|
"edict",
|
||||||
"gilrs-core",
|
"gilrs-core",
|
||||||
"glam",
|
"glam",
|
||||||
"hecs",
|
|
||||||
"image",
|
"image",
|
||||||
"instant",
|
"instant",
|
||||||
"petgraph",
|
"petgraph",
|
||||||
|
@ -1782,12 +1771,6 @@ dependencies = [
|
||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "spin"
|
|
||||||
version = "0.9.8"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "spirv"
|
name = "spirv"
|
||||||
version = "0.2.0+1.5.4"
|
version = "0.2.0+1.5.4"
|
||||||
|
|
|
@ -21,7 +21,6 @@ tobj = { version = "3.2.1", features = [
|
||||||
]}
|
]}
|
||||||
instant = "0.1"
|
instant = "0.1"
|
||||||
async-trait = "0.1.65"
|
async-trait = "0.1.65"
|
||||||
hecs = "0.10.3"
|
|
||||||
glam = { version = "0.24.0", features = ["bytemuck"] }
|
glam = { version = "0.24.0", features = ["bytemuck"] }
|
||||||
petgraph = "0.6.3"
|
petgraph = "0.6.3"
|
||||||
gilrs-core = "0.5.6"
|
gilrs-core = "0.5.6"
|
||||||
|
|
|
@ -1,15 +1,4 @@
|
||||||
use std::{any::Any, collections::VecDeque};
|
use std::any::Any;
|
||||||
|
|
||||||
use winit::event::WindowEvent;
|
|
||||||
|
|
||||||
pub mod window_state;
|
|
||||||
pub use window_state::*;
|
|
||||||
|
|
||||||
pub mod events;
|
|
||||||
pub use events::*;
|
|
||||||
|
|
||||||
pub mod event_queue;
|
|
||||||
pub use event_queue::*;
|
|
||||||
|
|
||||||
pub trait CastableAny: Send + Sync + 'static {
|
pub trait CastableAny: Send + Sync + 'static {
|
||||||
fn as_any(&self) -> &dyn Any;
|
fn as_any(&self) -> &dyn Any;
|
|
@ -1,7 +1,6 @@
|
||||||
use edict::Component;
|
use edict::Component;
|
||||||
use winit::dpi::PhysicalSize;
|
|
||||||
|
|
||||||
use crate::{math::{Angle, OPENGL_TO_WGPU_MATRIX, Transform}, render::camera::CameraProjectionMode};
|
use crate::{math::{Angle, Transform}, render::camera::CameraProjectionMode};
|
||||||
|
|
||||||
#[derive(Clone, Component)]
|
#[derive(Clone, Component)]
|
||||||
pub struct CameraComponent {
|
pub struct CameraComponent {
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
use std::{collections::{HashMap, VecDeque}, any::{TypeId, Any}, cell::{RefCell, Ref, RefMut}};
|
use std::{collections::{HashMap, VecDeque}, any::{TypeId, Any}, cell::{RefCell, Ref, RefMut}};
|
||||||
|
|
||||||
use super::{CastableAny, Events, Event};
|
use crate::castable_any::CastableAny;
|
||||||
|
|
||||||
|
pub trait Event: Clone + Send + Sync + 'static {}
|
||||||
|
impl<T: Clone + Send + Sync + 'static> Event for T {}
|
||||||
|
|
||||||
|
pub type Events<T> = VecDeque<T>;
|
||||||
|
|
||||||
pub struct EventQueue {
|
pub struct EventQueue {
|
||||||
events: HashMap<TypeId, RefCell<Box<dyn CastableAny>>>,
|
events: HashMap<TypeId, RefCell<Box<dyn CastableAny>>>,
|
|
@ -6,7 +6,8 @@ use tracing::warn;
|
||||||
use crate::game::Controls;
|
use crate::game::Controls;
|
||||||
|
|
||||||
pub mod components;
|
pub mod components;
|
||||||
pub mod resources;
|
pub mod events;
|
||||||
|
pub use events::*;
|
||||||
|
|
||||||
/// A trait that represents a simple system
|
/// A trait that represents a simple system
|
||||||
pub trait SimpleSystem {
|
pub trait SimpleSystem {
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
use std::collections::VecDeque;
|
|
||||||
|
|
||||||
pub trait Event: Clone + Send + Sync + 'static {}
|
|
||||||
impl<T: Clone + Send + Sync + 'static> Event for T {}
|
|
||||||
|
|
||||||
pub type Events<T> = VecDeque<T>;
|
|
|
@ -1,15 +0,0 @@
|
||||||
use std::any::Any;
|
|
||||||
|
|
||||||
use super::CastableAny;
|
|
||||||
|
|
||||||
#[derive(Clone, Default)]
|
|
||||||
pub struct WindowState {
|
|
||||||
pub is_focused: bool,
|
|
||||||
pub is_cursor_inside_window: bool,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl WindowState {
|
|
||||||
pub fn new() -> Self {
|
|
||||||
Self::default()
|
|
||||||
}
|
|
||||||
}
|
|
61
src/game.rs
61
src/game.rs
|
@ -14,67 +14,24 @@ use tracing_subscriber::{
|
||||||
|
|
||||||
use winit::{window::{WindowBuilder, Window}, event::{Event, WindowEvent, KeyboardInput, ElementState, VirtualKeyCode, DeviceEvent}, event_loop::{EventLoop, ControlFlow}};
|
use winit::{window::{WindowBuilder, Window}, event::{Event, WindowEvent, KeyboardInput, ElementState, VirtualKeyCode, DeviceEvent}, event_loop::{EventLoop, ControlFlow}};
|
||||||
|
|
||||||
use crate::{render::renderer::{Renderer, BasicRenderer}, input_event::InputEvent, ecs::{SimpleSystem, SystemDispatcher, resources::{WindowState, Events, EventQueue}}, input::InputSystem};
|
use crate::{render::renderer::{Renderer, BasicRenderer}, input_event::InputEvent, ecs::{SimpleSystem, SystemDispatcher, EventQueue, Events}, input::InputSystem};
|
||||||
|
|
||||||
pub struct Controls<'a> {
|
pub struct Controls<'a> {
|
||||||
pub world: &'a mut edict::World,
|
pub world: &'a mut edict::World,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct TickCounter {
|
#[derive(Clone, Default)]
|
||||||
counter: u32,
|
pub struct WindowState {
|
||||||
last_second: Instant,
|
pub is_focused: bool,
|
||||||
changed: bool,
|
pub is_cursor_inside_window: bool,
|
||||||
tps: f32,
|
|
||||||
/// the time (in seconds) that passes between each tick
|
|
||||||
tick_time: f32
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TickCounter {
|
impl WindowState {
|
||||||
fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
Self {
|
Self::default()
|
||||||
counter: 0,
|
|
||||||
last_second: Instant::now(),
|
|
||||||
tps: 0.0,
|
|
||||||
changed: false,
|
|
||||||
tick_time: 0.0,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns true if the tps changed
|
|
||||||
fn tick(&mut self) -> bool {
|
|
||||||
self.counter += 1;
|
|
||||||
|
|
||||||
if self.last_second.elapsed().as_secs() > 0 {
|
|
||||||
self.tick_time = 1000.0 / self.counter as f32;
|
|
||||||
self.tps = self.counter as f32;
|
|
||||||
|
|
||||||
self.changed = true;
|
|
||||||
self.counter = 0;
|
|
||||||
self.last_second = Instant::now();
|
|
||||||
}
|
|
||||||
|
|
||||||
self.changed
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Gets the change in ticks per second
|
|
||||||
fn get_change(&mut self) -> Option<f32> {
|
|
||||||
match self.changed {
|
|
||||||
true => {
|
|
||||||
self.changed = false;
|
|
||||||
|
|
||||||
Some(self.tps)
|
|
||||||
},
|
|
||||||
false => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Get the time (in seconds) between ticks
|
|
||||||
fn get_tick_time(&self) -> f32 {
|
|
||||||
self.tick_time
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
struct GameLoop {
|
struct GameLoop {
|
||||||
window: Arc<Window>,
|
window: Arc<Window>,
|
||||||
renderer: Box<dyn Renderer>,
|
renderer: Box<dyn Renderer>,
|
||||||
|
@ -83,7 +40,6 @@ struct GameLoop {
|
||||||
/// higher priority systems
|
/// higher priority systems
|
||||||
engine_sys_dispatcher: SystemDispatcher,
|
engine_sys_dispatcher: SystemDispatcher,
|
||||||
user_sys_dispatcher: SystemDispatcher,
|
user_sys_dispatcher: SystemDispatcher,
|
||||||
fps_counter: TickCounter,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl GameLoop {
|
impl GameLoop {
|
||||||
|
@ -95,7 +51,6 @@ impl GameLoop {
|
||||||
world,
|
world,
|
||||||
engine_sys_dispatcher: SystemDispatcher::new(),
|
engine_sys_dispatcher: SystemDispatcher::new(),
|
||||||
user_sys_dispatcher: user_systems,
|
user_sys_dispatcher: user_systems,
|
||||||
fps_counter: TickCounter::new(),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ use glam::Vec2;
|
||||||
use tracing::{warn, debug};
|
use tracing::{warn, debug};
|
||||||
use winit::event::{ElementState, MouseScrollDelta};
|
use winit::event::{ElementState, MouseScrollDelta};
|
||||||
|
|
||||||
use crate::{ecs::{SimpleSystem, resources::EventQueue}, input_event::InputEvent};
|
use crate::{ecs::{SimpleSystem, EventQueue}, input_event::InputEvent};
|
||||||
|
|
||||||
pub type KeyCode = winit::event::VirtualKeyCode;
|
pub type KeyCode = winit::event::VirtualKeyCode;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
use winit::{event::{DeviceId, KeyboardInput, ModifiersState, MouseScrollDelta, TouchPhase, MouseButton, AxisId, Touch, WindowEvent, ElementState}, dpi::PhysicalPosition};
|
use winit::{event::{DeviceId, KeyboardInput, ModifiersState, MouseScrollDelta, TouchPhase, MouseButton, AxisId, Touch, WindowEvent, ElementState}, dpi::PhysicalPosition};
|
||||||
|
|
||||||
use crate::ecs::resources::CastableAny;
|
|
||||||
|
|
||||||
/// Wrapper around events from `winit::WindowEvent` that are specific to input related events.
|
/// Wrapper around events from `winit::WindowEvent` that are specific to input related events.
|
||||||
///
|
///
|
||||||
/// The `winit::WindowEvent` enum has many values that are related to inputs.
|
/// The `winit::WindowEvent` enum has many values that are related to inputs.
|
||||||
|
|
|
@ -5,6 +5,7 @@ mod resources;
|
||||||
mod ecs;
|
mod ecs;
|
||||||
mod math;
|
mod math;
|
||||||
mod input;
|
mod input;
|
||||||
|
mod castable_any;
|
||||||
|
|
||||||
use atomicell::Ref;
|
use atomicell::Ref;
|
||||||
use ecs::components::mesh::MeshComponent;
|
use ecs::components::mesh::MeshComponent;
|
||||||
|
|
Loading…
Reference in New Issue