Пример #1
0
    //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);
                }
            }
        }
    }