1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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
            }
        }
    }
}