veloren/common/src/comp/shockwave.rs

54 lines
1.3 KiB
Rust
Raw Normal View History

2021-01-30 17:11:57 +00:00
use crate::{combat::Attack, uid::Uid};
2020-08-08 20:53:55 +00:00
use serde::{Deserialize, Serialize};
use specs::{Component, DerefFlaggedStorage};
2020-08-08 20:53:55 +00:00
use specs_idvs::IdvStorage;
use std::time::Duration;
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Properties {
pub angle: f32,
2020-10-12 22:55:55 +00:00
pub vertical_angle: f32,
pub speed: f32,
2021-01-30 17:11:57 +00:00
pub attack: Attack,
2020-08-08 20:53:55 +00:00
pub requires_ground: bool,
pub duration: Duration,
2020-08-08 20:53:55 +00:00
pub owner: Option<Uid>,
pub specifier: FrontendSpecifier,
2020-08-08 20:53:55 +00:00
}
#[derive(Clone, Debug, 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<f64>,
}
2020-08-08 20:53:55 +00:00
impl Component for Shockwave {
type Storage = DerefFlaggedStorage<Self, IdvStorage<Self>>;
2020-08-08 20:53:55 +00:00
}
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<Uid>,
}
impl Component for ShockwaveHitEntities {
type Storage = IdvStorage<Self>;
}
#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq)]
pub enum FrontendSpecifier {
Ground,
Fire,
Water,
}