use serde::{Deserialize, Serialize};
pub const LCD_HEIGHT: u32 = 8;
pub const LCD_WIDTH: u32 = 40;
pub type LcdLines = [String; LCD_HEIGHT as usize];
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
pub struct DigitalControllerState {
pub l1: bool,
pub l2: bool,
pub r1: bool,
pub r2: bool,
pub up: bool,
pub down: bool,
pub left: bool,
pub right: bool,
pub x: bool,
pub b: bool,
pub y: bool,
pub a: bool,
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
pub struct AnalogControllerState {
pub left_x: i8,
pub left_y: i8,
pub right_x: i8,
pub right_y: i8,
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
pub struct ControllerState {
pub digital: DigitalControllerState,
pub analog: AnalogControllerState,
}
#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq, Eq, Default)]
pub struct CompetitionPhase {
pub autonomous: bool,
pub enabled: bool,
pub is_competition: bool,
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
pub enum SimulatorEvent {
Warning(String),
ConsoleMessage(String),
RobotCodeLoading,
RobotCodeStarting,
RobotCodeFinished,
RobotCodeError { message: String, backtrace: String },
LcdInitialized,
LcdUpdated(LcdLines),
LcdColorsUpdated { foreground: u32, background: u32 },
LcdShutdown,
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
pub enum SimulatorMessage {
ControllerUpdate(Option<ControllerState>, Option<ControllerState>),
LcdButtonsUpdate([bool; 3]), PhaseChange(CompetitionPhase),
}