#[derive(Debug, Copy, Clone, PartialEq)] pub enum ToolType { Monomate, Dimate, Trimate, Monofluid, Difluid, Trifluid, ScapeDoll, } impl ToolType { pub fn is_stackable(&self) -> bool { match self { ToolType::Monomate => true, ToolType::Dimate => true, ToolType::Trimate => true, ToolType::Monofluid => true, ToolType::Difluid => true, ToolType::Trifluid => true, ToolType::ScapeDoll => false, } } pub fn value(&self) -> [u8; 3] { match self { ToolType::Monomate => [0x03, 0x00, 0x00], ToolType::Monofluid => [0x03, 0x01, 0x00], _ => panic!() } } } #[derive(Debug, Copy, Clone, PartialEq)] pub struct Tool { pub tool: ToolType, pub count: usize, } impl Tool { pub fn new(tool: ToolType, count: usize) -> Tool { Tool { tool: tool, count: count, } } pub fn as_bytes(&self) -> [u8; 16] { let mut result = [0; 16]; result[0..3].copy_from_slice(&self.tool.value()); result[5] = self.count as u8; result } }