40 lines
892 B
Rust
40 lines
892 B
Rust
use crate::heads::HeadState;
|
|
use bevy::prelude::*;
|
|
|
|
#[derive(Clone, Copy, Debug, PartialEq, Reflect, Default)]
|
|
pub struct UiHeadState {
|
|
pub head: usize,
|
|
pub health: f32,
|
|
pub ammo: f32,
|
|
pub reloading: Option<f32>,
|
|
}
|
|
|
|
impl UiHeadState {
|
|
pub fn damage(&self) -> f32 {
|
|
1. - self.health
|
|
}
|
|
|
|
pub fn ammo_used(&self) -> f32 {
|
|
1. - self.ammo
|
|
}
|
|
|
|
pub fn reloading(&self) -> Option<f32> {
|
|
self.reloading
|
|
}
|
|
|
|
pub(crate) fn new(value: HeadState, time: f32) -> Self {
|
|
let reloading = if value.has_ammo() {
|
|
None
|
|
} else {
|
|
Some((time - value.last_use) / value.reload_duration)
|
|
};
|
|
|
|
Self {
|
|
head: value.head,
|
|
ammo: value.ammo as f32 / value.ammo_max as f32,
|
|
health: value.health as f32 / value.health_max as f32,
|
|
reloading,
|
|
}
|
|
}
|
|
}
|