@Override public void init() { super.addShotTimerColumn(TARGET_COL_NAME, TARGET_COL_WIDTH); addTargets(shootTargets, "targets/shoot_dont_shoot/shoot.target"); addTargets(dontShootTargets, "targets/shoot_dont_shoot/dont_shoot.target"); super.showTextOnFeed("missed targets: 0\nbad hits: 0"); executorService.schedule(new NewRound(), ROUND_DURATION, TimeUnit.SECONDS); }
private void removeTarget(List<Target> targets, TargetRegion region) { Iterator<Target> it = targets.iterator(); while (it.hasNext()) { Target target = it.next(); if (target.getTargetGroup().getChildren().contains(region)) { super.removeTarget(target); it.remove(); return; } } }
@Override public void reset(List<Group> targets) { continueExercise = false; executorService.shutdownNow(); missedTargets = 0; badHits = 0; for (Target target : shootTargets) super.removeTarget(target); shootTargets.clear(); for (Target target : dontShootTargets) super.removeTarget(target); dontShootTargets.clear(); addTargets(shootTargets, "targets/shoot_dont_shoot/shoot.target"); addTargets(dontShootTargets, "targets/shoot_dont_shoot/dont_shoot.target"); super.showTextOnFeed("missed targets: 0\nbad hits: 0"); continueExercise = true; executorService = Executors.newScheduledThreadPool(CORE_POOL_SIZE); executorService.schedule(new NewRound(), ROUND_DURATION, TimeUnit.SECONDS); }
@Override public void shotListener(Shot shot, Optional<TargetRegion> hitRegion) { if (hitRegion.isPresent()) { if (hitRegion.get().tagExists("subtarget")) { switch (hitRegion.get().getTag("subtarget")) { case "shoot": { removeTarget(shootTargets, hitRegion.get()); super.setShotTimerColumnText(TARGET_COL_NAME, "shoot"); } break; case "dont_shoot": { removeTarget(dontShootTargets, hitRegion.get()); badHits++; super.setShotTimerColumnText(TARGET_COL_NAME, "dont_shoot"); TextToSpeech.say("Bad shoot!"); } break; } } } }
@Override public void destroy() { super.destroy(); executorService.shutdownNow(); continueExercise = false; }