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()
|
|
|
|
// }
|
|
|
|
// ));
|
|
|
|
//}
|