From 6d0012c7829e6cc49e2ed48cc7e4a415c4a47055 Mon Sep 17 00:00:00 2001 From: Franklin Blanco Date: Fri, 15 Sep 2023 16:11:13 -0700 Subject: [PATCH] back to square one with the gun on the hand --- Cargo.lock | 346 +++++++++++++++++++- Cargo.toml | 3 +- src/comps/core/markers/firearm.rs | 17 + src/comps/core/markers/holdable.rs | 4 +- src/comps/core/markers/mod.rs | 5 +- src/comps/core/markers/player.rs | 2 +- src/comps/core/mod.rs | 2 +- src/comps/guns/{ar_15_rifle.rs => m4a1.rs} | 1 - src/comps/guns/mod.rs | 2 +- src/comps/mod.rs | 2 +- src/constants/player_values.rs | 7 +- src/logic/core/guns/caliber.rs | 4 + src/logic/core/guns/firearm.rs | 27 ++ src/logic/core/guns/mod.rs | 3 + src/logic/core/guns/spawn_firearm.rs | 34 ++ src/logic/core/mod.rs | 1 + src/logic/core/player/camera_player_sync.rs | 15 +- src/logic/core/player/mod.rs | 2 +- src/logic/core/player/player_movement.rs | 23 +- src/logic/core/player/spawn_player.rs | 38 +-- src/main.rs | 6 +- src/scenes/scene1/init.rs | 15 +- src/scenes/scene1/obstacles.rs | 2 +- src/setup/gltf_assets.rs | 21 +- src/setup/mod.rs | 3 +- 25 files changed, 512 insertions(+), 73 deletions(-) create mode 100644 src/comps/core/markers/firearm.rs rename src/comps/guns/{ar_15_rifle.rs => m4a1.rs} (50%) create mode 100644 src/logic/core/guns/caliber.rs create mode 100644 src/logic/core/guns/firearm.rs create mode 100644 src/logic/core/guns/mod.rs create mode 100644 src/logic/core/guns/spawn_firearm.rs diff --git a/Cargo.lock b/Cargo.lock index e62b5cc..670f806 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -200,6 +200,25 @@ dependencies = [ "num-traits", ] +[[package]] +name = "arboard" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac57f2b058a76363e357c056e4f74f1945bf734d37b8b3ef49066c4787dde0fc" +dependencies = [ + "clipboard-win", + "core-graphics", + "image", + "log", + "objc", + "objc-foundation", + "objc_id", + "parking_lot", + "thiserror", + "winapi", + "x11rb", +] + [[package]] name = "arrayvec" version = "0.7.4" @@ -255,6 +274,12 @@ version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" +[[package]] +name = "atomic_refcell" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112ef6b3f6cb3cb6fc5b6b494ef7a848492cff1ab0ef4de10b0f7d572861c905" + [[package]] name = "autocfg" version = "1.1.0" @@ -298,6 +323,45 @@ dependencies = [ "bevy_internal", ] +[[package]] +name = "bevy-inspector-egui" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd2523be5ae7d482e5435dc75509b80a320989175768fb4b711603b9d2ab8fff" +dependencies = [ + "bevy-inspector-egui-derive", + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_core_pipeline", + "bevy_ecs", + "bevy_egui", + "bevy_hierarchy", + "bevy_log", + "bevy_math", + "bevy_pbr", + "bevy_reflect", + "bevy_render", + "bevy_utils", + "bevy_window", + "egui", + "image", + "once_cell", + "pretty-type-name", + "smallvec", +] + +[[package]] +name = "bevy-inspector-egui-derive" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0edba455601861b8e8b76128ae5d46dd968114edde60f0ac3d2c21535a947548" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.32", +] + [[package]] name = "bevy_a11y" version = "0.11.2" @@ -498,6 +562,19 @@ dependencies = [ "syn 2.0.32", ] +[[package]] +name = "bevy_egui" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a73a93a8cf6b8c744281d1b88f5b0fa278d608e909af9bbf4eb491a7cb1ad2c" +dependencies = [ + "arboard", + "bevy", + "egui", + "thread_local", + "webbrowser", +] + [[package]] name = "bevy_encase_derive" version = "0.11.2" @@ -1199,6 +1276,17 @@ dependencies = [ "libloading 0.7.4", ] +[[package]] +name = "clipboard-win" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362" +dependencies = [ + "error-code", + "str-buf", + "winapi", +] + [[package]] name = "codespan-reporting" version = "0.11.1" @@ -1415,7 +1503,7 @@ dependencies = [ "autocfg", "cfg-if", "crossbeam-utils", - "memoffset", + "memoffset 0.9.0", "scopeguard", ] @@ -1473,12 +1561,41 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" +[[package]] +name = "ecolor" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e479a7fa3f23d4e794f8b2f8b3568dd4e47886ad1b12c9c095e141cb591eb63" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "egui" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3aef8ec3ae1b772f340170c65bf27d5b8c28f543a0116c844d2ac08d01123e7" +dependencies = [ + "ahash 0.8.3", + "epaint", + "nohash-hasher", +] + [[package]] name = "either" version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +[[package]] +name = "emath" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3857d743a6e0741cdd60b622a74c7a36ea75f5f8f11b793b41d905d2c9721a4b" +dependencies = [ + "bytemuck", +] + [[package]] name = "encase" version = "0.6.1" @@ -1511,6 +1628,22 @@ dependencies = [ "syn 2.0.32", ] +[[package]] +name = "epaint" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09333964d4d57f40a85338ba3ca5ed4716070ab184dcfed966b35491c5c64f3b" +dependencies = [ + "ab_glyph", + "ahash 0.8.3", + "atomic_refcell", + "bytemuck", + "ecolor", + "emath", + "nohash-hasher", + "parking_lot", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -1526,6 +1659,16 @@ dependencies = [ "serde", ] +[[package]] +name = "error-code" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" +dependencies = [ + "libc", + "str-buf", +] + [[package]] name = "euclid" version = "0.22.9" @@ -1546,6 +1689,7 @@ name = "experiment" version = "0.1.0" dependencies = [ "bevy", + "bevy-inspector-egui", "bevy_rapier3d", ] @@ -1616,6 +1760,15 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[package]] +name = "form_urlencoded" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +dependencies = [ + "percent-encoding", +] + [[package]] name = "fsevent-sys" version = "4.1.0" @@ -1652,6 +1805,16 @@ dependencies = [ "waker-fn", ] +[[package]] +name = "gethostname" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "getrandom" version = "0.2.10" @@ -1897,6 +2060,25 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" +[[package]] +name = "home" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + [[package]] name = "image" version = "0.24.7" @@ -1909,6 +2091,7 @@ dependencies = [ "num-rational", "num-traits", "png", + "tiff", ] [[package]] @@ -2013,6 +2196,22 @@ dependencies = [ "walkdir", ] +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", + "windows-sys 0.45.0", +] + [[package]] name = "jni-sys" version = "0.3.0" @@ -2028,6 +2227,12 @@ dependencies = [ "libc", ] +[[package]] +name = "jpeg-decoder" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" + [[package]] name = "js-sys" version = "0.3.64" @@ -2201,6 +2406,15 @@ version = "2.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + [[package]] name = "memoffset" version = "0.9.0" @@ -2359,6 +2573,7 @@ dependencies = [ "bitflags 1.3.2", "cfg-if", "libc", + "memoffset 0.6.5", ] [[package]] @@ -2372,6 +2587,12 @@ dependencies = [ "libc", ] +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + [[package]] name = "nom" version = "7.1.3" @@ -2523,6 +2744,17 @@ dependencies = [ "objc_exception", ] +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + [[package]] name = "objc-sys" version = "0.2.0-beta.2" @@ -2558,6 +2790,15 @@ dependencies = [ "cc", ] +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + [[package]] name = "object" version = "0.32.1" @@ -2747,6 +2988,12 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "pretty-type-name" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f73cdaf19b52e6143685c3606206e114a4dfa969d6b14ec3894c88eb38bd4b" + [[package]] name = "proc-macro-crate" version = "1.3.1" @@ -3100,6 +3347,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "str-buf" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" + [[package]] name = "svg_fmt" version = "0.4.1" @@ -3213,6 +3466,17 @@ dependencies = [ "once_cell", ] +[[package]] +name = "tiff" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d172b0f4d3fba17ba89811858b9d3d97f928aece846475bbda076ca46736211" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + [[package]] name = "tinyvec" version = "1.6.0" @@ -3340,12 +3604,27 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +[[package]] +name = "unicode-bidi" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" + [[package]] name = "unicode-ident" version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + [[package]] name = "unicode-width" version = "0.1.10" @@ -3358,6 +3637,17 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +[[package]] +name = "url" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + [[package]] name = "uuid" version = "1.4.1" @@ -3495,6 +3785,29 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webbrowser" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2c79b77f525a2d670cb40619d7d9c673d09e0666f72c591ebd7861f84a87e57" +dependencies = [ + "core-foundation", + "home", + "jni 0.21.1", + "log", + "ndk-context", + "objc", + "raw-window-handle", + "url", + "web-sys", +] + +[[package]] +name = "weezl" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" + [[package]] name = "wgpu" version = "0.16.3" @@ -3636,6 +3949,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "winapi-wsapoll" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" +dependencies = [ + "winapi", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -3894,6 +4216,28 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "x11rb" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507" +dependencies = [ + "gethostname", + "nix 0.24.3", + "winapi", + "winapi-wsapoll", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56b245751c0ac9db0e006dc812031482784e434630205a93c73cfefcaabeac67" +dependencies = [ + "nix 0.24.3", +] + [[package]] name = "xi-unicode" version = "0.3.0" diff --git a/Cargo.toml b/Cargo.toml index dff492e..26c3d61 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,4 +16,5 @@ opt-level = 3 [dependencies] bevy = { version = "0.11.2", features = ["dynamic_linking"]} -bevy_rapier3d = { version = "0.22.0", features = ["debug-render-3d"] } \ No newline at end of file +bevy-inspector-egui = "0.19.0" +bevy_rapier3d = { version = "0.22.0", features = ["debug-render-3d"] } diff --git a/src/comps/core/markers/firearm.rs b/src/comps/core/markers/firearm.rs new file mode 100644 index 0000000..50fffde --- /dev/null +++ b/src/comps/core/markers/firearm.rs @@ -0,0 +1,17 @@ +use bevy::prelude::{Component, Vec3}; + +use crate::logic::core::guns::caliber::Caliber; + +#[derive(Component)] +pub struct FirearmData<'a> { + /// Where the bullets will come out of + pub firing_point: Vec3, + pub caliber: Caliber, + /// Placeholder until mags get implemented + pub max_capacity: u32, + /// Rounds per minute + pub fire_rate: u32, + /// Amount of ms it takes for gun to come down from shooting + pub rebound_time_millis: i64, + pub asset_path: &'a str, +} diff --git a/src/comps/core/markers/holdable.rs b/src/comps/core/markers/holdable.rs index 64df3f8..b9db35d 100644 --- a/src/comps/core/markers/holdable.rs +++ b/src/comps/core/markers/holdable.rs @@ -2,9 +2,9 @@ use bevy::prelude::*; /// Anything that can go in the player's hands. #[derive(Component, Default, Debug)] -pub struct HoldableObject { +pub struct HoldableObjectData { /// Where this object should be placed relative to the hand. pub held_at: Vec3, /// Initial Rotation in degrees pub y_rot: f32, -} \ No newline at end of file +} diff --git a/src/comps/core/markers/mod.rs b/src/comps/core/markers/mod.rs index 0f96a4a..6622ab1 100644 --- a/src/comps/core/markers/mod.rs +++ b/src/comps/core/markers/mod.rs @@ -1,3 +1,4 @@ -pub mod player; +pub mod camera; +pub mod firearm; pub mod holdable; -pub mod camera; \ No newline at end of file +pub mod player; diff --git a/src/comps/core/markers/player.rs b/src/comps/core/markers/player.rs index 1bf0f91..eb1aa9f 100644 --- a/src/comps/core/markers/player.rs +++ b/src/comps/core/markers/player.rs @@ -4,4 +4,4 @@ use bevy::prelude::Component; pub struct Player; #[derive(Component)] -pub struct PlayerHand; \ No newline at end of file +pub struct PlayerHand; diff --git a/src/comps/core/mod.rs b/src/comps/core/mod.rs index 960b3c0..0f2b937 100644 --- a/src/comps/core/mod.rs +++ b/src/comps/core/mod.rs @@ -1,2 +1,2 @@ pub mod controller; -pub mod markers; \ No newline at end of file +pub mod markers; diff --git a/src/comps/guns/ar_15_rifle.rs b/src/comps/guns/m4a1.rs similarity index 50% rename from src/comps/guns/ar_15_rifle.rs rename to src/comps/guns/m4a1.rs index 139597f..8b13789 100644 --- a/src/comps/guns/ar_15_rifle.rs +++ b/src/comps/guns/m4a1.rs @@ -1,2 +1 @@ - diff --git a/src/comps/guns/mod.rs b/src/comps/guns/mod.rs index 2fbc2bf..1291f9b 100644 --- a/src/comps/guns/mod.rs +++ b/src/comps/guns/mod.rs @@ -1 +1 @@ -pub mod ar_15_rifle; \ No newline at end of file +pub mod m4a1; diff --git a/src/comps/mod.rs b/src/comps/mod.rs index c7ea85a..829db75 100644 --- a/src/comps/mod.rs +++ b/src/comps/mod.rs @@ -1,2 +1,2 @@ pub mod core; -pub mod guns; \ No newline at end of file +pub mod guns; diff --git a/src/constants/player_values.rs b/src/constants/player_values.rs index e95a951..a3fa52a 100644 --- a/src/constants/player_values.rs +++ b/src/constants/player_values.rs @@ -1,9 +1,11 @@ +use crate::logic::core::guns::firearm::Firearm; + pub const MAX_LINEAR_PLAYER_VELOCITY: f32 = 20.0; pub const PLAYER_ACCELERATION: f32 = 20.0; pub const PLAYER_JUMP_FORCE: f32 = 900.0; /// Time in ms that player must be grounded in order to jump again pub const PLAYER_JUMP_COOLDOWN_MS: u128 = 75; -pub const PLAYER_SPRINT_SPEED_MULTIPLIER: f32 = 2.5; +pub const PLAYER_SPRINT_SPEED_MULTIPLIER: f32 = 3.5; pub const PLAYER_CROUCH_SPEED_MULTIPLIER: f32 = 0.25; pub const PLAYER_INITIAL_WEIGHT: f32 = 75.0; pub const PLAYER_GRAVITY_SCALE: f32 = 4.0; @@ -21,10 +23,11 @@ pub const PLAYER_LATERAL_ACCELERATION_MULTIPLIER: f32 = 1.0; pub const PLAYER_LINEAR_DAMPING_TIME_OFFSET_AFTER_JUMP_IN_MS: u128 = 20; +pub const DEFAULT_PLAYER_FIREARM: Firearm = Firearm::M4A1; /* pub const PLAYER_CAMERA_HEADBOB_Y_POS: f32 = 0.2; pub const PLAYER_CAMERA_HEADBOB_Y_NEG: f32 = -0.2; pub const PLAYER_CAMERA_HEADBOB_X_POS: f32 = 0.2; pub const PLAYER_CAMERA_HEADBOB_X_NEG: f32 = -0.2; -*/ \ No newline at end of file +*/ diff --git a/src/logic/core/guns/caliber.rs b/src/logic/core/guns/caliber.rs new file mode 100644 index 0000000..e7b9ab5 --- /dev/null +++ b/src/logic/core/guns/caliber.rs @@ -0,0 +1,4 @@ +#[allow(unused)] +pub enum Caliber { + NATO556, +} diff --git a/src/logic/core/guns/firearm.rs b/src/logic/core/guns/firearm.rs new file mode 100644 index 0000000..908981b --- /dev/null +++ b/src/logic/core/guns/firearm.rs @@ -0,0 +1,27 @@ +use crate::comps::core::markers::{firearm::FirearmData, holdable::HoldableObjectData}; +use bevy::prelude::*; + +use super::caliber::Caliber; + +pub enum Firearm { + M4A1, +} + +impl Firearm { + pub fn firearm_data(&self) -> FirearmData { + FirearmData { + firing_point: Vec3::ZERO, + caliber: Caliber::NATO556, + max_capacity: 30, + fire_rate: 800, + rebound_time_millis: 10, + asset_path: "weapons/m4a1_rifle.glb#Scene0", + } + } + pub fn holdable_object_data(&self) -> HoldableObjectData { + HoldableObjectData { + held_at: Vec3::ZERO, + y_rot: -90.0, + } + } +} diff --git a/src/logic/core/guns/mod.rs b/src/logic/core/guns/mod.rs new file mode 100644 index 0000000..3fb7b2e --- /dev/null +++ b/src/logic/core/guns/mod.rs @@ -0,0 +1,3 @@ +pub mod caliber; +pub mod firearm; +pub mod spawn_firearm; diff --git a/src/logic/core/guns/spawn_firearm.rs b/src/logic/core/guns/spawn_firearm.rs new file mode 100644 index 0000000..0cc6409 --- /dev/null +++ b/src/logic/core/guns/spawn_firearm.rs @@ -0,0 +1,34 @@ +use bevy::prelude::*; + +use crate::{ + comps::core::markers::player::PlayerHand, constants::player_values::DEFAULT_PLAYER_FIREARM, + utils, +}; + +pub fn spawn_firearm_on_player_hands( + mut commands: Commands, + query: Query>, + asset_server: Res, +) { + for entity in query.iter() { + println!("A"); + let mut firearm_transform = Transform::from_xyz(0.0, 0.0, 0.0); + firearm_transform.rotate_y(utils::rad_deg::radians_from_degrees( + DEFAULT_PLAYER_FIREARM.holdable_object_data().y_rot, + )); + let firearm = commands + .spawn(( + SceneBundle { + scene: asset_server.load(DEFAULT_PLAYER_FIREARM.firearm_data().asset_path), + visibility: Visibility::Inherited, + transform: firearm_transform, + ..default() + }, + DEFAULT_PLAYER_FIREARM.firearm_data(), + DEFAULT_PLAYER_FIREARM.holdable_object_data(), + )) + .id(); + + commands.entity(entity).push_children(&[firearm]); + } +} diff --git a/src/logic/core/mod.rs b/src/logic/core/mod.rs index f28d7c2..c305a4a 100644 --- a/src/logic/core/mod.rs +++ b/src/logic/core/mod.rs @@ -1 +1,2 @@ +pub mod guns; pub mod player; diff --git a/src/logic/core/player/camera_player_sync.rs b/src/logic/core/player/camera_player_sync.rs index 4fc71d4..0b73789 100644 --- a/src/logic/core/player/camera_player_sync.rs +++ b/src/logic/core/player/camera_player_sync.rs @@ -2,7 +2,7 @@ use bevy::{input::mouse::MouseMotion, prelude::*}; //use bevy_rapier3d::prelude::*; use crate::{ - comps::core::markers::{player::Player, camera::MainCamera}, + comps::core::markers::{camera::MainCamera, player::Player}, constants::player_values::{PLAYER_CAMERA_HEIGHT, PLAYER_CROUCH_HEIGHT, PLAYER_CROUCH_TIME_MS}, }; @@ -30,8 +30,12 @@ pub fn update_camera_vertical_position( mut camera: Query<&mut Transform, (With, Without)>, time: Res