11use crate :: ecs:: { ActiveLevel , PlatformerWorld , PlayMode , Screen } ;
2- use crate :: systems:: screens:: { complete, editor as editor_screen, hud, pause, settings , title} ;
2+ use crate :: systems:: screens:: { complete, editor as editor_screen, hud, pause, title} ;
33use crate :: systems:: world:: { cutscene, editor, levels, player, props, textures} ;
44use nightshade:: prelude:: * ;
55use std:: collections:: HashSet ;
@@ -29,9 +29,6 @@ pub fn initialize(platformer_world: &mut PlatformerWorld, world: &mut World) {
2929 props:: load ( world, & mut platformer_world. resources . prop_assets ) ;
3030
3131 platformer_world. resources . levels . names = levels:: list_level_names ( ) ;
32- if let Some ( assist) = settings:: load_assist ( ) {
33- platformer_world. resources . settings . assist_level = assist;
34- }
3532 build_ui ( platformer_world, world) ;
3633
3734 enter ( platformer_world, world, Screen :: Title ) ;
@@ -58,20 +55,12 @@ fn build_ui(platformer_world: &mut PlatformerWorld, world: &mut World) {
5855 let hud_handles = hud:: build ( & mut tree) ;
5956 let complete_handles = complete:: build ( & mut tree) ;
6057 let editor_handles = editor_screen:: build ( & mut tree) ;
61- let settings_handles =
62- settings:: build ( & mut tree, platformer_world. resources . settings . assist_level ) ;
6358 tree. finish ( ) ;
6459 platformer_world. resources . ui_handles . title = title_handles;
6560 platformer_world. resources . ui_handles . pause = pause_handles;
6661 platformer_world. resources . ui_handles . hud = hud_handles;
6762 platformer_world. resources . ui_handles . complete = complete_handles;
6863 platformer_world. resources . ui_handles . editor = editor_handles;
69- platformer_world. resources . ui_handles . settings = settings_handles;
70- }
71-
72- pub fn open_settings ( platformer_world : & mut PlatformerWorld , world : & mut World , from : Screen ) {
73- platformer_world. resources . screen . settings_return = from;
74- enter ( platformer_world, world, Screen :: Settings ) ;
7564}
7665
7766fn refresh_custom_map_list ( platformer_world : & mut PlatformerWorld , world : & mut World ) {
@@ -95,6 +84,7 @@ fn persistent_entities(platformer_world: &PlatformerWorld) -> HashSet<Entity> {
9584 player. overview_camera ,
9685 player. sun ,
9786 player. floor ,
87+ player. grapple_rope ,
9888 platformer_world. resources . editor . camera ,
9989 ]
10090 . into_iter ( )
@@ -115,13 +105,15 @@ pub fn start_level(platformer_world: &mut PlatformerWorld, world: &mut World, in
115105 return ;
116106 } ;
117107
118- let prop_entities = props:: decorate (
108+ let mut prop_entities = props:: decorate (
119109 world,
120110 & platformer_world. resources . prop_assets ,
121111 & platformer_world. resources . run . level_entities ,
122112 index,
123113 ) ;
114+ prop_entities. extend ( levels:: spawn_level_pools ( world, index) ) ;
124115 platformer_world. resources . run . prop_entities = prop_entities;
116+ levels:: apply_theme ( world, index) ;
125117
126118 platformer_world. resources . run . play_mode = PlayMode :: Builtin ( index) ;
127119 platformer_world. resources . run . play_level = Some ( active) ;
@@ -185,11 +177,19 @@ pub fn begin_play(platformer_world: &mut PlatformerWorld, world: &mut World) {
185177 platformer_world. resources . run . run_time = 0.0 ;
186178 platformer_world. resources . run . timing = true ;
187179 platformer_world. resources . run . top_speed = 0.0 ;
188- platformer_world. resources . run . has_prev_yaw = false ;
189- platformer_world. resources . run . autohop_armed = false ;
180+ reset_movement_state ( platformer_world) ;
190181 enter ( platformer_world, world, Screen :: Playing ) ;
191182}
192183
184+ fn reset_movement_state ( platformer_world : & mut PlatformerWorld ) {
185+ let run = & mut platformer_world. resources . run ;
186+ run. wall_run_active = false ;
187+ run. wall_run_timer = 0.0 ;
188+ run. wall_run_tilt = 0.0 ;
189+ run. grappling = false ;
190+ run. grapple_cooldown = 0.0 ;
191+ }
192+
193193pub fn restart ( platformer_world : & mut PlatformerWorld , world : & mut World ) {
194194 let spawn = platformer_world
195195 . resources
@@ -202,8 +202,7 @@ pub fn restart(platformer_world: &mut PlatformerWorld, world: &mut World) {
202202 platformer_world. resources . run . run_time = 0.0 ;
203203 platformer_world. resources . run . timing = true ;
204204 platformer_world. resources . run . top_speed = 0.0 ;
205- platformer_world. resources . run . has_prev_yaw = false ;
206- platformer_world. resources . run . autohop_armed = false ;
205+ reset_movement_state ( platformer_world) ;
207206}
208207
209208fn at_goal ( platformer_world : & PlatformerWorld , world : & World ) -> bool {
@@ -276,7 +275,7 @@ pub fn check_fall(platformer_world: &mut PlatformerWorld, world: &mut World) {
276275 . map ( |level| level. spawn )
277276 . unwrap_or ( DEFAULT_SPAWN ) ;
278277 player:: place_at_spawn ( platformer_world, world, spawn) ;
279- platformer_world. resources . run . autohop_armed = false ;
278+ reset_movement_state ( platformer_world) ;
280279 }
281280}
282281
@@ -328,13 +327,6 @@ pub fn enter(platformer_world: &mut PlatformerWorld, world: &mut World, screen:
328327 gamepad_nav : false ,
329328 focus : None ,
330329 } ,
331- Screen :: Settings => ScreenConfig {
332- cursor_locked : false ,
333- cursor_visible : true ,
334- physics : false ,
335- gamepad_nav : true ,
336- focus : Some ( handles. settings . assist_slider ) ,
337- } ,
338330 } ;
339331
340332 set_cursor_locked ( world, config. cursor_locked ) ;
@@ -379,11 +371,6 @@ pub fn apply_visibility(platformer_world: &PlatformerWorld, world: &mut World) {
379371 matches ! ( screen, Screen :: Playing ) ,
380372 ) ;
381373 ui_set_visible ( world, handles. editor . root , matches ! ( screen, Screen :: Editor ) ) ;
382- ui_set_visible (
383- world,
384- handles. settings . root ,
385- matches ! ( screen, Screen :: Settings ) ,
386- ) ;
387374}
388375
389376pub fn next_level_index ( platformer_world : & PlatformerWorld , current : usize ) -> usize {
@@ -414,6 +401,7 @@ pub fn play_custom_map(platformer_world: &mut PlatformerWorld, world: &mut World
414401 goal_radius : levels:: GOAL_RADIUS ,
415402 } ) ;
416403 platformer_world. resources . run . testing_from_editor = false ;
404+ levels:: apply_neutral_theme ( world) ;
417405 world. resources . mesh_render_state . request_full_rebuild ( ) ;
418406
419407 cutscene:: begin ( platformer_world, world) ;
@@ -455,6 +443,7 @@ pub fn enter_editor(platformer_world: &mut PlatformerWorld, world: &mut World) {
455443 }
456444 platformer_world. resources . run . play_level = None ;
457445 platformer_world. resources . run . timing = false ;
446+ levels:: apply_neutral_theme ( world) ;
458447 editor:: enter ( platformer_world, world) ;
459448 enter ( platformer_world, world, Screen :: Editor ) ;
460449}
@@ -473,6 +462,7 @@ pub fn test_play(platformer_world: &mut PlatformerWorld, world: &mut World) {
473462 } ) ;
474463 platformer_world. resources . run . play_mode = PlayMode :: Custom ( map. name . clone ( ) ) ;
475464 platformer_world. resources . run . testing_from_editor = true ;
465+ levels:: apply_neutral_theme ( world) ;
476466 world. resources . mesh_render_state . request_full_rebuild ( ) ;
477467 begin_play ( platformer_world, world) ;
478468}
0 commit comments