@Override
    public void act(XY xy) {
        if (canShot(obj, xy, maxDistance)) {
            MODEL.log("Выстрел по " + xy);
            int distance = maxDistance;
            XY shellPlace = obj.getXY().copy();
            Direction direction = new Direction(this.obj.getXY(), xy);

            while (true) {
                XY prevShellPlace = shellPlace.copy();
                shellPlace = shellPlace.shift(direction);
                distance = XY.distance(shellPlace, prevShellPlace);
                if (distance < 0) {
                    break;
                }
                if (!MODEL.getBoard().inBoard(shellPlace)) {
                    break;
                }
                MyObject aim = MODEL.getBoard().get(shellPlace);
                if (aim != null) {
                    aim.suffer(new Hit(minDam, randDam, damageType, new Direction(this.obj.getXY(), xy), effects), obj);
                    if (oneAim()) {
                        break;
                    }
                }
            }
            obj.endTurn();
        }
    }