1use std::fmt;
8use std::fmt::Debug;
9extern crate num;
10use serde::{Deserialize, Serialize};
11
12#[cfg(feature = "fltkform")]
13use fltk::{prelude::*, *};
14#[cfg(feature = "fltkform")]
15use fltk_form_derive::*;
16#[cfg(feature = "fltkform")]
17use fltk_form::FltkForm;
18use crate::random::Random;
19
20#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
25#[cfg_attr(feature = "fltkform", derive(FltkForm))]
26pub enum Basic {
27 None,
29 HP,
31 MP,
33 XP,
35 GP,
37}
38impl Default for Basic {
39 fn default() -> Self {
40 Self::None
41 }
42}
43impl fmt::Display for Basic {
44 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
45 let v:String;
46 match *self {
47 Basic::HP => v = String::from("HP"),
48 Basic::MP => v = String::from("MP"),
49 Basic::GP => v = String::from("GP"),
50 Basic::XP => v = String::from("XP"),
51 Basic::None => v = String::from("None"),
52 }
53 write!(f, "{}", v.as_str())
54 }
55}
56impl Random for Basic {
57 type Type = Basic;
58 fn random_type(&self) -> Self::Type {
59 let max = 4;
60 let val = self.random_rate(max);
61 match val {
62 0 => Basic::HP,
63 1 => Basic::MP,
64 2 => Basic::XP,
65 3 => Basic::GP,
66 _=> Basic::None,
67 }
68 }
69}
70
71#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
76#[cfg_attr(feature = "fltkform", derive(FltkForm))]
77pub enum Normal {
78 None,
80 HP,
82 MP,
84 XP,
86 GP,
88Burn,
91 Poison,
93 Freeze,
95 Sick,
97 Sap,
99Bless,
102 Heal,
104Stuck,
107 Bound,
109 Blocked,
111 Locked,
113}
114impl Default for Normal {
115 fn default() -> Self {
116 Self::None
117 }
118}
119impl fmt::Display for Normal {
120 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
121 let v:String;
122 match *self {
123 Normal::None => v = "None".to_string(),
124 Normal::HP => v = "HP".to_string(),
125 Normal::MP => v = "MP".to_string(),
126 Normal::XP => v = "XP".to_string(),
127 Normal::GP => v = String::from("GP"),
128 Normal::Burn => v = "Burn".to_string(),
129 Normal::Poison => v = "Poison".to_string(),
130 Normal::Freeze => v = "Freeze".to_string(),
131 Normal::Sick => v = "Sick".to_string(),
132 Normal::Sap => v = "Sap".to_string(),
133 Normal::Bless => v = "Bless".to_string(),
134 Normal::Heal => v = "Heal".to_string(),
135 Normal::Stuck => v = "Stuck".to_string(),
136 Normal::Bound => v = "Bound".to_string(),
137 Normal::Blocked => v = "Blocked".to_string(),
138 Normal::Locked => v = "Locked".to_string(),
139 }
140 write!(f, "{}", v.as_str())
141 }
142}
143impl Random for Normal {
144 type Type = Normal;
145 fn random_type(&self) -> Self::Type {
146 let max = 15;
147 let val = self.random_rate(max);
148 match val {
149 0 => Normal::HP,
150 1 => Normal::MP,
151 2 => Normal::XP,
152 3 => Normal::GP,
153 4 => Normal::Burn,
154 5 => Normal::Poison,
155 7 => Normal::Freeze,
156 8 => Normal::Sick,
157 9 => Normal::Sap,
158 10 => Normal::Bless,
159 11 => Normal::Heal,
160 12 => Normal::Stuck,
161 13 => Normal::Bound,
162 14 => Normal::Blocked,
163 15 => Normal::Locked,
164 _=> Normal::None,
165 }
166 }
167}
168#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
174#[cfg_attr(feature = "fltkform", derive(FltkForm))]
175pub enum Advanced {
176 None,
178 HP,
180 MP,
182 XP,
184 GP,
186Burn,
189 Poison,
191 Freeze,
193 Sick,
195 Sap,
197Bless,
200 Heal,
202Stuck,
205 Bound,
207 Blocked,
209 Locked,
211}
212impl Default for Advanced {
213 fn default() -> Self {
214 Self::None
215 }
216}
217impl fmt::Display for Advanced {
218 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
219 let v:String;
220 match *self {
221 Advanced::None => v = "None".to_string(),
222 Advanced::HP => v = "HP".to_string(),
223 Advanced::MP => v = "MP".to_string(),
224 Advanced::XP => v = "XP".to_string(),
225 Advanced::GP => v = String::from("GP"),
226 Advanced::Burn => v = "Burn".to_string(),
227 Advanced::Poison => v = "Poison".to_string(),
228 Advanced::Freeze => v = "Freeze".to_string(),
229 Advanced::Sick => v = "Sick".to_string(),
230 Advanced::Sap => v = "Sap".to_string(),
231 Advanced::Bless => v = "Bless".to_string(),
232 Advanced::Heal => v = "Heal".to_string(),
233 Advanced::Stuck => v = "Stuck".to_string(),
234 Advanced::Bound => v = "Bound".to_string(),
235 Advanced::Blocked => v = "Blocked".to_string(),
236 Advanced::Locked => v = "Locked".to_string(),
237 }
238 write!(f, "{}", v.as_str())
239 }
240}