feat: Derive traits

This commit is contained in:
Alexey 2026-03-19 15:57:29 +03:00
commit ffdb5d94a8
11 changed files with 115 additions and 79 deletions

View file

@ -1,37 +1,32 @@
use bevy::{
prelude::*,
ui_widgets::ScrollbarPlugin
ui_widgets::ScrollbarPlugin,
};
use bevy_rapier2d::{
prelude::*,
rapier::prelude::IntegrationParameters
rapier::prelude::IntegrationParameters,
};
pub mod player;
pub mod layout;
pub mod input;
pub mod inventory;
pub mod ui;
pub mod layout;
pub mod player;
#[cfg(test)]
mod tests;
pub mod ui;
pub const PIXELS_PER_METER: f32 = 16.0;
pub struct ExpeditionPlugin;
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, Default, States)]
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, Default, States, Reflect)]
#[reflect(Clone, PartialEq, Debug, Default, Hash, State)]
pub enum GameState {
#[default]
Running,
Inventory,
}
pub fn insert_entity_name(names: Query<(Entity, &mut Name), Added<Name>>) {
for (entity, mut name) in names {
name.mutate(|name| name.insert_str(0, format!("{entity}: ").as_str()));
}
}
fn camera_bundle() -> impl Bundle {
(
Camera2d,
@ -50,6 +45,12 @@ fn camera_bundle() -> impl Bundle {
)
}
fn insert_entity_name(names: Query<(Entity, &mut Name), Added<Name>>) {
for (entity, mut name) in names {
name.mutate(|name| name.insert_str(0, format!("{entity}: ").as_str()));
}
}
fn setup_global(mut commands: Commands) {
commands.spawn(camera_bundle());
commands.spawn(ui::UiRoot::new());
@ -57,34 +58,39 @@ fn setup_global(mut commands: Commands) {
impl Plugin for ExpeditionPlugin {
fn build(&self, app: &mut App) {
let rapier_init = RapierContextInitialization::InitializeDefaultRapierContext {
integration_parameters: IntegrationParameters {
length_unit: PIXELS_PER_METER,
..default()
},
rapier_configuration: RapierConfiguration {
gravity: Vec2::ZERO,
physics_pipeline_active: true,
scaled_shape_subdivision: 10,
force_update_from_transform_changes: false,
},
};
app.add_plugins((
RapierDebugRenderPlugin::default(),
RapierPhysicsPlugin::<()>::default()
.with_custom_initialization(rapier_init),
ScrollbarPlugin,
input::plugin::InputAssetPlugin::<input::InputAction>::default(),
input::plugin::InputAssetPlugin::<input::UiAction>::default(),
ScrollbarPlugin,
RapierPhysicsPlugin::<()>::default()
.with_custom_initialization(RapierContextInitialization::InitializeDefaultRapierContext {
integration_parameters: IntegrationParameters {
length_unit: PIXELS_PER_METER,
..default()
},
rapier_configuration: RapierConfiguration {
gravity: Vec2::ZERO,
physics_pipeline_active: true,
scaled_shape_subdivision: 10,
force_update_from_transform_changes: false,
},
}),
RapierDebugRenderPlugin::default(),
))
.init_state::<GameState>()
.insert_resource(ui::WindowSize::default())
.add_systems(Startup, (player::systems::setup_player, setup_global, layout::systems::setup_world))
.add_systems(Startup, (
setup_global,
layout::systems::setup_world,
player::systems::setup_player,
))
.add_systems(Update, (
insert_entity_name,
layout::systems::detect_interact_collisions,
player::systems::handle_input,
ui::update_window_size,
ui::handle_input,
insert_entity_name,
layout::systems::detect_interact_collisions,
))
.add_systems(OnEnter(GameState::Inventory), ui::inventory::systems::setup_ui_inventory)
.add_systems(OnExit(GameState::Inventory), ui::inventory::systems::clear_ui_inventory)