int buttonPressed(int button) { cont_cond_t controller; cont_get_cond(maple_addr(0, 0), &controller); return !(controller.buttons & button); }
int check_start() { uint8 addr; cont_cond_t cond; addr = maple_first_controller(); if (cont_get_cond(addr, &cond) < 0) return 0; return !(cond.buttons & CONT_START); }
int main(int argc, char **argv) { cont_cond_t cond; uint8 c; /* Get basic stuff initialized */ pvr_init(¶ms); printf("nehe02 beginning\n"); glKosInit(); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,640.0f/480.0f,0.1f,100.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); c = maple_first_controller(); while(1) { /* Check key status */ if (cont_get_cond(c, &cond) < 0) { printf("Error reading controller\n"); break; } if (!(cond.buttons & CONT_START)) break; /* Begin frame */ glKosBeginFrame(); /* Draw the "scene" */ draw_gl(); /* Finish the frame */ glKosFinishFrame(); } return 0; }
int main(int argc, char **argv) { cont_cond_t cond; uint8 c; GLboolean yp = GL_FALSE; /* Initialize KOS */ pvr_init(¶ms); printf("nehe09 beginning\n"); /* Get basic stuff initialized */ glKosInit(); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,640.0f/480.0f,0.1f,100.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glEnable(GL_TEXTURE_2D); glShadeModel(GL_SMOOTH); glClearColor(0.0f, 0.0f, 0.0f, 0.5f); glClearDepth(1.0f); glBlendFunc(GL_SRC_ALPHA,GL_ONE); //glEnable(GL_BLEND); for (loop=0; loop<NUM_STARS; loop++) { star[loop].angle=0.0f; star[loop].dist=((float)(loop)/NUM_STARS)*5.0f; star[loop].r=rand()%256; star[loop].g=rand()%256; star[loop].b=rand()%256; } /* Set up the texture */ loadtxr("/rd/Star.pcx", &texture[0]); c = maple_first_controller(); while(1) { /* Check key status */ if (cont_get_cond(c, &cond) < 0) { printf("Error reading controller\n"); break; } if (!(cond.buttons & CONT_START)) break; if (!(cond.buttons & CONT_DPAD_UP)) tilt -= 0.5f; if (!(cond.buttons & CONT_DPAD_DOWN)) tilt += 0.5f; if (!(cond.buttons & CONT_A)) zoom -= 0.2f; if (!(cond.buttons & CONT_B)) zoom += 0.2f; if (!(cond.buttons & CONT_Y) && !yp) { yp = GL_TRUE; twinkle = !twinkle; } if (cond.buttons & CONT_Y) yp = GL_FALSE; /* Begin frame */ glKosBeginFrame(); /* Switch to blended polygon list */ glKosFinishList(); /* Draw the GL "scene" */ draw_gl(); /* Finish the frame */ glKosFinishFrame(); } return 0; }
int main(int argc, char **argv) { cont_cond_t cond; uint8 c; int trans = 0; GLuint texture1, texture2, texture3; /* Initialize KOS */ pvr_init(¶ms); printf("texenv beginning\n"); /* Get basic stuff initialized */ glKosInit(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glOrtho(0,640,0,480,0,-1); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glEnable(GL_TEXTURE_2D); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDepthMask(GL_FALSE); /* Set up the textures */ loadtxr("/rd/checker.pcx", &texture1); loadtxr("/rd/crate.pcx", &texture2); loadtxr_tga("/rd/kgl.tga", &texture3); c = maple_first_controller(); while(1) { /* Check key status */ if (cont_get_cond(c, &cond) < 0) { printf("Error reading controller\n"); break; } if (!(cond.buttons & CONT_START)) break; if (!(cond.buttons & CONT_A)) { /* This weird logic is to avoid bouncing back and forth before the user lets go of the button. */ if (!(trans & 0x1000)) { if (trans == 0) trans = 0x1001; else trans = 0x1000; } } else { trans &= ~0x1000; } /* Begin frame */ glKosBeginFrame(); glDisable(GL_KOS_AUTO_UV); glBindTexture(GL_TEXTURE_2D, texture1); glTexEnvi(GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_REPLACE); glColor4f(0,0,0,0); glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex3f(0,0,0); glTexCoord2f(20,0); glVertex3f(640,0,0); glTexCoord2f(20,15); glVertex3f(640,480,0); glTexCoord2f(0,15); glVertex3f(0,480,0); glEnd(); if (trans & 1) { glKosFinishList(); } /* top row, non-alpha texture */ glEnable(GL_KOS_AUTO_UV); glBindTexture(GL_TEXTURE_2D, texture2); glTexEnvi(GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_REPLACE); quad(5,250); glTexEnvi(GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_MODULATE); quad(165,250); glTexEnvi(GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_DECAL); quad(325,250); glTexEnvi(GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_MODULATEALPHA); quad(485,250); /* bottom row, alpha texture */ glBindTexture(GL_TEXTURE_2D, texture3); glTexEnvi(GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_REPLACE); quad(5,50); glTexEnvi(GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_MODULATE); quad(165,50); glTexEnvi(GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_DECAL); quad(325,50); glTexEnvi(GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_MODULATEALPHA); quad(485,50); /* Finish the frame */ glKosFinishFrame(); } return 0; }
int main(int argc, char **argv) { cont_cond_t cond; uint8 c; float r = 0.0f; float dr = 2; float z = -14.0f; GLuint texture; GLuint dummy; int trans = 0; pvr_stats_t stats; /* Initialize KOS */ /* Use this to test other video modes */ /* vid_init(DM_320x240, PM_RGB565); */ /* Normal init */ pvr_init(¶ms); printf("gltest beginning\n"); /* Get basic stuff initialized */ glKosInit(); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f, 640.0f / 480.0f, 0.1f, 100.0f); glMatrixMode(GL_MODELVIEW); glEnable(GL_TEXTURE_2D); glEnable(GL_KOS_AUTO_UV); /* Expect CW verts */ glFrontFace(GL_CW); /* Enable Transparancy */ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); /* Load a texture and make to look nice */ loadtxr("/rd/crate.pcx", &texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_FILTER, GL_FILTER_BILINEAR); glTexEnvi(GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_MODULATEALPHA); glClearColor(0.3f, 0.4f, 0.5f, 1.0f); while(1) { /* Check key status */ c = maple_first_controller(); if (c) { if (cont_get_cond(c, &cond) < 0) { printf("Error reading controller\n"); } if (!(cond.buttons & CONT_START)) break; if (!(cond.buttons & CONT_DPAD_UP)) z -= 0.1f; if (!(cond.buttons & CONT_DPAD_DOWN)) z += 0.1f; if (!(cond.buttons & CONT_DPAD_LEFT)) { /* If manual rotation is requested, then stop the automated rotation */ dr = 0.0f; r -= 2.0f; } if (!(cond.buttons & CONT_DPAD_RIGHT)) { dr = 0.0f; r += 2.0f; } if (!(cond.buttons & CONT_A)) { /* This weird logic is to avoid bouncing back and forth before the user lets go of the button. */ if (!(trans & 0x1000)) { if (trans == 0) trans = 0x1001; else trans = 0x1000; } } else { trans &= ~0x1000; } } r += dr; /* Begin frame */ glKosBeginFrame(); /* Draw four cubes */ glLoadIdentity(); glTranslatef(0.0f, 0.0f, z); glRotatef(r, 0.0f, 1.0f, 0.5f); glPushMatrix(); glTranslatef(-5.0f, 0.0f, 0.0f); cube(r); glPopMatrix(); glPushMatrix(); glTranslatef(5.0f, 0.0f, 0.0f); cube(r); /* Potentially do two as translucent */ if (trans & 1) { glKosFinishList(); glColor4f(1.0f, 1.0f, 1.0f, 0.5f); glDisable(GL_CULL_FACE); } glPopMatrix(); glPushMatrix(); glTranslatef(0.0f, 5.0f, 0.0f); cube(r); glPopMatrix(); glTranslatef(0.0f, -5.0f, 0.0f); cube(r); if (trans & 1) { glEnable(GL_CULL_FACE); } /* Finish the frame */ glKosFinishFrame(); } pvr_get_stats(&stats); printf("VBL Count: %d, last_time: %f, frame rate: %f fps\n", stats.vbl_count, stats.frame_last_time, stats.frame_rate); return 0; }
void SDL_SYS_JoystickUpdate(SDL_Joystick *joystick) { /* const int sdl_buttons[] = { CONT_C, CONT_B, CONT_A, CONT_START, CONT_Z, CONT_Y, CONT_X, CONT_D }; */ const int sdl_buttons[] = { CONT_A, CONT_B, CONT_X, CONT_Y, CONT_START, CONT_C, CONT_D, CONT_Z, }; uint8 addr; cont_cond_t cond,*prev_cond; int buttons,prev_buttons,i,changed; addr = SYS_Joystick_addr[joystick->index]; if (cont_get_cond(addr,&cond)<0) return; buttons = cond.buttons ^0xffff; prev_buttons = joystick->hwdata->prev_buttons; changed = buttons^prev_buttons; if ((changed)&(CONT_DPAD_UP|CONT_DPAD_DOWN|CONT_DPAD_LEFT|CONT_DPAD_RIGHT)) { int hat = SDL_HAT_CENTERED; if (buttons&CONT_DPAD_UP) hat|=SDL_HAT_UP; if (buttons&CONT_DPAD_DOWN) hat|=SDL_HAT_DOWN; if (buttons&CONT_DPAD_LEFT) hat|=SDL_HAT_LEFT; if (buttons&CONT_DPAD_RIGHT) hat|=SDL_HAT_RIGHT; SDL_PrivateJoystickHat(joystick, 0, hat); } if ((changed)&(CONT_DPAD2_UP|CONT_DPAD2_DOWN|CONT_DPAD2_LEFT|CONT_DPAD2_RIGHT)) { int hat = SDL_HAT_CENTERED; if (buttons&CONT_DPAD2_UP) hat|=SDL_HAT_UP; if (buttons&CONT_DPAD2_DOWN) hat|=SDL_HAT_DOWN; if (buttons&CONT_DPAD2_LEFT) hat|=SDL_HAT_LEFT; if (buttons&CONT_DPAD2_RIGHT) hat|=SDL_HAT_RIGHT; SDL_PrivateJoystickHat(joystick, 1, hat); } for(i=0;i<sizeof(sdl_buttons)/sizeof(sdl_buttons[0]);i++) { if (changed & sdl_buttons[i]) { SDL_PrivateJoystickButton(joystick, i, (buttons & sdl_buttons[i])?SDL_PRESSED:SDL_RELEASED); } } prev_cond = &joystick->hwdata->prev_cond; if (cond.joyx!=prev_cond->joyx) SDL_PrivateJoystickAxis(joystick, 0, cond.joyx-128); if (cond.joyy!=prev_cond->joyy) SDL_PrivateJoystickAxis(joystick, 1, cond.joyy-128); if (cond.rtrig!=prev_cond->rtrig) SDL_PrivateJoystickAxis(joystick, 2, cond.rtrig); if (cond.ltrig!=prev_cond->ltrig) SDL_PrivateJoystickAxis(joystick, 3, cond.ltrig); if (cond.joy2x!=prev_cond->joy2x) SDL_PrivateJoystickAxis(joystick, 4, cond.joy2x-128); if (cond.joy2y!=prev_cond->joy2y) SDL_PrivateJoystickAxis(joystick, 5, cond.joy2y-128); joystick->hwdata->prev_buttons = buttons; joystick->hwdata->prev_cond = cond; }
bool myWorld::Init(int perso) { cont_cond_t cond; uint8 c; GLboolean xp = GL_FALSE; GLboolean yp = GL_FALSE; Vehicle *vehicle; int i; int f=NEG; float d=0.0; int ft=f; int throttle=0; int brake=0; int ang=0; ogg sultan("/rd/sons/ogg/sultanTribes.ogg"); init(); //speed tabulation for(i=-NEG;i<0;i++) aSpeed[i+NEG]=-(0.24*(float)7*i/(PLUS+NEG)+2)* log((float) -10*(float)7*i/(PLUS+NEG)+1)*3.6; for(i=NEG;i<PLUS+NEG;i++) aSpeed[i]=(-0.11*(float)(7*(i-NEG))/(PLUS+NEG)+2)*5* log((float) 3*(float)7*(i-NEG)/(PLUS+NEG)+1)*3.6; /* Declaration des objets */ SkyBox *skyBox = new SkyBox(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f); Landscape *cliff = new Landscape(JPEG, "/rd/terrain.jpg", "/rd/terrain.pcx", 256.0f, 32, 1, 1, 0); Landscape *sand = new Landscape(JPEG, "/rd/circuit.jpg", "/rd/circuit.pcx", 450.0f, 30, 4, 1/3.0f, -12.0f); PalmTree *palmier = new PalmTree("/rd/palmier.png", 69.0f, (sand->getYFromXZ(69,12)) + 10, 12.0f, 20.0f, 20.0f, 20.0f); PalmTree *cactus= new PalmTree("/rd/cactus.png", 10.0f, sand->getYFromXZ(10, 30) + 10, 30.0f, 40.0f, 40.0f, 40.0f); Landscape *sea = new Landscape(NJPEG, NULL, "/rd/eau.pcx", 700.0f, 7, 4, 0.0f, 3.0f, 0.5f, 0.6f, 0.8f); TheLittleHouseOnThePrairie *house = new TheLittleHouseOnThePrairie(-170.0f, 4.5f, -140.0f, 4.0f, 4.0f, 4.0f); StartPane *startPane = new StartPane(-155.0f,sand->getYFromXZ(69,12) , 35.0f, 25.0f, 50.0f, 50.0f); Caisse *caisse1 = new Caisse("/rd/decor/caisses/caisseGrande.png", -320.0f, -5.0f, -280.0f, 15.0f, 15.0f, 15.0f); Caisse *caisse2 = new Caisse("/rd/decor/caisses/caisseCroix.png", 80.0f, 2.0f, -280.0f, 15.0f, 15.0f, 15.0f); /*Caisse *caisse3 = new Caisse("/cd/decor/caisses/explosif.png", 280.0f, 2.0f, -220.0f, 15.0f, 15.0f, 15.0f);*/ /* Character creation */ switch(perso + 2) { case 2: vehicle = new OisisVehicle(-155.0f, (sand->getYFromXZ (-155, 35)) + 1.25, 35.0f, -155.0f, (sand->getYFromXZ (-155, 34.9)) + 1.25, 34.9f, 6.25f, 2.5f, 2.5f, 1.5); break; case 3: vehicle = new MomoVehicle(-155.0f, sand->getYFromXZ (-155, 35) + 1.25, 35.0f, -155.0f, sand->getYFromXZ (-155, 34.9) + 1.25 - 0.5, 34.9f, 2.5f , 5.0f, 2.5f, 0.5); break; case 4: vehicle = new NoelVehicle(-155.0f, sand->getYFromXZ (-155, 35) + 7.5, 35.0f, -155.0f, sand->getYFromXZ (-155, 34.9) + 7.5 - 10, 34.9f, 3.25f , 15.0f, 13.0f, 10); break; default: vehicle = new NoelVehicle(-155.0f, sand->getYFromXZ (-155, 35) + 7.5, 35.0f, -155.0f, sand->getYFromXZ (-155, 34.9) + 7.5, 34.9f, 3.25f , 15.0f, 13.0f, 10); break; } sultan.play(1); //vehicle->updateSlope(sand); //Vector3D tmp1= (vehicle->getPosition()) + (Vector3D (0, 10,17.5)); /*Vector3D tmp1= (vehicle->getPosition()) + (Vector3D (0, 10 - vehicle->getOffset(), 17.5)); Vector3D tmp2= Vector3D (0,1,0); Camera cam(tmp1, vehicle->getPosition(), tmp2);*/ Vector3D tmp1= (vehicle->getPosition()) + (Vector3D (0, 10 - vehicle->getOffset(), 17.5)); Vector3D tmp3= Vector3D (0,1,0); Vector3D tmp2 = vehicle->getPosition(); tmp2.y -= vehicle->getOffset(); Camera cam(tmp1, tmp2, tmp3); palmier->shape(); cactus->setColor(0.0f, 0.6f, 0.2f); cactus->shape(); cliff->shape(); sand->shape(); sea->shape(); startPane->shape(); house->shape(); vehicle->shape(); caisse1->shape(); caisse2->shape(); /*caisse3->shape();*/ c = maple_first_controller(); bool noRotatingThisFrame = false; while(1) { noRotatingThisFrame = false; c = maple_first_controller(); ft=f; if (c == 0) continue; if (cont_get_cond(c, &cond) < 0) continue; if (!(cond.buttons & CONT_START)) { sultan.stop(); return false; } if (!(cond.buttons & CONT_DPAD_LEFT)){ if(f!=NEG){ vehicle->rotate(ROT_ANGLE, sand); cam.move(vehicle->getPosition(), vehicle->getDirection()); } } if (!(cond.buttons & CONT_DPAD_RIGHT)) { if(f!=NEG){ vehicle->rotate(-ROT_ANGLE, sand); cam.move(vehicle->getPosition(), vehicle->getDirection()); } } brake=0; if (!(cond.buttons & CONT_B)) brake=1; throttle=0; if (!(cond.buttons & CONT_A)) throttle=1; if (!(cond.buttons & CONT_B )&&!(cond.buttons & CONT_X )) screenShot(); if (!(cond.buttons & CONT_Y)) { wav klaxon ("/rd/Klaxon.wav"); klaxon.play(); } if (cond.ltrig) { noRotatingThisFrame = true; cam.rotateAroundView(2); } if (cond.rtrig) { noRotatingThisFrame = true; cam.rotateAroundView(-2); } if (!(cond.buttons & CONT_B)&&!(cond.buttons & CONT_X)&&!(cond.buttons & CONT_A)&&!(cond.buttons & CONT_Y)) { return false; } /* Begin frame */ /* Draw the GL "scene" */ Vector3D dir = vehicle->getDirection(); Vector3D dirNoY (dir.x, 0, dir.z); if (!noRotatingThisFrame) cam.updateRotation(vehicle->getPosition(), dirNoY); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glKosBeginFrame(); /* Switch to the blended polygon list if needed */ glKosFinishList(); glDepthMask(0); /*******************************************/ glLoadIdentity(); glPushMatrix(); cam.affiche(); glEnable(GL_KOS_NEARZ_CLIPPING); glPushMatrix(); glScalef(350.0f, 200.0f, 350.0f); /* Paint the Sky Box */ skyBox->shape(); glPopMatrix(); cliff->displayElement(); sea->displayElement(); glPushMatrix(); glScalef(2.0f, 2.0f, 2.0f); house->displayElement(); glPopMatrix(); palmier->displayElement(); cactus->displayElement(); /* Draw the second house on the Prairie */ glPushMatrix(); glTranslatef(200.0f, 60.0f, 200.0f); house->displayElement(); glPopMatrix(); /* Draw a second cactus */ glPushMatrix(); glTranslatef(-320.0f, sand->getYFromXZ (120, 250), -120.0f); cactus->displayElement(); glPopMatrix(); /* Draw a second palmtree */ glPushMatrix(); glTranslatef(-125.0f, sand->getYFromXZ (-125, 10), 10.0f); cactus->displayElement(); glPopMatrix(); sand->displayElement(); startPane->displayElement(); caisse1->displayElement(); caisse2->displayElement(); /*caisse3->displayElement();*/ /* Draw the vehicle */ glPushMatrix(); /* METTRE LA PENTE A LA PLACE DU PREMIER 0 */ f=PhysicalEngine::speed(f,throttle,brake,0,0); float d=PhysicalEngine::distance(ft,f)*SCALE; vehicle->moveRelatif(d,sand); cam.move(vehicle->getPosition(),vehicle->getDirection()); glTranslatef(vehicle->getPosition().x, vehicle->getPosition().y, vehicle->getPosition().z); //1st rotation, in x and z float rotatefAngle = angleBetweenVectorsWithReference (Vector3D(0,0,1), Vector3D(1,0,0), dirNoY); //convert to degrees : rotatefAngle = radToDeg (rotatefAngle); Vector3D rotateUp = cam.getUpVector(); glRotatef(rotatefAngle, rotateUp.x, rotateUp.y, rotateUp.z); //2nd rotation, in z and y Vector3D tF = vehicle->getFront(); Vector3D tPos = vehicle->getPosition(); Vector3D dir2 = tF - tPos; rotatefAngle = asin (dir2.y / dir2.Magnitude()); //convert to degrees : rotatefAngle = radToDeg (rotatefAngle); Vector3D rotateX (1,0,0); glRotatef(-rotatefAngle, rotateX.x, rotateX.y, rotateX.z); vehicle->displayElement(); glPopMatrix(); glDisable(GL_KOS_NEARZ_CLIPPING); glPopMatrix(); /* Finish the frame */ glKosFinishFrame(); } }