nightshade-api 0.53.0

Procedural high level API for the nightshade game engine
Documentation
//! Particle effects: built-in fire, smoke, sparks, bursts, fireworks, and custom
//! emitters, plus the configurable ParticleEmitter presets. Press space to
//! retune and retrigger the firework emitter.

use nightshade_api::prelude::*;

struct State {
    emitter: Entity,
    alternate: bool,
}

fn main() {
    run(
        |world| {
            set_background(world, Background::Space);
            show_grid(world, false);
            set_bloom(world, true);
            spawn_floor(world, 16.0);

            emit_fire(world, vec3(-6.0, 0.5, 0.0));
            emit_smoke(world, vec3(-3.0, 0.5, 0.0));
            emit_sparks(world, vec3(0.0, 0.5, 0.0));
            emit_burst(world, vec3(3.0, 0.5, 0.0), ORANGE, 120);
            emit_firework(world, vec3(6.0, 0.5, 0.0), vec3(0.0, 8.0, 0.0));
            emit_particles(
                world,
                vec3(0.0, 0.5, 4.0),
                60.0,
                2.0,
                0.2,
                vec3(0.0, -2.0, 0.0),
            );

            spawn_particle_emitter(world, ParticleEmitter::fire(vec3(-6.0, 0.5, -4.0)));
            spawn_particle_emitter(world, ParticleEmitter::smoke(vec3(-3.0, 0.5, -4.0)));
            spawn_particle_emitter(world, ParticleEmitter::sparks(vec3(0.0, 0.5, -4.0)));

            let emitter = spawn_particle_emitter(
                world,
                ParticleEmitter::firework_explosion(vec3(3.0, 3.0, -4.0), vec3(1.0, 0.6, 0.2), 200),
            );

            spawn_text(world, "space: retrigger firework", ScreenAnchor::TopLeft);
            orbit_camera(world, vec3(0.0, 2.0, 0.0), 16.0);
            State {
                emitter,
                alternate: false,
            }
        },
        |world, state| {
            if key_pressed(world, KeyCode::Space) {
                state.alternate = !state.alternate;
                let color = if state.alternate {
                    vec3(0.3, 0.7, 1.0)
                } else {
                    vec3(1.0, 0.6, 0.2)
                };
                set_emitter(
                    world,
                    state.emitter,
                    ParticleEmitter::firework_explosion(vec3(3.0, 3.0, -4.0), color, 300),
                );
            }
        },
    )
    .unwrap();
}