@@ -1791,7 +1791,7 @@ class SceneEditor {
17911791 if (Type .getClass (elt .parent ) == hrt.prefab. Object3D )
17921792 selectElements ([elt .parent ]);
17931793 else
1794- selectElements (elt .parent .children );
1794+ selectElements (elt .parent .children . copy () );
17951795
17961796 }
17971797 else if (K .isDown (K .CTRL )) {
@@ -2074,12 +2074,12 @@ class SceneEditor {
20742074 tree .getChildren = (p : hrt.prefab. Prefab ) -> {
20752075 if (p == null ) {
20762076 if (isSceneTree )
2077- return sceneData == null ? [] : sceneData .children ;
2077+ return sceneData == null ? [] : sceneData ._children ?? [] ;
20782078 return renderPropsRoot == null ? [] : [renderPropsRoot ];
20792079 }
20802080
20812081 var ref = Std .downcast (p , Reference );
2082- var children = (ref != null && ref .refInstance != null && (ref .editMode == Edit || ref .editMode == Override )) ? ref .refInstance .children : p .children ;
2082+ var children = (( ref != null && ref .refInstance != null && (ref .editMode == Edit || ref .editMode == Override )) ? ref .refInstance ._children : p ._children ) ?? [] ;
20832083
20842084 var props = p .getHideProps ();
20852085 if (props != null && props .hideChildren != null )
@@ -2293,22 +2293,21 @@ class SceneEditor {
22932293 var p = createDroppedElement (f .relPath , parent , dragData .shiftKey );
22942294 if (p == null )
22952295 continue ;
2296- parent .children .remove (p );
2297- parent .children .insert (idx , p );
2296+ parent .addChildAt (p , idx );
22982297 queueRebuild (p );
22992298 createdPrefab .push ({ p : p , idx : idx });
23002299 }
23012300
23022301 undo .change (Custom ((undo ) -> {
23032302 if (undo ) {
23042303 for (p in createdPrefab ) {
2305- parent .children . remove (p .p );
2304+ parent .removeChild (p .p );
23062305 p .p .editorRemoveInstanceObjects ();
23072306 }
23082307 }
23092308 else {
23102309 for (p in createdPrefab ) {
2311- parent .children . insert (p .idx , p .p );
2310+ parent .addChildAt (p .p , p .idx );
23122311 queueRebuild (p .p );
23132312 }
23142313 }
@@ -3872,7 +3871,7 @@ class SceneEditor {
38723871 beginRebuild ();
38733872 for (e in elts ) {
38743873 removeInstance (e );
3875- e .parent .children . remove (e );
3874+ e .parent .removeChild (e );
38763875 }
38773876 endRebuild ();
38783877 refreshTree (SceneTree , () -> selectElements ([], NoHistory ));
@@ -3881,7 +3880,7 @@ class SceneEditor {
38813880
38823881 beginRebuild ();
38833882 for (e in elts ) {
3884- e .parent .children . push (e );
3883+ e .parent .addChild (e );
38853884 makePrefab (e );
38863885 if (e .parent != null && doRefresh )
38873886 onPrefabChange (e .parent , " children" );
@@ -4445,15 +4444,15 @@ class SceneEditor {
44454444 beginRebuild ();
44464445 for (e in elts ) {
44474446 removeInstance (e );
4448- e .parent . children . remove (e );
4447+ e .remove ();
44494448 }
44504449 endRebuild ();
44514450 refreshTree (SceneTree , () -> selectElements ([], NoHistory ));
44524451 }
44534452 else {
44544453 beginRebuild ();
44554454 for (e in elts ) {
4456- e . parent . children . push (e );
4455+ sceneData . addChild (e );
44574456 makePrefab (e );
44584457 }
44594458 endRebuild ();
@@ -4638,12 +4637,11 @@ class SceneEditor {
46384637 return null ;
46394638
46404639 prefab .parent = parent ;
4641- parent .children .remove (prefab );
4642- parent .children .insert (index , prefab );
4640+ parent .addChildAt (prefab , index );
46434641
46444642 var ref = Std .downcast (prefab , Reference );
46454643 if (ref != null && (ref .hasCycle () || ref .source == @:privateAccess view .state .path ) ) {
4646- parent .children . remove (ref );
4644+ parent .removeChild (ref );
46474645 hide. Ide .inst .quickError (' Reference to $relative is creating a cycle. The reference creation was aborted.' );
46484646 return null ;
46494647 }
@@ -5206,8 +5204,7 @@ class SceneEditor {
52065204 for (i => elt in elements ) {
52075205 @:pirvateAccess var clone = hrt.prefab. Prefab .createFromDynamic (haxe. Json .parse (Ide .inst .toJSON (elt .serialize ())), null , elt .parent .shared );
52085206 var index = lastIndex + 1 + i ;
5209- elt .parent .children .insert (index , clone );
5210- @:bypassAccessor clone .parent = elt .parent ;
5207+ elt .parent .addChildAt (clone , index );
52115208 autoName (clone );
52125209
52135210 queueRebuild (clone );
@@ -5222,8 +5219,8 @@ class SceneEditor {
52225219 onPrefabChange (elt .parent , " children" );
52235220
52245221 undoes .push (function (undo ) {
5225- if (undo ) elt .parent .children . remove (clone );
5226- else elt .parent .children . insert ( index , clone );
5222+ if (undo ) elt .parent .removeChild (clone );
5223+ else elt .parent .addChildAt ( clone , index );
52275224 onPrefabChange (elt .parent , " children" );
52285225 });
52295226 }
@@ -5290,12 +5287,12 @@ class SceneEditor {
52905287 var parent = elt .parent ;
52915288 var index = elt .parent .children .indexOf (elt );
52925289 removeInstance (elt );
5293- parent .children . remove (elt );
5290+ parent .removeChild (elt );
52945291 uniqueParents .set (parent , true );
52955292 undoes .unshift (function (undo ) {
5296- if (undo ) elt . parent .children . insert ( index , elt );
5297- else elt . parent .children . remove (elt );
5298- onPrefabChange (elt . parent , " children" );
5293+ if (undo ) parent .addChildAt ( elt , index );
5294+ else parent .removeChild (elt );
5295+ onPrefabChange (parent , " children" );
52995296 });
53005297 }
53015298
@@ -5349,12 +5346,8 @@ class SceneEditor {
53495346 return Reflect .compare (prefabIndex .get (a ), prefabIndex .get (b ));
53505347 });
53515348
5352- var offset = 0 ;
5353- for (p in e )
5354- if (p .parent == to && p .parent .children .indexOf (p ) < index )
5355- offset ++ ;
5356- var targetIndex = index - offset ;
5357- var exec = reparentImpl (e , to , targetIndex );
5349+
5350+ var exec = reparentImpl (e , to , index );
53585351 undo .change (Custom (function (undo ) {
53595352 exec (undo );
53605353 }));
@@ -5418,22 +5411,17 @@ class SceneEditor {
54185411
54195412 effects .push (function (undo ) {
54205413 if ( undo ) {
5421- prefab .parent = prevParent ;
5422- checkWantRebuild (toPrefab , prefab );
5423-
5424- prevParent .children .remove (prefab );
5425- prevParent .children .insert (prevIndex , prefab );
5414+ prefab .remove (); // ensure prevIndex target the correct slot
5415+ prevParent .addChildAt (prefab , prevIndex );
54265416
5417+ checkWantRebuild (toPrefab , prefab );
54275418 if (obj3d != null && prevTransform != null )
54285419 obj3d .loadTransform (prevTransform );
54295420 if (obj2d != null && prevTransform2d != null )
54305421 obj2d .setTransformMatrix (prevTransform2d );
54315422 } else {
5432- @ :bypassAccessor prefab . parent = toPrefab ;
5423+ toPrefab . addChildAt ( prefab , index + i ) ;
54335424 checkWantRebuild (prevParent , prefab );
5434-
5435- prefab .shared = toPrefab .shared ;
5436- toPrefab .children .insert (index + i , prefab );
54375425 if (obj3d != null && newTransform != null )
54385426 obj3d .loadTransform (newTransform );
54395427 if (obj2d != null && newTransform2d != null )
@@ -5448,9 +5436,6 @@ class SceneEditor {
54485436 function exec (undo : Bool ) {
54495437 beginRebuild ();
54505438
5451- for (prefab in prefabs ) {
5452- prefab .parent .children .remove (prefab );
5453- }
54545439
54555440 for (effect in effects ) {
54565441 effect (undo );
0 commit comments