veloren_common/comp/
misc.rs1use 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}