package demo.helicopter; import java.awt.*; import java.awt.event.*; import javax.swing.*; import mil.navy.nps.dis.*; import java.text.*; // for class DecimalFormat import java.util.*; // for class Vector import mil.navy.nps.testing.*; // for MulticastPduSender import mil.navy.nps.util.*; import mil.navy.nps.disEnumerations.*; /** * Class HumanPanel creates the panel to control the human enity in the * aggregated and disaggregated state * @author Thomas Miller * @version 1.0 */ public class HumanPanel extends javax.swing.JPanel { /** * Argumented Constructor * @param String ipAddr - a string defing the IP address * @param int portNum - the port number receiving the network packets * @param int timeToLive - Number of routing hops allowed * @param short siteNum - site Number of simualtion * @param short appNum - application number of the simulation * @param short idNum - entiy's id number * @param String marking - entity's text name * @param boolean rtpHeaderEnabled - wheteher or not the real-time header * is enabled or not * @param HumanPanel panel - the human control panel * @param boolean independent - the entity's mounted state * @param BehaviorStreamBufferUDP bsb * @param CollisionDetectionTerrainReader ter - instance of CollisionDetection * TerrainReader for the Fort Irwin terrain database * @param TeamActionInterpreter ai - the team action interpreter of the * aggregation entity */ public HumanPanel ( String ipAddr, int portNum, int timeToLive, short siteNum, short appNum, short id, String marking, boolean rtpHeaderEnabled, boolean notInTeam, BehaviorStreamBufferUDP bsb, CollisionDetectionTerrainReader ter, TeamActionInterpreter ai) { tai = ai; idNum = id; independent = notInTeam; hai = new HumanActionInterpreterTeam ( ipAddr, portNum, timeToLive, siteNum, appNum, id, marking, rtpHeaderEnabled, this, notInTeam, bsb, ter); initComponents (); hai.start (); // start human action interpeter if ( idNum < 30 ) { setBackground ( java.awt.Color.red ); } // end if else { setBackground ( java.awt.Color.blue ); } // end else if ( notInTeam ) { IndependentCheckBox.setSelected ( false ); } // end if else { IndependentCheckBox.setSelected ( true ); } // end else setBorder (new javax.swing.border.TitledBorder ( "Human Panel: " + marking + "***" + idNum )); pathFinder = new Compass ( 0, idNum ); pathFinder.setMaximumSize (new java.awt.Dimension (60, 60)); java.awt.GridBagConstraints gridBagConstraints2 = new java.awt.GridBagConstraints (); gridBagConstraints2.gridx = 2; gridBagConstraints2.gridy = 3; gridBagConstraints2.gridwidth = 1; gridBagConstraints2.gridheight = 2; gridBagConstraints2.fill = java.awt.GridBagConstraints.BOTH; add ( pathFinder, gridBagConstraints2 ); speedSlider.putClientProperty ("JSlider.isFilled", Boolean.TRUE); turnRateSlider.putClientProperty ("JSlider.isFilled", Boolean.TRUE); inLine = false; exited = false; held = false; } /** * initComponents is called from within the constructor to initialize * the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the FormEditor. * @param void * @return void */ private void initComponents () {//GEN-BEGIN:initComponents kneelButton = new javax.swing.JButton (); speedText = new javax.swing.JTextField (); turnRateText = new javax.swing.JTextField (); standButton = new javax.swing.JButton (); resetButtton = new javax.swing.JButton (); fireButton = new javax.swing.JButton (); ammoLabel = new javax.swing.JLabel (); ammoTextField = new javax.swing.JTextField (); speedLabel = new javax.swing.JLabel (); turnRateLabel = new javax.swing.JLabel (); directionTextField = new javax.swing.JTextField (); reloadButton = new javax.swing.JButton (); stopButton = new javax.swing.JButton (); IndependentCheckBox = new javax.swing.JCheckBox (); speedSlider = new javax.swing.JSlider (); turnRateSlider = new javax.swing.JSlider (); headingCompassLabel = new javax.swing.JLabel (); formationTextField = new javax.swing.JTextField (); setLayout (new java.awt.GridBagLayout ()); java.awt.GridBagConstraints gridBagConstraints1; setPreferredSize (new java.awt.Dimension(301, 145)); setBackground (java.awt.Color.blue); kneelButton.setPreferredSize (new java.awt.Dimension(67, 27)); kneelButton.setMaximumSize (new java.awt.Dimension(67, 27)); kneelButton.setText ("Kneel"); kneelButton.setBackground (java.awt.Color.cyan); kneelButton.setMinimumSize (new java.awt.Dimension(67, 27)); kneelButton.addMouseListener (new java.awt.event.MouseAdapter () { public void mouseClicked (java.awt.event.MouseEvent evt) { kneelButtonMouseClicked (evt); } } ); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 1; gridBagConstraints1.gridy = 0; gridBagConstraints1.insets = new java.awt.Insets (0, 1, 0, 1); add (kneelButton, gridBagConstraints1); speedText.setPreferredSize (new java.awt.Dimension(40, 20)); speedText.setText ("0"); speedText.setHorizontalAlignment (javax.swing.SwingConstants.CENTER); speedText.setMinimumSize (new java.awt.Dimension(40, 20)); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 0; gridBagConstraints1.gridy = 4; add (speedText, gridBagConstraints1); turnRateText.setPreferredSize (new java.awt.Dimension(40, 20)); turnRateText.setText ("0"); turnRateText.setHorizontalAlignment (javax.swing.SwingConstants.CENTER); turnRateText.setMinimumSize (new java.awt.Dimension(40, 20)); turnRateText.addActionListener (new java.awt.event.ActionListener () { public void actionPerformed (java.awt.event.ActionEvent evt) { turnRateTextActionPerformed (evt); } } ); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 3; gridBagConstraints1.gridy = 1; add (turnRateText, gridBagConstraints1); standButton.setPreferredSize (new java.awt.Dimension(67, 27)); standButton.setMaximumSize (new java.awt.Dimension(67, 27)); standButton.setText ("Stand"); standButton.setBackground (java.awt.Color.cyan); standButton.setMinimumSize (new java.awt.Dimension(67, 27)); standButton.addActionListener (new java.awt.event.ActionListener () { public void actionPerformed (java.awt.event.ActionEvent evt) { standButtonActionPerformed (evt); } } ); standButton.addMouseListener (new java.awt.event.MouseAdapter () { public void mouseClicked (java.awt.event.MouseEvent evt) { standButtonMouseClicked (evt); } } ); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 3; gridBagConstraints1.gridy = 0; add (standButton, gridBagConstraints1); resetButtton.setPreferredSize (new java.awt.Dimension(67, 27)); resetButtton.setMaximumSize (new java.awt.Dimension(67, 27)); resetButtton.setText ("Reset"); resetButtton.setBackground (java.awt.Color.lightGray); resetButtton.setMinimumSize (new java.awt.Dimension(67, 27)); resetButtton.addMouseListener (new java.awt.event.MouseAdapter () { public void mouseClicked (java.awt.event.MouseEvent evt) { resetButttonMouseClicked (evt); } } ); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 4; gridBagConstraints1.gridy = 0; add (resetButtton, gridBagConstraints1); fireButton.setPreferredSize (new java.awt.Dimension(67, 27)); fireButton.setMaximumSize (new java.awt.Dimension(67, 27)); fireButton.setText ("Fire"); fireButton.setBackground (new java.awt.Color (255, 153, 51)); fireButton.setMinimumSize (new java.awt.Dimension(67, 27)); fireButton.addMouseListener (new java.awt.event.MouseAdapter () { public void mouseClicked (java.awt.event.MouseEvent evt) { fireButtonMouseClicked (evt); } } ); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 4; gridBagConstraints1.gridy = 1; add (fireButton, gridBagConstraints1); ammoLabel.setText ("Ammo"); ammoLabel.setForeground (java.awt.Color.yellow); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 4; gridBagConstraints1.gridy = 3; add (ammoLabel, gridBagConstraints1); ammoTextField.setPreferredSize (new java.awt.Dimension(20, 20)); ammoTextField.setText ("30"); ammoTextField.setHorizontalAlignment (javax.swing.SwingConstants.CENTER); ammoTextField.setMinimumSize (new java.awt.Dimension(20, 20)); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 4; gridBagConstraints1.gridy = 4; add (ammoTextField, gridBagConstraints1); speedLabel.setText ("Speed"); speedLabel.setForeground (java.awt.Color.yellow); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 0; gridBagConstraints1.gridy = 0; add (speedLabel, gridBagConstraints1); turnRateLabel.setText ("Turn Rate"); turnRateLabel.setForeground (java.awt.Color.yellow); turnRateLabel.setHorizontalAlignment (javax.swing.SwingConstants.CENTER); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 2; gridBagConstraints1.gridy = 1; add (turnRateLabel, gridBagConstraints1); directionTextField.setDisabledTextColor (java.awt.Color.gray); directionTextField.setPreferredSize (new java.awt.Dimension(40, 20)); directionTextField.setText ("0"); directionTextField.setHorizontalAlignment (javax.swing.SwingConstants.CENTER); directionTextField.setMinimumSize (new java.awt.Dimension(40, 20)); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 3; gridBagConstraints1.gridy = 4; add (directionTextField, gridBagConstraints1); reloadButton.setPreferredSize (new java.awt.Dimension(67, 27)); reloadButton.setMaximumSize (new java.awt.Dimension(67, 27)); reloadButton.setText ("Reload"); reloadButton.setBackground (new java.awt.Color (255, 153, 51)); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 4; gridBagConstraints1.gridy = 2; add (reloadButton, gridBagConstraints1); stopButton.setPreferredSize (new java.awt.Dimension(63, 27)); stopButton.setMaximumSize (new java.awt.Dimension(63, 27)); stopButton.setText ("Stop"); stopButton.setBackground (java.awt.Color.cyan); stopButton.setMinimumSize (new java.awt.Dimension(63, 27)); stopButton.addMouseListener (new java.awt.event.MouseAdapter () { public void mouseClicked (java.awt.event.MouseEvent evt) { stopButtonMouseClicked (evt); } } ); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 2; gridBagConstraints1.gridy = 0; add (stopButton, gridBagConstraints1); IndependentCheckBox.setSelected (true); IndependentCheckBox.setForeground (java.awt.Color.yellow); IndependentCheckBox.setText ("Squad?"); IndependentCheckBox.setBackground (java.awt.Color.blue); IndependentCheckBox.addActionListener (new java.awt.event.ActionListener () { public void actionPerformed (java.awt.event.ActionEvent evt) { IndependentCheckBoxActionPerformed (evt); } } ); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 1; gridBagConstraints1.gridy = 3; add (IndependentCheckBox, gridBagConstraints1); speedSlider.setPaintTrack (false); speedSlider.setSnapToTicks (true); speedSlider.setMinimumSize (new java.awt.Dimension(41, 100)); speedSlider.setMinorTickSpacing (1); speedSlider.setPaintLabels (true); speedSlider.setPaintTicks (true); speedSlider.setOrientation (javax.swing.SwingConstants.VERTICAL); speedSlider.setMajorTickSpacing (5); speedSlider.setMaximum (10); speedSlider.setForeground (java.awt.Color.yellow); speedSlider.setBackground (java.awt.Color.blue); speedSlider.setValue (0); speedSlider.setMaximumSize (new java.awt.Dimension(41, 32767)); speedSlider.addChangeListener (new javax.swing.event.ChangeListener () { public void stateChanged (javax.swing.event.ChangeEvent evt) { speedSliderStateChanged (evt); } } ); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 0; gridBagConstraints1.gridy = 1; gridBagConstraints1.gridheight = 3; add (speedSlider, gridBagConstraints1); turnRateSlider.setPaintTrack (false); turnRateSlider.setMinimumSize (new java.awt.Dimension(120, 43)); turnRateSlider.setMinorTickSpacing (5); turnRateSlider.setPaintLabels (true); turnRateSlider.setPaintTicks (true); turnRateSlider.setMinimum (-50); turnRateSlider.setMajorTickSpacing (20); turnRateSlider.setMaximum (50); turnRateSlider.setForeground (java.awt.Color.yellow); turnRateSlider.setBackground (java.awt.Color.blue); turnRateSlider.setValue (0); turnRateSlider.addChangeListener (new javax.swing.event.ChangeListener () { public void stateChanged (javax.swing.event.ChangeEvent evt) { turnRateSliderStateChanged (evt); } } ); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 1; gridBagConstraints1.gridy = 2; gridBagConstraints1.gridwidth = 3; add (turnRateSlider, gridBagConstraints1); headingCompassLabel.setText ("Heading"); headingCompassLabel.setForeground (java.awt.Color.yellow); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 3; gridBagConstraints1.gridy = 3; add (headingCompassLabel, gridBagConstraints1); formationTextField.setPreferredSize (new java.awt.Dimension(62, 20)); formationTextField.setFont (new java.awt.Font ("Arial", 0, 11)); formationTextField.setText ("None"); formationTextField.setHorizontalAlignment (javax.swing.SwingConstants.CENTER); formationTextField.setMinimumSize (new java.awt.Dimension(62, 20)); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 1; gridBagConstraints1.gridy = 4; add (formationTextField, gridBagConstraints1); }//GEN-END:initComponents /** * StandButtonActionPerformed - Not implemented * @param java.awt.event.ActionEvent evt * @return void */ private void standButtonActionPerformed (java.awt.event.ActionEvent evt) { }//GEN-LAST:event_standButtonActionPerformed /** * turnRateTextActionPerformed - Not implemented * @param java.awt.event.ActionEvent evt * @return void */ private void turnRateTextActionPerformed (java.awt.event.ActionEvent evt) { }//GEN-LAST:event_turnRateTextActionPerformed /** * turnRateStateChanged - interprets changes to the turnRateSlider state * Updates turn rate text field * @param javax.swing.event.ChangeEvent evt * @return void */ private void turnRateSliderStateChanged (javax.swing.event.ChangeEvent evt) { JSlider source = (JSlider)evt.getSource (); int turnRate = source.getValue (); turnRateText.setText ( "" + turnRate ); hai.setTurnAngle ((float)turnRate); repaint (); }//GEN-LAST:event_turnRateSliderStateChanged /** * speedSliderStateChanged - interprets changes to the speedSlider state * Updates speed text field * @param javax.swing.event.ChangeEvent evt * @return void */ private void speedSliderStateChanged (javax.swing.event.ChangeEvent evt) { JSlider source = (JSlider)evt.getSource (); speed = source.getValue (); speedText.setText ( "" + speed ); hai.setSpeed ((float)speed); repaint (); }//GEN-LAST:event_speedSliderStateChanged /** * IndependentCheckBoxActionPerformed - acts on changes in the mounted * state of ther entity * @param java.awt.event.ActionEvent evt * @return void */ private void IndependentCheckBoxActionPerformed (java.awt.event.ActionEvent evt) { double temp = hai.setIndependence ( IndependentCheckBox.isSelected ()); tai.setIndependence ( temp, idNum ); }//GEN-LAST:event_IndependentCheckBoxActionPerformed /** * stopButtonMousedClicked - acts in response to the stop button * @param java.awt.event.MouseEvent evt * @return void */ private void stopButtonMouseClicked (java.awt.event.MouseEvent evt) { turnRateSlider.setValue ( 0 ); turnRateText.setText ( "0" ); speedSlider.setValue ( 0 ); speedText.setText ( "0" ); hai.brake (); repaint (); }//GEN-LAST:event_stopButtonMouseClicked /** * fireButtonMousedClicked - acts in response to the fire button * @param java.awt.event.MouseEvent evt * @return void */ private void fireButtonMouseClicked (java.awt.event.MouseEvent evt) { if ( ammo > 0 ) { ammo = ammo - 1; ammoTextField.setText ( ( new Integer ( ammo )).toString ()); hai.sendFirePdu(); } // end if }//GEN-LAST:event_fireButtonMouseClicked /** * resetButtonMousedClicked acts in response to the reset button * @param java.awt.event.MouseEvent evt * @return void */ private void resetButttonMouseClicked (java.awt.event.MouseEvent evt) { hai.reset (); }//GEN-LAST:event_resetButttonMouseClicked /** * standButtonMousedClicked - acts in response to the stand button * @param java.awt.event.MouseEvent evt * @return void */ private void standButtonMouseClicked (java.awt.event.MouseEvent evt) { System.out.println ("Stand Button Clicked" ); turnRateSlider.setValue ( 0 ); turnRateText.setText ( "0" ); speedSlider.setValue ( 0 ); speedText.setText ( "0" ); setFormation ( 6 ); hai.brake (); repaint (); }//GEN-LAST:event_standButtonMouseClicked /** * kneelButtonMousedClicked - acts in response to the kneel button * @param java.awt.event.MouseEvent evt * @return void */ private void kneelButtonMouseClicked (java.awt.event.MouseEvent evt) { turnRateSlider.setValue ( 0 ); turnRateText.setText ( "0" ); speedSlider.setValue ( 0 ); speedText.setText ( "0" ); hai.brake (); hai.kneel (); setFormation ( 5 ); repaint(); }//GEN-LAST:event_kneelButtonMouseClicked /** * setFormation - sets the movement order of the human entity when it * receives input of movement order changes * @param int * @return void */ public void setFormation ( int formationIndicator ) { hai.setMovementOrder ( formationIndicator ); if ( formationIndicator == 0 ) { formationTextField.setText ( "Column" ); inLine = false; exited = false; } // end if else if ( formationIndicator == 1 ) { formationTextField.setText ( "Line" ); inLine = false; exited = false; } // end else if else if ( formationIndicator == 2 ) { formationTextField.setText ( "Wedge" ); inLine = false; exited = false; } // end else if else if ( formationIndicator == 3 ) { formationTextField.setText ( "LoadHelo" ); inLine = false; exited = false; } // end else if else if ( formationIndicator == 4 ) { formationTextField.setText ( "UnloadHelo" ); inLine = false; } // end else if else if ( formationIndicator == 5 ) { formationTextField.setText ( "Hold" ); inLine = false; } // end else if else { formationTextField.setText ( "None" ); inLine = false; exited = false; } // end else } // end setFormation /** * updateHeading - Updates the heading text field and compass when changes of * heading are indicated * @param double psiAngle - this is the angle of rotation around the "up" axis * ( Y in VRML & -Z in DIS ) which gives entity heading * @return void */ public void updateHeading ( double psiAngle ) { if ( psiAngle < 0 ) { directionTextField.setText (new Integer ( (int) ( 360 + ( ( ( psiAngle * 180) / Math.PI) % 360))).toString ()); } // end if else { directionTextField.setText (new Integer ( (int) ( ( psiAngle * 180) / Math.PI) % 360 ).toString ()); } // end else pathFinder.setCompassSetting ( ( new Integer ( directionTextField.getText ())).intValue ()); repaint (); } // end updateHeading /** * updateAmmo - updates the ammo text field upon reload * @param void * @return void */ public void updateAmmo () { ammo = 30; ammoTextField.setText (( new Integer ( ammo )).toString ()); } // end updateAmmo /** * setSpeedText - sets the speedTextField * @param String newSpeed - the new speed of the entity * @return void */ public void setSpeedText ( String newSpeed ) { speedText.setText ( newSpeed ); } // end setSpeedText /** * setTurnRateText - sets the turnrateTextField * @param String newTurnrate - the new turn rate of the entity * @return void */ public void setTurnRateText ( String newTurnRate ) { turnRateText.setText ( newTurnRate ); } // end setTurnRateText /** * setSpeedSlider - sets the speedSlider * @param String newSpeed - the new speed of the entity as represented * on the speedSlider * @return void */ public void setSpeedSlider ( int newSpeed ) { speedSlider.setValue ( newSpeed ); } // end setSpeedSlider /** * setTurnRateSlider - sets the turnrateSlider * @param String newTurnrate - the new turn rate of the entity as represented * on the turnrateSlider * @return void */ public void setTurnRateSlider ( int newTurnRate ) { turnRateSlider.setValue ( newTurnRate ); } // end setSpeedText /** * setInLine - sets the entity's inLine state * @param boolean newValue - flag representing whether or not the entity * is at its goal position for the line behavior * @return void */ public void setInLine ( boolean newValue ) { inLine = newValue; } // end setInLine /** * getInLine - gets the entity's inLine state * @param void * @return boolean - the entity's inLine state */ public boolean getInLine () { return ( inLine ); } // end getInLine /** * setHeld - sets the entity's hold state * @param boolean newValue - the current hold state of the entity * @return void */ public void setHeld ( boolean newValue ) { held = newValue; } // end setHeld /** * getHeld - gets the entity's hold state * @param void * @return boolean - the entity's hold state */ public boolean getHeld () { return ( held ); } // end getHeld /** * setExited - sets the entity's exited state * @param boolean newValue - the current exited state of the entity * @return void */ public void setExited ( boolean newValue ) { exited = newValue; } // end setExited /** * getExited - gets the entity's exited state * @param void * @return boolean - the entity's exited state */ public boolean getExited () { return ( exited ); } // end getExited /** * setIndependent - sets the entity's mounted state to unmounted * @param void * @return void */ public void setIndependent () { double temp = hai.setIndependence ( false ); tai.setIndependence ( temp, idNum ); inLine = false; exited = false; } // end setIndependent /** * setDependent - sets the entity's mounted state to mounted * @param void * @return void */ public void setDependent () { double temp = hai.setIndependence ( true ); tai.setIndependence ( temp, idNum ); } // end setDependent // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton kneelButton; private javax.swing.JTextField speedText; private javax.swing.JTextField turnRateText; private javax.swing.JButton standButton; private javax.swing.JButton resetButtton; private javax.swing.JButton fireButton; private javax.swing.JLabel ammoLabel; private javax.swing.JTextField ammoTextField; private javax.swing.JLabel speedLabel; private javax.swing.JLabel turnRateLabel; private javax.swing.JTextField directionTextField; private javax.swing.JButton reloadButton; private javax.swing.JButton stopButton; private javax.swing.JCheckBox IndependentCheckBox; private javax.swing.JSlider speedSlider; private javax.swing.JSlider turnRateSlider; private javax.swing.JLabel headingCompassLabel; private javax.swing.JTextField formationTextField; // End of variables declaration//GEN-END:variables /** * idNum - id marking of the entity */ private short idNum; /** * marking - text marking of the entity */ private String marking; /** * pathfinder - an instatntiation of the compass class to draw a heading * compass in the panel */ private Compass pathFinder; /** * ammo - the number of rounds of ammo available */ private int ammo = 30; /** * hai - an instantiation of HumanActionInterpreterTeam to handle user * input and connection to the VRML scene */ private HumanActionInterpreterTeam hai; /** * speed - the entity's speed */ private static int speed = 0; /** * independent - the mounted state of the entity */ private static boolean independent = false; /** * tai - an instantiation of the TeamActionInterpreter which feeds the * movement orders to the human entities */ private TeamActionInterpreter tai; /** * inLine - holds whether or not the entity is at its goal position when * executing the Line behavior */ private boolean inLine; /** * exited - holds wheteher or not an entity that was loaded on a helicopter * has now exited */ private boolean exited; /** * held - determines whether or not the entity's active group behavior is * hold */ private boolean held; } // end class HumanPanel // end file HumanPanel.java