use std::collections::HashMap; use common::time_util; use shorekeeper_data::role_info_data; use shorekeeper_protocol::{ArrayIntInt, RoleData, RoleInfo}; mod formation; pub use formation::RoleFormation; pub struct Role { pub role_id: i32, pub name: String, pub level: i32, pub exp: i32, pub breakthrough: i32, pub skill_map: HashMap, pub star: i32, pub favor: i32, pub create_time: u32, } impl Role { pub const MAIN_CHARACTER_MALE_ID: i32 = 1501; pub const MAIN_CHARACTER_FEMALE_ID: i32 = 1502; pub fn new(role_id: i32) -> Self { let data = role_info_data::iter().find(|d| d.id == role_id).unwrap(); Self { role_id, name: String::with_capacity(0), level: data.max_level, exp: 0, breakthrough: 0, skill_map: HashMap::new(), // TODO! star: 0, favor: 0, create_time: time_util::unix_timestamp() as u32, } } pub fn to_protobuf(&self) -> RoleInfo { RoleInfo { role_id: self.role_id, name: self.name.clone(), level: self.level, exp: self.exp, breakthrough: self.breakthrough, create_time: self.create_time, skills: self .skill_map .iter() .map(|(k, v)| ArrayIntInt { key: *k, value: *v }) .collect(), star: self.star, favor: self.favor, ..Default::default() } } pub fn load_from_save(data: RoleData) -> Self { Self { role_id: data.role_id, name: data.name, level: data.level, exp: data.exp, breakthrough: data.breakthrough, skill_map: data.skill_map, star: data.star, favor: data.favor, create_time: data.create_time, } } pub fn build_save_data(&self) -> RoleData { RoleData { role_id: self.role_id, name: self.name.clone(), level: self.level, exp: self.exp, breakthrough: self.breakthrough, skill_map: self.skill_map.clone(), star: self.star, favor: self.favor, create_time: self.create_time, ..Default::default() } } }