veloren_common/
explosion.rs

1use crate::{combat::Attack, comp::item::Reagent, effect::Effect};
2use rand::{Rng, thread_rng};
3use serde::{Deserialize, Serialize};
4use vek::Rgb;
5
6#[derive(Clone, Debug, Serialize, Deserialize)]
7pub struct Explosion {
8    pub effects: Vec<RadiusEffect>,
9    pub radius: f32,
10    pub reagent: Option<Reagent>,
11    pub min_falloff: f32,
12}
13
14#[derive(Clone, Debug, Serialize, Deserialize)]
15pub enum RadiusEffect {
16    TerrainDestruction(f32, Rgb<f32>),
17    Entity(Effect),
18    Attack(Attack),
19}
20
21#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]
22pub enum ColorPreset {
23    Black,
24    InkBomb,
25    IceBomb,
26}
27
28impl ColorPreset {
29    pub fn to_rgb(&self) -> Rgb<f32> {
30        match self {
31            Self::Black => Rgb::black(),
32            Self::InkBomb => Rgb::new(4.0, 7.0, 32.0),
33            Self::IceBomb => {
34                let variation = thread_rng().gen::<f32>();
35                Rgb::new(
36                    83.0 - (20.0 * variation),
37                    212.0 - (52.0 * variation),
38                    255.0 - (62.0 * variation),
39                )
40            },
41        }
42    }
43}