maple 0.4.1

A 3D game engine
Documentation
use std::f32::consts::PI;

use maple::prelude::*;

fn main() {
    App::new(Config::default())
        .add_plugin(Core3D)
        .add_plugin(Physics3D)
        .load_scene(MainScene)
        .run();
}

pub struct MainScene;

impl SceneBuilder for MainScene {
    fn build(self, assets: &AssetLibrary) -> Scene {
        let scene = Scene::default();

        scene.spawn(
            Camera3D::builder()
                .position((-10.0, 2.0, 2.5))
                .far_plane(100.0)
                .looking_at((0.1, 0.1, 2.5))
                .fov(75.0),
        );

        scene.spawn(
            MeshInstance3D::builder()
                .mesh(assets.add(Cuboid::default()))
                .material(assets.add(PbrMaterial {
                    base_color_factor: Color::RED,
                    emissive_factor: Color::RED.with_intensity(10.0),
                    ..Default::default()
                }))
                .position((0.0, 0.0, -5.0)),
        );

        scene.spawn(
            MeshInstance3D::builder()
                .mesh(assets.add(Torus {
                    sides: 36,
                    rings: 36,
                    ring_radius: 0.5,
                    outer_radius: 1.0,
                }))
                .material(assets.add(PbrMaterial {
                    base_color_factor: Color::GREEN,
                    emissive_factor: Color::GREEN.with_intensity(10.0),
                    ..Default::default()
                }))
                .position((0.0, 0.0, 0.0)),
        );

        scene.spawn(
            MeshInstance3D::builder()
                .mesh(assets.add(Sphere::default()))
                .material(assets.add(PbrMaterial {
                    base_color_factor: Color::BLUE,
                    emissive_factor: Color::BLUE.with_intensity(10.0),
                    ..Default::default()
                }))
                .position((0.0, 0.0, 5.0)),
        );

        scene.spawn(
            MeshInstance3D::builder()
                .mesh(assets.add(Cuboid::default()))
                .material(assets.add(PbrMaterial {
                    base_color_factor: Color::WHITE,
                    emissive_factor: Color::WHITE.with_intensity(10.0),
                    ..Default::default()
                }))
                .position((0.0, 0.0, 10.0)),
        );

        scene.spawn(
            MeshInstance3D::builder()
                .mesh(assets.add(Cuboid::default()))
                .material(assets.add(PbrMaterial {
                    base_color_factor: Color::RED,
                    ..Default::default()
                }))
                .position((0.0, -2.5, -5.0)),
        );

        scene.spawn(
            MeshInstance3D::builder()
                .mesh(assets.add(Torus::default()))
                .material(assets.add(PbrMaterial {
                    base_color_factor: Color::GREEN,
                    ..Default::default()
                }))
                .position((0.0, -2.5, 0.0)),
        );

        scene.spawn(
            MeshInstance3D::builder()
                .mesh(assets.add(Sphere::default()))
                .material(assets.add(PbrMaterial {
                    base_color_factor: Color::BLUE,
                    ..Default::default()
                }))
                .position((0.0, -2.5, 5.0)),
        );

        scene.spawn(
            MeshInstance3D::builder()
                .mesh(assets.add(Cuboid::default()))
                .material(assets.add(PbrMaterial {
                    base_color_factor: Color::WHITE,
                    ..Default::default()
                }))
                .position((0.0, -2.5, 10.0)),
        );

        scene.spawn(DirectionalLight::builder().direction((-1.0, -1.0, -1.0)));

        scene
    }
}