From 5d0ef3768cc2b3a28d58eec8fe4bd3dc48644824 Mon Sep 17 00:00:00 2001 From: Vladislav Sumin Date: Mon, 1 Jan 2024 22:28:26 +0300 Subject: [PATCH] add camera --- src/camera.rs | 175 +++++++++++++++++++++++++++++++++++++++++++++ src/key_binding.rs | 35 +++++++++ src/main.rs | 25 +++---- 3 files changed, 223 insertions(+), 12 deletions(-) create mode 100644 src/camera.rs create mode 100644 src/key_binding.rs diff --git a/src/camera.rs b/src/camera.rs new file mode 100644 index 0000000..269d99b --- /dev/null +++ b/src/camera.rs @@ -0,0 +1,175 @@ +use std::f32::consts::PI; +use bevy::ecs::event::ManualEventReader; +use bevy::input::mouse::MouseMotion; +use bevy::math::vec3; +use bevy::prelude::*; +use bevy::window::{CursorGrabMode, PrimaryWindow}; +use crate::key_binding::KeyBindings; + +/// Структура плагина камеры. +/// Данный плагин отвечает за настройку и перемещение камеры игрока +pub struct CameraPlugin; + +/// Маркер для дефолтной камеры игрока +#[derive(Component)] +pub struct PlayerCamera; + +/// Хранит состояние для движения мыши +#[derive(Resource, Default)] +struct InputState { + reader_motion: ManualEventReader, +} + +/// Настройки перемещения камеры +#[derive(Resource)] +pub struct MovementSettings { + /// Чувствительность мыши + pub sensitivity: f32, + /// Скорость перемещения камеры + pub speed: f32, +} + +impl Default for MovementSettings { + fn default() -> Self { + Self { + sensitivity: 0.0002, + speed: 8., + } + } +} + + +impl Plugin for CameraPlugin { + fn build(&self, app: &mut App) { + app + .init_resource::() + .init_resource::() + .add_systems(Startup, setup_player_camera) + .add_systems(Update, (player_move_system, player_look_system, cursor_grab_system)); + } +} + +/// Создает и настраивает дефолтную камеру игрока +fn setup_player_camera(mut commands: Commands) { + // camera + commands.spawn(( + Camera3dBundle { + transform: Transform::from_xyz(3., 3., 3.) + .looking_at(vec3(1., 1., 1.), Vec3::Z), + ..default() + }, + PlayerCamera, + )); +} + +/// Слушает события нажатия клавиш отвечающих за перемещение камеры +fn player_move_system( + keys: Res>, + time: Res