65 lines
1.2 KiB
Rust
65 lines
1.2 KiB
Rust
|
|
|
|
|
|
|
|
|
|
#[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
|
|
}
|
|
}
|