From e3e686c64f20b4473ee76ba94da1a707144500dc Mon Sep 17 00:00:00 2001 From: Marek Otahal Date: Mon, 17 Oct 2016 19:49:34 +0200 Subject: [PATCH] WIP: Distractors use Threads --- .../cognitive/distractors/BoxDistraction.java | 2 +- .../distractors/DistractionClass.java | 51 +++++++++++++++---- .../TextDistractionController.java | 4 +- 3 files changed, 45 insertions(+), 12 deletions(-) diff --git a/src/cz/cvut/cognitive/distractors/BoxDistraction.java b/src/cz/cvut/cognitive/distractors/BoxDistraction.java index 67757385..aefe6e09 100644 --- a/src/cz/cvut/cognitive/distractors/BoxDistraction.java +++ b/src/cz/cvut/cognitive/distractors/BoxDistraction.java @@ -163,5 +163,5 @@ public void collision(float tpf){ } } - + } diff --git a/src/cz/cvut/cognitive/distractors/DistractionClass.java b/src/cz/cvut/cognitive/distractors/DistractionClass.java index 9f7f924f..2710717e 100644 --- a/src/cz/cvut/cognitive/distractors/DistractionClass.java +++ b/src/cz/cvut/cognitive/distractors/DistractionClass.java @@ -8,10 +8,13 @@ import cz.cvut.cognitive.load.CognitiveFunction; import eu.opends.car.SteeringCar; import eu.opends.main.Simulator; -import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Level; +import java.util.logging.Logger; /** * @@ -23,17 +26,21 @@ Ensures that every distraction contains spawn (spawn) and remove method. probability - preset value of every initialized distraction */ -public abstract class DistractionClass { +public abstract class DistractionClass implements Runnable { + + private static ArrayList activeDistractors = new ArrayList<>(); //protected protected float probability; protected final float REWARD; public final float COG_DIFFICULTY; //FIXME make protected too (WeatherD) //private - private final static ArrayList activeDistractors = new ArrayList<>(); + private final AtomicInteger tpf_atomic = new AtomicInteger(); + private final int DURATION; //ms /** * if the Distraction is currently active/used */ private boolean isActive = false; + private Thread runner; protected final Simulator sim; protected final SteeringCar car; @@ -60,6 +67,13 @@ protected DistractionClass(Simulator sim, float reward, float probability, float this.manager = sim.getAssetManager(); this.bulletAppState = sim.getBulletAppState(); this.camera = sim.getCamera(); + + if(this.getClass().equals(TextDistraction.class)) { + DURATION=20000; //20sec + } + else { + DURATION = 5000; //TODO random/param + } } //abstract @@ -82,14 +96,14 @@ public void update(float f) { System.out.println("PROB="+probability+" n="+n+" active="+isActive+" "+this.getClass().getSimpleName()); if (n > this.probability || isActive || probability==0.0f) { return; } - spawn(f); - CognitiveFunction.distScore += this.COG_DIFFICULTY; CognitiveFunction.activeDistCount++; - CognitiveFunction.activeDistNames[0] = 1; //FIXME remove + CognitiveFunction.activeDistNames[0] = 1; //FIXME remove - this.isActive = true; - } + tpf_atomic.set((int)f); + runner = new Thread(this); + runner.start(); + } /** * @@ -99,7 +113,7 @@ public boolean isActive() { return isActive; } - public void remove() { + private void remove() { if(!isActive) return; //do nothing on inactive remove_local(); @@ -111,4 +125,23 @@ public void remove() { isActive=false; } + @Override + public void run() { + // start + float step = (float)this.tpf_atomic.get(); + spawn(step); + this.isActive = true; + System.out.println(this.getClass().getSimpleName()+" RUNNING "+step); + try { + //wait + System.out.println("SLEEP"); + TimeUnit.MILLISECONDS.sleep(DURATION); + } catch (InterruptedException ex) { + Logger.getLogger(DistractionClass.class.getName()).log(Level.SEVERE, null, ex); + } + //collisions? + collision(step); + //remove + remove(); + } } diff --git a/src/cz/cvut/cognitive/distractors/TextDistractionController.java b/src/cz/cvut/cognitive/distractors/TextDistractionController.java index be6db04f..8bd1d088 100644 --- a/src/cz/cvut/cognitive/distractors/TextDistractionController.java +++ b/src/cz/cvut/cognitive/distractors/TextDistractionController.java @@ -242,7 +242,7 @@ public void clickAnswerButton(){ } else { userAnswers[questionIndex] = answerField.getRealText(); answersToFile(answerField.getRealText(),userAnswersFilePath); - textDistraction.remove(); + textDistraction.notify(); } } @@ -254,7 +254,7 @@ public void clickAnswerButton(){ public void clickCancelButton() { answersToFile("User clicked Cancel Button - no answer",userAnswersFilePath); - textDistraction.remove(); + textDistraction.notify(); } /**