From 90cb88d50e7544b699d8733339c89a61d97b4cc0 Mon Sep 17 00:00:00 2001 From: michiel2005 <60014996+michiel2005@users.noreply.github.com> Date: Sun, 4 Jun 2023 00:21:37 +0200 Subject: [PATCH] We're also checking for the depth now when searching for displayobjects --- core/src/player.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/core/src/player.rs b/core/src/player.rs index bbafa1886..9b8cf6333 100644 --- a/core/src/player.rs +++ b/core/src/player.rs @@ -1284,8 +1284,7 @@ impl Player { if let Some(root_clip) = context.stage.root_clip() { display_object = Self::find_first_character_instance( root_clip, - &down_object.as_displayobject().id(), - &down_object.as_displayobject().movie(), + down_object.as_displayobject(), ); } @@ -1502,17 +1501,19 @@ impl Player { //TODO: is there a better place to place next two functions? fn find_first_character_instance<'gc>( obj: DisplayObject<'gc>, - character_id: &CharacterId, - needed_movie: &Arc, + previous_object: DisplayObject<'gc>, ) -> Option> { if let Some(parent) = obj.as_container() { + let character_id = previous_object.id(); for child in parent.iter_render_list() { - if &child.id() == character_id && Arc::ptr_eq(&child.movie(), needed_movie) { + if child.id() == character_id + && child.depth() == previous_object.depth() + && Arc::ptr_eq(&child.movie(), &previous_object.movie()) + { return Some(child); } - let display_object = - Self::find_first_character_instance(child, character_id, needed_movie); + let display_object = Self::find_first_character_instance(child, previous_object); if display_object.is_some() { return display_object; }