summaryrefslogtreecommitdiff
path: root/src/module.rs
blob: 0318aada4ce049458b0074ce9554261edce7d12f (plain)
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
use std::time::SystemTime;

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub enum NavigationStatus {
    None,
    Targeting,
    Targeted,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Module {
    pub module_type : ModuleType,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub enum ModuleType {
    Mining {
        range   : f64,
        status  : bool,
        time    : u64,
        start   : Option<SystemTime>,
    },
    Navigation {
        range       : f64,
        status      : NavigationStatus,
        time        : u64,
        start       : Option<SystemTime>,
        target_name : Option<String>,
    },
    Engines,
    Dashboard,
}

impl Module {
    pub fn new_mining() -> Module {
        let mining = ModuleType::Mining {
            range   : 10.0,
            status  : false,
            time    : 1,
            start   : None,
        };

        Module {
            module_type : mining,
        }
    }

    pub fn new_navigation() -> Module {
        let navigation = ModuleType::Navigation {
            target_name : None,
            range       : 100.0,
            status      : NavigationStatus::None,
            time        : 3,
            start       : None,
        };

        Module {
            module_type : navigation,
        }
    }

    pub fn new_dashboard() -> Module {
        Module {
            module_type : ModuleType::Dashboard,
        }
    }

    pub fn new_engines() -> Module {
        Module {
            module_type : ModuleType::Engines,
        }
    }

    pub fn process(&mut self) {
        match self.module_type {
            ModuleType::Navigation{ref mut status, ref mut start, ref time, ..} => {
                match start.clone() {
                    Some(timer) => {
                        if timer.elapsed().unwrap().as_secs() > *time {
                            *status = NavigationStatus::Targeted;
                            *start = None;
                        }
                    }
                    _ => (),
                }
            },
            ModuleType::Mining{..} => (),
            _ => (),
        }
    }
}