nightshade_api/
materials.rs1use nightshade::ecs::material::resources::material_registry_iter;
7use nightshade::prelude::*;
8use nightshade::render::material::Material;
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> = material_registry_iter(
21 &world
22 .res::<nightshade::ecs::asset_state::AssetState>()
23 .material_registry,
24 )
25 .map(|(name, material)| MaterialEntry {
26 name: name.clone(),
27 material: material.clone(),
28 })
29 .collect();
30 entries.sort_by(|a, b| a.name.cmp(&b.name));
31 entries
32}
33
34pub fn material(world: &World, name: &str) -> Option<Material> {
36 registry_entry_by_name(
37 &world
38 .res::<nightshade::ecs::asset_state::AssetState>()
39 .material_registry
40 .registry,
41 name,
42 )
43 .cloned()
44}
45
46pub fn update_material(world: &mut World, name: &str, material: Material) {
50 queue_ecs_command(
51 world,
52 nightshade::ecs::world::commands::EcsCommand::ReloadMaterial {
53 name: name.to_string(),
54 material: Box::new(material),
55 },
56 );
57}
58
59pub fn register_material(world: &mut World, name: &str, material: Material) -> String {
65 nightshade::ecs::material::resources::material_registry_find_or_insert(
66 &mut world
67 .res_mut::<nightshade::ecs::asset_state::AssetState>()
68 .material_registry,
69 name.to_string(),
70 material,
71 )
72}
73
74pub fn set_material_variant(world: &mut World, variant: Option<&str>) -> usize {
77 nightshade::ecs::material::commands::material_variant_apply(world, variant)
78}