Research Article

Enhancing a Commercial Game Engine to Support Research on Route Realism for Synthetic Human Characters

Algorithm 4

Player monitoring Main class listing.
public class Main extends Experiment {
 Vector<MyMonitoring> monitoredPlayers;
 private boolean isMonitoring;
 public Main(ExperimentDescriptor descriptor, UTServer server) {
  super(descriptor, server); }
 @Override
 protected void stageOneInit() throws Exception {
  monitorPlayingPlayers(); }
 @Override
 protected void stageOneInit() throws Exception {
  getLogger().info("Experiment started.");
  if (isMonitoring) {
   createControlPanel(); //Small panel to stop the experiment
   //Wait for all monitored player to stop playing (or an error occurs
   //in the monitoring)
   Iterator<MyMonitoring> iter monitoredPlayers.iterator();
   while (iter.hasNext()) {
    iter.next().getSemaEndMonitor().acquire(); }}
  setResultAndTerminate(new ExperimentResult()); }
 private void monitorPlayingPlayers() throws PogamutException {
  Set<Player> players getServer().getInfo().getPlayers();
  if (players ! null && !players.isEmpty()) {
   Iterator<Player> iter players.iterator();
   monitoredPlayers new Vector<MyMonitoring>();
   while (iter.hasNext()) {
    Player player iter.next();
    MyMonitoring theMonitoredPlayer
      new MyMonitoring(player.UnrealID);
    getServer().monitorPlayer(theMonitoredPlayer);
    monitoredPlayers.add(theMonitoredPlayer);
    isMonitoring true; }}}
 @Override
 protected void stageThreeFinish() {
  getLogger().info("Experiment finished.");
  if (isMonitoring) {
   Iterator<MyMonitoring> iter = monitoredPlayers.iterator();
   while (iter.hasNext()) {
    MyMonitoring plr iter.next();
    plr.disconnect(); }}}
 private void createControlPanel() {
  final JFrame frame new JFrame();
  JButton stopButton new JButton("Stop");
  stopButton.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent arg0) {
    Iterator<MyMonitoring> iter monitoredPlayers.iterator();
    while (iter.hasNext()) {
     MyMonitoring plr iter.next();
     plr.saveData();
     plr.getSemaEndMonitor().release();}
     frame.dispose(); }});
  frame.add(stopButton);
  frame.setPreferredSize(new Dimension(200, 75));
  frame.setVisible(true);
  frame.pack(); }
 public static void main(String args) {}}