Выстрел из дробовика

  • Автор темы Автор темы ilya50
  • Дата начала Дата начала

ilya50

Активный участник
Пользователь
Баллы
76
Как можно закодить нормальный выстрел из дробовика ? В данный момент я пытаюсь сделать рандомом, но получается не очень
PHP:
    @Override
    protected void doShoot() {
        double averageStart = -0.1;
        double averageEnd = 0.1;
        int bulletsSize = 11;
        Location start = GunUtils.getDirectionEntity(getPlayer());
        HashMap<LivingEntity, Integer> damaged = new HashMap<>();
        getPlayer().getWorld().playSound(start, Sound.BLOCK_ANVIL_DESTROY, 1, 2);
        ArrayList<Location> bullets = new ArrayList<>();
        for (int i = 0; i < bulletsSize; i++) {
            Vector v = start.getDirection().clone().normalize().add(new Vector(random(averageStart, averageEnd), random(averageStart, averageEnd), random(averageStart, averageEnd)));
            Location location = start.clone().setDirection(v);
            bullets.add(location);
        }
        for (int k = 0; k < 50; k++) {
            for (int i = 0; i < bullets.size(); i++) {
                Location location = bullets.get(i);
                boolean hit = false;
                location.getWorld().spawnParticle(Particle.SMOKE_NORMAL, location, 1, 0, 0, 0, 0, null, true);
                for (LivingEntity entity : EntityUtils.getEntity(location)) {
                    if (entity.equals(getPlayer()))
                        continue;
                    damage(entity, location, 10);
                    hit = true;
                    damaged.merge(entity, 1, Integer::sum);
                    break;
                }
                if (location.getBlock().getType().isSolid() || hit) {
                    bullets.remove(i);
                    continue;
                }

                location.add(location.getDirection());
            }
        }
        damaged.forEach((e, i) -> Bukkit.getServer().broadcastMessage("Попало по " + e.getName() + " " + i + " пуль"));
    }
 
Ну собсна сделал N рандомных векторов с отклонением от направления взгляда α градусов и по ним пустил уже свои выстрелы.
 
Назад
Верх