use rapier2d::dynamics::RigidBodyHandle;
use rapier2d::geometry::ColliderHandle;
use rlevo_core::base::State;
use super::observation::LunarLanderObservation;
#[derive(Debug, Clone)]
pub struct LunarLanderState {
pub lander_handle: RigidBodyHandle,
pub leg1_handle: RigidBodyHandle,
pub leg2_handle: RigidBodyHandle,
pub ground_handle: ColliderHandle,
pub leg1_contact: bool,
pub leg2_contact: bool,
pub last_obs: LunarLanderObservation,
pub prev_shaping: f32,
}
impl State<1> for LunarLanderState {
type Observation = LunarLanderObservation;
fn shape() -> [usize; 1] {
[8]
}
fn is_valid(&self) -> bool {
self.last_obs.is_finite()
}
fn numel(&self) -> usize {
8
}
fn observe(&self) -> LunarLanderObservation {
self.last_obs.clone()
}
}