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