use crate::{MouseState, GameBoard};
use std::cell::RefCell;
use std::rc::Rc;
#[derive(Debug)]
pub enum ErrReadVideoReason {
CanNotFindFile,
FileIsTooShort,
FileIsNotRmv,
FileIsEmpty,
InvalidBoardSize,
InvalidLevel,
InvalidParams,
InvalidVideoEvent,
InvalidMinePosition,
VersionBackward,
Utf8Error,
}
#[derive(Clone)]
pub enum Event {
Mouse(MouseEvent),
GameState(GameStateEvent),
Board(BoardEvent),
Index(IndexEvent),
}
#[derive(Clone)]
pub struct MouseEvent {
pub mouse: String,
pub x: u16,
pub y: u16,
}
#[derive(Clone)]
pub struct GameStateEvent {
pub game_state: String,
}
#[derive(Clone)]
pub struct BoardEvent {
pub board: String,
pub row_id: u8,
pub column_id: u8,
}
#[derive(Clone)]
pub enum IndexValue {
Number(f64),
String(String),
}
#[derive(Clone)]
pub struct IndexEvent {
pub key: String,
pub value: IndexValue,
}
#[derive(Clone)]
pub struct VideoActionStateRecorder {
pub time: f64,
pub event: Option<Event>,
pub useful_level: u8,
pub prior_game_board: Option<Rc<RefCell<GameBoard>>>,
pub next_game_board: Option<Rc<RefCell<GameBoard>>>,
pub comments: String,
pub mouse_state: MouseState,
pub key_dynamic_params: KeyDynamicParams,
pub path: f64,
}
impl Default for VideoActionStateRecorder {
fn default() -> Self {
VideoActionStateRecorder {
time: 0.0,
event: None,
useful_level: 0,
prior_game_board: None,
next_game_board: None,
comments: "".to_string(),
mouse_state: MouseState::Undefined,
key_dynamic_params: KeyDynamicParams::default(),
path: 0.0,
}
}
}
#[derive(Clone)]
pub struct StaticParams {
pub bbbv: usize,
pub op: usize,
pub isl: usize,
pub zini: usize,
pub hzini: usize,
pub cell0: usize,
pub cell1: usize,
pub cell2: usize,
pub cell3: usize,
pub cell4: usize,
pub cell5: usize,
pub cell6: usize,
pub cell7: usize,
pub cell8: usize,
pub fps: usize,
}
impl Default for StaticParams {
fn default() -> Self {
StaticParams {
bbbv: 0,
op: 0,
isl: 0,
zini: 0,
hzini: 0,
cell0: 0,
cell1: 0,
cell2: 0,
cell3: 0,
cell4: 0,
cell5: 0,
cell6: 0,
cell7: 0,
cell8: 0,
fps: 0,
}
}
}
#[derive(Clone)]
pub struct KeyDynamicParams {
pub left: usize,
pub right: usize,
pub double: usize,
pub lce: usize,
pub rce: usize,
pub dce: usize,
pub flag: usize,
pub bbbv_solved: usize,
pub op_solved: usize,
pub isl_solved: usize,
pub pluck: f64,
}
impl Default for KeyDynamicParams {
fn default() -> Self {
KeyDynamicParams {
left: 0,
right: 0,
double: 0,
lce: 0,
rce: 0,
dce: 0,
flag: 0,
bbbv_solved: 0,
op_solved: 0,
isl_solved: 0,
pluck: f64::NAN,
}
}
}
#[derive(Clone)]
pub struct GameDynamicParams {
pub rtime: f64,
pub rtime_ms: u32,
pub left: usize,
pub right: usize,
pub double: usize,
pub cl: usize,
pub flag: usize,
pub left_s: f64,
pub right_s: f64,
pub double_s: f64,
pub cl_s: f64,
pub flag_s: f64,
pub path: f64,
}
impl Default for GameDynamicParams {
fn default() -> Self {
GameDynamicParams {
rtime: 0.0,
rtime_ms: 0,
left: 0,
right: 0,
double: 0,
cl: 0,
flag: 0,
left_s: 0.0,
right_s: 0.0,
double_s: 0.0,
cl_s: 0.0,
flag_s: 0.0,
path: 0.0,
}
}
}
#[derive(Clone)]
pub struct VideoDynamicParams {
pub etime: f64,
pub bbbv_s: f64,
pub bbbv_solved: usize,
pub stnb: f64,
pub rqp: f64,
pub qg: f64,
pub lce: usize,
pub rce: usize,
pub dce: usize,
pub ce: usize,
pub ce_s: f64,
pub ioe: f64,
pub corr: f64,
pub thrp: f64,
pub op_solved: usize,
pub isl_solved: usize,
}
impl Default for VideoDynamicParams {
fn default() -> Self {
VideoDynamicParams {
etime: 0.0,
bbbv_s: 0.0,
bbbv_solved: 0,
stnb: 0.0,
rqp: 0.0,
qg: 0.0,
lce: 0,
rce: 0,
dce: 0,
ce: 0,
ce_s: 0.0,
ioe: 0.0,
corr: 0.0,
thrp: 0.0,
op_solved: 0,
isl_solved: 0,
}
}
}
#[derive(Clone)]
pub struct VideoAnalyseParams {
pub pluck: f64,
}
impl Default for VideoAnalyseParams {
fn default() -> Self {
VideoAnalyseParams { pluck: f64::NAN }
}
}