//selects all units (enemies and allies) in the selection rectangle which we can draw while holding lmb down private void HandleLongLmbUp() { Vector3 lmbPosition2 = Input.mousePosition; foreach (Transform transform in GameManager.Instance.GetAllUnits()) { if (transform != null) //somehow this is sometimes null idkw { Vector3 unitScreenPosition = cam.WorldToScreenPoint(transform.position); bool isInRectangle = false; //wann drinn if (lmbPosition1.x > lmbPosition2.x && lmbPosition1.y > lmbPosition2.y) { if (unitScreenPosition.x < lmbPosition1.x && unitScreenPosition.y < lmbPosition1.y && unitScreenPosition.x > lmbPosition2.x && unitScreenPosition.y > lmbPosition2.y) { isInRectangle = true; } } else if (lmbPosition1.x > lmbPosition2.x && lmbPosition1.y < lmbPosition2.y) { if (unitScreenPosition.x < lmbPosition1.x && unitScreenPosition.y > lmbPosition1.y && unitScreenPosition.x > lmbPosition2.x && unitScreenPosition.y < lmbPosition2.y) { isInRectangle = true; } } else if (lmbPosition1.x < lmbPosition2.x && lmbPosition1.y < lmbPosition2.y) { if (unitScreenPosition.x > lmbPosition1.x && unitScreenPosition.y > lmbPosition1.y && unitScreenPosition.x < lmbPosition2.x && unitScreenPosition.y < lmbPosition2.y) { isInRectangle = true; } } else //(position1.x < position2.x && position1.y > position2.y) { if (unitScreenPosition.x > lmbPosition1.x && unitScreenPosition.y < lmbPosition1.y && unitScreenPosition.x < lmbPosition2.x && unitScreenPosition.y > lmbPosition2.y) { isInRectangle = true; } } UnitMovement unit = transform.gameObject.GetComponent <UnitMovement>(); if (isInRectangle) { unit.Select(); selectionGroup.Add(unit); } else { transform.gameObject.GetComponent <UnitMovement>().Deselect(); selectionGroup.Remove(unit); } } } }