wolfrpg_map_parser/command/show_choice_command/
options.rs1#[cfg(feature = "serde")]
2use serde::{Serialize, Deserialize};
3use crate::command::show_choice_command::cancel_case::CancelCase;
4use crate::command::show_choice_command::extra_cases::ExtraCases;
5
6#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7#[derive(PartialEq, Clone)]
8pub struct Options {
9 cancel_case: CancelCase,
10 selected_choices: u8,
11 extra_cases: ExtraCases
12}
13
14impl Options {
15 pub fn new(options: u16) -> Self {
16 let selected_choices: u8 = (options & 0xff) as u8;
17 let extra_cases: u8 = ((options >> 8) & 0xff) as u8;
18 Self {
19 cancel_case: CancelCase::new((selected_choices >> 4) & 0b00001111),
20 selected_choices: selected_choices & 0b00001111,
21 extra_cases: ExtraCases::new(extra_cases)
22 }
23 }
24
25 pub fn case_count(&self) -> usize {
26 self.selected_choices as usize
27 + self.extra_cases.count()
28 + match self.cancel_case {
29 CancelCase::Separate => 1,
30 _ => 0
31 }
32 }
33
34 pub fn cancel_case(&self) -> &CancelCase {
35 &self.cancel_case
36 }
37
38 pub fn cancel_case_mut(&mut self) -> &mut CancelCase {
39 &mut self.cancel_case
40 }
41
42 pub fn selected_choices(&self) -> u8 {
43 self.selected_choices
44 }
45
46 pub fn selected_choices_mut(&mut self) -> &mut u8 {
47 &mut self.selected_choices
48 }
49
50 pub fn extra_cases(&self) -> &ExtraCases {
51 &self.extra_cases
52 }
53
54 pub fn extra_cases_mut(&mut self) -> &mut ExtraCases {
55 &mut self.extra_cases
56 }
57}