diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework3/Timberlake/TimberlakeSimulationProgram.java b/assignments/src/MV3500Cohort2024JulySeptember/homework3/Timberlake/TimberlakeSimulationProgram.java index 5db3b3b3103da5afb0073e1c986356e3109ab744..0e0d47e7e7394252418628c76845c74c97f163bc 100644 --- a/assignments/src/MV3500Cohort2024JulySeptember/homework3/Timberlake/TimberlakeSimulationProgram.java +++ b/assignments/src/MV3500Cohort2024JulySeptember/homework3/Timberlake/TimberlakeSimulationProgram.java @@ -13,6 +13,7 @@ import edu.nps.moves.dis7.pdus.*; import edu.nps.moves.dis7.utilities.DisChannel; import edu.nps.moves.dis7.utilities.PduFactory; import java.time.LocalDateTime; +import java.util.Random; import java.util.logging.Level; import java.util.logging.Logger; @@ -64,6 +65,11 @@ public class TimberlakeSimulationProgram { /** MunitionDescriptor for these weapons */ protected MunitionDescriptor munitionDescriptor1; + /** TODO DetonationPdu for entity 1 second weapon (if any) */ + protected DetonationPdu DetonationPdu_1a; + /** TODO DetonationPdu for entity 1 second weapon (if any) */ + protected DetonationPdu DetonationPdu_1b; + // hey programmer, what other state do you want? this is a good place to declare it... /** @@ -157,8 +163,11 @@ public class TimberlakeSimulationProgram { firePdu_1b = pduFactory.makeFirePdu(); munitionDescriptor1 = new MunitionDescriptor(); - + DetonationPdu_1a = pduFactory.makeDetonationPdu(); + DetonationPdu_1b = pduFactory.makeDetonationPdu(); + + DetonationPdu_1a.setSourceEntityID(entityID_1); // Your model setup: define participants. who's who in this zoo? // Assuming you keep track of entity objects... here is some support for for Entity 1. @@ -183,13 +192,18 @@ public class TimberlakeSimulationProgram { entityStatePdu_2.setForceId(ForceID.OPPOSING); entityStatePdu_2.setEntityType(new _002Triton()); // note import statement above entityStatePdu_2.setMarking("Entity #2"); - + + Random random = new Random(); + int randX = random.nextInt(10); + int randY = random.nextInt(10); + entityStatePdu_2.getEntityLocation().setX(randX); + entityStatePdu_2.getEntityLocation().setY(randY); // TODO how should we customize this munition? what are key parameters for your simulation? // more is needed here by scenario authors... // munitionDescriptor1.setQuantity(1); // firePdu_1a.setDescriptor(munitionDescriptor1).setRange(1000.0f); - // Jack Added + // Jack Added ******* HIGHLIGHT, THEN CTRL-[SPACE] TO SEE OPTIONS!! ****** munitionDescriptor1.setQuantity(1); munitionDescriptor1.setWarhead(MunitionDescriptorWarhead.HE_BLAST_FRAGMENTATION); munitionDescriptor1.setFuse(MunitionDescriptorFuse.PROXIMITY); @@ -242,14 +256,57 @@ public class TimberlakeSimulationProgram { // ============================================================================================= // * your own simulation code starts here! ***************************************************** // ============================================================================================= - + if (simulationLoopCount % 2 == 0) { // Fire every 3 loops //firePdu_1a.setEventID(new EventIdentifier(1, 1, simulationLoopCount)); // Send the Fire PDU + DetonationPdu_1a.setLocationInWorldCoordinates(entityStatePdu_2.getEntityLocation()); // Set detonation at target's location disChannel.sendSinglePdu(simulationTimeSeconds, firePdu_1a); + disChannel.sendSinglePdu(simulationTimeSeconds, DetonationPdu_1a); + System.out.println("******** Fire PDU sent at simulation loop: " + simulationLoopCount + " ********"); } + Vector3Double badGuyLocation = entityStatePdu_2.getEntityLocation(); + //Boolean badGuyStatus = entityStatePdu_2.isEntityDamageStatusPdu(); + Vector3Double goodGuyLocation = entityStatePdu_1.getEntityLocation(); + System.out.println("Friendly Location: " + goodGuyLocation); + System.out.println("Enemy Location: " + badGuyLocation); + //System.out.println("Enemy Status: " + badGuyStatus); + + Vector3Double detonationLocation = DetonationPdu_1a.getLocationInWorldCoordinates(); + + double distance = Math.sqrt( + Math.pow(detonationLocation.getX() - badGuyLocation.getX(), 2) + + Math.pow(detonationLocation.getY() - badGuyLocation.getY(), 2) + + Math.pow(detonationLocation.getZ() - badGuyLocation.getZ(), 2) + ); + + System.out.println("Distance between detonation and target: " + distance); + + + if (DetonationPdu_1a != null) { + System.out.println("Detonation PDU generated for firePdu_1a."); + } else { + System.out.println("Detonation PDU NOT generated for firePdu_1a."); + } + + if (firePdu_1a.getTargetEntityID().equals(entityStatePdu_2.getEntityID())) { + System.out.println("FirePdu targets entityStatePdu_2."); + } else { + System.out.println("FirePdu is not targeting entityStatePdu_2."); + } + + if (DetonationPdu_1a.getTargetEntityID().equals(entityStatePdu_2.getEntityID())) { + System.out.println("Detonation occurred and targeted entityStatePdu_2."); + } else { + System.out.println("Detonation DID NOT occur at entityStatePdu_2."); + } + if (entityStatePdu_2.isEntityDamageStatusPdu()) { + System.out.println("entityStatePdu_2 is damaged by the detonation."); + } else { + System.out.println("entityStatePdu_2 NOT damaged by the detonation."); + } // are there any other variables to modify at the beginning of your loop? // are your reading any DIS PDUs from the network? check for them here