Skip to main content

vitium_api/game/components/
armor.rs

1use std::collections::HashSet;
2
3use bevy_ecs::component::Component;
4use serde::{Deserialize, Serialize};
5
6use fe3o4::Id;
7
8use crate::{game::Mat, Dice};
9
10/// Instance of armor.
11#[derive(Clone, Serialize, Deserialize, Component)]
12#[cfg_attr(target_family = "wasm", derive(tsify_next::Tsify))]
13#[cfg_attr(
14    target_family = "wasm",
15    tsify(into_wasm_abi, from_wasm_abi, large_number_types_as_bigints)
16)]
17pub struct Armor {
18    /// Defense.
19    pub def: Dice,
20    /// Layers of the armor.
21    pub layer: Vec<ArmorLayer>,
22}
23
24/// Defines a layer of armor.
25#[derive(Clone, Serialize, Deserialize)]
26#[cfg_attr(target_family = "wasm", derive(tsify_next::Tsify))]
27#[cfg_attr(
28    target_family = "wasm",
29    tsify(into_wasm_abi, from_wasm_abi, large_number_types_as_bigints)
30)]
31pub struct ArmorLayer {
32    /// Material of this layer.
33    pub mat: Id<Mat>,
34    /// Covering body parts.
35    pub cover: HashSet<String>,
36    /// Covered rate.
37    pub rate: f32,
38    /// Thickness of material, in milimetres.
39    pub thickness: i16,
40}