summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs74
1 files changed, 39 insertions, 35 deletions
diff --git a/src/main.rs b/src/main.rs
index dfcf22c..e5076d1 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -61,40 +61,42 @@ 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::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();
- engine.add_extension(engine::windowing::Extension::default());
+ Ok(())
+}
- engine.add_extension(
- RenderingExtension::builder()
- .graphics_props(
- GraphicsProperties::builder()
- .debug(cfg!(debug_assertions))
- .build(),
- )
- .build(),
- );
+struct Application;
- engine.add_extension(FlyCameraExtension(FlyCameraOptions {
- mouse_sensitivity: 0.2,
- }));
+impl engine::ecs::extension::Extension for Application
+{
+ fn collect(self, mut collector: engine::ecs::extension::Collector<'_>)
+ {
+ let _ = collector.add_sole(GlobalLight::default());
- engine.add_extension(InputExtension::default());
+ collector.add_system(*START_PHASE, init);
+ }
+}
- engine.spawn((
+fn init(mut assets: Single<Assets>, mut actions: Actions)
+{
+ actions.spawn((
WindowCreationAttributes::default()
.with_title("Game")
.with_cursor_visible(false)
@@ -102,13 +104,15 @@ fn main() -> Result<(), Box<dyn Error>>
RenderingTargetWindow,
));
- engine.start();
-
- Ok(())
-}
+ actions.spawn((
+ Camera::default(),
+ WorldPosition {
+ position: Vec3 { x: 0.0, y: 0.0, z: 3.0 },
+ },
+ ActiveCamera,
+ FlyCamera::default(),
+ ));
-fn init(mut assets: Single<Assets>, mut actions: Actions)
-{
actions.spawn((
PointLight::builder()
.diffuse(YELLOW)