public override CollisionResult CollidesWithCopter(Copter other)
 {
     if (other.GetType().Equals(typeof(CircleCopter)))
     {
         CircleCopter otherCircleCopter = (CircleCopter)other;
         return(GeometryUtility.CircleCollision(this.Position(), this.Radius, otherCircleCopter.Position(), otherCircleCopter.Radius));
     }
     //That should not happen
     throw new NotImplementedException();
 }
    public bool PositionAvailable(Vector2 proposal, float radius)
    {
        bool         succeeded = false;
        CircleCopter copter    = new CircleCopter(proposal, radius);

        //2nd step: Check for collision with walls:
        succeeded = !CollisionCopterArena(copter);
        //3rd step: Check for collision with other copters:
        succeeded = succeeded && !CollisionWithOtherCopters(copter);
        return(succeeded);
    }
    public bool PlaceLeader(Vector2 position, float radius)
    {
        bool succeeded = PositionAvailable(position, radius);

        if (!succeeded)
        {
            return(false);
        }
        Leader = new CircleCopter(position, radius);
        Leader.SetVisible(Color.red);
        return(true);
    }
    public void PlaceLeader(float radius)
    {
        bool succeeded = false;

        while (!succeeded)
        {
            //1st step: Get position proposal and make a copter:
            Vector2      proposal = PositionProposal();
            CircleCopter copter   = new CircleCopter(proposal, radius);
            //2nd step: Check for collision with walls:
            succeeded = !CollisionCopterArena(copter);
            //3rd step: Check for collision with other copters:
            succeeded = succeeded && !CollisionWithOtherCopters(copter);
            if (succeeded)
            {
                Leader = copter;
                Leader.SetVisible(Color.red);
            }
        }
    }
 public void PlaceCoptersRadius(int numberOfCopters, float radius)
 {
     for (int i = 0; i < numberOfCopters; i++)
     {
         bool succeeded = false;
         while (!succeeded)
         {
             //1st step: Get position proposal and make a copter:
             Vector2      proposal = PositionProposal();
             CircleCopter copter   = new CircleCopter(proposal, radius);
             //2nd step: Check for collision with walls:
             succeeded = !CollisionCopterArena(copter);
             //3rd step: Check for collision with other copters:
             succeeded = succeeded && !CollisionWithOtherCopters(copter);
             if (succeeded)
             {
                 copter.SetVisible(Color.green);
                 AllCopters.Add(copter);
             }
         }
     }
 }