use crate::*;
#[cfg(feature = "bevy")]
use bevy::prelude::{Bundle, Component};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bevy", derive(Bundle))]
pub struct Floor<T: RefTrait> {
pub anchors: Path<T>,
#[serde(default, skip_serializing_if = "is_default")]
pub texture: Affiliation<T>,
#[serde(
default = "PreferredSemiTransparency::for_floor",
skip_serializing_if = "PreferredSemiTransparency::is_default_for_floor"
)]
pub preferred_semi_transparency: PreferredSemiTransparency,
#[serde(skip)]
pub marker: FloorMarker,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
#[cfg_attr(feature = "bevy", derive(Component))]
pub struct FloorMarker;
impl<T: RefTrait> Floor<T> {
pub fn convert<U: RefTrait>(&self, id_map: &HashMap<T, U>) -> Result<Floor<U>, T> {
Ok(Floor {
anchors: self.anchors.convert(id_map)?,
texture: self.texture.convert(id_map)?,
preferred_semi_transparency: PreferredSemiTransparency::for_floor(),
marker: Default::default(),
})
}
}
impl<T: RefTrait> From<Path<T>> for Floor<T> {
fn from(path: Path<T>) -> Self {
Floor {
anchors: path,
texture: Affiliation(None),
preferred_semi_transparency: PreferredSemiTransparency::for_floor(),
marker: Default::default(),
}
}
}