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
use std::cmp;
use super::types::{get_request_size, Arena, CardEntry, Rarity, REQUEST_FREQUENCY};
pub struct CardData {
pub cards_remaining: usize,
pub requests_remaining: usize,
pub weeks_remaining: f64,
pub days_remaining: f64,
}
impl CardEntry {
pub fn calc_remaining(&self, arena: Option<Arena>) -> Option<CardData> {
if self.rarity == Rarity::Legendary {
return None;
}
let request_size = get_request_size(&arena.unwrap_or(Arena::LegendaryArena));
let cards_remaining = cmp::max(self.get_needed() as isize - self.have as isize, 0) as usize;
let requests_remaining = (cards_remaining as f64
/ if self.rarity == Rarity::Common {
request_size.common as f64
} else {
request_size.rare as f64
})
.ceil() as usize;
let weeks_remaining = requests_remaining as f64
/ match self.rarity {
Rarity::Common => REQUEST_FREQUENCY.common,
Rarity::Rare => REQUEST_FREQUENCY.rare,
Rarity::Epic => REQUEST_FREQUENCY.epic,
Rarity::Legendary => REQUEST_FREQUENCY.legendary,
} as f64;
Some(CardData {
cards_remaining,
requests_remaining,
weeks_remaining,
days_remaining: weeks_remaining * 7 as f64,
})
}
}