use crate::{sync::Uid, Damage, GroupTarget, Knockback}; use serde::{Deserialize, Serialize}; use specs::{Component, FlaggedStorage}; use specs_idvs::IdvStorage; use std::time::Duration; #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub struct Properties { pub angle: f32, pub vertical_angle: f32, pub speed: f32, pub damages: Vec<(Option, Damage)>, pub knockback: Knockback, pub requires_ground: bool, pub duration: Duration, pub owner: Option, } #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub struct Shockwave { pub properties: Properties, #[serde(skip)] /// Time that the shockwave was created at /// Used to calculate shockwave propagation /// Deserialized from the network as `None` pub creation: Option, } impl Component for Shockwave { type Storage = FlaggedStorage>; } impl std::ops::Deref for Shockwave { type Target = Properties; fn deref(&self) -> &Properties { &self.properties } } #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub struct ShockwaveHitEntities { pub hit_entities: Vec, } impl Component for ShockwaveHitEntities { type Storage = IdvStorage; }