nightshade_api/
materials.rs1use nightshade::ecs::material::components::Material;
7use nightshade::ecs::material::resources::material_registry_iter;
8use nightshade::prelude::*;
9use serde::{Deserialize, Serialize};
10
11#[derive(Clone, Serialize, Deserialize)]
13pub struct MaterialEntry {
14 pub name: String,
15 pub material: Material,
16}
17
18pub fn list_materials(world: &World) -> Vec<MaterialEntry> {
20 let mut entries: Vec<MaterialEntry> =
21 material_registry_iter(&world.resources.assets.material_registry)
22 .map(|(name, material)| MaterialEntry {
23 name: name.clone(),
24 material: material.clone(),
25 })
26 .collect();
27 entries.sort_by(|a, b| a.name.cmp(&b.name));
28 entries
29}
30
31pub fn get_material(world: &World, name: &str) -> Option<Material> {
33 registry_entry_by_name(&world.resources.assets.material_registry.registry, name).cloned()
34}
35
36pub fn update_material(world: &mut World, name: &str, material: Material) {
40 queue_ecs_command(
41 world,
42 nightshade::ecs::world::commands::EcsCommand::ReloadMaterial {
43 name: name.to_string(),
44 material: Box::new(material),
45 },
46 );
47}
48
49pub fn register_material(world: &mut World, name: &str, material: Material) -> String {
55 nightshade::ecs::material::resources::material_registry_find_or_insert(
56 &mut world.resources.assets.material_registry,
57 name.to_string(),
58 material,
59 )
60}
61
62pub fn set_material_variant(world: &mut World, variant: Option<&str>) -> usize {
65 nightshade::ecs::material::commands::material_variant_apply(world, variant)
66}