// ---------------------------------------------------------------------- public static iCS_EditorObject WrapMultiSelectionInPackage(iCS_IStorage iStorage) { if (iStorage == null) { return(null); } if (!IsCreationAllowed()) { return(null); } var selectedObjects = iStorage.FilterMultiSelectionForWrapInPackage(); if (selectedObjects == null || selectedObjects.Length == 0) { return(null); } iCS_EditorObject package = null; OpenTransaction(iStorage); try { iStorage.AnimateGraph(null, _ => { var childrenRects = P.map(n => n.GlobalRect, selectedObjects); package = iStorage.WrapInPackage(selectedObjects); if (package != null) { var r = Math3D.Union(childrenRects); var pos = Math3D.Middle(r); package.SetInitialPosition(Math3D.Middle(r)); iStorage.ForcedRelayoutOfTree(); package.myAnimatedRect.StartValue = BuildRect(pos, Vector2.zero); for (int i = 0; i < selectedObjects.Length; ++i) { selectedObjects[i].SetInitialPosition(iCS_EditorObject.PositionFrom(childrenRects[i])); selectedObjects[i].LocalSize = iCS_EditorObject.SizeFrom(childrenRects[i]); } iStorage.ForcedRelayoutOfTree(); iStorage.ReduceCollisionOffset(); } else { Debug.LogWarning("iCanScript: Unable to create a suitable package."); } } ); } catch (System.Exception) { CancelTransaction(iStorage); return(null); } if (package == null) { CancelTransaction(iStorage); return(null); } CloseTransaction(iStorage, "Wrap Selection"); SystemEvents.AnnounceVisualScriptElementAdded(package); return(package); }