use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
pub enum MagicElementType {
None,
Nature,
Air,
Water,
Light,
Energy,
Psi,
Stone,
Ice,
Fire,
Dark,
Chaos,
Metall,
Joker
}
#[derive(Debug, Serialize, Deserialize)]
pub enum MagicSlotType {
NotExist,
Active,
Passive
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Magic {
pub level: u16,
pub slot_type: MagicSlotType,
pub slot_number: u8,
pub first_element: u8,
pub second_element: u8,
pub third_element: u8
}
impl Magic {
pub fn new(_m: i32, n: i32) -> Magic {
if n == -1 {
Magic {
level: 0,
slot_type: MagicSlotType::NotExist,
slot_number: 0,
first_element: 0,
second_element: 0,
third_element: 0
}
}
else {
let magics_hex = format!("{:#010x}", n);
let magics_entities: Vec<&str> = magics_hex.split("").collect();
let level = u16::from_str_radix(&format!("{}{}", &magics_entities[5], &magics_entities[6]), 16).unwrap();
let slot = u8::from_str_radix(&format!("{}", &magics_entities[7]), 16).unwrap() + 1;
let first_element = u8::from_str_radix(&format!("{}", &magics_entities[8]), 16).unwrap();
let second_element = u8::from_str_radix(&format!("{}", &magics_entities[9]), 16).unwrap();
let third_element = u8::from_str_radix(&format!("{}", &magics_entities[10]), 16).unwrap();
Magic {
level: level,
slot_number: slot,
slot_type: if slot % 2 == 0 {MagicSlotType::Passive} else {MagicSlotType::Active},
first_element: first_element,
second_element: second_element,
third_element: third_element
}
}
}
}