diff --git a/Cargo.lock b/Cargo.lock index b683b0b..638f946 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1382,13 +1382,6 @@ dependencies = [ "wayland-client", ] -[[package]] -name = "camera_system" -version = "0.1.0" -dependencies = [ - "bevy", -] - [[package]] name = "cc" version = "1.0.90" @@ -3223,7 +3216,6 @@ dependencies = [ "bevy", "bevy-inspector-egui 0.23.4", "bevy_rapier3d", - "camera_system", "iyes_perf_ui", "noise 0.8.2", "rayon", diff --git a/Cargo.toml b/Cargo.toml index 05c599f..0193d4e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,8 +3,7 @@ resolver = "2" members = [ "game/main", "engine/world_generation", - "game/camera_system" - , "engine/asset_loader"] + "engine/asset_loader"] # Enable a small amount of optimization in debug mode [profile.dev] diff --git a/engine/world_generation/src/hex_utils.rs b/engine/world_generation/src/hex_utils.rs index b209280..e43eb8a 100644 --- a/engine/world_generation/src/hex_utils.rs +++ b/engine/world_generation/src/hex_utils.rs @@ -86,6 +86,20 @@ impl HexCoord { }; } + pub fn from_world_pos(world_pos: Vec3) -> Self { + let offset = world_pos.z / (OUTER_RADIUS * 3.); + let mut x = world_pos.x / (INNER_RADIUS * 2.); + let mut z = -x; + z -= offset; + x -= offset; + + let i_x = x.round() as i32; + let i_z = (-x - z).round() as i32; + let offset_pos = IVec2::new(i_x + i_z / 2, i_z); + + return Self::from_offset(offset_pos); + } + pub fn is_in_bounds(&self, map_height: usize, map_width: usize) -> bool { let off = self.to_offset(); if off.x < 0 || off.y < 0 { diff --git a/game/camera_system/Cargo.toml b/game/camera_system/Cargo.toml deleted file mode 100644 index 507a8ae..0000000 --- a/game/camera_system/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "camera_system" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -bevy = "0.13.1" diff --git a/game/main/Cargo.toml b/game/main/Cargo.toml index 65a7152..154026a 100644 --- a/game/main/Cargo.toml +++ b/game/main/Cargo.toml @@ -12,6 +12,5 @@ bevy-inspector-egui = "0.23.4" iyes_perf_ui = "0.2.3" noise = "0.8.2" world_generation ={path="../../engine/world_generation"} -camera_system={path = "../camera_system"} bevy_rapier3d = { version = "0.25.0", features = [ "simd-stable", "debug-render-3d","parallel" ] } rayon = "1.10.0" diff --git a/game/camera_system/src/lib.rs b/game/main/src/camera_system/camera_plugin.rs similarity index 63% rename from game/camera_system/src/lib.rs rename to game/main/src/camera_system/camera_plugin.rs index 97a3eff..be33adb 100644 --- a/game/camera_system/src/lib.rs +++ b/game/main/src/camera_system/camera_plugin.rs @@ -1,20 +1,23 @@ -use crate::prelude::PhosCamera; use bevy::core_pipeline::experimental::taa::{TemporalAntiAliasBundle, TemporalAntiAliasPlugin}; use bevy::input::mouse::{MouseMotion, MouseScrollUnit, MouseWheel}; use bevy::pbr::ScreenSpaceAmbientOcclusionBundle; use bevy::prelude::*; use bevy::window::CursorGrabMode; -use prelude::{CameraBounds, PhosCameraTargets}; +use bevy_rapier3d::plugin::RapierContext; +use world_generation::hex_utils::HexCoord; +use world_generation::prelude::Map; -pub mod prelude; +use super::components::*; pub struct PhosCameraPlugin; impl Plugin for PhosCameraPlugin { fn build(&self, app: &mut App) { + app.register_type::(); + app.add_systems(PreStartup, setup); - app.add_systems(Update, (rts_camera_system, apply_camera_height).chain()); + app.add_systems(Update, rts_camera_system); app.add_systems(PostUpdate, limit_camera_bounds); //Free Cam //app.add_systems(Update, (grab_mouse, (update_camera, update_camera_mouse).chain())); @@ -27,15 +30,10 @@ fn setup(mut commands: Commands, mut msaa: ResMut) { commands .spawn(( Camera3dBundle { - transform: Transform::from_xyz(0., 30., 0.) - .with_rotation(Quat::from_axis_angle(Vec3::Y, (-90 as f32).to_radians())), - ..default() - }, - PhosCamera { - speed: 100., - zoom_speed: 20., + transform: Transform::from_xyz(0., 30., 0.).looking_to(Vec3::Z, Vec3::Y), ..default() }, + PhosCamera::default(), PhosCameraTargets::default(), )) .insert(ScreenSpaceAmbientOcclusionBundle::default()) @@ -128,12 +126,14 @@ fn grab_mouse(mut windows: Query<&mut Window>, mouse: Res, + mut wheel: EventReader, key: Res>, time: Res