package demo.helicopter; import java.awt.*; import java.awt.event.*; import javax.swing.*; import mil.navy.nps.dis.*; public class HumanControlPanel extends JFrame implements AdjustmentListener, ActionListener{ JPanel jPanel1 = new JPanel(); JPanel jPanel2 = new JPanel(); JPanel jPanel3 = new JPanel(); JButton kneelButton = new JButton(); JButton brakesButton = new JButton(); // JButton lowergunButton = new JButton(); // JButton turretleftButton = new JButton(); // JButton turretrightButton = new JButton(); JButton homeButton = new JButton(); JButton newSquadButton = new JButton(); JTextField headingTextField = new JTextField(); JScrollBar speedScroll = new JScrollBar(); JTextField speedTextField = new JTextField(); JScrollBar turnScroll = new JScrollBar(); JTextField turnTextField = new JTextField(); JLabel jLabel1 = new JLabel(); JLabel jLabel2 = new JLabel(); JLabel jLabel3 = new JLabel(); JLabel jLabel4 = new JLabel(); JLabel jLabel5 = new JLabel(); JLabel jLabel6 = new JLabel(); JLabel jLabel7 = new JLabel(); JLabel jLabel8 = new JLabel(); JLabel jLabel9 = new JLabel(); JLabel jLabel10 = new JLabel(); JLabel jLabel11 = new JLabel(); JButton reverseButton = new JButton(); JButton forwardButton = new JButton(); // JButton firemhaingunButton = new JButton(); JButton fireauxgunButton = new JButton(); // JTextField mhainammoTextField = new JTextField(); JTextField auxammoTextField = new JTextField(); JLabel jLabel12 = new JLabel(); JLabel jLabel13 = new JLabel(); JTextField gunelevTextField = new JTextField(); JLabel jLabel14 = new JLabel(); JPanel jPanel4 = new JPanel(); private static int turnPosition = 0; // each of the scroll bars private static int speedPosition = 0; // private static boolean leftTurretTurnState; // 0 = not turning; 1 = turning // private static boolean rightTurretTurnState; // 0 = not turning; 1 = turning private static boolean forwardState; private static boolean reverseState; // private static boolean upGunState; // private static boolean downGunState; // private static int mhainAmmo; private static int mgAmmo; private HumanActionInterpreterSingle hai; //Construct the frame //============================================================================================= // Constructor //============================================================================================= public HumanControlPanel(String ipAddr, int portNum, int timeToLive, short siteNum, short appNum, short id, String marking, boolean rtpHeaderEnabled ) { hai = new HumanActionInterpreterSingle(ipAddr, portNum, timeToLive, siteNum,appNum,id, marking, rtpHeaderEnabled, this); enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { jbInit(); } catch (Exception e) { e.printStackTrace(); } // leftTurretTurnState = false; // rightTurretTurnState = false; forwardState = true; reverseState = false; // mhainAmmo = 40; mgAmmo = 30; hai.start(); //start human action interpeter } //Component initialization private void jbInit() throws Exception { this.getContentPane().setLayout(null); this.setSize(new Dimension(765, 175)); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); this.setLocation((screenSize.width - 765) / 2, (screenSize.height - 175)); this.setVisible(true); this.setBackground(Color.black); this.setForeground(Color.black); this.setFont(new Font("Courier", 1, 12)); String frameTitle = hai.getFrameHeaderInfo(); jPanel1.setLayout(null); jPanel1.setBackground(new Color(150, 150, 150)); jPanel1.setFont(new Font("Serif", 0, 10)); jPanel1.setBounds(new Rectangle(0, 0, 370, 150)); jPanel2.setBackground(new Color(212, 131, 81)); jPanel2.setLayout(null); jPanel2.setBounds(new Rectangle(375, 0, 185, 150)); jPanel3.setBackground(new Color(153, 153, 153)); jPanel3.setLayout(null); jPanel3.setBounds(new Rectangle(565, 0, 195, 150)); kneelButton.setText("Kneel"); kneelButton.setFont(new Font("SansSerif", 1, 10)); kneelButton.setBounds(new Rectangle(95, 38, 94, 34)); kneelButton.addActionListener(this); brakesButton.setText("Brakes"); brakesButton.setFont(new Font("SansSerif", 1, 10)); brakesButton.setBounds(new Rectangle(1, 38, 92, 34)); brakesButton.addActionListener(this); // lowergunButton.setText("Lower Gun"); // lowergunButton.setFont(new Font("SansSerif", 1, 10)); // lowergunButton.setBounds(new Rectangle(95, 38, 94, 34)); // lowergunButton.addActionListener(this); // turretleftButton.setText("Turret Left"); // turretleftButton.setFont(new Font("SansSerif", 1, 10)); // turretleftButton.setBounds(new Rectangle(1, 76, 92, 34)); // turretleftButton.addActionListener(this); // turretrightButton.setText("Turret Right"); // turretrightButton.setFont(new Font("SansSerif", 1, 10)); // turretrightButton.setBounds(new Rectangle(95, 76, 94, 34)); // turretrightButton.addActionListener(this); homeButton.setText("Home"); homeButton.setFont(new Font("SansSerif", 1, 10)); homeButton.setBounds(new Rectangle(1, 114, 92, 34)); homeButton.addActionListener(this); newSquadButton.setText("New Player"); // Squad newSquadButton.setFont(new Font("SansSerif", 1, 9)); newSquadButton.setBounds(new Rectangle(95, 114, 94, 34)); newSquadButton.addActionListener(this); headingTextField.setHorizontalAlignment(JTextField.CENTER); headingTextField.setEditable(false); headingTextField.setText("0"); headingTextField.setBounds(new Rectangle(170, 1, 35, 20)); speedScroll.setVisibleAmount(5); speedScroll.setMaximum(15); speedScroll.setFont(new Font("SansSerif", 1, 10)); speedScroll.setOrientation(JScrollBar.HORIZONTAL); speedScroll.setBounds(new Rectangle(1, 50, 154, 20)); speedScroll.addAdjustmentListener(this); speedTextField.setHorizontalAlignment(JTextField.CENTER); speedTextField.setText("0"); speedTextField.setEditable(false); speedTextField.setBounds(new Rectangle(170, 50, 35, 20)); turnScroll.setVisibleAmount(5); turnScroll.setMaximum(55); turnScroll.setOrientation(JScrollBar.HORIZONTAL); turnScroll.setMinimum(-50); turnScroll.setBounds(new Rectangle(1, 105, 154, 20)); turnScroll.addAdjustmentListener(this); turnTextField.setHorizontalAlignment(JTextField.CENTER); turnTextField.setText("0"); turnTextField.setEditable(false); turnTextField.setBounds(new Rectangle(170, 105, 35, 20)); jLabel1.setForeground(Color.black); jLabel1.setText("Heading"); jLabel1.setBounds(new Rectangle(163, 22, 51, 17)); jLabel2.setForeground(Color.black); jLabel2.setText("Speed"); jLabel2.setBounds(new Rectangle(169, 71, 38, 18)); jLabel3.setForeground(Color.black); jLabel3.setText("Turn Rate"); jLabel3.setBounds(new Rectangle(159, 125, 57, 17)); jLabel4.setForeground(Color.black); jLabel4.setText("Speed Control"); jLabel4.setBounds(new Rectangle(37, 71, 83, 15)); jLabel5.setForeground(Color.black); jLabel5.setText("Turn Rate Control"); jLabel5.setBounds(new Rectangle(28, 125, 99, 16)); jLabel6.setForeground(Color.black); jLabel6.setText("0"); jLabel6.setBounds(new Rectangle(77, 90, 10, 14)); jLabel7.setForeground(Color.black); jLabel7.setText("+50"); jLabel7.setBounds(new Rectangle(125, 90, 21, 15)); jLabel8.setForeground(Color.black); jLabel8.setText("-50"); jLabel8.setBounds(new Rectangle(8, 90, 23, 14)); jLabel9.setForeground(Color.black); jLabel9.setText("0"); jLabel9.setBounds(new Rectangle(10, 37, 12, 12)); jLabel10.setForeground(Color.black); jLabel10.setText("5"); jLabel10.setBounds(new Rectangle(70, 34, 18, 16)); jLabel11.setForeground(Color.black); jLabel11.setText("10"); jLabel11.setBounds(new Rectangle(131, 35, 16, 14)); reverseButton.setText("Reverse"); reverseButton.setFont(new Font("SansSerif", 1, 9)); reverseButton.setBounds(new Rectangle(1, 1, 75, 30)); reverseButton.addActionListener(this); forwardButton.setText("Forward"); forwardButton.setFont(new Font("SansSerif", 1, 10)); forwardButton.setBounds(new Rectangle(79, 1, 75, 30)); forwardButton.addActionListener(this); // firemhaingunButton.setText("Fire Mhain Gun"); // firemhaingunButton.setFont(new Font("SansSerif", 1, 10)); // firemhaingunButton.setBounds(new Rectangle(265, 36, 103, 33)); // firemhaingunButton.addActionListener(this); fireauxgunButton.setText("Fire Gun"); fireauxgunButton.setFont(new Font("SansSerif", 1, 10)); fireauxgunButton.setBounds(new Rectangle(265, 114, 104, 31)); fireauxgunButton.addActionListener(this); // mhainammoTextField.setHorizontalAlignment(JTextField.CENTER); // mhainammoTextField.setText("40"); // mhainammoTextField.setEditable(false); // mhainammoTextField.setBounds(new Rectangle(301, 1, 31, 18)); auxammoTextField.setHorizontalAlignment(JTextField.CENTER); auxammoTextField.setText("30"); auxammoTextField.setEditable(false); auxammoTextField.setBounds(new Rectangle(301, 77, 31, 18)); // jLabel12.setForeground(Color.black); // jLabel12.setText("Mhain Gun Ammo"); // jLabel12.setBounds(new Rectangle(272, 18, 93, 15)); jLabel13.setForeground(Color.black); jLabel13.setText("Gun Ammo"); jLabel13.setBounds(new Rectangle(275, 94, 87, 16)); gunelevTextField.setHorizontalAlignment(JTextField.CENTER); gunelevTextField.setText("0"); gunelevTextField.setEditable(false); gunelevTextField.setBounds(new Rectangle(25, 1, 36, 20)); // jLabel14.setForeground(Color.black); // jLabel14.setText("Mhain Gun Elev"); // jLabel14.setBounds(new Rectangle(5, 20, 80, 16)); this.setResizable(false); this.setTitle("Human Control Panel " + frameTitle); this.setBackground(Color.black); this.setFont(new Font("Courier", 1, 12)); this.getContentPane().add(jPanel1, null); jPanel1.add(headingTextField, null); jPanel1.add(speedScroll, null); jPanel1.add(speedTextField, null); jPanel1.add(turnScroll, null); jPanel1.add(turnTextField, null); jPanel1.add(jLabel1, null); jPanel1.add(jLabel2, null); jPanel1.add(jLabel3, null); jPanel1.add(jLabel4, null); jPanel1.add(jLabel5, null); jPanel1.add(jLabel6, null); jPanel1.add(jLabel7, null); jPanel1.add(jLabel8, null); jPanel1.add(jLabel9, null); jPanel1.add(jLabel10, null); jPanel1.add(jLabel11, null); jPanel1.add(reverseButton, null); jPanel1.add(forwardButton, null); // jPanel1.add(firemhaingunButton, null); jPanel1.add(fireauxgunButton, null); // jPanel1.add(mhainammoTextField, null); jPanel1.add(auxammoTextField, null); // jPanel1.add(jLabel12, null); jPanel1.add(jLabel13, null); this.getContentPane().add(jPanel2, null); this.getContentPane().add(jPanel3, null); jPanel3.add(kneelButton, null); jPanel3.add(brakesButton, null); // jPanel3.add(lowergunButton, null); // jPanel3.add(turretleftButton, null); // jPanel3.add(turretrightButton, null); jPanel3.add(homeButton, null); jPanel3.add(newSquadButton, null); // jPanel3.add(gunelevTextField, null); jPanel3.add(jLabel14, null); } //Overriden so we can exit on System Close protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } //============================================================================================= // Implements AdjustmentListener //============================================================================================= public void adjustmentValueChanged(AdjustmentEvent evt){ if (evt.getSource().equals(speedScroll)){ speedPosition = evt.getValue(); // update the current slider position if (reverseState){ Integer temp1 = new Integer( -speedPosition); speedTextField.setText(temp1.toString()); // print new value in the textField System.out.println("Speed = " + temp1); hai.setSpeed((new Float(temp1.intValue())).floatValue()); repaint(); } else { Integer temp1 = new Integer(speedPosition); speedTextField.setText(temp1.toString()); // print new value in the textField System.out.println("Speed = " + temp1); hai.setSpeed((new Float(temp1.intValue())).floatValue()); repaint(); } // repaint the screen } // end else if // if the heading scroll is the source of the event else if (evt.getSource().equals(turnScroll)){ turnPosition = evt.getValue(); // update the current slider position if (turnPosition < 0){ if (!reverseState){ Integer temp1 = new Integer(turnPosition); turnTextField.setText(temp1.toString()); // print new value in the textField System.out.println("Angle of bank = " + temp1); hai.setTurnAngle((new Float(temp1.intValue())).floatValue()); repaint(); // repaint the screen } // end if else { Integer temp4 = new Integer(-turnPosition); turnTextField.setText(temp4.toString()); // print new value in the textField System.out.println("Angle of bank = " + temp4); hai.setTurnAngle((new Float(temp4.intValue())).floatValue()); repaint(); // repaint the screen } // end else } //end if else if (turnPosition == 0){ Integer temp2 = new Integer(0); turnTextField.setText(temp2.toString()); // print new value in the textField System.out.println("Angle of bank = " + temp2); hai.setTurnAngle((new Float(temp2.intValue())).floatValue()); repaint(); } // end else if else { if (!reverseState){ Integer temp3 = new Integer(turnPosition); turnTextField.setText(temp3.toString()); // print new value in the textField System.out.println("Angle of bank = " + temp3); hai.setTurnAngle((new Float(temp3.intValue())).floatValue()); repaint(); // repaint the screen }//end if else { Integer temp5 = new Integer(-turnPosition); turnTextField.setText(temp5.toString()); // print new value in the textField System.out.println("Angle of bank = " + temp5); hai.setTurnAngle((new Float(temp5.intValue())).floatValue()); repaint(); // repaint the screen } // end else } // end else } // end else if } // end adjustmentValueChanged() //============================================================================================= // Implements ActionListener //============================================================================================= public void actionPerformed(ActionEvent evt){ Object buttonName = evt.getSource(); if (hai.getIsCollided() == false){ if (buttonName.equals(homeButton)){ turnScroll.setValue(0); turnTextField.setText("0"); speedScroll.setValue(0); speedTextField.setText("0"); hai.reset(); repaint(); } // end if // else if (buttonName.equals(firemhaingunButton)){ // System.out.println("Fire Mhain Button Pressed"); // if (mhainAmmo > 0){ // mhainAmmo = mhainAmmo - 1; // // mhainammoTextField.setText((new Integer(mhainAmmo)).toString()); // hai.sendMhainFirePdu();} // } // end else if else if (buttonName.equals(fireauxgunButton)){ System.out.println("Fire COAX Button Pressed"); if (mgAmmo > 0){ mgAmmo = mgAmmo - 1; auxammoTextField.setText((new Integer(mgAmmo)).toString()); hai.sendFirePdu();} } // end else if else if (buttonName.equals(forwardButton)){ System.out.println("forward Button Pressed"); if (reverseState){ turnScroll.setValue(0); turnTextField.setText("0"); speedScroll.setValue(0); speedTextField.setText("0"); hai.brake(); reverseState = false; forwardState = true; repaint(); } } // end else if else if (buttonName.equals(reverseButton)){ System.out.println("reverse Button Pressed"); if (forwardState){ turnScroll.setValue(0); turnTextField.setText("0"); speedScroll.setValue(0); speedTextField.setText("0"); hai.brake(); reverseState = true; forwardState = false; repaint(); } } // end else if else if (buttonName.equals(kneelButton)){ System.out.println("Kneel Button Pressed"); turnScroll.setValue(0); turnTextField.setText("0"); speedScroll.setValue(0); speedTextField.setText("0"); hai.brake(); hai.kneel (); repaint(); } // end else if // else if (buttonName.equals(lowergunButton)){ // System.out.println("lower Button Pressed"); // upGunState = false; // if(downGunState){ // hai.depressGun(); // downGunState = false; // return; // } // end if // hai.depressGun(); // repaint(); // downGunState = true; // } // end else if else if (buttonName.equals(brakesButton)){ System.out.println("Brake Button Pressed"); turnScroll.setValue(0); turnTextField.setText("0"); speedScroll.setValue(0); speedTextField.setText("0"); hai.brake(); repaint(); } // end else if // else if (buttonName.equals(turretleftButton)){ // System.out.println("Lt Turret Button Pressed"); // rightTurretTurnState = false; // if(leftTurretTurnState){ // hai.leftTurretTurn(); // leftTurretTurnState = false; // repaint(); // return; // } // end if // leftTurretTurnState = true; // hai.leftTurretTurn(); // repaint(); // } // end else if // else if (buttonName.equals(turretrightButton)){ // System.out.println("Rt turret Button Pressed"); // leftTurretTurnState = false; // if(rightTurretTurnState){ // hai.rightTurretTurn(); // rightTurretTurnState = false; // repaint(); // return; // } // end if // hai.rightTurretTurn(); // repaint(); // rightTurretTurnState = true; // } // end else if else if (buttonName.equals(homeButton)){ reset(); hai.reset(); } //end else if reset else if (buttonName.equals(newSquadButton)){ hai.selfDestruct(); hai.reset(); hai.stopRun(); hai.setDriving(false); //stop sending pdus this.setVisible(false); dispose(); StartPanel sp = new StartPanel(500,100); sp.setVisible(true); } //end else if restart else { System.out.println("Unknown button pressed"); } // end else }//end iscollided if else { System.out.println("control panel locked due to death"); } //end else } // end actionPerformed() //======================================================================= // Utility Methods //======================================================================= public void reset(){ turnScroll.setValue(0); turnTextField.setText("0"); speedScroll.setValue(0); speedTextField.setText("0"); // mhainammoTextField.setText("40"); // mhainAmmo = 40; auxammoTextField.setText("30"); mgAmmo = 30; repaint(); } //end reset public void resetAmmo(){ // mhainammoTextField.setText("40"); // mhainAmmo = 40; auxammoTextField.setText("30"); mgAmmo = 30; repaint(); } //end resetAmmo public void updateHeading(double mypsi){ if ( mypsi < 0 ) { headingTextField.setText(new Integer((int)( 360 + (((mypsi * 180) / Math.PI) % 360)) ).toString()); } else { headingTextField.setText(new Integer((int)((mypsi * 180) / Math.PI) % 360 ).toString()); } } // public void updateGunElev(double angle){ // gunelevTextField.setText(new Integer((int) ((angle * 180) / Math.PI)).toString()); // } //============================================================================================= // Main //============================================================================================= public static void main(String[] args){ //TankControlPanel fsm = new TankControlPanel(860, 170); HumanControlPanel hsm = new HumanControlPanel("224.2.181.145", 62040, 15, (short)0, (short)1, (short)20, "RedNancy 20", false); hsm.show(); } // end mhain } // end of the class