feat: added clap for level parsing

- Camera sets up as a child of player entity
This commit is contained in:
Alexey 2026-03-30 20:43:46 +03:00
commit 3cddecf592
7 changed files with 156 additions and 13 deletions

135
Cargo.lock generated
View file

@ -177,6 +177,56 @@ dependencies = [
"libc",
]
[[package]]
name = "anstream"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d"
dependencies = [
"anstyle",
"anstyle-parse",
"anstyle-query",
"anstyle-wincon",
"colorchoice",
"is_terminal_polyfill",
"utf8parse",
]
[[package]]
name = "anstyle"
version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000"
[[package]]
name = "anstyle-parse"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e"
dependencies = [
"utf8parse",
]
[[package]]
name = "anstyle-query"
version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
dependencies = [
"windows-sys 0.61.2",
]
[[package]]
name = "anstyle-wincon"
version = "3.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
dependencies = [
"anstyle",
"once_cell_polyfill",
"windows-sys 0.61.2",
]
[[package]]
name = "anyhow"
version = "1.0.102"
@ -1899,6 +1949,46 @@ dependencies = [
"libloading",
]
[[package]]
name = "clap"
version = "4.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351"
dependencies = [
"clap_builder",
"clap_derive",
]
[[package]]
name = "clap_builder"
version = "4.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f"
dependencies = [
"anstream",
"anstyle",
"clap_lex",
"strsim",
]
[[package]]
name = "clap_derive"
version = "4.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a"
dependencies = [
"heck",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "clap_lex"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
[[package]]
name = "codespan-reporting"
version = "0.12.0"
@ -1910,6 +2000,12 @@ dependencies = [
"unicode-width",
]
[[package]]
name = "colorchoice"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570"
[[package]]
name = "combine"
version = "4.6.7"
@ -2428,6 +2524,7 @@ dependencies = [
"bevy_common_assets",
"bevy_input",
"bevy_rapier2d",
"clap",
"leafwing-input-manager",
"serde",
"toml 1.0.3+spec-1.1.0",
@ -2980,6 +3077,12 @@ dependencies = [
"stable_deref_trait",
]
[[package]]
name = "heck"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
[[package]]
name = "hermit-abi"
version = "0.5.2"
@ -3129,6 +3232,12 @@ dependencies = [
"rustversion",
]
[[package]]
name = "is_terminal_polyfill"
version = "1.70.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
[[package]]
name = "itertools"
version = "0.13.0"
@ -4010,6 +4119,12 @@ version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
[[package]]
name = "once_cell_polyfill"
version = "1.70.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
[[package]]
name = "orbclient"
version = "0.3.50"
@ -4290,9 +4405,9 @@ dependencies = [
[[package]]
name = "quote"
version = "1.0.44"
version = "1.0.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4"
checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
dependencies = [
"proc-macro2",
]
@ -4889,6 +5004,12 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731"
[[package]]
name = "strsim"
version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "svg_fmt"
version = "0.4.5"
@ -4908,9 +5029,9 @@ dependencies = [
[[package]]
name = "syn"
version = "2.0.115"
version = "2.0.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e614ed320ac28113fa64972c4262d5dbc89deacdfd00c34a3e4cea073243c12"
checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
dependencies = [
"proc-macro2",
"quote",
@ -5293,6 +5414,12 @@ version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
[[package]]
name = "utf8parse"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "uuid"
version = "1.20.0"

View file

@ -10,6 +10,7 @@ bevy = { version = "0.18.0", features = ["bevy_remote", "debug", "experimental_b
bevy_common_assets = { version = "0.15.0", features = ["toml"] }
bevy_input = { version = "0.18.0", features = ["serde", "serialize"] }
bevy_rapier2d = { version = "0.33.0", features = ["rapier-debug-render"] }
clap = { version = "4.6.0", features = ["derive"] }
leafwing-input-manager = "0.20.0"
serde = { version = "1.0.228", features = ["derive"] }
toml = "1.0.3"

View file

@ -6,12 +6,15 @@ floors = [
{ x = 0, y = 0, w = 16 },
{ x = 0, y = 4, w = 16 },
{ x = 0, y = 8, w = 16 },
{ x = 0, y = 12, w = 16 },
]
walls = [
{ x = 0, y = 1, h = 3 },
{ x = 0, y = 5, h = 3 },
{ x = 0, y = 9, h = 3 },
{ x = 15, y = 1, h = 3 },
{ x = 15, y = 5, h = 3 },
{ x = 15, y = 9, h = 3 },
]
wall_connectors = [
{ x = 4, y = 3 },
@ -29,7 +32,7 @@ doors = [
{ x = 11, y = 5, facing = "left" },
]
stairs = [
{ x = 8, y = 1 },
{ x = 8, y = 1, floors = 3 },
]
containers = [
{ x = 2, y = 1 },

View file

@ -6,7 +6,7 @@ use bevy::{
use bevy_rapier2d::prelude::*;
use crate::{
player::Player,
StartupArgs, player::Player
};
use super::*;
@ -86,7 +86,8 @@ pub fn lock_door(
pub fn setup_world(
mut commands: Commands,
asset_server: Res<AssetServer>,
startup_args: Res<StartupArgs>,
) {
let level_handle = asset_server.load("levels/level.toml");
let level_handle = asset_server.load(startup_args.level.clone());
commands.insert_resource(LevelAssetHandle(level_handle));
}

View file

@ -7,6 +7,7 @@ use bevy_rapier2d::{
prelude::*,
rapier::prelude::IntegrationParameters,
};
use clap::Parser;
pub mod input;
pub mod inventory;
@ -37,7 +38,15 @@ pub enum LoadingState {
Ready,
}
fn camera_bundle() -> impl Bundle {
#[derive(Parser, Resource, Clone, PartialEq, Eq, Hash, Debug, Reflect, Default)]
#[reflect(Resource, Clone, PartialEq, Hash, Debug, Default)]
pub struct StartupArgs {
#[arg(long, short, default_value = "levels/level.toml")]
/// Level to load (relative to assets folder)
level: String,
}
pub fn camera_bundle() -> impl Bundle {
(
Camera2d,
Camera {
@ -67,7 +76,6 @@ pub const fn meters(value: f32) -> f32 {
}
fn setup_global(mut commands: Commands) {
commands.spawn(camera_bundle());
commands.spawn(ui::UiRoot::new());
}

View file

@ -6,12 +6,16 @@ use bevy::{
},
};
use expedition_demo::ExpeditionPlugin;
use clap::Parser;
use expedition_demo::{ExpeditionPlugin, StartupArgs};
fn main() {
let startup_args = StartupArgs::parse();
App::new()
.add_plugins(DefaultPlugins.set(ImagePlugin::default_nearest()))
.add_plugins(ExpeditionPlugin)
.insert_resource(startup_args)
.add_plugins(RemotePlugin::default())
.add_plugins(RemoteHttpPlugin::default())
.run();

View file

@ -2,9 +2,7 @@ use bevy::prelude::*;
use bevy_rapier2d::prelude::*;
use crate::{
meters,
input::InputAction as Action,
inventory::Inventory,
camera_bundle, input::InputAction as Action, inventory::Inventory, meters
};
pub mod systems;
@ -40,6 +38,7 @@ pub fn player_bundle(asset_server: &Res<AssetServer>, position: Vec2) -> impl Bu
Inventory::new(UVec2::new(6, 2)),
Inventory::new(UVec2::new(5, 3)),
Inventory::new(UVec2::new(4, 4)),
camera_bundle(),
],
)
}