diff --git a/src-generated/edu/nps/moves/dis7/pdus/EntityStatePdu.java b/src-generated/edu/nps/moves/dis7/pdus/EntityStatePdu.java index 042e6466402be0a34f46deddcff450e5f8c9a544..5b8061cec79c54a54fd9faa94a01fb8e6d9347ad 100644 --- a/src-generated/edu/nps/moves/dis7/pdus/EntityStatePdu.java +++ b/src-generated/edu/nps/moves/dis7/pdus/EntityStatePdu.java @@ -1,9 +1,8 @@ -// autogenerated using string template dis7javalicense.txt - /** * 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 */ +// header autogenerated using string template dis7javalicense.txt package edu.nps.moves.dis7.pdus; @@ -38,7 +37,7 @@ public class EntityStatePdu extends EntityInformationInteractionFamilyPdu implem /** describes the location of the entity in the world */ protected Vector3Double entityLocation = new Vector3Double(); - /** describes the orientation of the entity, in euler angles */ + /** describes the orientation of the entity, in euler angles with units of radians */ protected EulerAngles entityOrientation = new EulerAngles(); /** a series of bit flags that are used to help draw the entity, such as smoking, on fire, etc. */ @@ -47,7 +46,7 @@ public class EntityStatePdu extends EntityInformationInteractionFamilyPdu implem /** parameters used for dead reckoning */ protected DeadReckoningParameters deadReckoningParameters = new DeadReckoningParameters(); - /** 11 characters that can be used for entity identifiication, debugging, or to draw unique strings on the side of entities in the world */ + /** 11 characters that can be used for entity identification, debugging, or to draw unique strings on the side of entities in the world */ protected EntityMarking marking = new EntityMarking(); /** a series of bit flags uid 55 */ @@ -532,4 +531,129 @@ public int unmarshal(java.nio.ByteBuffer byteBuffer) throws Exception return sb.toString(); } + // EntityStateUtilityMethods + + /** Direction enumerations */ + public enum Direction + { + /** NORTH direction along Y axis */ + NORTH, + /** NORTHEAST direction */ + NORTHEAST, + /** EAST direction along X axis */ + EAST, + /** SOUTHEAST direction */ + SOUTHEAST, + /** SOUTH direction along -Y axis */ + SOUTH, + /** SOUTHWEST direction */ + SOUTHWEST, + /** WEST direction along -X axis */ + WEST, + /** NORTHWEST direction */ + NORTHWEST + } + + /** Utility method to set entity linear velocity using speed and direction + * @param speed in meters/second + * @param direction using Directions enumerations + * @see Direction + * @return same object to permit progressive setters */ + public final EntityStatePdu setEntityLinearVelocity (float speed, Direction direction) + { + float xFactor = 0.0f; + float yFactor = 0.0f; + switch (direction) + { + case NORTH: + xFactor = 0.0f; yFactor = 1.0f; + break; + + case EAST: + xFactor = 1.0f; yFactor = 0.0f; + break; + + case SOUTH: + xFactor = 0.0f; yFactor = -1.0f; + break; + + case WEST: + xFactor = -1.0f; yFactor = 0.0f; + break; + case NORTHEAST: + xFactor = 0.7071f; yFactor = 0.7071f; + break; + + case SOUTHEAST: + xFactor = -0.7071f; yFactor = 0.7071f; + break; + + case SOUTHWEST: + xFactor = -0.7071f; yFactor = -0.7071f; + break; + + case NORTHWEST: + xFactor = 0.7071f; yFactor = -0.7071f; + break; + default: + System.err.println("*** unexpected internal error, encountered illegal EntityStatePdu Direction"); + + } + Vector3Float newVelocity = new Vector3Float().setX(xFactor*speed).setY(yFactor*speed).setZ(getEntityLinearVelocity().z); + setEntityLinearVelocity(newVelocity); + return this; + } + /** Setter for {@link EntityStatePdu#entityLocation} + * @param x location + * @param y location + * @param z location + * @return same object to permit progressive setters */ + public EntityStatePdu setEntityLocation(double x, double y, double z) + { + // TODO autogenerate such utility constructors + entityLocation = new Vector3Double().setX(x).setY(y).setZ(z); + return this; + } + /** Advance location using linear velocities for a single timestep + * @param timestep duration of travel + * @return same object to permit progressive setters */ + public EntityStatePdu advanceEntityLocation(double timestep) + { + Vector3Double location = getEntityLocation(); + Vector3Float velocity = getEntityLinearVelocity(); + setEntityLocation(location.getX() + velocity.getX() * timestep, + location.getY() + velocity.getY() * timestep, + location.getZ() + velocity.getZ() * timestep); + return this; + } + /** Marking utility to clear character values + * @return same object to permit progressive setters */ + public EntityStatePdu clearMarking() + { + byte[] emptyByteArray = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + marking.setCharacters(emptyByteArray); + return this; + } + /** Marking utility to set character values, 11 characters maximum + *@param newMarking new 11-character string to assign as marking value + * @return same object to permit progressive setters */ + public EntityStatePdu setMarking(String newMarking) + { + if ((newMarking == null) || newMarking.isEmpty()) + clearMarking(); + else if (newMarking.length() > 11) + System.err.println ("*** marking '" + newMarking + "' is greater than 11 characters, truncating"); + newMarking = String.format("%11s", newMarking); + marking.setCharacters(newMarking.getBytes()); + + return this; + } + /** Marking utility to get character values as a string + * @return 11-character String value corresponding to marking */ + public String getMarkingString() + { + return new String(marking.getCharacters()); + } + + } // end of class