int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glEnable(GL_DEPTH_TEST); glutInitWindowPosition(100, 100); winWidth = 1300, winHeight = 800; glutInitWindowSize(winWidth, winHeight); glutCreateWindow("Traffic Simulation"); glewInit(); // Load the 3D models. trafficLight.ReadFile("Models/TrafficLight.obj"); trafficLight2.ReadFile("Models/TrafficLight.obj"); trafficLight3.ReadFile("Models/TrafficLight.obj"); trafficLight4.ReadFile("Models/TrafficLight.obj"); //cout << "\n|||||||||||\n"; car.ReadFile("Models/taxi.obj"); //cout << "\n|||||||||||\n"; surveillanceCamera.ReadFile("Models/camera.obj"); //cout << "\n|||||||||||\n"; init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutSpecialFunc(specialKey); glutTimerFunc(0, timer, updateInterval); glutMainLoop(); system("pause"); }
void keyboard(unsigned char key, int x, int y) { switch(key) { case 'r': // Add code for reset localCarSpeed.z = 0; carPosition.x = 3; carPosition.z = 45; carDirection = 180; localCarSpeed.z = 0; counter = 0; trafficLight.setSignal(NS_Signal); trafficLight2.setSignal(WE_Signal); trafficLight3.setSignal(WE_Signal); trafficLight4.setSignal(NS_Signal); worldCarSpeed = computeRotatedVector(localCarSpeed, carDirection); break; case 'b': localCarSpeed.z = 0; worldCarSpeed = computeRotatedVector(localCarSpeed, carDirection); break; case 's': ScreenShot(winHeight, winWidth); break; case 27: exit(0); break; } glutPostRedisplay(); }
int main(int argc, char *argv[]) { QApplication a(argc, argv); TrafficLight widget; widget.resize(110, 300); widget.show(); return a.exec(); }
// Update position void Car::updatePosition() { // Did we arrive to the next position? switch (mDirection) { case Tile::EAST: if (getCenterPosition().x >= mNextCheckpoint.x) { nextTile(); } break; case Tile::SOUTH: if (getCenterPosition().y >= mNextCheckpoint.y) { nextTile(); } break; case Tile::WEST: if (getCenterPosition().x <= mNextCheckpoint.x) { nextTile(); } break; case Tile::NORTH: if (getCenterPosition().y <= mNextCheckpoint.y) { nextTile(); } break; default: break; } // Traffic light check TrafficLight* light = mNextTile->getTrafficLight(); // Resetting greenlight (avoid stopping IN an intersection) if (mCurrentIntersection) { // Gone past intersection if (!mCurrentIntersection->isInside(getRect())) { mCurrentIntersection = NULL; mGreenlit = false; } } // Do not drive past a red light // (Drive if: no light, green light or not yet inside next tile) if (!light || light->getStatus(mDirection) || !mNextTile->isInside(getRect()) || mGreenlit) { // Set greenlight (avoid stopping IN an intersection) if (light && mNextTile->isInside(getRect()) && light->getStatus(mDirection)) { mCurrentIntersection = mNextTile; mGreenlit = true; } move(mDirection); } }
/** * @brief Create a GUI driven by a state machine, realtime-debug this state machine in another window */ int main(int argc, char** argv) { QApplication app(argc, argv); //! [Target setup] TrafficLight trafficLight; trafficLight.resize(110, 300); trafficLight.show(); // set up the debug interface on the local registry and connect to it // this is simpler than writing another class that handles in-process debuggging // just pay the cost for the in-process communication, it's not that much anyway QRemoteObjectRegistryHost registryHostNode(QUrl(QStringLiteral("local:registry"))); QRemoteObjectHost hostNode(QUrl(QStringLiteral("local:replica")), QUrl(QStringLiteral("local:registry"))); QsmDebugInterfaceSource interfaceSource; interfaceSource.setQStateMachine(trafficLight.machine()); hostNode.enableRemoting(interfaceSource.remoteObjectSource()); //! [Target setup] //! [Client setup for viewing the state machine] StateMachineView view; view.resize(800, 600); view.show(); QRemoteObjectNode clientNode(QUrl(QStringLiteral("local:registry"))); auto interfaceReplica = clientNode.acquire<DebugInterfaceReplica>(); interfaceReplica->waitForSource(); DebugInterfaceClient client; client.setDebugInterface(interfaceReplica); QObject::connect(&client, &DebugInterfaceClient::repopulateView, [&]() { qDebug() << "Updating state machine in view"; view.scene()->setRootState(client.machine()); view.scene()->layout(); } ); //! [Client setup for viewing the state machine] app.exec(); }
void update() { //Calculate direction speed = localCarSpeed.z / .02; if (carDirection==180) { carHeading = "N"; } else if (carDirection > 180 && carDirection < 270) { carHeading = "NW"; } else if (carDirection == 270 ) { carHeading = "W"; } else if (carDirection > 270 && carDirection < 360) { carHeading = "SW"; } else if (carDirection == 0) { carHeading = "S"; } else if (carDirection > 0 && carDirection < 90) { carHeading = "SE"; } else if (carDirection == 90 ) { carHeading = "E"; } else if (carDirection > 90 && carDirection < 180) { carHeading = "NE"; } // Light controller if (counter == 5000) { if (NS_Signal == Green) NS_Signal = Yellow; if ( WE_Signal == Green) { WE_Signal = Yellow; } trafficLight.setSignal(NS_Signal); trafficLight4.setSignal(NS_Signal); trafficLight2.setSignal(WE_Signal); trafficLight3.setSignal(WE_Signal); } // Light controller if (counter == 6000) { if (NS_Signal == Red) NS_Signal = Green; if (WE_Signal == Red) { WE_Signal = Green; } if (NS_Signal == Yellow) NS_Signal = Red; if (WE_Signal == Yellow) { WE_Signal = Red; } trafficLight.setSignal(NS_Signal); trafficLight4.setSignal(NS_Signal); trafficLight2.setSignal(WE_Signal); trafficLight3.setSignal(WE_Signal); counter = 0; } //update carposition and camera carPosition.x += worldCarSpeed.x; carPosition.y += worldCarSpeed.y; carPosition.z += worldCarSpeed.z; worldCameraOffset = computeRotatedVector(localCameraOffset, carDirection); worldCameraOffset.x += carPosition.x; worldCameraOffset.y += carPosition.y; worldCameraOffset.z += carPosition.z; }
void drawScene() {// covert speed to string string speedword = to_string(speed); string SpeedPhrase = "Speed: "; SpeedPhrase.append(speedword); string Direction = "Direction: "; Direction.append(carHeading); glColor3f(1, 0, 0); //print words glWindowPos2i((winWidth / 2) -125, winHeight - (sHeight*1.2)); printString(SpeedPhrase); glWindowPos2i((winWidth / 2) + 75, winHeight - (sHeight*1.2)); printString(Direction); // Draw terrain glCallList(terrainID); glEnable(GL_LIGHTING); trafficLight.setMaterials(); /*vector<string> test; test=trafficLight.GetMaterialNames(); for (int i = 0; i < test.size(); i++) cout << "name: " << test[i] << endl;*/ // North-East (NS_Signal) glPushMatrix(); glTranslatef(10, 0, -10.5); glScalef(1/3.28/12, 1/3.28/12, 1/3.28/12); trafficLight.setSignal(NS_Signal); trafficLight.Draw(); glPopMatrix(); glPushMatrix(); glTranslatef(10, 0, -10); glRotatef(-45, 0, 1, 0); glCallList(surveillanceCameraID); glPopMatrix(); // North-West (WE_Signal) ///board 1 //glColor3f(1, 1, 0); glPushMatrix(); board.Draw(); glPopMatrix(); // board 2 glPushMatrix(); board2.Draw(); glPopMatrix(); glPushMatrix(); glTranslatef(-10, 0, -10.5); glScalef(1 / 3.28 / 12, 1 / 3.28 / 12, 1 / 3.28 / 12); glRotatef(90, 0, 1, 0); trafficLight2.setSignal(WE_Signal); trafficLight2.Draw(); glPopMatrix(); glPushMatrix(); glTranslatef(-10, 0, -10); glRotatef(45, 0, 1, 0); glCallList(surveillanceCameraID); glPopMatrix(); // South-East (WE_Signal) glPushMatrix(); glTranslatef(10, 0, 10); glScalef(1 / 3.28 / 12, 1 / 3.28 / 12, 1 / 3.28 / 12); glRotatef(-90, 0, 1, 0); trafficLight3.setSignal(WE_Signal); trafficLight3.Draw(); glPopMatrix(); glPushMatrix(); glTranslatef(10, 0, 10.5); glRotatef(-135, 0, 1, 0); glCallList(surveillanceCameraID); glPopMatrix(); // South West(SN_Signal) glPushMatrix(); glTranslatef(-10, 0, 10); glScalef(1 / 3.28 / 12, 1 / 3.28 / 12, 1 / 3.28 / 12); glRotatef(180, 0, 1, 0); trafficLight4.setSignal(NS_Signal); trafficLight4.Draw(); glPopMatrix(); glPushMatrix(); glTranslatef(-10, 0, 10.5); glRotatef(135, 0, 1, 0); glCallList(surveillanceCameraID); glPopMatrix(); // Draw the car. glPushMatrix(); glTranslatef(carPosition.x, carPosition.y, carPosition.z); glRotatef(carDirection, 0, 1, 0); glCallList(carID); glPopMatrix(); }