pub mod thruster;
use crate::config::part::PartConfig;
use bevy::ecs::entity::MapEntities;
use bevy::math::{Quat, Vec2};
use crate::prelude::*;
use bevy_replicon::prelude::Replicated;
use serde::{Deserialize, Serialize};
use avian2d::prelude::*;
use crate::thrust::ThrustSolution;
#[derive(Component)]
pub struct MainCamera;
#[derive(Component)]
pub struct StarfieldFront;
#[derive(Component)]
pub struct StarfieldMid;
#[derive(Component)]
pub struct StarfieldBack;
#[derive(Component)]
pub struct FuelText;
#[derive(Component)]
pub struct PowerText;
#[derive(Debug, Deserialize, Message, Serialize)]
pub struct ThrustEvent(pub ThrustSolution);
#[derive(Component, Serialize, Deserialize, Debug)]
#[require(
RigidBody::Dynamic,
LinearVelocity,
AngularVelocity,
ConstantForce,
Replicated,
)]
pub struct Part {
pub strong_config: PartConfig,
}
#[derive(Component, Debug)]
pub struct PartHandle(pub Handle<PartConfig>);
#[derive(Component, Serialize, Deserialize, Debug)]
pub struct Player {
#[entities]
pub client: Entity,
}
#[derive(Component, Default, Serialize, Deserialize, Debug)]
#[allow(clippy::struct_excessive_bools, reason = "It's not a state machine")]
pub struct PlayerThrust {
pub up: bool,
pub down: bool,
pub left: bool,
pub right: bool,
}
#[derive(Component, Serialize, Deserialize, Debug)]
pub struct Particles {
pub effect: String,
pub active: bool,
}
#[derive(Serialize, Deserialize, Message, Debug, MapEntities, Clone)]
pub struct DragRequestEvent {
#[entities]
pub drag_target: Entity,
pub drag_to: Vec2,
pub set_rotation: Quat,
#[entities]
pub snap_target: Option<Entity>,
#[entities]
pub peer_snap: Option<Entity>,
}
#[derive(Component, Serialize, Deserialize, Debug)]
pub struct PlayerStorage {
pub fuel_capacity: f32,
pub fuel: f32,
pub power_capacity: f32,
pub power: f32,
}
#[derive(Component)]
pub struct Me;