use zhc_utils::graphics::{Frame, Size};
use super::*;
pub trait SceneElement {
fn get_size(&self) -> Size;
fn get_frame(&self) -> Frame;
fn get_variable_cell(&self) -> VariableCell;
}
pub trait SceneSolver: SceneElement {
fn solve_size(&mut self);
fn solve_frame(&mut self, available: Frame);
}
impl<T: SceneElement> SceneElement for Option<T> {
fn get_size(&self) -> Size {
match self {
Some(e) => e.get_size(),
None => panic!(),
}
}
fn get_frame(&self) -> Frame {
match self {
Some(e) => e.get_frame(),
None => panic!(),
}
}
fn get_variable_cell(&self) -> VariableCell {
match self {
Some(e) => e.get_variable_cell(),
None => panic!(),
}
}
}
impl<T: SceneSolver> SceneSolver for Option<T> {
fn solve_size(&mut self) {
match self {
Some(e) => e.solve_size(),
None => {}
}
}
fn solve_frame(&mut self, available: Frame) {
match self {
Some(e) => e.solve_frame(available),
None => {}
}
}
}