Altered Item structure

This commit is contained in:
Joshua Barretto 2019-07-29 14:44:16 +01:00
parent 995090d2d4
commit 331b6c8b3a
9 changed files with 154 additions and 89 deletions

View File

@ -2,7 +2,7 @@ use specs::{Component, FlaggedStorage};
use specs_idvs::IDVStorage;
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Weapon {
pub enum Tool {
Daggers,
SwordShield,
Sword,
@ -11,14 +11,29 @@ pub enum Weapon {
Bow,
Staff,
}
pub const ALL_WEAPONS: [Weapon; 7] = [
Weapon::Daggers,
Weapon::SwordShield,
Weapon::Sword,
Weapon::Axe,
Weapon::Hammer,
Weapon::Bow,
Weapon::Staff,
impl Tool {
pub fn name(&self) -> &'static str {
match self {
Tool::Daggers => "daggers",
Tool::SwordShield => "sword and shield",
Tool::Sword => "sword",
Tool::Axe => "axe",
Tool::Hammer => "hammer",
Tool::Bow => "bow",
Tool::Staff => "staff",
}
}
}
pub const ALL_TOOLS: [Tool; 7] = [
Tool::Daggers,
Tool::SwordShield,
Tool::Sword,
Tool::Axe,
Tool::Hammer,
Tool::Bow,
Tool::Staff,
];
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
@ -37,10 +52,34 @@ pub enum Armor {
Necklace,
}
impl Armor {
pub fn name(&self) -> &'static str {
match self {
Armor::Helmet => "helmet",
Armor::Shoulders => "shoulder pads",
Armor::Chestplate => "chestplate",
Armor::Belt => "belt",
Armor::Gloves => "gloves",
Armor::Pants => "pants",
Armor::Boots => "boots",
Armor::Back => "back",
Armor::Tabard => "tabard",
Armor::Gem => "gem",
Armor::Necklace => "necklace",
}
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum ConsumptionEffect {
Health(i32),
Xp(i32),
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Item {
Weapon {
kind: Weapon,
Tool {
kind: Tool,
damage: i32,
strength: i32,
},
@ -49,12 +88,40 @@ pub enum Item {
defense: i32,
health_bonus: i32,
},
Consumable {
effect: ConsumptionEffect,
},
Ingredient,
}
impl Item {
pub fn name(&self) -> &'static str {
match self {
Item::Tool { kind, .. } => kind.name(),
Item::Armor { kind, .. } => kind.name(),
Item::Consumable { .. } => "<consumable>",
Item::Ingredient => "<ingredient>",
}
}
pub fn category(&self) -> &'static str {
match self {
Item::Tool { .. } => "tool",
Item::Armor { .. } => "armour",
Item::Consumable { .. } => "consumable",
Item::Ingredient => "ingredient",
}
}
pub fn description(&self) -> String {
format!("{} ({})", self.name(), self.category())
}
}
impl Default for Item {
fn default() -> Self {
Item::Weapon {
kind: Weapon::Hammer,
Item::Tool {
kind: Tool::Hammer,
damage: 0,
strength: 0,
}

View File

@ -547,7 +547,7 @@ fn handle_object(server: &mut Server, entity: EcsEntity, args: String, _action:
}
};
server
.create_object(pos, ori, obj_type)
.create_object(pos, obj_type)
.with(comp::Ori(
// converts player orientation into a 90° rotation for the object by using the axis with the highest value
ori.0

View File

@ -155,14 +155,12 @@ impl Server {
pub fn create_object(
&mut self,
pos: comp::Pos,
ori: comp::Ori,
object: comp::object::Body,
) -> EcsEntityBuilder {
self.state
.ecs_mut()
.create_entity_synced()
.with(pos)
.with(ori)
.with(comp::Vel(Vec3::zero()))
.with(comp::Ori(Vec3::unit_y()))
.with(comp::Body::Object(object))

View File

@ -2,7 +2,7 @@ use super::{
super::{Animation, SkeletonAttr},
CharacterSkeleton,
};
use common::comp::item::Weapon;
use common::comp::item::Tool;
use std::{f32::consts::PI, ops::Mul};
use vek::*;
@ -61,9 +61,9 @@ impl Animation for CidleAnimation {
next.shorts.ori = Quaternion::rotation_x(0.0);
next.shorts.scale = Vec3::one();
match Weapon::Hammer {
match Tool::Hammer {
//TODO: Inventory
Weapon::Sword => {
Tool::Sword => {
next.l_hand.offset = Vec3::new(
-6.0 + wave_ultra_slow_cos * 1.0,
3.5 + wave_ultra_slow_cos * 0.5,
@ -88,7 +88,7 @@ impl Animation for CidleAnimation {
* Quaternion::rotation_z(0.0);
next.weapon.scale = Vec3::one();
}
Weapon::Axe => {
Tool::Axe => {
next.l_hand.offset = Vec3::new(
-6.0 + wave_ultra_slow_cos * 1.0,
3.5 + wave_ultra_slow_cos * 0.5,
@ -113,7 +113,7 @@ impl Animation for CidleAnimation {
* Quaternion::rotation_z(0.0);
next.weapon.scale = Vec3::one();
}
Weapon::Hammer => {
Tool::Hammer => {
next.l_hand.offset = Vec3::new(-7.0, 8.25, 2.0);
next.l_hand.ori = Quaternion::rotation_x(-0.3)
* Quaternion::rotation_y(-1.2)
@ -134,7 +134,7 @@ impl Animation for CidleAnimation {
* Quaternion::rotation_z(wave_ultra_slow * 0.2);
next.weapon.scale = Vec3::one();
}
Weapon::Staff => {
Tool::Staff => {
next.l_hand.offset = Vec3::new(
-6.0 + wave_ultra_slow_cos * 1.0,
3.5 + wave_ultra_slow_cos * 0.5,
@ -159,7 +159,7 @@ impl Animation for CidleAnimation {
* Quaternion::rotation_z(0.0);
next.weapon.scale = Vec3::one();
}
Weapon::SwordShield => {
Tool::SwordShield => {
next.l_hand.offset = Vec3::new(
-6.0 + wave_ultra_slow_cos * 1.0,
3.5 + wave_ultra_slow_cos * 0.5,
@ -184,7 +184,7 @@ impl Animation for CidleAnimation {
* Quaternion::rotation_z(0.0);
next.weapon.scale = Vec3::one();
}
Weapon::Bow => {
Tool::Bow => {
next.l_hand.offset = Vec3::new(
-6.0 + wave_ultra_slow_cos * 1.0,
3.5 + wave_ultra_slow_cos * 0.5,
@ -209,7 +209,7 @@ impl Animation for CidleAnimation {
* Quaternion::rotation_z(0.0);
next.weapon.scale = Vec3::one();
}
Weapon::Daggers => {
Tool::Daggers => {
next.l_hand.offset = Vec3::new(
-6.0 + wave_ultra_slow_cos * 1.0,
3.5 + wave_ultra_slow_cos * 0.5,

View File

@ -2,7 +2,7 @@ use super::{
super::{Animation, SkeletonAttr},
CharacterSkeleton,
};
use common::comp::item::Weapon;
use common::comp::item::Tool;
use std::f32::consts::PI;
use vek::*;
@ -43,9 +43,9 @@ impl Animation for CjumpAnimation {
next.shorts.ori = Quaternion::rotation_z(0.0);
next.shorts.scale = Vec3::one();
match Weapon::Hammer {
match Tool::Hammer {
//TODO: Inventory
Weapon::Sword => {
Tool::Sword => {
next.l_hand.offset = Vec3::new(-7.0, 3.25, 0.25 + wave_stop * 2.0);
next.l_hand.ori = Quaternion::rotation_x(-0.3);
next.l_hand.scale = Vec3::one() * 1.01;
@ -62,7 +62,7 @@ impl Animation for CjumpAnimation {
* Quaternion::rotation_z(0.0);
next.weapon.scale = Vec3::one();
}
Weapon::Axe => {
Tool::Axe => {
next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0);
next.l_hand.ori = Quaternion::rotation_x(-0.3);
next.l_hand.scale = Vec3::one() * 1.01;
@ -79,7 +79,7 @@ impl Animation for CjumpAnimation {
* Quaternion::rotation_z(0.0);
next.weapon.scale = Vec3::one();
}
Weapon::Hammer => {
Tool::Hammer => {
next.l_hand.offset = Vec3::new(-7.0, 8.25, 2.0 + wave_stop * 2.0);
next.l_hand.ori = Quaternion::rotation_x(-0.3)
* Quaternion::rotation_y(-1.2)
@ -100,7 +100,7 @@ impl Animation for CjumpAnimation {
* Quaternion::rotation_z(0.0);
next.weapon.scale = Vec3::one();
}
Weapon::Staff => {
Tool::Staff => {
next.l_hand.offset = Vec3::new(-7.0, 7.5, 0.0);
next.l_hand.ori = Quaternion::rotation_x(-0.3)
* Quaternion::rotation_y(-1.7)
@ -121,7 +121,7 @@ impl Animation for CjumpAnimation {
* Quaternion::rotation_z(1.0);
next.weapon.scale = Vec3::one();
}
Weapon::SwordShield => {
Tool::SwordShield => {
next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0);
next.l_hand.ori = Quaternion::rotation_x(-0.3);
next.l_hand.scale = Vec3::one() * 1.01;
@ -138,7 +138,7 @@ impl Animation for CjumpAnimation {
* Quaternion::rotation_z(0.0);
next.weapon.scale = Vec3::one();
}
Weapon::Bow => {
Tool::Bow => {
next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0);
next.l_hand.ori = Quaternion::rotation_x(-0.3);
next.l_hand.scale = Vec3::one() * 1.01;
@ -155,7 +155,7 @@ impl Animation for CjumpAnimation {
* Quaternion::rotation_z(0.0);
next.weapon.scale = Vec3::one();
}
Weapon::Daggers => {
Tool::Daggers => {
next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0);
next.l_hand.ori = Quaternion::rotation_x(-0.3);
next.l_hand.scale = Vec3::one() * 1.01;

View File

@ -2,7 +2,7 @@ use super::{
super::{Animation, SkeletonAttr},
CharacterSkeleton,
};
use common::comp::item::Weapon;
use common::comp::item::Tool;
use std::f32::consts::PI;
use std::ops::Mul;
use vek::*;
@ -61,9 +61,9 @@ impl Animation for CrunAnimation {
next.shorts.ori = Quaternion::rotation_z(wave * 0.6);
next.shorts.scale = Vec3::one();
match Weapon::Hammer {
match Tool::Hammer {
//TODO: Inventory
Weapon::Sword => {
Tool::Sword => {
next.l_hand.offset = Vec3::new(-6.0, 3.75, 0.25);
next.l_hand.ori = Quaternion::rotation_x(-0.3);
next.l_hand.scale = Vec3::one() * 1.01;
@ -80,7 +80,7 @@ impl Animation for CrunAnimation {
* Quaternion::rotation_z(0.0);
next.weapon.scale = Vec3::one();
}
Weapon::Axe => {
Tool::Axe => {
next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0);
next.l_hand.ori = Quaternion::rotation_x(-0.3);
next.l_hand.scale = Vec3::one() * 1.01;
@ -97,7 +97,7 @@ impl Animation for CrunAnimation {
* Quaternion::rotation_z(0.0);
next.weapon.scale = Vec3::one();
}
Weapon::Hammer => {
Tool::Hammer => {
next.l_hand.offset = Vec3::new(-7.0, 8.25, 3.0);
next.l_hand.ori = Quaternion::rotation_x(-0.3)
* Quaternion::rotation_y(-1.2)
@ -118,7 +118,7 @@ impl Animation for CrunAnimation {
* Quaternion::rotation_z(wave * -0.25);
next.weapon.scale = Vec3::one();
}
Weapon::Staff => {
Tool::Staff => {
next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0);
next.l_hand.ori = Quaternion::rotation_x(-0.3);
next.l_hand.scale = Vec3::one() * 1.01;
@ -135,7 +135,7 @@ impl Animation for CrunAnimation {
* Quaternion::rotation_z(0.0);
next.weapon.scale = Vec3::one();
}
Weapon::SwordShield => {
Tool::SwordShield => {
next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0);
next.l_hand.ori = Quaternion::rotation_x(-0.3);
next.l_hand.scale = Vec3::one() * 1.01;
@ -152,7 +152,7 @@ impl Animation for CrunAnimation {
* Quaternion::rotation_z(0.0);
next.weapon.scale = Vec3::one();
}
Weapon::Bow => {
Tool::Bow => {
next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0);
next.l_hand.ori = Quaternion::rotation_x(-0.3);
next.l_hand.scale = Vec3::one() * 1.01;
@ -169,7 +169,7 @@ impl Animation for CrunAnimation {
* Quaternion::rotation_z(0.0);
next.weapon.scale = Vec3::one();
}
Weapon::Daggers => {
Tool::Daggers => {
next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0);
next.l_hand.ori = Quaternion::rotation_x(-0.3);
next.l_hand.scale = Vec3::one() * 1.01;

View File

@ -5,7 +5,7 @@ pub mod quadruped;
pub mod quadrupedmedium;
use crate::render::FigureBoneData;
use common::comp::{self, item::Weapon};
use common::comp::{self, item::Tool};
use vek::*;
#[derive(Copy, Clone)]
@ -145,25 +145,25 @@ impl<'a> From<&'a comp::humanoid::Body> for SkeletonAttr {
(Danari, Male) => 0.0,
(Danari, Female) => 0.0,
},
weapon_x: match Weapon::Hammer {
weapon_x: match Tool::Hammer {
// TODO: Inventory
Weapon::Sword => 0.0,
Weapon::Axe => 3.0,
Weapon::Hammer => 0.0,
Weapon::SwordShield => 3.0,
Weapon::Staff => 3.0,
Weapon::Bow => 0.0,
Weapon::Daggers => 0.0,
Tool::Sword => 0.0,
Tool::Axe => 3.0,
Tool::Hammer => 0.0,
Tool::SwordShield => 3.0,
Tool::Staff => 3.0,
Tool::Bow => 0.0,
Tool::Daggers => 0.0,
},
weapon_y: match Weapon::Hammer {
weapon_y: match Tool::Hammer {
// TODO: Inventory
Weapon::Sword => -1.25,
Weapon::Axe => 0.0,
Weapon::Hammer => -2.0,
Weapon::SwordShield => 0.0,
Weapon::Staff => 0.0,
Weapon::Bow => -2.0,
Weapon::Daggers => -2.0,
Tool::Sword => -1.25,
Tool::Axe => 0.0,
Tool::Hammer => -2.0,
Tool::SwordShield => 0.0,
Tool::Staff => 0.0,
Tool::Bow => -2.0,
Tool::Daggers => -2.0,
},
}
}

View File

@ -8,7 +8,7 @@ use crate::{
GlobalState,
};
use client::Client;
use common::comp::{humanoid, item::Weapon};
use common::comp::{humanoid, item::Tool};
use conrod_core::{
color,
color::TRANSPARENT,
@ -109,7 +109,7 @@ widget_ids! {
body_type_1,
body_type_2,
// Weapons
// Tools
sword,
sword_button,
daggers,
@ -152,7 +152,7 @@ image_ids! {
slider_range: "voxygen/element/slider/track.png",
slider_indicator: "voxygen/element/slider/indicator.png",
// Weapon Icons
// Tool Icons
daggers: "voxygen/element/icons/daggers.png",
sword: "voxygen/element/icons/sword.png",
axe: "voxygen/element/icons/axe.png",
@ -209,7 +209,7 @@ pub struct CharSelectionUi {
character_creation: bool,
pub character_name: String,
pub character_body: humanoid::Body,
pub character_weapon: Weapon, // TODO: Move into ecs inventory struct?
pub character_weapon: Tool, // TODO: Move into ecs inventory struct?
}
impl CharSelectionUi {
@ -235,7 +235,7 @@ impl CharSelectionUi {
character_creation: false,
character_name: "Character Name".to_string(),
character_body: humanoid::Body::random(),
character_weapon: Weapon::Sword,
character_weapon: Tool::Sword,
}
}
@ -344,7 +344,7 @@ impl CharSelectionUi {
.was_clicked()
{
self.character_creation = true;
self.character_weapon = Weapon::Sword;
self.character_weapon = Tool::Sword;
}
// Alpha Version
@ -553,7 +553,7 @@ impl CharSelectionUi {
self.character_body.body_type = humanoid::BodyType::Female;
}
// Alignment for Races and Weapons
// Alignment for Races and Tools
Rectangle::fill_with([214.0, 304.0], color::TRANSPARENT)
.mid_bottom_with_margin_on(self.ids.creation_buttons_alignment_1, -324.0)
.set(self.ids.creation_buttons_alignment_2, ui_widgets);
@ -710,7 +710,7 @@ impl CharSelectionUi {
.w_h(70.0, 70.0)
.bottom_left_with_margins_on(self.ids.creation_buttons_alignment_2, 0.0, 0.0)
.set(self.ids.hammer, ui_widgets);
if Button::image(if let Weapon::Hammer = self.character_weapon {
if Button::image(if let Tool::Hammer = self.character_weapon {
self.imgs.icon_border_pressed
} else {
self.imgs.icon_border
@ -721,7 +721,7 @@ impl CharSelectionUi {
.set(self.ids.hammer_button, ui_widgets)
.was_clicked()
{
self.character_weapon = Weapon::Hammer;
self.character_weapon = Tool::Hammer;
}
// REMOVE THIS AFTER IMPLEMENTATION
/*Rectangle::fill_with([67.0, 67.0], color::rgba(0.0, 0.0, 0.0, 0.8))
@ -734,7 +734,7 @@ impl CharSelectionUi {
.w_h(70.0, 70.0)
.right_from(self.ids.hammer, 2.0)
.set(self.ids.bow, ui_widgets);
if Button::image(if let Weapon::Bow = self.character_weapon {
if Button::image(if let Tool::Bow = self.character_weapon {
self.imgs.icon_border_pressed
} else {
self.imgs.icon_border
@ -745,7 +745,7 @@ impl CharSelectionUi {
.set(self.ids.bow_button, ui_widgets)
.was_clicked()
{
//self.character_weapon = Weapon::Bow;
//self.character_weapon = Tool::Bow;
}
// REMOVE THIS AFTER IMPLEMENTATION
Rectangle::fill_with([67.0, 67.0], color::rgba(0.0, 0.0, 0.0, 0.8))
@ -756,7 +756,7 @@ impl CharSelectionUi {
.w_h(70.0, 70.0)
.right_from(self.ids.bow, 2.0)
.set(self.ids.staff, ui_widgets);
if Button::image(if let Weapon::Staff = self.character_weapon {
if Button::image(if let Tool::Staff = self.character_weapon {
self.imgs.icon_border_pressed
} else {
self.imgs.icon_border
@ -767,7 +767,7 @@ impl CharSelectionUi {
.set(self.ids.staff_button, ui_widgets)
.was_clicked()
{
//self.character_weapon = Weapon::Staff;
//self.character_weapon = Tool::Staff;
}
// REMOVE THIS AFTER IMPLEMENTATION
Rectangle::fill_with([67.0, 67.0], color::rgba(0.0, 0.0, 0.0, 0.8))
@ -778,7 +778,7 @@ impl CharSelectionUi {
.w_h(70.0, 70.0)
.up_from(self.ids.hammer, 2.0)
.set(self.ids.sword, ui_widgets);
if Button::image(if let Weapon::Sword = self.character_weapon {
if Button::image(if let Tool::Sword = self.character_weapon {
self.imgs.icon_border_pressed
} else {
self.imgs.icon_border
@ -789,7 +789,7 @@ impl CharSelectionUi {
.set(self.ids.sword_button, ui_widgets)
.was_clicked()
{
self.character_weapon = Weapon::Sword;
self.character_weapon = Tool::Sword;
}
// Daggers
@ -797,7 +797,7 @@ impl CharSelectionUi {
.w_h(70.0, 70.0)
.right_from(self.ids.sword, 2.0)
.set(self.ids.daggers, ui_widgets);
if Button::image(if let Weapon::Daggers = self.character_weapon {
if Button::image(if let Tool::Daggers = self.character_weapon {
self.imgs.icon_border_pressed
} else {
self.imgs.icon_border
@ -808,7 +808,7 @@ impl CharSelectionUi {
.set(self.ids.daggers_button, ui_widgets)
.was_clicked()
{
// self.character_weapon = Weapon::Daggers;
// self.character_weapon = Tool::Daggers;
} // REMOVE THIS AFTER IMPLEMENTATION
Rectangle::fill_with([67.0, 67.0], color::rgba(0.0, 0.0, 0.0, 0.8))
.middle_of(self.ids.daggers)
@ -819,7 +819,7 @@ impl CharSelectionUi {
.w_h(70.0, 70.0)
.right_from(self.ids.daggers, 2.0)
.set(self.ids.axe, ui_widgets);
if Button::image(if let Weapon::Axe = self.character_weapon {
if Button::image(if let Tool::Axe = self.character_weapon {
self.imgs.icon_border_pressed
} else {
self.imgs.icon_border
@ -830,7 +830,7 @@ impl CharSelectionUi {
.set(self.ids.axe_button, ui_widgets)
.was_clicked()
{
self.character_weapon = Weapon::Axe;
self.character_weapon = Tool::Axe;
}
// REMOVE THIS AFTER IMPLEMENTATION
/*Rectangle::fill_with([67.0, 67.0], color::rgba(0.0, 0.0, 0.0, 0.8))

View File

@ -12,7 +12,7 @@ use crate::{
use client::Client;
use common::{
assets,
comp::{self, humanoid, item::Weapon, object, quadruped, quadruped_medium, Body},
comp::{self, humanoid, item::Tool, object, quadruped, quadruped_medium, Body},
figure::Segment,
terrain::TerrainChunkSize,
vol::VolSize,
@ -61,7 +61,7 @@ impl FigureModelCache {
Some(Self::load_right_hand(body.hand)),
Some(Self::load_left_foot(body.foot)),
Some(Self::load_right_foot(body.foot)),
Some(Self::load_weapon(Weapon::Hammer)), // TODO: Inventory
Some(Self::load_weapon(Tool::Hammer)), // TODO: Inventory
Some(Self::load_left_shoulder(body.shoulder)),
Some(Self::load_right_shoulder(body.shoulder)),
Some(Self::load_draw()),
@ -312,15 +312,15 @@ impl FigureModelCache {
)
}
fn load_weapon(weapon: Weapon) -> Mesh<FigurePipeline> {
fn load_weapon(weapon: Tool) -> Mesh<FigurePipeline> {
let (name, offset) = match weapon {
Weapon::Sword => ("weapon/sword/rusty_2h.vox", Vec3::new(-1.5, -6.5, -4.0)),
Weapon::Axe => ("weapon/axe/rusty_2h.vox", Vec3::new(-1.5, -6.5, -4.0)),
Weapon::Hammer => ("weapon/hammer/rusty_2h.vox", Vec3::new(-2.5, -5.5, -4.0)),
Weapon::Daggers => ("weapon/hammer/rusty_2h.vox", Vec3::new(-2.5, -5.5, -4.0)),
Weapon::SwordShield => ("weapon/axe/rusty_2h.vox", Vec3::new(-2.5, -6.5, -2.0)),
Weapon::Bow => ("weapon/hammer/rusty_2h.vox", Vec3::new(-2.5, -5.5, -4.0)),
Weapon::Staff => ("weapon/axe/rusty_2h.vox", Vec3::new(-2.5, -6.5, -2.0)),
Tool::Sword => ("weapon/sword/rusty_2h.vox", Vec3::new(-1.5, -6.5, -4.0)),
Tool::Axe => ("weapon/axe/rusty_2h.vox", Vec3::new(-1.5, -6.5, -4.0)),
Tool::Hammer => ("weapon/hammer/rusty_2h.vox", Vec3::new(-2.5, -5.5, -4.0)),
Tool::Daggers => ("weapon/hammer/rusty_2h.vox", Vec3::new(-2.5, -5.5, -4.0)),
Tool::SwordShield => ("weapon/axe/rusty_2h.vox", Vec3::new(-2.5, -6.5, -2.0)),
Tool::Bow => ("weapon/hammer/rusty_2h.vox", Vec3::new(-2.5, -5.5, -4.0)),
Tool::Staff => ("weapon/axe/rusty_2h.vox", Vec3::new(-2.5, -6.5, -2.0)),
};
Self::load_mesh(name, offset)
}