From 7f0cd163dd4085a6144d88d9fe5515dfd36889cc Mon Sep 17 00:00:00 2001 From: Dmitry Stepanov Date: Tue, 8 Mar 2022 15:51:01 +0300 Subject: [PATCH] ability to set startup data for the editor - this decreases iteration times dramatically allowing you to immeadiately load desired scene and start editing it --- editor/src/lib.rs | 46 ++++++++++++++++++++----- examples/scripting/.idea/workspace.xml | 7 ++-- examples/scripting/editor/src/main.rs | 10 ++++-- examples/scripting/game/src/lib.rs | 10 ++++-- examples/scripting/unnamed.rgs | Bin 95160 -> 127615 bytes src/script/mod.rs | 2 +- 6 files changed, 58 insertions(+), 17 deletions(-) diff --git a/editor/src/lib.rs b/editor/src/lib.rs index a1ac1853f..4058ea61c 100644 --- a/editor/src/lib.rs +++ b/editor/src/lib.rs @@ -319,6 +319,15 @@ pub struct GameLoopData { elapsed_time: f32, } +pub struct StartupData { + /// Working directory that should be set when starting the editor. If it is empty, then + /// current working directory won't be changed. + pub working_directory: PathBuf, + + /// A scene to load at the editor start. If it is empty, no scene will be loaded. + pub scene: PathBuf, +} + pub struct Editor { game_loop_data: GameLoopData, engine: Engine, @@ -352,7 +361,7 @@ pub struct Editor { } impl Editor { - pub fn new(event_loop: &EventLoop<()>) -> Self { + pub fn new(event_loop: &EventLoop<()>, startup_data: Option) -> Self { let inner_size = if let Some(primary_monitor) = event_loop.primary_monitor() { let mut monitor_dimensions = primary_monitor.size(); monitor_dimensions.height = (monitor_dimensions.height as f32 * 0.7) as u32; @@ -393,13 +402,6 @@ impl Editor { message_sender.clone(), &mut engine.user_interface.build_ctx(), ); - engine - .user_interface - .send_message(WindowMessage::open_modal( - configurator.window, - MessageDirection::ToWidget, - true, - )); let mut settings = Settings::default(); @@ -617,6 +619,34 @@ impl Editor { editor.set_interaction_mode(Some(InteractionModeKind::Move)); + if let Some(data) = startup_data { + if data.working_directory != PathBuf::default() { + editor + .message_sender + .send(Message::Configure { + working_directory: data.working_directory, + }) + .unwrap(); + } + + if data.scene != PathBuf::default() { + editor + .message_sender + .send(Message::LoadScene(data.scene)) + .unwrap(); + } + } else { + // Open configurator as usual. + editor + .engine + .user_interface + .send_message(WindowMessage::open_modal( + editor.configurator.window, + MessageDirection::ToWidget, + true, + )); + } + editor } diff --git a/examples/scripting/.idea/workspace.xml b/examples/scripting/.idea/workspace.xml index af1cdc063..9f232594d 100644 --- a/examples/scripting/.idea/workspace.xml +++ b/examples/scripting/.idea/workspace.xml @@ -10,12 +10,11 @@ - + + - - diff --git a/examples/scripting/editor/src/main.rs b/examples/scripting/editor/src/main.rs index 10858302c..f16079195 100644 --- a/examples/scripting/editor/src/main.rs +++ b/examples/scripting/editor/src/main.rs @@ -1,10 +1,16 @@ use fyrox::event_loop::EventLoop; -use fyroxed::Editor; +use fyroxed::{Editor, StartupData}; use game::GamePlugin; fn main() { let event_loop = EventLoop::new(); - let mut editor = Editor::new(&event_loop); + let mut editor = Editor::new( + &event_loop, + Some(StartupData { + working_directory: Default::default(), + scene: "unnamed.rgs".into(), + }), + ); editor.add_game_plugin(GamePlugin::new()); editor.run(event_loop) } diff --git a/examples/scripting/game/src/lib.rs b/examples/scripting/game/src/lib.rs index 9ec65ba51..c26b6d7da 100644 --- a/examples/scripting/game/src/lib.rs +++ b/examples/scripting/game/src/lib.rs @@ -33,6 +33,7 @@ use std::{cell::RefCell, rc::Rc, str::FromStr}; pub struct GamePlugin { scene: Handle, ui: Rc>, + debug_draw: bool, } impl Default for GamePlugin { @@ -46,6 +47,7 @@ impl GamePlugin { Self { scene: Default::default(), ui: Rc::new(RefCell::new(UserInterface::new(Vector2::new(100.0, 100.0)))), + debug_draw: false, } } } @@ -149,9 +151,11 @@ impl Plugin for GamePlugin { fn update(&mut self, context: &mut PluginContext) { let scene = &mut context.scenes[self.scene]; - let drawing_context = &mut scene.drawing_context; - drawing_context.clear_lines(); - scene.graph.physics.draw(drawing_context); + if self.debug_draw { + let drawing_context = &mut scene.drawing_context; + drawing_context.clear_lines(); + scene.graph.physics.draw(drawing_context); + } let mut ui = self.ui.borrow_mut(); diff --git a/examples/scripting/unnamed.rgs b/examples/scripting/unnamed.rgs index 8a2db1a063f6cdbb01d12b2e413453fdde82cf4a..05db21d52a0deed2bb540e7a480005d995ccc9b4 100644 GIT binary patch delta 1697 zcma)+ZAep57{_<6?rhpnH=Vl8=^VX~2Ff6w#$f9E;pd7gcd z#y-gw?orTjw9mH&&^9bXt0Q~ycS@ECBdd?c)&SmyPN}L)B9YJ!B+s$ST^DLh$i3K& zHx%s@x)yQ)J&uN+Q=kMzL)zus4q%~>qu?S{ZN=`z0RSC+zey^z($p%mJ^V^uCAj|h zS%3{wO+W~mrn2Mts}Iomm-U^%BL$^&Ry6ad66l$?2r5RK9vxn?b;S+y*yCYjZo1}h&VW~~#k>UdUdD(f%*gzZ19wTY}nENfvh zYfT!ge9$zN#n%<}FZOU{E#^^+Qc=HUO@{x8DoW)BZOAdC6mCHQOPileYf6Kb4-!?j z$||a?n#V0j!Ij4=i^^t)6HmX2xk&<}l4Zoq zsqj;1b4CFGY7W(6b8evwI)>>^!9SMXkf!{6g>K4@ay44_H)Eg1BZCsiG%D#NXqcxv z33rr#ptxQ|(U!w_Xy=wR{!K!$x5Ajm^*4^T=qVI1*JJ9?J`&^>ydo{3nBeum2~fCH ziLW-^0We@s`h^FMG)ToH_63e)6yT|5JLz|3oDjRQOz0RDTYmdGY?p{tSiq3i6eu%e$U z=VADXP+NX8#O37RMn-&Ca_jNvNH>HL4ed;y6((l|kjbw{uCZRYP?D(I#>e41eWGUa z`(VFTq`e2wkP@dyyKeTvfKIfI^}+dpk4A39vKL3fFQP9F@@X2dFDl%TR{#J2 delta 870 zcmZ8gTSyd97~cQP&Kc~Yvq@HN;%|2MziD~~?P z*;|Ba(e}Z6JDe}vaGsXE|pJRxI!>?z{5s1L6B!I*C@15 zoiUnpd`@VrWlWrLVs3#;Oh4nC>Dzg z{i~w5Fzn@v`}+XHV__U`3p1@6+)OJ#GvA&WluC+91hp&@f_lu4dib{c(^ZOP!35&z zmos1h@ZQG(LbL0(2y>Q36$6G*p^*!XfWfyO{z1PEv~bN);B(I+vO{>oC&Q>IyyArr z?&RC!rr9-Rn!;%tT2ajRhV8o*cyK!EK=0aELZ2l60oM{PziT2i=q;l!o^+rwU4j~( z`aB3UX6F?=sjn?%9&<0|*e+2mT()EG!D&aZKK(f({mq57QfuP;+ph$r>Q4Kvb2@>3 zpuWBK%X{Jy*pLk8sn%{U7~OTio+yx@X$Ow=wtgr%)gEqqhDK=8K^RJsm`r#D5_%{~PdOzP}RB4tP;tYQ&L;UerR3xy}Xf GNq+!g;9@=i diff --git a/src/script/mod.rs b/src/script/mod.rs index 8d0763342..b87b5ab27 100644 --- a/src/script/mod.rs +++ b/src/script/mod.rs @@ -105,7 +105,7 @@ pub trait ScriptTrait: BaseScript { /// } /// ``` fn on_property_changed(&mut self, #[allow(unused_variables)] args: &PropertyChanged) -> bool { - return false; + false } /// Called on parent scene initialization. It is guaranteed to be called once, and before any