Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
NetworkedGraphicsMV3500
Manage
Activity
Members
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Container Registry
Model registry
Analyze
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Savage
NetworkedGraphicsMV3500
Commits
6b461f09
Commit
6b461f09
authored
3 years ago
by
justi
Browse files
Options
Downloads
Patches
Plain Diff
Frank Assignment 3
parent
407cfc29
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
assignments/src/MV3500Cohort2021JulySeptember/homework3/Frank/FrankSimulation.java
+116
-82
116 additions, 82 deletions
...ort2021JulySeptember/homework3/Frank/FrankSimulation.java
with
116 additions
and
82 deletions
assignments/src/MV3500Cohort2021JulySeptember/homework3/Frank/FrankSimulation.java
+
116
−
82
View file @
6b461f09
...
...
@@ -2,7 +2,7 @@
* 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
*
*
*/
package
MV3500Cohort2021JulySeptember.homework3.Frank
;
...
...
@@ -21,8 +21,6 @@ import edu.nps.moves.dis7.pdus.EulerAngles;
import
edu.nps.moves.dis7.pdus.FirePdu
;
import
edu.nps.moves.dis7.pdus.MunitionDescriptor
;
import
edu.nps.moves.dis7.pdus.Pdu
;
import
edu.nps.moves.dis7.pdus.ResupplyOfferPdu
;
import
edu.nps.moves.dis7.pdus.SupplyQuantity
;
import
edu.nps.moves.dis7.pdus.Vector3Double
;
import
edu.nps.moves.dis7.utilities.CoordinateConversions
;
import
edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface
;
...
...
@@ -38,8 +36,98 @@ import java.util.logging.Logger;
* reporting them to the network. Default settings include PDU recording turned
* on by default.
*/
public
class
FrankSimulation
{
public
class
FrankSimulation
{
private
EntityID
createM1Abrams
()
{
EntityID
M1AbramsID
=
new
EntityID
();
// 1.1.225.1.1.1 Platform,Ground,USA,ArmoredFightingVehicle M1 Abrams
M1AbramsID
.
setSiteID
(
1
);
M1AbramsID
.
setApplicationID
(
13
);
M1AbramsID
.
setEntityID
(
25
);
return
M1AbramsID
;
}
private
EntityType
createM1AbramsType
()
{
EntityType
M1AbramsType
=
new
EntityType
();
M1AbramsType
.
setEntityKind
(
EntityKind
.
PLATFORM
);
M1AbramsType
.
setDomain
(
Domain
.
inst
(
PlatformDomain
.
LAND
));
M1AbramsType
.
setCountry
(
Country
.
UNITED_STATES_OF_AMERICA_USA
);
M1AbramsType
.
setCategory
(
1
);
M1AbramsType
.
setSubCategory
(
1
);
M1AbramsType
.
setSpecific
(
1
);
return
M1AbramsType
;
}
private
Vector3Double
createLocationVector
()
{
Vector3Double
eloc2
=
new
Vector3Double
();
double
[]
loc2
=
CoordinateConversions
.
getXYZfromLatLonDegrees
(
36.599831
,
-
121.878842
,
0
);
//sloat delmonte intersection
eloc2
.
setX
(
loc2
[
0
]);
eloc2
.
setY
(
loc2
[
1
]);
eloc2
.
setZ
(
loc2
[
2
]);
return
eloc2
;
}
private
EulerAngles
createOrientation
()
{
EulerAngles
orient2
=
new
EulerAngles
();
orient2
.
setPhi
((
float
)
0.0
);
orient2
.
setPsi
((
float
)
0.0
);
orient2
.
setTheta
((
float
)
0.0
);
return
orient2
;
}
private
EntityID
createT62ID
()
{
EntityID
T62ID
=
new
EntityID
();
//1.1.45.1.7.1 Platform,Ground,China, Tank, T-62
T62ID
.
setSiteID
(
1
);
T62ID
.
setApplicationID
(
13
);
T62ID
.
setEntityID
(
2
);
return
T62ID
;
}
private
EntityType
createT62Type
()
{
EntityType
T62Type
=
new
EntityType
();
T62Type
.
setEntityKind
(
EntityKind
.
PLATFORM
);
T62Type
.
setDomain
(
Domain
.
inst
(
PlatformDomain
.
LAND
));
T62Type
.
setCountry
(
Country
.
RUSSIA
);
T62Type
.
setCategory
(
2
);
T62Type
.
setSubCategory
(
41
);
T62Type
.
setSpecific
(
3
);
return
T62Type
;
}
private
Vector3Double
createEnemyLocation
()
{
Vector3Double
eloc1
=
new
Vector3Double
();
double
[]
loc1
=
CoordinateConversions
.
getXYZfromLatLonDegrees
(
36.594116
,
-
121.877463
,
0
);
//NPS Main Gate
eloc1
.
setX
(
loc1
[
0
]);
eloc1
.
setY
(
loc1
[
1
]);
eloc1
.
setZ
(
loc1
[
2
]);
return
eloc1
;
}
private
EulerAngles
createEnemyOrientation
()
{
EulerAngles
orient1
=
new
EulerAngles
();
orient1
.
setPhi
((
float
)
3.1415
);
orient1
.
setPsi
((
float
)
0.0
);
orient1
.
setTheta
((
float
)
0.0
);
return
orient1
;
}
private
MunitionDescriptor
createM829IT
(){
EntityType
M829Type
=
new
EntityType
();
//2.2.225.2.13.1
M829Type
.
setEntityKind
(
EntityKind
.
MUNITION
);
M829Type
.
setDomain
(
Domain
.
inst
(
PlatformDomain
.
AIR
));
M829Type
.
setCountry
(
Country
.
UNITED_STATES_OF_AMERICA_USA
);
M829Type
.
setCategory
(
2
);
M829Type
.
setSubCategory
(
13
);
M829Type
.
setSpecific
(
1
);
MunitionDescriptor
M829IT
=
new
MunitionDescriptor
();
M829IT
.
setMunitionType
(
M829Type
);
M829IT
.
setQuantity
(
3
);
M829IT
.
setFuse
(
MunitionDescriptorFuse
.
CONTACT_GRAZE
);
M829IT
.
setRate
(
200
);
return
M829IT
;
}
/**
* This runSimulation() method is for you, a programmer-modifiable method
* for defining and running a new simulation of interest. Welcome! Other
...
...
@@ -59,7 +147,7 @@ public class FrankSimulation{
* seconds for real-time execution (not simulation time, which may
* or may not be the same)
*/
final
double
SIMULATION_LOOP_DURATION_SECONDS
=
1
.0
;
final
double
SIMULATION_LOOP_DURATION_SECONDS
=
2
.0
;
final
int
SIMULATION_MAX_LOOP_COUNT
=
10
;
// be deliberate out out there! also avoid infinite loops.
int
simulationLoopCount
=
0
;
// variable, initialized at 0
boolean
simulationComplete
=
false
;
// sentinel variable as termination condition,, are we done yet?
...
...
@@ -75,60 +163,22 @@ public class FrankSimulation{
EntityStatePdu
entityStatePdu_1
=
pduFactory
.
makeEntityStatePdu
();
entityStatePdu_1
.
setEntityID
(
entityID_1
);
EntityID
M1AbramsID
=
new
EntityID
();
// 1.1.225.1.1.1 Platform,Ground,USA,ArmoredFightingVehicle M1 Abrams
M1AbramsID
.
setSiteID
(
1
);
M1AbramsID
.
setApplicationID
(
13
);
M1AbramsID
.
setEntityID
(
25
);
entityStatePdu_1
.
setEntityID
(
M1AbramsID
);
EntityType
M1AbramsType
=
new
EntityType
();
M1AbramsType
.
setEntityKind
(
EntityKind
.
PLATFORM
);
M1AbramsType
.
setDomain
(
Domain
.
inst
(
PlatformDomain
.
LAND
));
M1AbramsType
.
setCountry
(
Country
.
UNITED_STATES_OF_AMERICA_USA
);
M1AbramsType
.
setCategory
(
1
);
M1AbramsType
.
setSubCategory
(
1
);
M1AbramsType
.
setSpecific
(
1
);
entityStatePdu_1
.
setEntityType
(
M1AbramsType
);
Vector3Double
eloc2
=
new
Vector3Double
();
double
[]
loc2
=
CoordinateConversions
.
getXYZfromLatLonDegrees
(
36.599831
,
-
121.878842
,
0
);
//sloat delmonte intersection
eloc2
.
setX
(
loc2
[
0
]);
eloc2
.
setY
(
loc2
[
1
]);
eloc2
.
setZ
(
loc2
[
2
]);
// M1Abrams
entityStatePdu_1
.
setEntityID
(
createM1Abrams
());
// Calling createM1Abrams Method
entityStatePdu_1
.
setEntityType
(
createM1AbramsType
());
// Calling createM1AbramsType Method
// Location and Orientation
Vector3Double
eloc2
=
createLocationVector
();
// Calling createLocationVector Method
entityStatePdu_1
.
setEntityLocation
(
eloc2
);
EulerAngles
orient2
=
new
EulerAngles
();
orient2
.
setPhi
((
float
)
0.0
);
orient2
.
setPsi
((
float
)
0.0
);
orient2
.
setTheta
((
float
)
0.0
);
entityStatePdu_1
.
setEntityOrientation
(
orient2
);
entityStatePdu_1
.
setEntityOrientation
(
createOrientation
());
// Calling Create Orientation Method
EntityStatePdu
entityStatePdu2
=
pduFactory
.
makeEntityStatePdu
();
EntityID
T62ID
=
new
EntityID
();
//1.1.45.1.7.1 Platform,Ground,China, Tank, T-62
T62ID
.
setSiteID
(
1
);
T62ID
.
setApplicationID
(
13
);
T62ID
.
setEntityID
(
2
);
entityStatePdu2
.
setEntityID
(
T62ID
);
EntityType
T62Type
=
new
EntityType
();
T62Type
.
setEntityKind
(
EntityKind
.
PLATFORM
);
T62Type
.
setDomain
(
Domain
.
inst
(
PlatformDomain
.
LAND
));
T62Type
.
setCountry
(
Country
.
RUSSIA
);
T62Type
.
setCategory
(
2
);
T62Type
.
setSubCategory
(
41
);
T62Type
.
setSpecific
(
3
);
entityStatePdu2
.
setEntityType
(
T62Type
);
Vector3Double
eloc1
=
new
Vector3Double
();
double
[]
loc1
=
CoordinateConversions
.
getXYZfromLatLonDegrees
(
36.594116
,
-
121.877463
,
0
);
//NPS Main Gate
eloc1
.
setX
(
loc1
[
0
]);
eloc1
.
setY
(
loc1
[
1
]);
eloc1
.
setZ
(
loc1
[
2
]);
entityStatePdu2
.
setEntityLocation
(
eloc1
);
EulerAngles
orient1
=
new
EulerAngles
();
orient1
.
setPhi
((
float
)
3.1415
);
orient1
.
setPsi
((
float
)
0.0
);
orient1
.
setTheta
((
float
)
0.0
);
entityStatePdu2
.
setEntityOrientation
(
orient1
);
// //T-62
entityStatePdu2
.
setEntityID
(
createT62ID
());
// Calling Create T62 ID method
entityStatePdu2
.
setEntityType
(
createT62Type
());
// Calling Create T62 Type method
// enemy location and orientation
Vector3Double
eloc1
=
createEnemyLocation
();
// calling create enemylocation method
entityStatePdu2
.
setEntityLocation
(
eloc1
);
// Setting em
entityStatePdu2
.
setEntityOrientation
(
createEnemyOrientation
());
//calling create Enemy orientation method
int
T62HitsReceived
=
0
;
...
...
@@ -149,37 +199,24 @@ public class FrankSimulation{
firePdu
.
setFiringEntityID
(
fireID
);
firePdu
.
setTargetEntityID
(
targetID
);
EntityType
M829Type
=
new
EntityType
();
//2.2.225.2.13.1
M829Type
.
setEntityKind
(
EntityKind
.
MUNITION
);
M829Type
.
setDomain
(
Domain
.
inst
(
PlatformDomain
.
AIR
));
M829Type
.
setCountry
(
Country
.
UNITED_STATES_OF_AMERICA_USA
);
M829Type
.
setCategory
(
2
);
M829Type
.
setSubCategory
(
13
);
M829Type
.
setSpecific
(
1
);
MunitionDescriptor
M829IT
=
new
MunitionDescriptor
();
M829IT
.
setMunitionType
(
M829Type
);
M829IT
.
setQuantity
(
3
);
M829IT
.
setFuse
(
MunitionDescriptorFuse
.
CONTACT_GRAZE
);
M829IT
.
setRate
(
200
);
firePdu
.
setDescriptor
(
M829IT
);
firePdu
.
setDescriptor
(
createM829IT
());
// calling create M829IT Method
EntityID
M829ID
=
new
EntityID
();
M829ID
.
setEntityID
(
1
);
firePdu
.
setMunitionExpendibleID
(
M829ID
);
//
CommentReliablePdu
T62DestroyedComment
=
pduFactory
.
makeCommentReliablePdu
(
"T62 DESTROYED BY M1 Abrams AFTER 2 rounds M829I-T ON TARGET"
);
CommentReliablePdu
T62SightedComment
=
pduFactory
.
makeCommentReliablePdu
(
"M1 Abrams Acquires Target - T62 with in firing distance"
);
//if(eloc1.getX())
EntityID
MTVRID
=
new
EntityID
();
//
FirePdu
firePdu_1a
=
pduFactory
.
makeFirePdu
();
// for entity 1 first weapon (if any)
while
(
simulationLoopCount
<
SIMULATION_MAX_LOOP_COUNT
)
// are we done yet?
{
simulationLoopCount
++;
// good practice: increment loop counter as first action in that loop
// Where is my entity?
// Where is my entity?
entityStatePdu_1
.
getEntityLocation
().
setX
(
entityStatePdu_1
.
getEntityLocation
().
getX
()
-
20
);
// 1m per timestep
entityStatePdu_1
.
getEntityLocation
().
setY
(
entityStatePdu_1
.
getEntityLocation
().
getY
()
-
75
);
// decide whether to fire, and then update the firePdu. Hmmm, you might want a target to shoort at!
...
...
@@ -188,7 +225,7 @@ public class FrankSimulation{
Double
dz
=
eloc2
.
getZ
()
-
eloc1
.
getZ
();
Double
range
=
Math
.
sqrt
(
dx
*
dx
+
dy
*
dy
);
System
.
out
.
println
(
"range"
+
range
+
" dx:"
+
dx
+
" dy:"
+
dy
);
if
(
range
<
100
)
{
// Range 100
if
(!
fireBool
)
{
sendSinglePdu
(
T62SightedComment
);
...
...
@@ -204,18 +241,18 @@ public class FrankSimulation{
System
.
out
.
println
(
"M1 Abrams destroys T62 after "
+
T62HitsReceived
+
"rounds hit T62 Russian Tank"
);
narrativeMessage4
=
"Destroyed T62"
;
destBool
=
true
;
simulationComplete
=
true
;
}
}
}
// if (Message.equals("BMP Destroyed after" )) { //if client recieved termanation message stop client
// break;
// break;
// your loop termination condition goes here
if
(
simulationLoopCount
>
4
)
// for example
{
simulationComplete
=
true
;
simulationComplete
=
true
;
}
// =============================================================================================
// * your own simulation code starts here! *
...
...
@@ -228,20 +265,17 @@ public class FrankSimulation{
// decide whether to fire, and then update the firePdu. Hmmm, you might want a target to shoort at!
//firePdu_1a.setLocationInWorldCoordinates(entityStatePdu_1.getEntityLocation());
//byte[] fireArray = firePdu_1a.marshal();
//System.out.println("FirePdu_1a #" + simulationLoopCount + " firePdu=[FireMissionIndex=" + firePdu_1a.getFireMissionIndex() + ", descriptor=" + firePdu_1a.getDescriptor() + "]");
// 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...");
// make your reports: narrative code for CommentPdu here (set all to empty strings to avoid sending)
narrativeMessage1
=
"MV3500 FrankSimulation"
;
narrativeMessage2
=
"runSimulation() loop "
+
simulationLoopCount
;
narrativeMessage3
=
""
;
// intentionally blank for testing
// your loop termination condition goes here
if
(
simulationLoopCount
>
4
)
// for example
if
(
simulationLoopCount
>
10
)
// for example
{
simulationComplete
=
true
;
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment