diff options
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 99 |
1 files changed, 46 insertions, 53 deletions
diff --git a/src/main.rs b/src/main.rs index ebb6563..e5076d1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,11 +11,8 @@ use engine::camera::{Active as ActiveCamera, Camera}; use engine::color::Color; use engine::data_types::dimens::Dimens3; use engine::ecs::actions::Actions; -use engine::ecs::event::component::{Added, EventMatchExt}; -use engine::ecs::pair::Pair; use engine::ecs::phase::START as START_PHASE; use engine::ecs::sole::Single; -use engine::ecs::system::observer::Observe; use engine::input::Extension as InputExtension; use engine::lighting::{AttenuationParams, GlobalLight, PointLight}; use engine::material::{Flags as MaterialFlags, Material}; @@ -24,13 +21,16 @@ use engine::mesh::cube::{ CreationSpec as CubeMeshCreationSpec, }; use engine::model::{Materials as ModelMaterials, Model, Spec as ModelSpec}; -use engine::rendering::{Extension as RenderingExtension, GraphicsProperties, TargetWindow as RenderingTargetWindow}; +use engine::rendering::{ + Extension as RenderingExtension, + GraphicsProperties, + TargetWindow as RenderingTargetWindow, +}; use engine::transform::WorldPosition; use engine::vector::Vec3; use engine::windowing::window::{ CreationAttributes as WindowCreationAttributes, CursorGrabMode as WindowCursorGrabMode, - Window, }; use engine::Engine; use tracing::level_filters::LevelFilter; @@ -61,66 +61,59 @@ fn main() -> Result<(), Box<dyn Error>> ) .init(); - let mut engine = Engine::new(); - - engine.spawn(( - Camera::default(), - WorldPosition { - position: Vec3 { x: 0.0, y: 0.0, z: 3.0 }, - }, - ActiveCamera, - FlyCamera::default(), - )); - - engine.add_sole(GlobalLight::default())?; - - engine.register_system(*START_PHASE, init); - - engine.register_observer(configure_window_on_added); - - engine.add_extension(engine::windowing::Extension::default()); - - engine.add_extension( - RenderingExtension::builder() - .graphics_props( - GraphicsProperties::builder() - .debug(cfg!(debug_assertions)) - .build(), - ) - .build(), - ); - - engine.add_extension(FlyCameraExtension(FlyCameraOptions { - mouse_sensitivity: 0.2, - })); - - engine.add_extension(InputExtension::default()); - - engine.spawn(( - WindowCreationAttributes::default().with_title("Game"), - RenderingTargetWindow - )); - - engine.start(); + Engine::new() + .with_extension(engine::windowing::Extension::default()) + .with_extension( + RenderingExtension::builder() + .graphics_props( + GraphicsProperties::builder() + .debug(cfg!(debug_assertions)) + .build(), + ) + .build(), + ) + .with_extension(InputExtension::default()) + .with_extension(FlyCameraExtension(FlyCameraOptions { + mouse_sensitivity: 0.2, + })) + .with_extension(Application) + .start(); Ok(()) } -fn configure_window_on_added(observe: Observe<Pair<Added, Window>>) -{ - for evt_match in &observe { - let mut window = evt_match.get_ent_target_comp_mut(); +struct Application; - window.cursor_visible = false; - window.cursor_grab_mode = WindowCursorGrabMode::Locked; +impl engine::ecs::extension::Extension for Application +{ + fn collect(self, mut collector: engine::ecs::extension::Collector<'_>) + { + let _ = collector.add_sole(GlobalLight::default()); - window.set_changed(); + collector.add_system(*START_PHASE, init); } } fn init(mut assets: Single<Assets>, mut actions: Actions) { actions.spawn(( + WindowCreationAttributes::default() + .with_title("Game") + .with_cursor_visible(false) + .with_cursor_grab_mode(WindowCursorGrabMode::Locked), + RenderingTargetWindow, + )); + + actions.spawn(( + Camera::default(), + WorldPosition { + position: Vec3 { x: 0.0, y: 0.0, z: 3.0 }, + }, + ActiveCamera, + FlyCamera::default(), + )); + + actions.spawn(( PointLight::builder() .diffuse(YELLOW) .attenuation_params(AttenuationParams { |
