use std::fmt;
use crate::random::Random;
use serde::{Deserialize, Serialize};
#[cfg(feature = "fltkform")]
use fltk::{prelude::*, *};
#[cfg(feature = "fltkform")]
use fltk_form_derive::*;
#[cfg(feature = "fltkform")]
use fltk_form::FltkForm;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
#[cfg_attr(feature = "fltkform", derive(FltkForm))]
pub enum Basic {
Forward,
Backward,
None,
}
impl Default for Basic {
fn default() -> Self {
Self::None
}
}
impl fmt::Display for Basic {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let v:String;
match *self {
Basic::Forward => v = String::from("Forward"),
Basic::Backward => v = String::from("Backward"),
_=> v = String::from("None"),
}
write!(f, "{}", v.as_str())
}
}
impl Random for Basic {
type Type = Basic;
fn random_type(&self) -> Self::Type {
let max = 2;
let val = self.random_rate(max);
match val {
0 => Basic::Forward,
1 => Basic::Backward,
_=> Basic::None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
#[cfg_attr(feature = "fltkform", derive(FltkForm))]
pub enum Normal {
Up,
Down,
Left,
Right,
None,
}
impl Default for Normal {
fn default() -> Self {
Self::None
}
}
impl fmt::Display for Normal {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let v:String;
match *self {
Normal::Up => v = String::from("Up"),
Normal::Down => v = String::from("Down"),
Normal::Left => v = String::from("Left"),
Normal::Right => v = String::from("Right"),
_=> v = String::from("None"),
}
write!(f, "{}", v.as_str())
}
}
impl Random for Normal {
type Type = Normal;
fn random_type(&self) -> Self::Type {
let max = 4;
let val = self.random_rate(max);
match val {
0 => Normal::Up,
1 => Normal::Down,
2 => Normal::Left,
3 => Normal::Right,
_=> Normal::None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
#[cfg_attr(feature = "fltkform", derive(FltkForm))]
pub enum Advanced {
North,
NorthEast,
East,
SouthEast,
South,
SouthWest,
West,
NorthWest,
None,
}
impl Default for Advanced {
fn default() -> Self {
Self::None
}
}
impl fmt::Display for Advanced {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let v:String;
match *self {
Advanced::North => v = String::from("North"),
Advanced::NorthEast => v = String::from("NorthEast"),
Advanced::East => v = String::from("East"),
Advanced::SouthEast => v = String::from("SouthEast"),
Advanced::South => v = String::from("South"),
Advanced::SouthWest => v = String::from("SouthWest"),
Advanced::West => v = String::from("West"),
Advanced::NorthWest => v = String::from("NorthWest"),
_=> v = String::from("None"),
}
write!(f, "{}", v.as_str())
}
}
impl Random for Advanced {
type Type = Advanced;
fn random_type(&self) -> Self::Type {
let max = 8;
let val = self.random_rate(max);
match val {
0 => Advanced::North,
1 => Advanced::NorthEast,
2 => Advanced::East,
3 => Advanced::SouthEast,
4 => Advanced::South,
5 => Advanced::SouthWest,
6 => Advanced::West,
7 => Advanced::NorthWest,
_=> Advanced::None,
}
}
}