diff --git a/VadereModelTests/TestEvents/scenarios/bang_event_2_sources_2_targets_osm_sequential.scenario b/VadereModelTests/TestEvents/scenarios/bang_event_2_sources_2_targets_osm_sequential.scenario index 88dacc7719c6a3fa52f5afb0eb53351121f365e9..e777bc504e0807fee10665b96ee58bc2073d67f4 100644 --- a/VadereModelTests/TestEvents/scenarios/bang_event_2_sources_2_targets_osm_sequential.scenario +++ b/VadereModelTests/TestEvents/scenarios/bang_event_2_sources_2_targets_osm_sequential.scenario @@ -163,6 +163,23 @@ "deletionDistance" : 0.1, "startingWithRedLight" : false, "nextSpeed" : -1.0 + }, { + "id" : 0, + "absorbing" : true, + "shape" : { + "x" : 18.3, + "y" : 6.8, + "width" : 2.9, + "height" : 1.5, + "type" : "RECTANGLE" + }, + "waitingTime" : 0.0, + "waitingTimeYellowPhase" : 0.0, + "parallelWaiters" : 0, + "individualWaiting" : true, + "deletionDistance" : 0.1, + "startingWithRedLight" : false, + "nextSpeed" : -1.0 } ], "absorbingAreas" : [ ], "sources" : [ { @@ -221,14 +238,15 @@ }, "eventInfos" : [ { "eventTimeframe" : { - "startTime" : 18.0, - "endTime" : 18.4, + "startTime" : 15.0, + "endTime" : 15.4, "repeat" : false, "waitTimeBetweenRepetition" : 0.0 }, "events" : [ { "type" : "BangEvent", - "targets" : [ ] + "targets" : [ ], + "originAsTargetId" : 0 } ] } ] } diff --git a/VadereSimulator/src/org/vadere/simulator/models/osm/updateScheme/UpdateSchemeEventDriven.java b/VadereSimulator/src/org/vadere/simulator/models/osm/updateScheme/UpdateSchemeEventDriven.java index cc37212b59722b18bdd1e62958f9917d6942ff76..0b8df2e7381c010c9ff80bc6fca08a17ac37c7aa 100644 --- a/VadereSimulator/src/org/vadere/simulator/models/osm/updateScheme/UpdateSchemeEventDriven.java +++ b/VadereSimulator/src/org/vadere/simulator/models/osm/updateScheme/UpdateSchemeEventDriven.java @@ -6,10 +6,12 @@ import org.vadere.simulator.models.potential.combinedPotentials.CombinedPotentia import org.vadere.simulator.models.potential.combinedPotentials.TargetDistractionStrategy; import org.vadere.state.events.types.*; import org.vadere.state.scenario.Pedestrian; +import org.vadere.state.scenario.Target; import org.vadere.state.scenario.Topography; import org.vadere.util.geometry.shapes.VPoint; import java.util.Comparator; +import java.util.LinkedList; import java.util.PriorityQueue; /** @@ -65,6 +67,13 @@ public class UpdateSchemeEventDriven implements UpdateSchemeOSM { // Watch out: For testing purposes, a bang event changes only // the "CombinedPotentialStrategy". The agent does not move here! // Therefore, trigger only a single bang event and then use "ElapsedTimeEvent" + BangEvent bangEvent = (BangEvent) mostImportantEvent; + Target bangOrigin = topography.getTarget(bangEvent.getOriginAsTargetId()); + + LinkedList nextTarget = new LinkedList<>(); + nextTarget.add(bangOrigin.getId()); + + pedestrian.setTargets(nextTarget); pedestrian.setCombinedPotentialStrategy(CombinedPotentialStrategy.TARGET_DISTRACTION_STRATEGY); } } diff --git a/VadereSimulator/src/org/vadere/simulator/models/osm/updateScheme/UpdateSchemeSequential.java b/VadereSimulator/src/org/vadere/simulator/models/osm/updateScheme/UpdateSchemeSequential.java index 91e0ed0e3cc3479e0b4cf437e5ab43a81bc8f872..a3997797c60f60b36506afbca42ff8f5f9ef6816 100644 --- a/VadereSimulator/src/org/vadere/simulator/models/osm/updateScheme/UpdateSchemeSequential.java +++ b/VadereSimulator/src/org/vadere/simulator/models/osm/updateScheme/UpdateSchemeSequential.java @@ -5,10 +5,13 @@ import org.vadere.simulator.models.osm.PedestrianOSM; import org.vadere.simulator.models.potential.combinedPotentials.CombinedPotentialStrategy; import org.vadere.state.events.types.*; import org.vadere.state.scenario.Pedestrian; +import org.vadere.state.scenario.Target; import org.vadere.state.scenario.Topography; import org.vadere.util.geometry.shapes.VPoint; import java.util.Collection; +import java.util.LinkedList; +import java.util.List; public class UpdateSchemeSequential implements UpdateSchemeOSM { @@ -50,6 +53,13 @@ public class UpdateSchemeSequential implements UpdateSchemeOSM { // Watch out: For testing purposes, a bang event changes only // the "CombinedPotentialStrategy". The agent does not move here! // Therefore, trigger only a single bang event and then use "ElapsedTimeEvent" + BangEvent bangEvent = (BangEvent) mostImportantEvent; + Target bangOrigin = topography.getTarget(bangEvent.getOriginAsTargetId()); + + LinkedList nextTarget = new LinkedList<>(); + nextTarget.add(bangOrigin.getId()); + + pedestrian.setTargets(nextTarget); pedestrian.setCombinedPotentialStrategy(CombinedPotentialStrategy.TARGET_DISTRACTION_STRATEGY); } } diff --git a/VadereState/src/org/vadere/state/events/types/BangEvent.java b/VadereState/src/org/vadere/state/events/types/BangEvent.java index 4be804eb06faee20e46b5d4ef95a7e68f9ff7af2..78d3ac2197f61c7650dbef1b36652f108c25e6a6 100644 --- a/VadereState/src/org/vadere/state/events/types/BangEvent.java +++ b/VadereState/src/org/vadere/state/events/types/BangEvent.java @@ -6,9 +6,14 @@ import java.util.List; /** * Class signals agents a bang - for instance something exploded. + * + * This event holds one additional information: a target id + * which represents the origin of the bang. */ public class BangEvent extends Event { + private int originAsTargetId = -1; + // Default constructor required for JSON de-/serialization. public BangEvent() { super(); } @@ -20,4 +25,14 @@ public class BangEvent extends Event { super(time, targets); } + public BangEvent(double time, List targets, int originAsTargetId) { + super(time, targets); + + this.originAsTargetId = originAsTargetId; + } + + public int getOriginAsTargetId() { return originAsTargetId; } + + public void setOriginAsTargetId(int originAsTargetId) { this.originAsTargetId = originAsTargetId; } + }