Skip to content
Snippets Groups Projects
Commit 39a3e297 authored by rojas's avatar rojas
Browse files

Merge origin/master

Conflicts:
	examples/nbproject/project.properties
parent 82eff654
No related branches found
No related tags found
No related merge requests found
......@@ -5,13 +5,23 @@
*/
package MV3500Cohort2024JulySeptember.homework3.Romero;
import edu.nps.moves.dis7.entities.swe.platform.surface._001Poseidon;
import edu.nps.moves.dis7.entities.swe.platform.surface._002Triton;
//import edu.nps.moves.dis7.entities.swe.platform.surface._001Poseidon;
//import edu.nps.moves.dis7.entities.swe.platform.surface._002Triton;
//https://savage.nps.edu/opendis7-java/javadoc/edu/nps/moves/dis7/entities/usa/platform/land/ChevyS10ShooterwAK74.html
import edu.nps.moves.dis7.entities.usa.platform.land.M41lighttank;
//https://savage.nps.edu/opendis7-java/javadoc/edu/nps/moves/dis7/entities/usa/platform/land/ChenowthLightStrikeVehicleLSV.html
import edu.nps.moves.dis7.entities.usa.platform.land.ChenowthLightStrikeVehicleLSV;
//https://savage.nps.edu/open-dis7-java/javadoc/edu/nps/moves/dis7/entities/chn/munition/tactical/Ballistic.html
//import edu.nps.moves.dis7.entities.usa.*;
import edu.nps.moves.dis7.enumerations.VariableRecordType;
import edu.nps.moves.dis7.enumerations.*;
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;
......@@ -42,7 +52,7 @@ public class RomeroSimulationProgram
/** current simulation time in seconds */
double simulationTimeSeconds = simulationTimeInitial;
/** Maximum number of simulation loops */
int MAX_LOOP_COUNT = 4;
int MAX_LOOP_COUNT = 10;
String narrativeMessage1 = new String();
String narrativeMessage2 = new String();
......@@ -52,19 +62,31 @@ public class RomeroSimulationProgram
protected EntityID entityID_1 = new EntityID();
/** EntityID settings for entity 2 */
protected EntityID entityID_2 = new EntityID();
protected EntityID entityID_3 = new EntityID();
/** ESPDU for entity 1 */
protected EntityStatePdu entityStatePdu_1;
/** ESPDU for entity 2 */
protected EntityStatePdu entityStatePdu_2;
/** ESPDU for entity 3 */
protected EntityStatePdu entityStatePdu_3;
/** FirePdu for entity 1 first weapon (if any) */
protected FirePdu firePdu_1a;
protected FirePdu firePdu_1a = new FirePdu();
/** FirePdu for entity 1 second weapon (if any) */
protected FirePdu firePdu_1b;
/** MunitionDescriptor for these weapons */
protected MunitionDescriptor munitionDescriptor1;
protected MunitionDescriptor munition;
// hey programmer, what other state do you want? this is a good place to declare it...
protected EntityType entityType_1;
protected EntityType entityType_2;
protected EntityType entityType_3;
protected EntityType munitionType = new EntityType();
Vector3Double location_1 = new Vector3Double();
Vector3Double location_2 = new Vector3Double();
Vector3Double location_3 = new Vector3Double();
/**
* Constructor to create an instance of this class.
* Design goal: additional built-in initialization conveniences can go here
......@@ -139,7 +161,7 @@ public class RomeroSimulationProgram
// TODO confirm whether recorder is explicitly started by programmer (or not)
// disChannel.sendCommentPdu(VariableRecordType.OTHER, "DisThreadedNetworkInterface.initializeDisChannel() complete"); // hello channel, debug
//disChannel.sendCommentPdu(VariableRecordType.OTHER, "DisThreadedNetworkInterface.initializeDisChannel() complete"); // hello channel, debug
}
/** Get ready, get set... initialize simulation entities. Who's who in the zoo?
......@@ -150,39 +172,110 @@ public class RomeroSimulationProgram
pduFactory = disChannel.getPduFactory();
entityStatePdu_1 = pduFactory.makeEntityStatePdu();
entityStatePdu_2 = pduFactory.makeEntityStatePdu();
entityStatePdu_3 = pduFactory.makeEntityStatePdu();
firePdu_1a = pduFactory.makeFirePdu();
firePdu_1b = pduFactory.makeFirePdu();
munitionDescriptor1 = new MunitionDescriptor();
//firePdu_1b = pduFactory.makeFirePdu();
munition = new MunitionDescriptor();
// 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.
// PDU objects are already declared and instances created, so now set their values.
// who is who in our big zoo, sufficient for global participation if we need it
entityID_1.setSiteID(1).setApplicationID(2).setEntityID(3); // made-up example ID;
disChannel.addEntity(entityID_1);
entityID_2.setSiteID(1).setApplicationID(2).setEntityID(4); // made-up example ID;
disChannel.addEntity(entityID_2);
// TODO someday, use enumerations for sites as part of a SimulationManager object; e.g. is there a unique site triplet for MOVES Institute?
try {
Thread.sleep(2000);
System.out.println("\nWho's who in this zoo?\n");
Thread.sleep(2000);
// PDU objects are already declared and instances created, so now set their values.
// who is who in our big zoo, sufficient for global participation if we need it
entityID_1.setSiteID(1).setApplicationID(2).setEntityID(3); // made-up example ID;
disChannel.addEntity(entityID_1);
entityStatePdu_1.setEntityID(entityID_1);
entityStatePdu_1.setForceId(ForceID.FRIENDLY);
entityStatePdu_1.setEntityType(new _001Poseidon()); // note import statement above
// entityStatePdu_1.setMarking("Entity #1");
entityStatePdu_1.setEntityType(new edu.nps.moves.dis7.entities.usa.platform.air.MV22B()); // note import statement at top
entityStatePdu_1.setMarking("Entity #53");
entityStatePdu_1.getMarkingString(); // use Netbeans Debug breakpoint here to check left justified...
entityID_2.setSiteID(1).setApplicationID(2).setEntityID(4); // made-up example ID;
disChannel.addEntity(entityID_2);
// TODO someday, use enumerations for sites as part of a SimulationManager object; e.g. is there a unique site triplet for MOVES Institute?
entityStatePdu_2.setEntityID(entityID_2);
entityStatePdu_2.setForceId(ForceID.OPPOSING);
entityStatePdu_2.setEntityType(new _002Triton()); // note import statement above
entityStatePdu_2.setMarking("Entity #2");
entityID_3.setSiteID(1).setApplicationID(2).setEntityID(5); // made-up example ID;
disChannel.addEntity(entityID_3);
// 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);
//*********************************************************************************
entityStatePdu_1.setEntityID(entityID_1);
entityStatePdu_1.setForceId(ForceID.OPPOSING);
entityStatePdu_1.setEntityType(new M41lighttank()); // note import statement above
// entityStatePdu_1.setMarking("Entity #1");
//entityStatePdu_1.setEntityType(new edu.nps.moves.dis7.entities.usa.platform.air.MV22B()); // note import statement at top
entityStatePdu_1.setMarking("Entity #001");
entityStatePdu_1.getMarkingString(); // use Netbeans Debug breakpoint here to check left justified...
location_1.setX(500.0);
location_1.setY(1000.0);
location_1.setZ(0.0);
entityStatePdu_1.setEntityLocation(location_1);
firePdu_1a.setFiringEntityID(entityID_1);
//firePdu_1a.setLocationInWorldCoordinates(location_1);
System.out.println("OPPOSING entity: " + entityStatePdu_1.getEntityType() + "\n");
System.out.println("ID: " + entityStatePdu_1.getEntityID() + "\n");
System.out.println("Location: " + entityStatePdu_1.getEntityLocation() + "\n");
Thread.sleep(1000);
// munitionType.setEntityKind(EntityKind.MUNITION);
// munitionType.setDomain((short) )
munition.setQuantity(30);
munition.setMunitionType(munitionType);
System.out.println("Munition: " + munition.getMunitionType() + "\n");
firePdu_1a.setDescriptor(munition).setRange(600.0f);
Vector3Float munitionVelocity = new Vector3Float();
munitionVelocity.setX(200.0f);
munitionVelocity.setY(0.0f);
munitionVelocity.setZ(0.0f);
firePdu_1a.setVelocity(munitionVelocity);
Thread.sleep(4000);
//****************************************************
entityStatePdu_2.setEntityID(entityID_2);
entityStatePdu_2.setForceId(ForceID.FRIENDLY);
entityStatePdu_2.setEntityType(new ChenowthLightStrikeVehicleLSV()); // note import statement above
entityStatePdu_2.setMarking("Entity #2");
location_2.setX(1000.0);
location_2.setY(750.0);
location_2.setZ(0.0);
entityStatePdu_2.setEntityLocation(location_2);
firePdu_1a.setTargetEntityID(entityID_2);
System.out.println("\n********\nFRIENDLY unit: " + entityStatePdu_2.getEntityType() + "\n");
System.out.println("ID: " + entityStatePdu_2.getEntityID() + "\n");
System.out.println("Initial Location: " + entityStatePdu_2.getEntityLocation() + "\n");
Thread.sleep(4000);
//*****************************************************
entityStatePdu_3.setEntityID(entityID_3);
entityStatePdu_3.setForceId(ForceID.FRIENDLY);
entityStatePdu_3.setEntityType(new ChenowthLightStrikeVehicleLSV()); // note import statement above
entityStatePdu_3.setMarking("Entity #3");
location_3.setX(0.0);
location_3.setY(250.0);
location_3.setZ(0.0);
entityStatePdu_3.setEntityLocation(location_3);
firePdu_1a.setTargetEntityID(entityID_3);
System.out.println("FRIENDLY unit: " + entityStatePdu_3.getEntityType() + "\n");
System.out.println("ID: " + entityStatePdu_3.getEntityID() + "\n");
System.out.println("Initial Location: " + entityStatePdu_3.getEntityLocation() + "\n********\n");
Thread.sleep(4000);
// TODO how should we customize this munition? what are key parameters for your simulation?
// more is needed here by scenario authors...
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
......@@ -207,6 +300,8 @@ public class RomeroSimulationProgram
int simulationLoopCount = 0; // variable, initialized at 0
boolean simulationComplete = false; // sentinel variable as termination condition, are we done yet?
int countImpactE2 = 0;
int countImpactE3 = 0;
// TODO reset Clock Time for today's date and timestamp to zero, providing consistent outputs for each simulation run
String timeMessage = "Simulation time " + simulationTimeSeconds + " at LocalDateTime " + LocalDateTime.now();
disChannel.sendCommentPdu(simulationTimeSeconds, DisChannel.COMMENTPDU_TIME, timeMessage);
......@@ -222,7 +317,18 @@ public class RomeroSimulationProgram
// =============================================================================================
// * your own simulation code starts here! *****************************************************
// =============================================================================================
Random random = new Random();
double randomX = 0 + (950 - 0) * random.nextDouble();
double randomY = 0 + (750 - 0) * random.nextDouble();
double radius = 200.0;
Vector3Double targetLocation = new Vector3Double();
targetLocation.setX(randomX);
targetLocation.setY(randomY);
targetLocation.setZ(0.0);
firePdu_1a.setLocationInWorldCoordinates(targetLocation);
// 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
......@@ -230,14 +336,38 @@ public class RomeroSimulationProgram
// compute a track, update an ESPDU, whatever it is that your model is doing...
// Where is my entity? Insert changes in position; this sample only changes X position.
entityStatePdu_1.getEntityLocation().setX(entityStatePdu_1.getEntityLocation().getX() + 1.0); // 1m per timestep
entityStatePdu_2.getEntityLocation().setX(entityStatePdu_2.getEntityLocation().getX() - 100.0); // 1m per timestep
entityStatePdu_2.getEntityLocation().setY(entityStatePdu_2.getEntityLocation().getY() + 10.0); // 1m per timestep
entityStatePdu_3.getEntityLocation().setX(entityStatePdu_3.getEntityLocation().getX() + 100.0); // 1m per timestep
entityStatePdu_3.getEntityLocation().setY(entityStatePdu_3.getEntityLocation().getY() + 10.0); // 1m per timestep
double distanceToImpact2 = calculateDistance(targetLocation, entityStatePdu_2.getEntityLocation());
double distanceToImpact3 = calculateDistance(targetLocation, entityStatePdu_3.getEntityLocation());
System.out.println ("... Unit position is: " + entityStatePdu_2.getEntityLocation().getX() + ", " + entityStatePdu_2.getEntityLocation().getY());
System.out.println ("... Unit position is: " + entityStatePdu_3.getEntityLocation().getX() + ", " + entityStatePdu_3.getEntityLocation().getY());
System.out.println("Firing at: " + targetLocation);
if (distanceToImpact2 <= radius) {
System.out.println("-----> Entity #2 HITTED!!!");
countImpactE2++;
} else if (distanceToImpact3 <= radius) {
System.out.println("-----> Entity #3 HITTED!!!");
countImpactE3++;
} else {
System.out.println("No impacts detected!!");
}
Thread.sleep(1500);
// decide whether to fire, and then update the firePdu. Hmmm, you might want a target to shoot at!
// etc. etc. your code goes here for your simulation of interest
// something happens between my simulation entities, la de da de da...
System.out.println ("... My simulation just did something, no really...");
//System.out.println ("... My simulation just did something, no really...");
System.out.flush(); // make sure this arrives to user even if other threads somehow become deadlocked
......@@ -288,9 +418,16 @@ public class RomeroSimulationProgram
} // end of simulation loop, continue until done
// ===================================================================================================// ===================================================================================================// ===================================================================================================// ===================================================================================================
narrativeMessage2 = "runSimulation() completed successfully"; // all done, so tell everyone else on the channel
// TODO better javadoc needs to be autogenerated for VariableRecordType enumerations
System.out.println("==========================");
System.out.println("Last Location for Entity #2: " + entityStatePdu_2.getEntityLocation());
System.out.println("Last Location for Entity #3: " + entityStatePdu_3.getEntityLocation());
System.out.println("Total impacts to Entity #2: " + countImpactE2);
System.out.println("Total impacts to Entity #3: " + countImpactE3);
disChannel.sendCommentPdu(DisChannel.COMMENTPDU_NARRATIVE, narrativeMessage1, narrativeMessage2, narrativeMessage3);
System.out.println ("... [final=completion CommentPdu successfully sent for simulation]");
......@@ -350,6 +487,13 @@ public class RomeroSimulationProgram
System.exit(-1);
}
}
public double calculateDistance (Vector3Double loc1, Vector3Double loc2) {
double dx = loc2.getX() - loc1.getX();
double dy = loc2.getY() - loc1.getY();
double dz = loc2.getZ() - loc1.getZ();
return Math.sqrt(dx * dx + dy * dy + dz * dz);
}
/**
* Get simple descriptor (such as parent class name) for this network interface, used in trace statements
......
assignments/src/MV3500Cohort2024JulySeptember/homework3/Romero/Shot.png

13.9 KiB

assignments/src/MV3500Cohort2024JulySeptember/homework3/Romero/Shot1.png

18.9 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment