Skip to content
Snippets Groups Projects
Commit 41e2a51b authored by adfis's avatar adfis
Browse files

Fisher Homework 3. This simulation has two entities moving towards each other...

Fisher Homework 3. This simulation has two entities moving towards each other and firing, when they meet and collide a detonation occurs.
parent d329f53c
No related branches found
No related tags found
No related merge requests found
...@@ -4,9 +4,13 @@ package MV3500Cohort2021JulySeptember.homework3.Fisher; ...@@ -4,9 +4,13 @@ package MV3500Cohort2021JulySeptember.homework3.Fisher;
/** /**
* Copyright (c) 2008-2021, MOVES Institute, Naval Postgraduate School (NPS). All rights reserved. * Copyright (c) 2008-2021, MOVES Institute, Naval Postgraduate School (NPS). All rights reserved.
* This work is provided under a BSD open-source license, see project license.html and license.txt * This work is provided under a BSD open-source license, see project license.html and license.txt
* @author brutzman@nps.edu * @author adfis
*
* This simulation has two entities moving towards each other and when they
* collide a detonation happens.
*/ */
import edu.nps.moves.dis7.enumerations.ForceID;
import edu.nps.moves.dis7.enumerations.VariableRecordType; import edu.nps.moves.dis7.enumerations.VariableRecordType;
import edu.nps.moves.dis7.pdus.CommentPdu; import edu.nps.moves.dis7.pdus.CommentPdu;
import edu.nps.moves.dis7.pdus.EntityID; import edu.nps.moves.dis7.pdus.EntityID;
...@@ -62,9 +66,19 @@ public class ExampleSimulationProgramFisher ...@@ -62,9 +66,19 @@ public class ExampleSimulationProgramFisher
EntityID entityID_1 = new EntityID(); EntityID entityID_1 = new EntityID();
entityID_1.setSiteID(1).setApplicationID(2).setEntityID(3); // made-up example ID; entityID_1.setSiteID(1).setApplicationID(2).setEntityID(3); // made-up example ID;
// TODO someday, use enumerations; is there a unique site triplet for MOVES Institute? // TODO someday, use enumerations; is there a unique site triplet for MOVES Institute?
EntityID entityID_2 = new EntityID();
entityID_2.setSiteID(4).setApplicationID(5).setEntityID(6);
EntityStatePdu entityStatePdu_1 = pduFactory.makeEntityStatePdu(); EntityStatePdu entityStatePdu_1 = pduFactory.makeEntityStatePdu();
entityStatePdu_1.setEntityID(entityID_1); entityStatePdu_1.setEntityID(entityID_1);
entityStatePdu_1.setForceId(ForceID.FRIENDLY);
EntityStatePdu entityStatePdu_2 = pduFactory.makeEntityStatePdu();
entityStatePdu_2.setEntityID(entityID_2);
entityStatePdu_2.getEntityLocation().setX(10);
entityStatePdu_2.setForceId(ForceID.OPPOSING);
FirePdu firePdu_1a = pduFactory.makeFirePdu(); // for entity 1 first weapon (if any) FirePdu firePdu_1a = pduFactory.makeFirePdu(); // for entity 1 first weapon (if any)
FirePdu firePdu_1b = pduFactory.makeFirePdu(); // for entity 1 second weapon (if any) FirePdu firePdu_1b = pduFactory.makeFirePdu(); // for entity 1 second weapon (if any)
...@@ -97,7 +111,7 @@ public class ExampleSimulationProgramFisher ...@@ -97,7 +111,7 @@ public class ExampleSimulationProgramFisher
// Where is my entity? Insert changes in position; this sample only changes X position. // 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_1.getEntityLocation().setX(entityStatePdu_1.getEntityLocation().getX() + 1.0); // 1m per timestep
entityStatePdu_2.getEntityLocation().setX(entityStatePdu_2.getEntityLocation().getX() - 1.0);
// decide whether to fire, and then update the firePdu. Hmmm, you might want a target to shoort at! // decide whether to fire, and then update the firePdu. Hmmm, you might want a target to shoort at!
// etc. etc. your code goes here for your simulation of interest // etc. etc. your code goes here for your simulation of interest
...@@ -129,7 +143,7 @@ public class ExampleSimulationProgramFisher ...@@ -129,7 +143,7 @@ public class ExampleSimulationProgramFisher
System.out.println ("sending PDUs for simulation step " + simulationLoopCount + ", monitor loopback to confirm sent"); System.out.println ("sending PDUs for simulation step " + simulationLoopCount + ", monitor loopback to confirm sent");
// Below is the PDU that comes out as "Comment" in the info // Below is the PDU that comes out as "Comment" in the info
sendAllPdusForLoopTimestep(entityStatePdu_1, firePdu_1a, detonationPdu, timeStepComment, narrativeMessage1, narrativeMessage2, narrativeMessage3); sendAllPdusForLoopTimestep(entityStatePdu_1, entityStatePdu_2, firePdu_1a, timeStepComment, narrativeMessage1, narrativeMessage2, narrativeMessage3);
System.out.println ("... [PDUs successfully sent for this loop]"); System.out.println ("... [PDUs successfully sent for this loop]");
...@@ -137,6 +151,7 @@ public class ExampleSimulationProgramFisher ...@@ -137,6 +151,7 @@ public class ExampleSimulationProgramFisher
// loop now finished, check whether to terminate if simulation complete, otherwise continue // loop now finished, check whether to terminate if simulation complete, otherwise continue
if (simulationComplete || (simulationLoopCount > 10000)) // for example; including fail-safe condition is good if (simulationComplete || (simulationLoopCount > 10000)) // for example; including fail-safe condition is good
{ {
sendSinglePdu(detonationPdu);
System.out.println ("... [Termination condition met, simulationComplete=" + simulationComplete + "]"); // ", final loopCount=" + loopCount + System.out.println ("... [Termination condition met, simulationComplete=" + simulationComplete + "]"); // ", final loopCount=" + loopCount +
break; break;
} }
...@@ -309,23 +324,27 @@ public class ExampleSimulationProgramFisher ...@@ -309,23 +324,27 @@ public class ExampleSimulationProgramFisher
* @param commentType enumeration value describing purpose of the narrative comment * @param commentType enumeration value describing purpose of the narrative comment
* @param comments String array of narrative comments * @param comments String array of narrative comments
*/ */
public void sendAllPdusForLoopTimestep(EntityStatePdu entityStatePdu, public void sendAllPdusForLoopTimestep(EntityStatePdu entityStatePdu1,
EntityStatePdu entityStatePdu2,
FirePdu firePdu, FirePdu firePdu,
DetonationPdu detonationPdu, //DetonationPdu detonationPdu,
VariableRecordType commentType, VariableRecordType commentType,
// vararg... variable-length set of String comments can optionally follow // vararg... variable-length set of String comments can optionally follow
String... comments) String... comments)
{ {
if (entityStatePdu != null) if (entityStatePdu1 != null)
sendSinglePdu(entityStatePdu); sendSinglePdu(entityStatePdu1);
if (entityStatePdu2 != null)
sendSinglePdu(entityStatePdu2);
if (firePdu != null) if (firePdu != null)
sendSinglePdu(firePdu); // bang sendSinglePdu(firePdu); // bang
if (detonationPdu != null) //if (detonationPdu != null)
sendSinglePdu(detonationPdu); // sendSinglePdu(detonationPdu);
//
if ((comments != null) && (comments.length > 0)) if ((comments != null) && (comments.length > 0))
{ {
ArrayList<String> newCommentsList = new ArrayList<>(); ArrayList<String> newCommentsList = new ArrayList<>();
...@@ -385,7 +404,7 @@ public class ExampleSimulationProgramFisher ...@@ -385,7 +404,7 @@ public class ExampleSimulationProgramFisher
thisProgram.runSimulation (); // ... your simulation execution code goes in there ... thisProgram.runSimulation (); // ... your simulation execution code goes in there ...
pduRecorder.end(); //pduRecorder.end();
thisProgram.tearDownNetworkInterface(); // make sure no processes are left lingering thisProgram.tearDownNetworkInterface(); // make sure no processes are left lingering
......
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