summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs99
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 {