+1 (972) 883-2091
ECSS 4.220, 800 W Campbell Rd, Richardson, TX 75083–0688, US

The “EvacuationApplication” class

To implement the “EvacuationApplication” class:

  • Create a new class inside the “edu.utdallas.mavs.evacuation.visualization.vis3D” package and name it “EvacuationApplication”.
  • Copy the code given below that describes the full implementation of a “EvacuationApplication” class.


package edu.utdallas.mavs.evacuation.visualization.vis3D;

import com.jme3.asset.AssetManager;
import com.jme3.input.KeyInput;
import com.jme3.input.controls.ActionListener;
import com.jme3.input.controls.KeyTrigger;
import com.jme3.math.Vector3f;

import edu.utdallas.mavs.divas.core.sim.common.state.EnvObjectState;
import edu.utdallas.mavs.divas.core.sim.common.state.HumanAgentState;
import edu.utdallas.mavs.divas.visualization.vis3D.BaseApplication;
import edu.utdallas.mavs.divas.visualization.vis3D.Visualizer3DApplication;
import edu.utdallas.mavs.divas.visualization.vis3D.appstate.SimulatingAppState;
import edu.utdallas.mavs.divas.visualization.vis3D.dialog.NiftyScreen;
import edu.utdallas.mavs.divas.visualization.vis3D.dialog.customControls.panel.HelpDialog;
import edu.utdallas.mavs.divas.visualization.vis3D.engine.CursorManager;
import edu.utdallas.mavs.divas.visualization.vis3D.spectator.PlayGround;
import edu.utdallas.mavs.divas.visualization.vis3D.spectator.VisualSpectator;
import edu.utdallas.mavs.divas.visualization.vis3D.vo.AgentVO;
import edu.utdallas.mavs.divas.visualization.vis3D.vo.EnvObjectVO;
import edu.utdallas.mavs.evacuation.simulation.sim.common.state.ActivatedObjectState;
import edu.utdallas.mavs.evacuation.simulation.sim.common.state.ActivatedObjectState.ActiveObjectType;
import edu.utdallas.mavs.evacuation.visualization.vis3D.appstate.EvacuationEnvironmentAppState;
import edu.utdallas.mavs.evacuation.visualization.vis3D.appstate.EvacuationSimulatingAppState;
import edu.utdallas.mavs.evacuation.visualization.vis3D.common.EvacuationInputMapping;
import edu.utdallas.mavs.evacuation.visualization.vis3D.dialog.EvacuationNiftyScreen;
import edu.utdallas.mavs.evacuation.visualization.vis3D.dialog.panel.EvacuationMenuDialog;
import edu.utdallas.mavs.evacuation.visualization.vis3D.engine.EvacuationCursorManager;

/**
 * This class describes the visualizer application for the evacuation simulation
 */
public class EvacuationApplication extends BaseApplication<EvacuationSimulatingAppState, EvacuationEnvironmentAppState>
{
    private boolean sirenMode = true;

    @Override
    protected EvacuationSimulatingAppState createSimulationAppState()
    {
        return new EvacuationSimulatingAppState();
    }

    @Override
    protected EvacuationEnvironmentAppState createEnvironmentAppState()
    {
        return new EvacuationEnvironmentAppState();
    }

    @Override
    protected CursorManager createCursorManager(AssetManager assetManager)
    {
        return new EvacuationCursorManager(assetManager);
    }

    @Override
    protected NiftyScreen<EvacuationMenuDialog, HelpDialog> createNiftyScreen()
    {
        return new EvacuationNiftyScreen();
    }

    @Override
    protected void setupCustomKeys(ActionListener divasListener)
    {
        inputManager.addMapping(EvacuationInputMapping.SIREN.getKey(), new KeyTrigger(KeyInput.KEY_F8));
        inputManager.addListener(divasListener, EvacuationInputMapping.SIREN.getKey());
    }
    
    @Override
    protected void closeNiftyWindows()
    {
        super.closeNiftyWindows();

        AgentVO<?> selectedAgent = SimulatingAppState.getContextSelectionPicker().getSelectedAgent();
        
        if(selectedAgent != null && selectedAgent.isCamModeOn())
        {
            selectedAgent.setCamMode(false);
            attachFreeCamera();
        }
    }

    @Override
    protected void updateCamera()
    {
        AgentVO<?> selectedAgent = SimulatingAppState.getContextSelectionPicker().getSelectedAgent();

        if(selectedAgent != null && selectedAgent.isCamModeOn())
        {
            getStateManager().getState(SimulatingAppState.class);
            if(selectedAgent.getState() instanceof HumanAgentState)
            {
                HumanAgentState agent = (HumanAgentState) selectedAgent.getState();
                cam.setLocation(selectedAgent.getLocalTranslation().add(0, agent.getVisionHeight(), 0));
                cam.lookAtDirection(agent.getHeading(), Vector3f.UNIT_Y);
            }
        }
    }

    @Override
    protected void onCustomKey(String name, boolean keyPressed, float tpf)
    {
        if(name.equals(EvacuationInputMapping.SIREN.getKey()) && !keyPressed)
        {
            PlayGround playGround = VisualSpectator.getPlayGround();

            if(playGround != null)
            {
                if(sirenMode)
                {
                    for(EnvObjectVO obj : playGround.getEnvObjects())
                    {
                        EnvObjectState state = obj.getState();
                        if(state instanceof ActivatedObjectState)
                        {
                            if(((ActivatedObjectState) state).getActiveObjectType().equals(ActiveObjectType.SIREN))
                            {
                                ((ActivatedObjectState) state).setOn(sirenMode);
                                Visualizer3DApplication.getInstance().getSimCommander().sendStateUpdate(state);
                            }
                        }
                    }
                    displayMessage("Turning all sirens ON");
                    sirenMode = false;
                }
                else
                {
                    for(EnvObjectVO obj : playGround.getEnvObjects())
                    {
                        EnvObjectState state = obj.getState();
                        if(state instanceof ActivatedObjectState)
                        {
                            if(((ActivatedObjectState) state).getActiveObjectType().equals(ActiveObjectType.SIREN))
                            {
                                ((ActivatedObjectState) state).setOn(sirenMode);
                                Visualizer3DApplication.getInstance().getSimCommander().sendStateUpdate(state);
                            }
                        }
                    }
                    displayMessage("Turning all sirens OFF");
                    sirenMode = true;
                }
            }
        }
    }
}