Exemplo n.º 1
0
void sched (Info * info) {
    //mylogfd (SCHFD, "%d\n", info->state);
//    if (!info->video_info->is_valid) return;
//    mylogfd(SCHFD, "%d %d\n", IsEdgeValid(info),  getEdgeX(info));
  //  mylogfd(SCHFD, "IsDoorSeen %d IsDoorAllSeen %d IsDoorLeft %d IsDoorRight %d IsDoorMiddle %d DoorMidX %d DoorMidY %d\n",
	//				IsDoorSeen(info), IsDoorAllSeen(info), IsDoorLeft(info), IsDoorRight(info), IsDoorMiddle(info), getDoorMidx(info), getDoorMidy(info));
    /*static int wait_edge =  -1;
    if (wait_edge >= 0) {
		wait_edge ++;
		if (wait_edge >= 5) {
			mylogfd(SCHFD, "Touch edges->Stop\n");
			do_stop(info);
			wait_edge = -1;
		}
		return;
	}*/
  // mylogfd(SCHFD, "IsDoorSeen:%d IsEdgeValid:%d IsOutSide:%d edgeX %d\n", IsDoorAllSeen(info), IsEdgeValid(info), IsOutSide(info), getEdgeX(info)); 	
   estimate_seen_state(info);
  // mylogfd(SCHFD, "IsRobotSeen %d RobotX %d RobotY %d\n", IsRobotSeen(info), getRobotX(info), getRobotY(info));
   if (info->last_cmd == CMD_FORWARD && info->state != SHOOTING && IsOutSide(info)) {
		mylogfd(SCHFD, "Outside\n");
		info->last_cmd = CMD_STOP;
		do_stop(info);
		info->state = OUTSIDE;
		return;
   }
  /* if (info->last_cmd == CMD_FORWARD && IsOutSide(info) && IsEdgeValid(info)) {
        if (getEdgeX(info) < 50 && getEdgeX(info) >= 0) {
            mylogfd(SCHFD, "Touch edges %d\n", getEdgeX(info));            
            do_stop(info);
			info->state = DONE;
            //wait_edge = 0;
            return;        
        }    
    }*/
/*   	if (info->last_cmd == CMD_FORWARD && IsRobotSeen(info)) {
       if (IsRobotAcc(info)) {
          if (getRobotY(info) < 30) {
             do_stop(info);
             info->state = SEARCH_BALL;
          } else if (getRobotY(info) < 60) {
             info->destP.x = 0;
             info->destP.y = getRobotY(info) + 50;
             info->obstacle[0].x = getRobotY(info);
             info->obstacle[0].y = - getRobotX(info);
             do_obstacle(info);
             info->state = OBSTACLE;
          }
       }
    }*/
    //mylogfd(-1, "s");
	switch (info->state) {
	case START:                           //chang in state machine -- redwalker
		start(info);
    case FIND_PLACE:
    //    find_place(info);
        break;
    case SEARCH_BALL:
		search_ball(info);
        break;
    case SEARCHING_BALL:
        searching_ball(info);
        break;
    case SEARCHING_ADJUST:
        searching_adjust(info);
        break;
    case FORWARDING_BALL:
        forwarding_ball(info);    
        break;
    case CATCHING_BALL:
        catching_ball(info);
        break;
    case BALL_CATCHED:
        ball_catched(info);        
        break;
    case SHOOT:
        shoot(info);
        break;
    case SHOOTING:
        shooting(info);  
        break;
    case MOVING:
        moving(info);
        break;
    case CHANGE_PLACE:
        change_place(info);
        break;
    case FINDING_DIR:
        finding_dir(info);
        break;
    case CHANGING_PLACE:
        changing_place(info);
        break;
    case OBSTACLE:
         obstacle(info);
         break;
    case PROTECT_DOOR:
         protect_door(info);
         break;
    case OUTSIDE:
		 if (!IsOutSide(info)) {
			mylogfd(SCHFD, "Inside restart to search_ball\n");
			info->state = SEARCH_BALL;
		 }
		 break;
	case FACE_DOOR:
		face_door(info);
		break;
    case DONE:
        break;
	case GAME:
		//game(info);
		break;
	case SHOOTED:
		shooted(info);
    default :
        break;
	}
}
Exemplo n.º 2
0
// RENDERING DEL SISTEMA SOLARE
void solarScene(void){

	

	// ogni volta che disegno incremento il numero dei frame
	g_frames++;
    
	// Do all your OpenGL rendering here
	
 	
	// cancelliamo il  buffer video e lo z buffer
	glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	/* ------------------------------------------------------------------------- */
  	// attiva il viewport principale
  	glViewport( 0, 0, width, height); 
        
    	glMatrixMode(GL_MODELVIEW); 
    	glLoadIdentity();

    	glPushMatrix();

        g_camera.look();    // chiama la gluLookAt con i parametri opportuni
    
        // posizionando la luce dopo la telecamera la luce risulta fissa nel mondo 
        glLightfv(GL_LIGHT0, GL_POSITION, g_light0_pos);
        glLightfv(GL_LIGHT1, GL_POSITION, g_light1_pos);
        glLightfv(GL_LIGHT2, GL_POSITION, g_light2_pos);
	
	glDisable(GL_CULL_FACE);
	
	// texture dello sfondo
	{
		GLUquadric* a = gluNewQuadric();
		glPushAttrib(GL_ALL_ATTRIB_BITS);
		glEnable(GL_TEXTURE_2D);
		Point3 poscam = g_camera.getPos();
		glPushMatrix();
			glTranslatef(poscam.x, poscam.y, poscam.z);
			gluQuadricOrientation(a, GLU_INSIDE);
			glBindTexture(GL_TEXTURE_2D, g_textureSfondo[0]);
			gluQuadricTexture(a, GL_TRUE);						
			gluSphere(a, 900, 24, 24);
		glPopMatrix();
		glDisable(GL_TEXTURE_2D);
		glPopAttrib();
	}
	glEnable(GL_CULL_FACE);
	
	/* PIANETI */
	drawPlanet(posPlanet[0], radius[0], g_texturePlanet[0]);	//	mercury
	drawPlanet(posPlanet[1], radius[1], g_texturePlanet[1]);	//	venus
	drawPlanet(posPlanet[2], radius[2], g_texturePlanet[2]);	//	earth
	drawPlanet(posPlanet[3], radius[3], g_texturePlanet[3]);	//	mars
	drawPlanet(posPlanet[4], radius[4], g_texturePlanet[4]);	//	jupiter
	drawPlanet(posPlanet[5], radius[5], g_texturePlanet[5]);	//	saturn
	drawPlanet(posPlanet[6], radius[6], g_texturePlanet[6]);	//	uranus
	drawPlanet(posPlanet[7], radius[7], g_texturePlanet[7]);	//	neptune
	drawPlanet(posPlanet[8], radius[8], g_texturePlanet[8]);	//	pluto


	/* SATELLITI */
	drawSatellite(&satellite[0], 'y', 0.00012, g_textureSatellite[0]);	// moon
	//drawShield(satellite[0].pos, satellite[0].rad+1);
	drawSatellite(&satellite[1], 'z', 0.00024, g_textureSatellite[1]);	// io
	drawSatellite(&satellite[2], 'y', 0.00012, g_textureSatellite[2]);	// europa
	
	/* ANELLI DI SATURNO */
	drawRing(posPlanet[5], 85, 120);				//	anello saturno

	// HENRY 
	//	gestione dei nemici: posizione, movimenti, inseguimenti
	//	FILE:		enemy_police.c
	insertEnemy();
	insertPolice();
	
	//ALBERTO
	// 	disegno di tutte le collisioni se attivate
	//	FILE		explosion.c
	insertExplosion();
		
	//ALBERTO LASER
	//	disegno di tutti i laser e controllo collisioni
	//	FILE		shooting.c
	hitEnemy=laserHitEnemy();
	hitPolice=laserHitPolice();
	insertRemoveLaser();
	// se siamo stati colpiti dal laser nemico si decrementa la vita
	shooted();
	// inseriamo il super-sparo
	insertSuperShoot();
		
    glPopMatrix();
}