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::*; #[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(Resource, Default)] pub struct CursorWorldCoordinates(pub Option); #[derive(Debug, Deserialize, Message, Serialize)] pub enum ThrustEvent { Up(bool), Down(bool), Left(bool), Right(bool), } #[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); #[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, #[entities] pub peer_snap: Option, } #[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;