example item

This commit is contained in:
2025-09-12 18:04:03 +01:00
parent ee7ac39ad5
commit 8a5884c6d5
19 changed files with 1009 additions and 53 deletions
+156
View File
@@ -0,0 +1,156 @@
use bevy::prelude::*;
#[derive(Component, Debug, Clone, PartialEq, Eq, Hash)]
pub enum Material {
NA,
Wood(WoodType),
Stone(StoneType),
Metal(MetalType),
Cloth(ClothType),
Leather(LeatherType),
Bone,
Shell,
Glass,
Ceramic,
Gem(GemType),
Wax,
}
impl Material {
// Weight per unit volume (arbitrary units - adjust as needed)
pub fn density(&self) -> f32 {
match self {
Material::NA => 1.0,
Material::Wood(wood) => match wood {
WoodType::Oak => 0.7,
WoodType::Pine => 0.5,
WoodType::Birch => 0.6,
WoodType::Ironwood => 1.2,
},
Material::Stone(stone) => match stone {
StoneType::Granite => 2.7,
StoneType::Marble => 2.6,
StoneType::Sandstone => 2.2,
StoneType::Obsidian => 2.4,
},
Material::Metal(metal) => match metal {
MetalType::Iron => 7.9,
MetalType::Steel => 7.8,
MetalType::Copper => 8.9,
MetalType::Silver => 10.5,
MetalType::Gold => 19.3,
MetalType::Platinum => 21.5,
},
Material::Cloth(_) => 0.3,
Material::Leather(_) => 0.8,
Material::Bone => 1.8,
Material::Shell => 2.0,
Material::Glass => 2.5,
Material::Ceramic => 2.3,
Material::Gem(gem) => match gem {
GemType::Diamond => 3.5,
GemType::Ruby => 4.0,
GemType::Emerald => 2.7,
GemType::Sapphire => 4.0,
},
Material::Wax => 0.1,
}
}
// Base value per unit (before quality modifiers)
pub fn base_value(&self) -> u32 {
match self {
Material::NA => 1,
Material::Wood(_) => 1,
Material::Stone(_) => 2,
Material::Metal(metal) => match metal {
MetalType::Iron => 5,
MetalType::Steel => 8,
MetalType::Copper => 3,
MetalType::Silver => 15,
MetalType::Gold => 30,
MetalType::Platinum => 40,
},
Material::Cloth(_) => 2,
Material::Leather(_) => 3,
Material::Bone => 1,
Material::Shell => 2,
Material::Glass => 4,
Material::Ceramic => 3,
Material::Gem(gem) => match gem {
GemType::Diamond => 200,
GemType::Ruby => 150,
GemType::Emerald => 100,
GemType::Sapphire => 120,
},
Material::Wax => 3,
}
}
pub fn name(&self) -> String {
match self {
Material::NA => "N/A".to_string(),
Material::Wood(wood) => format!("{:?}", wood).to_lowercase(),
Material::Stone(stone) => format!("{:?}", stone).to_lowercase(),
Material::Metal(metal) => format!("{:?}", metal).to_lowercase(),
Material::Cloth(cloth) => format!("{:?}", cloth).to_lowercase(),
Material::Leather(leather) => {
format!("{} leather", format!("{:?}", leather).to_lowercase())
}
Material::Bone => "bone".to_string(),
Material::Shell => "shell".to_string(),
Material::Glass => "glass".to_string(),
Material::Ceramic => "ceramic".to_string(),
Material::Gem(gem) => format!("{:?}", gem).to_lowercase(),
Material::Wax => "wax".to_string(),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum WoodType {
Oak,
Pine,
Birch,
Ironwood,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum StoneType {
Granite,
Marble,
Sandstone,
Obsidian,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum MetalType {
Iron,
Steel,
Copper,
Silver,
Gold,
Platinum,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum ClothType {
Cotton,
Silk,
Wool,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum LeatherType {
Cow,
Pig,
Dragon,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum GemType {
Diamond,
Ruby,
Emerald,
Sapphire,
}