/*************************/ /***** setup_universe.c **/ /*************************/ #include "coms.h" Globals globals; FLAG movemouse = TRUE; /* view point movement by mouse */ int i; WTsensor *mouse=NULL; WTsensor *pinch; WTsensor *sensor=NULL; /* current active sensor */ WTviewpoint *uview = NULL; WTnode *ball2, *mapnode, *groupnode, *wnode; WTgeometry *wgeom; WTnode *handmodel_node; WTmotionlink *mouselink, *sensorlink, *handmodel_link; WTfont3d *d3font; WTnode *lightnode; WTp3 light_pos; WTpq initial_pq; /***********************************************************************/ /******************* setup_universe ************************************/ /***********************************************************************/ int setup_universe(int argc, char *argv[]) { float initialview[3]; /* initialize universe */ WTmessage ("\n Creating new universe\n"); WTuniverse_new( WTDISPLAY_DEFAULT, WTWINDOW_DEFAULT); WTuniverse_setbgrgb(0, 0, 255); /* get the rootnode node for later reference */ globals.rootnode = WTuniverse_getrootnodes(); /* load 3D font */ //WTmessage("Loading 3D font \n"); //font = WTfont3d_load("rcfont3d.nff"); /* Load lights from "lights" */ WTmessage("Loading lights \n"); // WTlightnode_load( globals.rootnode, "lights"); add_lights(); /* get the universe's viewpoint */ uview = WTuniverse_getviewpoints(); /* set the initial view point */ initialview[0] = 100.0; // 5.0; initialview[1] = -60.0; // -2.0; initialview[2] = -140.0; // -8.0; WTviewpoint_setposition(uview, initialview); /* store initial viewpoint */ WTviewpoint_getposition( uview, initial_pq.p); WTviewpoint_getorientation( uview, initial_pq.q); create_scenegraph(argc, argv); /* set up sensors */ setup_sensors(); WTviewpoint_addsensor(uview, sensor); /* set universe action function */ WTuniverse_setactions(actions); /* display special key functions */ display_keys(); /* prepare to read keyboard */ WTkeyboard_open(); WTmessage("Universe ready\n"); WTmessage("\n"); WTuniverse_ready(); return 0; } void setup_sensors(void) { WTmessage ("Setting up sensors\n"); /* need mouse to control arms */ mouse = WTmouse_new(); /* scale sensor speed with size of universe */ if( sensor ) WTsensor_setsensitivity( mouse, 0.01f*WTnode_getradius(globals.rootnode)); /* create motionlinks between viewpoint and mouse */ mouselink = WTmotionlink_new( mouse, WTuniverse_getviewpoints(), WTSOURCE_SENSOR, WTTARGET_VIEWPOINT); WTmessage ("Done Setting up sensors\n"); } void create_scenegraph( int argc, char *argv[]) { WTnode *t_node; WTp3 translation; globals.length = 150.0; /* add objects (floor) to the scenery */ add_objects(); WTp3_init(translation); translation[X] = globals.length/2.0; translation[Z] = globals.length/2.0; t_node = WTxformnode_new(globals.rootnode); WTnode_settranslation(t_node, translation); /* Creating the obstacles */ make_transparent_robot(); make_transparent_obstacles(); /* Create the path */ make_path(); } /* ********************** * UNIVERSE ACTIONS * ********************** */ void actions() { int key; key = WTkeyboard_getkey(); if( key ) handle_key( key); if(globals.animate_flag == TRUE && globals.i < globals.i_count-1) { animate_robot(); globals.i++; } } void open_task( WTnode *node) { } void close_task(WTnode *node) { } /* * Handle a keypress. */ void handle_key(int key) { switch ( key ) { case 'a': WTmessage("animinating\n"); globals.animate_flag = TRUE; break; case 'q': WTmessage("Terminating\n"); WTuniverse_stop(); break; default: display_keys(); WTmessage("\nEnter command..\n"); } } void display_keys(void) { WTmessage("Press: \n"); WTmessage("\t'a' - to animate.\n"); WTmessage("\t'q' - to Quit.\n"); WTmessage("\n"); } void display_usage(void) { } /* * process command line arguments (sets global flags) */ void scan_args(int argc, char *argv[]) { } void add_objects(void) { WTnode *floornode; WTgeometry *floor; WTpoly *floorpoly; WTp3 pos; WTvertex *vertex; groupnode = WTgroupnode_new(globals.rootnode); pos[Y] = 0.0; /****************************************/ /*a texture-mapped polygon for the floor*/ /****************************************/ floor = WTgeometry_begin(); floorpoly = WTgeometry_beginpoly(floor); pos[X] = -120; pos[Z] = -120; vertex = WTgeometry_newvertex(floor, pos); WTpoly_addvertexptr(floorpoly, vertex); pos[X] = 280; pos[Z] = -120; vertex = WTgeometry_newvertex(floor, pos); WTpoly_addvertexptr(floorpoly, vertex); pos[X] = 280; pos[Z] = 280; vertex = WTgeometry_newvertex(floor, pos); WTpoly_addvertexptr(floorpoly, vertex); pos[X] = -120; pos[Z] = 280; vertex = WTgeometry_newvertex(floor, pos); WTpoly_addvertexptr(floorpoly, vertex); WTpoly_close(floorpoly); WTpoly_settexture(floorpoly, "./texture/stones1.rgb", FALSE, FALSE); WTpoly_scaletexture(floorpoly, 33); WTtexture_setfilter("./texture/stones2.rgb", WTFILTER_LINEAR, WTFILTER_LINEARMIPMAPLINEAR); WTpoly_setbothsides(floorpoly, TRUE); WTgeometry_close(floor); WTgeometry_prebuild(floor); floornode = WTgeometrynode_new(groupnode, floor); WTnode_setname(floornode, "floor"); } void add_lights(void) { WTnode *lightnode, *lightnode1, *lightnode2, *lightnode3; WTp3 pos; lightnode = WTlightnode_newpoint(globals.rootnode); pos[X] = 0; pos[Y] = -10; pos[Z] = -20; WTlightnode_setposition(lightnode, pos); lightnode1 = WTlightnode_newpoint(globals.rootnode); pos[X] = 0; pos[Y] = -10; pos[Z] = 60; WTlightnode_setposition(lightnode1, pos); lightnode2 = WTlightnode_newpoint(globals.rootnode); pos[X] = -30; pos[Y] = -20; pos[Z] = 0; WTlightnode_setposition(lightnode2, pos); lightnode3 = WTlightnode_newpoint(globals.rootnode); pos[X] = 30; pos[Y] = -20; pos[Z] = 0; WTlightnode_setposition(lightnode3, pos); }