private void moveBagsAsideForTray(BagProperties bagProperties) { float trayDropPointX = Game.instance.getTrayDropPosition().x; float trayPlacingWidth = bagProperties.placingCube.transform.localScale.x; float trayRight = trayDropPointX + (trayPlacingWidth / 2f) * 1.5f; List <BagProperties> bagsToMove = activeBags.FindAll(bag => { float bagLeft = bag.transform.position.x - bag.placingCube.transform.localScale.x / 2f; return(bagLeft <= trayRight); }); List <GameObject> bagsToMoveObjects = new List <GameObject>(); BagProperties frontmostBag = null; foreach (BagProperties bagToMove in bagsToMove) { if (frontmostBag == null || frontmostBag.transform.position.x < bagToMove.transform.position.x) { frontmostBag = bagToMove; } bagsToMoveObjects.Add(bagToMove.gameObject); } if (frontmostBag != null) { float frontMostBagLeft = frontmostBag.transform.position.x - frontmostBag.placingCube.transform.localScale.x / 2f; float movementNeeded = (frontMostBagLeft - (trayDropPointX - trayPlacingWidth / 2f)) + frontmostBag.placingCube.transform.localScale.x * 1.35f; string groupMovementId = "move_aside_for_tray_" + BagContentProperties.manualInspectTrayCounter; Vector3 moveVector = new Vector3(-movementNeeded, 0, 0); Misc.AnimateRelativeMovement(groupMovementId, bagsToMoveObjects, moveVector, 0.7f, true); StartCoroutine(showItemsAfterDelay(bagsToMoveObjects, false, 0.7f)); } }