use data::tables::AvatarBaseID; use proto::{AvatarSync, RoleModelBin}; use crate::logic::role::Avatar; pub struct RoleModel { pub avatar_list: Vec, } impl Default for RoleModel { fn default() -> Self { Self { avatar_list: Self::DEFAULT_AVATARS .iter() .map(|tmpl_id| Avatar::new(AvatarBaseID::new_unchecked(*tmpl_id))) .collect(), } } } impl RoleModel { const DEFAULT_AVATARS: [u32; 2] = [1011, 1081]; pub fn add_avatar(&mut self, template_id: AvatarBaseID) { if !self .avatar_list .iter() .any(|a| a.template_id == template_id) { self.avatar_list.push(Avatar::new(template_id)); } } pub fn avatar_sync(&self) -> AvatarSync { AvatarSync { avatar_list: self.avatar_list.iter().map(Avatar::to_client).collect(), ..Default::default() } } pub fn from_bin(bin: RoleModelBin) -> Self { Self { avatar_list: bin.avatar_list.into_iter().map(Avatar::from_bin).collect(), } } pub fn to_bin(&self) -> RoleModelBin { RoleModelBin { avatar_list: self.avatar_list.iter().map(Avatar::to_bin).collect(), } } }