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

This class is used to create an instance of a jMonkey application customized to render 3D traffic visualization. To implement this class:

  1. Inside the package “edu.utdallas.mavs.traffic.visualization.vis3D”, create a class named “TrafficApplication” that extends the class “BaseApplication” defined in the package “edu.utdallas.mavs.divas.visualization.vis3D”.
  2. This class initializes all main components of the 3D visualizer (renderer, audio, cameras, and application states). The following code provides a full implementation of this class:
 
package edu.utdallas.mavs.traffic.visualization.vis3D;

import com.jme3.asset.AssetManager;
import com.jme3.math.Vector3f;

import edu.utdallas.mavs.divas.visualization.vis3D.BaseApplication;
import edu.utdallas.mavs.divas.visualization.vis3D.appstate.SimulatingAppState;
import edu.utdallas.mavs.divas.visualization.vis3D.engine.CursorManager;
import edu.utdallas.mavs.divas.visualization.vis3D.vo.AgentVO;
import edu.utdallas.mavs.traffic.simulation.sim.common.state.VehicleAgentState;
import edu.utdallas.mavs.traffic.visualization.vis3D.appstate.TrafficEnvironmentAppState;
import edu.utdallas.mavs.traffic.visualization.vis3D.appstate.TrafficSimulatingAppState;
import edu.utdallas.mavs.traffic.visualization.vis3D.engine.TrafficCursorManager;

/**
 * This class describes the visualizer application for the evacuation simulation
 */
public class TrafficApplication extends BaseApplication<TrafficSimulatingAppState, TrafficEnvironmentAppState>
{
    @Override
    protected TrafficSimulatingAppState createSimulationAppState()
    {
        return new TrafficSimulatingAppState();
    }

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

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

    @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 VehicleAgentState)
            {
                VehicleAgentState agent = (VehicleAgentState) selectedAgent.getState();
                cam.setLocation(selectedAgent.getLocalTranslation().add(0, agent.getVisionHeight(), 0).add(agent.getHeading().normalize().mult(.1f)));
                cam.lookAtDirection(agent.getHeading(), Vector3f.UNIT_Y);
            }
        }
    }
}