veloren_common/comp/
misc.rs

1use super::item::Reagent;
2use crate::{
3    resources::{Secs, Time},
4    uid::Uid,
5};
6use serde::{Deserialize, Serialize};
7use specs::{Component, DerefFlaggedStorage};
8use std::time::Duration;
9use vek::Vec3;
10
11#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)]
12pub enum Object {
13    Bomb {
14        owner: Option<Uid>,
15    },
16    Firework {
17        owner: Option<Uid>,
18        reagent: Reagent,
19    },
20    DeleteAfter {
21        spawned_at: Time,
22        timeout: Duration,
23    },
24    Portal {
25        target: Vec3<f32>,
26        requires_no_aggro: bool,
27        buildup_time: Secs,
28    },
29    SurpriseEgg {
30        owner: Option<Uid>,
31    },
32}
33
34impl Component for Object {
35    type Storage = DerefFlaggedStorage<Self, specs::VecStorage<Self>>;
36}
37
38#[derive(Clone, Debug)]
39pub struct PortalData {
40    pub target: Vec3<f32>,
41    pub requires_no_aggro: bool,
42    pub buildup_time: Secs,
43}
44
45impl From<PortalData> for Object {
46    fn from(
47        PortalData {
48            target,
49            requires_no_aggro,
50            buildup_time,
51        }: PortalData,
52    ) -> Self {
53        Self::Portal {
54            target,
55            requires_no_aggro,
56            buildup_time,
57        }
58    }
59}