public vector2d better_avoid(ArrayList<Obstacle> obs, double waga, int dl) {
        vector2d value = new vector2d(0, 0);
        double min = Double.MAX_VALUE;
        int minn = -1;
        for (int i = 0; i < obs.size(); i++) {
            double odl = this.getOdl(obs.get(i));//szukam najbliższej przeszkody
            if (odl < min && this.velocity.skalarny(position.getX() - obs.get(i).getX(), position.getY() - obs.get(i).getY()) < 0) {
                //jeśli jesteś najbliższą prostej i jesteś przede mną, to zapamiętaj indeks
                min = odl;
                minn = i;
            }
        }
        if (minn < 0 || min > 0) {
            //omijam=false;
            bum=false;
            zderzony=false;
            return value;       // nie ma przeszkód(zwykle są), albo odległość od prostej jest dodatnia, czyli nie będzie zderzenia
        } else {                //czyli jest przeszkoda i przecina prostą
            Obstacle najblizsza = obs.get(minn);
            value.setX(position.getX() - najblizsza.getX());
            value.setY(position.getY() - najblizsza.getY());
            min=this.position.getDistance(najblizsza.getPosition())-najblizsza.getR()-2.5;//to nie jest min, ale po co nową zmienną robić jak stara niepotrzebna
            if (min>dl){//sprawdź czy nie za daleko
                    //omijam=false;
                    bum=false;
                    zderzony=false;
                    return new vector2d(0, 0);} 
                //jak blisko, to sprawdź czy jest po prawej czy po lewej
            if (min<=0){
                if(bum){zderzony=true;bum=false;}
                else {zderzony=true;bum=true;}
                return value.normalize(); //steruj naprzeciwko przeszkody jak i tak się zderzyłeś.
            }
            //omijam=true;
            if (this.velocity.getRight().skalarny(value)>0){        //to przeszkoda po lewej od wektora
                return this.velocity.getRight().normalize().multi(waga).add(value.normalize().multi(1-waga)).multi(dl/2/min);
                //to multi(dl/2/min) to jest skalowanie, żeby działało mocniej od 1 jesli bliżej niz polowa prostokata, a slabiej dalej
                }
            return this.velocity.getLeft().normalize().multi(waga).add(value.normalize().multi(1-waga)).multi(dl/2/min);
        }
    }