outfly/src/actor.rs

118 lines
2.5 KiB
Rust
Raw Normal View History

2024-03-17 22:49:50 +00:00
use bevy::prelude::*;
2024-03-18 22:53:52 +00:00
use crate::nature;
2024-03-17 22:49:50 +00:00
pub struct ActorPlugin;
impl Plugin for ActorPlugin {
fn build(&self, app: &mut App) {
app.add_systems(FixedUpdate, update);
}
}
#[derive(Component)]
pub struct Actor {
pub hp: f32,
pub m: f32, // mass
pub v: Vec3, // velocity
// TODO: rotation
}
impl Default for Actor {
fn default() -> Self {
Self {
hp: 100.0,
m: 100.0,
v: Vec3::ZERO,
}
}
}
#[derive(Component)]
pub struct LifeForm {
pub adrenaline: f32,
pub adrenaline_baseline: f32,
pub adrenaline_jolt: f32,
}
impl Default for LifeForm { fn default() -> Self { Self {
adrenaline: 0.3,
adrenaline_baseline: 0.3,
adrenaline_jolt: 0.0,
}}}
#[derive(Component)]
pub struct Suit {
pub oxygen: f32,
pub power: f32,
pub oxygen_max: f32,
pub power_max: f32,
}
impl Default for Suit { fn default() -> Self { SUIT_SIMPLE } }
const SUIT_SIMPLE: Suit = Suit {
power: 1e5,
power_max: 1e5,
2024-03-18 22:53:52 +00:00
oxygen: nature::OXY_D,
oxygen_max: nature::OXY_D,
2024-03-17 22:49:50 +00:00
};
pub fn update(
time: Res<Time>,
mut query: Query<(&mut LifeForm, &mut Suit)>,
) {
let d = time.delta_seconds();
for (mut lifeform, mut suit) in query.iter_mut() {
if lifeform.adrenaline_jolt.abs() > 1e-3 {
lifeform.adrenaline_jolt *= 0.99;
}
else {
lifeform.adrenaline_jolt = 0.0
}
lifeform.adrenaline = (lifeform.adrenaline - 0.0001 + lifeform.adrenaline_jolt * 0.01).clamp(0.0, 1.0);
2024-03-18 22:53:52 +00:00
suit.oxygen = (suit.oxygen - nature::OXY_S*d).clamp(0.0, 1.0);
2024-03-17 22:49:50 +00:00
}
}
#[derive(Component)]
pub struct Player;
//pub enum SuitSystemHandler {
// Heat,
// None,
//}
//#[derive(Component)]
//pub struct SuitSystem {
// pub name: String,
// pub active: bool,
// pub power: f32,
// pub handler: SuitSystemHandler,
//}
//
//impl Default for SuitSystem {
// fn default() -> Self {
// Self {
// name: "Untitled".to_string(),
// active: true,
// power: 0.0,
// handler: SuitSystemHandler::None,
// }
// }
//}
//pub fn setup(
// mut commands: Commands,
// settings: Res<settings::Settings>,
//) {
// commands.spawn((
// Player,
// SuitSystem {
// name: "HUD".to_string(),
// active: settings.hud_active,
// power: -0.05,
// ..default()
// },
// SuitSystem {
// name: "Heater".to_string(),
// handler: SuitSystemHandler::Heat,
// ..default()
// }
// ));
//}