int main(int argc, char *argv[]) { glutInit(&argc, argv); /* use multisampling if available */ glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_MULTISAMPLE); glutCreateWindow("glutplane"); glutDisplayFunc(draw); glutKeyboardFunc(keyboard); glutVisibilityFunc(visible); glutCreateMenu(menu); glutAddMenuEntry("Add plane", ADD_PLANE); glutAddMenuEntry("Remove plane", REMOVE_PLANE); glutAddMenuEntry("Motion", MOTION_ON); glutAddMenuEntry("Quit", QUIT); glutAttachMenu(GLUT_RIGHT_BUTTON); /* setup OpenGL state */ glClearDepth(1.0); glClearColor(0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); glFrustum(-1.0, 1.0, -1.0, 1.0, 1.0, 20); glMatrixMode(GL_MODELVIEW); /* add three initial random planes */ srandom(getpid()); add_plane(); add_plane(); add_plane(); /* start event processing */ glutMainLoop(); return 0; /* ANSI C requires main to return int. */ }
void menu(int item) { switch (item) { case ADD_PLANE: add_plane(); break; case REMOVE_PLANE: remove_plane(); break; case MOTION_ON: moving = GL_TRUE; glutChangeToMenuEntry(3, "Motion off", MOTION_OFF); glutIdleFunc(animate); break; case MOTION_OFF: moving = GL_FALSE; glutChangeToMenuEntry(3, "Motion", MOTION_ON); glutIdleFunc(NULL); break; case QUIT: exit(0); break; } }
ShapeID ODEEngine::do_create_plane(float a, float b, float c, float d) { auto new_c = new_collidable(nullptr); ShapeID new_id = new_c->add_plane(a, b, c, d); shapes_[new_id] = new_c; return new_id; }
void Disjunction::tighen() { std::unique_ptr<Conjunction> s1((Conjunction *)negate()); s1->tighen(); std::unique_ptr<Disjunction> s2((Disjunction *)s1->negate()); planes.clear(); for (unsigned i = 0; i<s2->size(); i++) add_plane(s2->get(i)); }
void world::update(int dt) { m_net_data_updated = false; if (m_network) { m_network->update(); network_interface::msg_add_plane mp; while (m_network->get_add_plane_msg(mp)) add_plane(mp.preset.c_str(), mp.player_name.c_str(), mp.color, false, m_network->add_plane(mp)); network_interface::msg_add_missile mm; while (m_network->get_add_missile_msg(mm)) { auto net = m_network->get_plane(mm.plane_id); if (!net) continue; for (auto &p: m_planes) { if(p->net != net) continue; p->special_weapon_selected = mm.special; add_missile(p, m_network->add_missile(mm)); break; } } network_interface::msg_game_data md; while (m_network->get_game_data_msg(md)) { auto net = m_network->get_plane(md.plane_id); if (!net) continue; for (auto &p: m_planes) { if(p->net != net) continue; p->net_game_data = md.data; break; } m_net_data_updated = true; } std::string str; while(m_network->get_general_msg(str)) { std::istringstream is(str); std::string cmd; is >> cmd; if (cmd == "explosion") { vec3 pos; float r; read(is, pos), is >> r; spawn_explosion(pos, r, false); } if (is_host()) { if (cmd == "plane_take_damage") { unsigned int plane_id; int damage; is >> plane_id, is >> damage; auto net = m_network->get_plane(plane_id); if (!net) continue; for (auto &p: m_planes) { if(p->net != net) continue; p->take_damage(damage, *this, false); break; } } } else { if (cmd == "respawn")
main(int argc, char *argv[]) { toplevel = XtAppInitialize(&app, "Paperplane", NULL, 0, &argc, argv, fallbackResources, NULL, 0); dpy = XtDisplay(toplevel); /* find an OpenGL-capable RGB visual with depth buffer */ vi = glXChooseVisual(dpy, DefaultScreen(dpy), dblBuf); if (vi == NULL) { vi = glXChooseVisual(dpy, DefaultScreen(dpy), snglBuf); if (vi == NULL) XtAppError(app, "no RGB visual with depth buffer"); doubleBuffer = GL_FALSE; } /* create an OpenGL rendering context */ cx = glXCreateContext(dpy, vi, /* no display list sharing */ None, /* favor direct */ GL_TRUE); if (cx == NULL) XtAppError(app, "could not create rendering context"); /* create an X colormap since probably not using default visual */ #ifdef noGLwidget cmap = XCreateColormap(dpy, RootWindow(dpy, vi->screen), vi->visual, AllocNone); /* * Establish the visual, depth, and colormap of the toplevel * widget _before_ the widget is realized. */ XtVaSetValues(toplevel, XtNvisual, vi->visual, XtNdepth, vi->depth, XtNcolormap, cmap, NULL); #endif XtAddEventHandler(toplevel, StructureNotifyMask, False, map_state_changed, NULL); mainw = XmCreateMainWindow(toplevel, "mainw", NULL, 0); XtManageChild(mainw); /* create menu bar */ menubar = XmCreateMenuBar(mainw, "menubar", NULL, 0); XtManageChild(menubar); #ifdef noGLwidget /* Hack around Xt's unfortunate default visual inheritance. */ XtSetArg(menuPaneArgs[0], XmNvisual, vi->visual); menupane = XmCreatePulldownMenu(menubar, "menupane", menuPaneArgs, 1); #else menupane = XmCreatePulldownMenu(menubar, "menupane", NULL, 0); #endif btn = XmCreatePushButton(menupane, "Quit", NULL, 0); XtAddCallback(btn, XmNactivateCallback, quit, NULL); XtManageChild(btn); XtSetArg(args[0], XmNsubMenuId, menupane); cascade = XmCreateCascadeButton(menubar, "File", args, 1); XtManageChild(cascade); #ifdef noGLwidget menupane = XmCreatePulldownMenu(menubar, "menupane", menuPaneArgs, 1); #else menupane = XmCreatePulldownMenu(menubar, "menupane", NULL, 0); #endif btn = XmCreateToggleButton(menupane, "Motion", NULL, 0); XtAddCallback(btn, XmNvalueChangedCallback, (XtCallbackProc)toggle, NULL); XtManageChild(btn); btn = XmCreatePushButton(menupane, "Add plane", NULL, 0); XtAddCallback(btn, XmNactivateCallback, (XtCallbackProc)add_plane, NULL); XtManageChild(btn); btn = XmCreatePushButton(menupane, "Remove plane", NULL, 0); XtAddCallback(btn, XmNactivateCallback, (XtCallbackProc)remove_plane, NULL); XtManageChild(btn); XtSetArg(args[0], XmNsubMenuId, menupane); cascade = XmCreateCascadeButton(menubar, "Planes", args, 1); XtManageChild(cascade); /* create framed drawing area for OpenGL rendering */ frame = XmCreateFrame(mainw, "frame", NULL, 0); XtManageChild(frame); #ifdef noGLwidget glxarea = XtVaCreateManagedWidget("glxarea", xmDrawingAreaWidgetClass, frame, NULL); #else #ifdef noMotifGLwidget /* notice glwDrawingAreaWidgetClass lacks an 'M' */ glxarea = XtVaCreateManagedWidget("glxarea", glwDrawingAreaWidgetClass, #else glxarea = XtVaCreateManagedWidget("glxarea", glwMDrawingAreaWidgetClass, #endif frame, GLwNvisualInfo, vi, NULL); #endif XtAddCallback(glxarea, XmNexposeCallback, (XtCallbackProc)draw, NULL); XtAddCallback(glxarea, XmNresizeCallback, resize, NULL); XtAddCallback(glxarea, XmNinputCallback, input, NULL); /* set up application's window layout */ XmMainWindowSetAreas(mainw, menubar, NULL, NULL, NULL, frame); XtRealizeWidget(toplevel); /* * Once widget is realized (ie, associated with a created X window), we * can bind the OpenGL rendering context to the window. */ glXMakeCurrent(dpy, XtWindow(glxarea), cx); made_current = GL_TRUE; /* setup OpenGL state */ glClearDepth(1.0); glClearColor(0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); glFrustum(-1.0, 1.0, -1.0, 1.0, 1.0, 20); glMatrixMode(GL_MODELVIEW); /* add three initial random planes */ srandom(getpid()); add_plane(); add_plane(); add_plane(); add_plane(); add_plane(); /* start event processing */ toggle(); XtAppMainLoop(app); }