veloren_common/comp/
misc.rs

1use crate::{
2    combat::CombatEffect,
3    comp::{PidController, ability::Dodgeable, beam},
4    resources::{Secs, Time},
5    states::basic_summon::BeamPillarIndicatorSpecifier,
6    uid::Uid,
7};
8use serde::{Deserialize, Serialize};
9use specs::{Component, FlaggedStorage, VecStorage};
10use std::time::Duration;
11use vek::Vec3;
12
13#[derive(Clone, Debug, Serialize, Deserialize)]
14pub enum Object {
15    DeleteAfter {
16        spawned_at: Time,
17        timeout: Duration,
18    },
19    Portal {
20        target: Vec3<f32>,
21        requires_no_aggro: bool,
22        buildup_time: Secs,
23    },
24    BeamPillar {
25        spawned_at: Time,
26        buildup_duration: Duration,
27        attack_duration: Duration,
28        beam_duration: Duration,
29        radius: f32,
30        height: f32,
31        damage: f32,
32        damage_effect: Option<CombatEffect>,
33        dodgeable: Dodgeable,
34        tick_rate: f32,
35        specifier: beam::FrontendSpecifier,
36        indicator_specifier: BeamPillarIndicatorSpecifier,
37    },
38    Crux {
39        owner: Uid,
40        scale: f32,
41        range: f32,
42        strength: f32,
43        duration: Secs,
44        #[serde(skip)]
45        pid_controller: Option<PidController<fn(f32, f32) -> f32, 8>>,
46    },
47}
48
49impl Component for Object {
50    type Storage = FlaggedStorage<Self, VecStorage<Self>>;
51}
52
53#[derive(Clone, Debug)]
54pub struct PortalData {
55    pub target: Vec3<f32>,
56    pub requires_no_aggro: bool,
57    pub buildup_time: Secs,
58}
59
60impl From<PortalData> for Object {
61    fn from(
62        PortalData {
63            target,
64            requires_no_aggro,
65            buildup_time,
66        }: PortalData,
67    ) -> Self {
68        Self::Portal {
69            target,
70            requires_no_aggro,
71            buildup_time,
72        }
73    }
74}