Exemple #1
0
void Player::testSkill()
{
	if ( WM->isFastestOur() )
	{
		GL_PRINT("test","fastest");
		putActionInQueue( SKILL->dribble(WM->getOppGoalLeft()));//WM->getOppGoalRight(),max_kick_force,25) );
	}
	else
	{
		GL_PRINT("test","runStrategicPos");
		putActionInQueue( SKILL->runStrategicPos() );
	}
}
Exemple #2
0
void Player::defaultPlayOn()
{
	if ( WM->isFastestOur() )
	{
		GL_PRINT("test","fastest");
		putActionInQueue( SKILL->kickBetween(WM->getOppGoalLeft(),WM->getOppGoalRight(),max_kick_force,25) );
	}
	else
	{
		GL_PRINT("test","runStrategicPos");
		putActionInQueue( SKILL->runStrategicPos() );
	}
}
Exemple #3
0
void BasicPlayer::playMatch()
{
#ifdef JOYSTICK
	if ( FM->getMyType() == PT_JOYSTICK )
	{
		joystickPlay();
	}
	else
	{
#endif
#ifdef TRAINING_MODE
		playTraining();
#else
	GL_PRINT("PlayMode","PM:%d",WM->getPlayMode() );
		switch ( WM->getPlayMode() )
        	{
        	case PM_BeforeKickOff :
				playBeforeKickOff();
            	break;

        	case PM_KickOff_Left :
        	case PM_KickOff_Right :
            	playKickOff();
            	break;

        	case PM_PlayOn :
				playPlayOn();
            	break;

        	case PM_KickIn_Left :
        	case PM_KickIn_Right :
            	playKickIn();
            	break;
		
			case PM_CORNER_KICK_LEFT:
			case PM_CORNER_KICK_RIGHT:
				playCornerKick();
				break;
		
			case PM_GOAL_KICK_LEFT:
			case PM_GOAL_KICK_RIGHT:		
				playGoalKick();
				break;

			case PM_OFFSIDE_LEFT:
			case PM_OFFSIDE_RIGHT:
				playOffsideKick();
				break;
			
        	default:
				playPlayOn();
            	break;
        	}
#endif /* TRAINING_MODE */
#ifdef JOYSTICK
	}
#endif /* JOYSTICK */
}
Exemple #4
0
void Player::goaliePlayOn()
{
		Rectangle dangerArea(WM->getOurBaseLine(),half_penalty_width,WM->getOurBaseLine()+6.0f,-half_penalty_width);

	if ( WM->isFastestOur()&&dangerArea[WM->getBallGlobalPos()] )
	{
		//if()
		GL_PRINT("goalie","fastest");
		putActionInQueue(SKILL->goalieClearBall(1));
		//putActionInQueue( SKILL->defendGoal() );
		//GL_PRINT("test","defendGoal");
	}
	else
	{
		GL_PRINT("goalie","runStrategicPos");
		putActionInQueue( SKILL->defendGoal() );
		//putActionInQueue(SKILL->clearBall());
		
	}
}
///
// Cree un shader object, charge le code source du shader et le compile
//
static GLuint LoadShader(GLenum type, const char *sourceFile)
{
	// Preload le fichier de shader
	char *shaderSrc = FileToString(sourceFile);
	if (shaderSrc == NULL) {
		return false;
	}
	
	// Cree le shader object
	GLuint shader = glCreateShader(type);
	if (shader == 0) {
		return 0;
	}

	// Load the shader source
	glShaderSource(shader, 1, (const char **)&shaderSrc, NULL);

	// Compile le shader
	glCompileShader(shader);

	// on n'a plus besoin du fichier texte
	free(shaderSrc);

	// verifie le status de la compilation
	GLint compiled;
	glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);

	if (!compiled) 
	{
		GLint infoLen = 0;

		glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLen);

		if (infoLen > 1)
		{
			char* infoLog = (char *)malloc(sizeof(char) * infoLen);

			glGetShaderInfoLog(shader, infoLen, NULL, infoLog);
			GL_PRINT("Error compiling shader:\n%s\n", infoLog);  

			free(infoLog);
		}

		// on supprime le shader object car il est inutilisable
		glDeleteShader(shader);
		
		return 0;
	}

	return shader;
}
Exemple #6
0
void Player::defenderPlayOn()
{
	Rectangle dangerArea(-20.0f,10.0f,-3.0f,-10.0f);
	Num teammateNum=4;
	if(WM->getInterceptBallPos().y()>0) teammateNum=5;	
	if ( WM->isFastestOur())
	{			
		if(dangerArea[WM->getInterceptBallPos()]||dangerArea[WM->getBallGlobalPos()])
 		{
			
				if(WM->getMyFreedom()>5)
				{
					putActionInQueue(SKILL->pass(teammateNum));	
				}
				else
				{					
					GL_PRINT("test","clearBall");
					putActionInQueue(SKILL->clearBall(teammateNum));
				}
		}
		else 
		{
			Rectangle shootArea(8.0f,9.5f,25.0f,-9.5f);
	    	if(shootArea[WM->getInterceptBallPos()]||shootArea[WM->getBallGlobalPos()])
			{
				GL_PRINT("test","shoot");
				if(WM->getMyGlobalPos().y()<-2)
				{	
					putActionInQueue(SKILL->kickTo(WM->getOppGoalRight(),100,0,20));
				}
				else if(WM->getMyGlobalPos().y()<2)
				{
					putActionInQueue(SKILL->kickTo(WM->getOppGoalCenter(),100,0,20));
				}
				else
				{
					putActionInQueue(SKILL->kickTo(WM->getOppGoalLeft(),100,0,20));
				}
			}
			else if(WM->getMyFreedom()>-0)
			{
					putActionInQueue(SKILL->dribble(Vector3f(20,0,0)));
			}
			else
			{
				/*if(WM->getTeammateGlobalPos(teammateNum).x()>10)
				{
					putActionInQueue(SKILL->directPass(teammateNum));
				}
				else
				{
					putActionInQueue(SKILL->pass(teammateNum));	
				}*/
				putActionInQueue(SKILL->pass(teammateNum));
			}
     	}
	}
	else
	{
		GL_PRINT("test","runStrategicPos");
		/*if(WM->getMyNum()==2)
		putActionInQueue(SKILL->dashTo((WM->getBallGlobalPos()+WM->getOurGoalCenter())/2));
		else*/
			putActionInQueue(SKILL->runStrategicPos());
		
	}
}
Exemple #7
0
void Player::attackerPlayOn()
{
	//defaultPlayOn();
	int teammateNum=4;
	if(WM->getMyNum()==4) {teammateNum=5;}
	Rectangle shootArea(8.0f,9.5f,25.0f,-9.5f);
	Rectangle sideArea1(13.0f,15.0f,25.0f,9.5f);
	Rectangle sideArea2(13.0f,-9.5f,25.0f,-15.0f);
	

	if(WM->isFastestOur())
		
	    if(shootArea[WM->getInterceptBallPos()]||shootArea[WM->getBallGlobalPos()])
		{
			GL_PRINT("test","shoot");
			if(WM->getMyGlobalPos().y()<0)
			{
				putActionInQueue(SKILL->kickTo(WM->getOppGoalRight(),100,0,15));
			}
			else
			{
				putActionInQueue(SKILL->kickTo(WM->getOppGoalLeft(),100,0,15));
			}
		}
		else 
			if(WM->getMyFreedom()>2.5f)
			{
				if(sideArea1[WM->getInterceptBallPos()]||sideArea2[WM->getInterceptBallPos()])
				{
					
					if(WM->getBallGlobalPos().x()<(WM->getOppBaseLine()-3))
					{
						putActionInQueue(SKILL->kickBetween(WM->getOppGoalLeft(),WM->getOppGoalRight(),100,20));
					}
					else
					{
						putActionInQueue(SKILL->kickTo((WM->getOppGoalCenter()-Vector3f(4,0,0)),60,30,10));
					}
				}
				else
				{
					//putActionInQueue(SKILL->pass(teammateNum));
					putActionInQueue(SKILL->dribble(Vector3f(20,0,0)));
				}
			}
			else if(WM->getMyFreedom()>-5)
			{
				/*if(WM->getTeammateGlobalPos(teammateNum).x()>10)
				{
					putActionInQueue(SKILL->directPass(teammateNum));
				}
				else
				{
					putActionInQueue(SKILL->pass(teammateNum));	
				}*/
				putActionInQueue(SKILL->pass(teammateNum));
				//putActionInQueue(SKILL->dribble(Vector3f(20,0,0)));
			}
			else
			{
				putActionInQueue(SKILL->clearBall(teammateNum));	
			}
     	
	else
	{
		GL_PRINT("test","runStrategicPos");
		putActionInQueue(SKILL->runStrategicPos());
	}
	//testSkill();
}
//
// Initialise les shader & program object
//
bool EsgiShader::Create()
{
	// Cree le program object
	m_ProgramObject = glCreateProgram();

	if (m_ProgramObject == 0) {
		return false;
	}

	if (m_VertexShader) {
		glAttachShader(m_ProgramObject, m_VertexShader);
	}
	if (m_FragmentShader) {
		glAttachShader(m_ProgramObject, m_FragmentShader);
	}
#ifdef GL_GEOMETRY_SHADER
	if (m_GeometryShader) {
		glAttachShader(m_ProgramObject, m_GeometryShader);
	}
#endif

	// callback permettant d'effectuer des operations avant le linkage
	if (m_PreLinkCallback) {
		m_PreLinkCallback();
	}

	// Liage des shaders dans le programme
	glLinkProgram(m_ProgramObject);

	GLint linked = 0;
	GLint infoLen = 0;

	// verification du statut du linkage
	glGetProgramiv(m_ProgramObject, GL_LINK_STATUS, &linked);

	if (!linked) 
	{
		glGetProgramiv(m_ProgramObject, GL_INFO_LOG_LENGTH, &infoLen);

		if (infoLen > 1)
		{
			char* infoLog = (char *)malloc(sizeof(char) * infoLen);

			glGetProgramInfoLog(m_ProgramObject, infoLen, NULL, infoLog);
			GL_PRINT("Erreur de lien du programme:\n%s\n", infoLog);                     

			free(infoLog);
		}

		glDeleteProgram(m_ProgramObject);

		return false;
	}

#if defined(_DEBUG)	|| defined(DEBUG)
	// ne pas utiliser glValidateProgram() au runtime.
	// techniquement il faudrait appeler glValidateProgram() dans le contexte
	// d'utilisation du shader et non a sa creation pour verifier que toutes les 
	// conditions d'execution sont bien remplies
	glValidateProgram(m_ProgramObject);
	glGetProgramiv(m_ProgramObject, GL_INFO_LOG_LENGTH, &infoLen);
	if (infoLen > 1)
	{
		char* infoLog = (char *)malloc(sizeof(char) * infoLen);

		glGetProgramInfoLog(m_ProgramObject, infoLen, NULL, infoLog);
		GL_PRINT("Resultat de la validation du programme:\n%s\n", infoLog);                     

		free(infoLog);
	}
#endif

	return true;
}