Start parallel view
This commit is contained in:
parent
1da3a67046
commit
64d474694f
2 changed files with 26 additions and 94 deletions
|
@ -1,39 +1,5 @@
|
|||
use bevy::prelude::*;
|
||||
|
||||
#[derive(Debug, PartialEq, Clone)]
|
||||
pub enum Camera {
|
||||
TwoD(Entity),
|
||||
ThreeD(Entity),
|
||||
}
|
||||
|
||||
impl Camera {
|
||||
pub fn is_3d(&self) -> bool {
|
||||
match self {
|
||||
Camera::TwoD(_) => false,
|
||||
Camera::ThreeD(_) => true,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn is_2d(&self) -> bool {
|
||||
!self.is_3d()
|
||||
}
|
||||
|
||||
fn create_2d(cmd: &mut Commands) -> Self {
|
||||
Self::TwoD(cmd.spawn(Camera2dBundle::default()).id())
|
||||
}
|
||||
|
||||
fn create_3d(cmd: &mut Commands, window_extent: Vec2) -> Self {
|
||||
Self::ThreeD(
|
||||
cmd.spawn(Camera3dBundle {
|
||||
transform: Transform::from_xyz(200.0, -600.0, 600.0)
|
||||
.looking_at(window_extent.extend(0.0), Vec3::Z),
|
||||
..default()
|
||||
})
|
||||
.id(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Resource, Debug, PartialEq, Clone)]
|
||||
pub struct GlobalState {
|
||||
pub cursor_position: Vec2,
|
||||
|
@ -42,36 +8,34 @@ pub struct GlobalState {
|
|||
pub view_2d: bool,
|
||||
pub extrusion_height: f32,
|
||||
|
||||
pub camera: Option<Camera>,
|
||||
pub offscreen_image
|
||||
|
||||
camera_3d: Option<Entity>,
|
||||
camera_2d: Option<Entity>,
|
||||
}
|
||||
|
||||
impl GlobalState {
|
||||
pub fn setup_2d_cam(&mut self, cmd: &mut Commands) {
|
||||
match &mut self.camera {
|
||||
Some(camera) => match camera {
|
||||
Camera::TwoD(_) => (),
|
||||
Camera::ThreeD(cam) => {
|
||||
cmd.entity(*cam).despawn();
|
||||
|
||||
*camera = Camera::create_2d(cmd);
|
||||
}
|
||||
},
|
||||
None => self.camera = Some(Camera::create_2d(cmd)),
|
||||
}
|
||||
self.camera_2d = Some(cmd.spawn(Camera2dBundle::default()).id());
|
||||
}
|
||||
|
||||
pub fn setup_3d_cam(&mut self, cmd: &mut Commands) {
|
||||
match &mut self.camera {
|
||||
Some(camera) => match camera {
|
||||
Camera::TwoD(cam) => {
|
||||
cmd.entity(*cam).despawn();
|
||||
self.camera_3d = Some(
|
||||
cmd.spawn(Camera3dBundle {
|
||||
transform: Transform::from_xyz(200.0, -600.0, 600.0)
|
||||
.looking_at((self.window_extent * 0.5).extend(0.0), Vec3::Z),
|
||||
..default()
|
||||
})
|
||||
.id(),
|
||||
);
|
||||
}
|
||||
|
||||
*camera = Camera::create_3d(cmd, self.window_extent);
|
||||
}
|
||||
Camera::ThreeD(_) => (),
|
||||
},
|
||||
None => self.camera = Some(Camera::create_3d(cmd, self.window_extent)),
|
||||
}
|
||||
pub fn camera_2d(&self) -> Entity {
|
||||
self.camera_2d.unwrap()
|
||||
}
|
||||
|
||||
pub fn camera_3d(&self) -> Entity {
|
||||
self.camera_3d.unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -84,43 +48,10 @@ impl Default for GlobalState {
|
|||
view_2d: true,
|
||||
extrusion_height: 20.0,
|
||||
|
||||
camera: None,
|
||||
camera_3d: None,
|
||||
camera_2d: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use bevy::{ecs::system::CommandQueue, prelude::*};
|
||||
|
||||
use super::GlobalState;
|
||||
|
||||
#[test]
|
||||
fn camera_conversion() {
|
||||
let world = World::new();
|
||||
let mut command_queue = CommandQueue::default();
|
||||
|
||||
let mut cmd = Commands::new(&mut command_queue, &world);
|
||||
|
||||
// default global state
|
||||
let mut global_state = GlobalState::default();
|
||||
|
||||
// create 2d cam
|
||||
global_state.setup_2d_cam(&mut cmd);
|
||||
|
||||
assert!(global_state.camera.is_some());
|
||||
assert!(global_state.camera.as_ref().unwrap().is_2d());
|
||||
|
||||
// switch to 3d cam
|
||||
global_state.setup_3d_cam(&mut cmd);
|
||||
|
||||
assert!(global_state.camera.is_some());
|
||||
assert!(global_state.camera.as_ref().unwrap().is_3d());
|
||||
|
||||
// switch to 2d cam
|
||||
global_state.setup_2d_cam(&mut cmd);
|
||||
|
||||
assert!(global_state.camera.is_some());
|
||||
assert!(global_state.camera.as_ref().unwrap().is_2d());
|
||||
}
|
||||
}
|
||||
#[derive()]
|
||||
|
|
|
@ -22,14 +22,15 @@ fn main() {
|
|||
.add_plugin(WorldInspectorPlugin::new())
|
||||
.insert_resource(GlobalState::default())
|
||||
.insert_resource(ObjectInfos::default())
|
||||
.add_startup_system(setup_camera)
|
||||
.add_startup_system(setup_cameras)
|
||||
.add_systems((mouse_event_system, update_ui_side_panel, on_resize_system))
|
||||
.run();
|
||||
}
|
||||
|
||||
// Spawns the camera
|
||||
fn setup_camera(mut cmd: Commands, mut global_state: ResMut<GlobalState>) {
|
||||
fn setup_cameras(mut cmd: Commands, mut global_state: ResMut<GlobalState>) {
|
||||
global_state.setup_2d_cam(&mut cmd);
|
||||
global_state.setup_3d_cam(&mut cmd);
|
||||
}
|
||||
|
||||
// Create UI
|
||||
|
|
Loading…
Reference in a new issue