| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- #include "LightProps.h"
- #include "Parser.h"
- #include "Texture.h"
- //=====================================================================================================================================
- // load =
- //=====================================================================================================================================
- bool LightProps::load( const char* filename )
- {
- Scanner scanner;
- if( !scanner.loadFile( filename ) ) return false;
- const Scanner::Token* token;
- do
- {
- token = &scanner.getNextToken();
- //** DIFFUSE_COL **
- if( token->getCode() == Scanner::TC_IDENTIFIER && !strcmp( token->getValue().getString(), "DIFFUSE_COLOR" ) )
- {
- Parser::parseArrOfNumbers<float>( scanner, true, true, 3, &diffuseCol[0] );
- }
- //** SPECULAR_COL **
- else if( token->getCode() == Scanner::TC_IDENTIFIER && !strcmp( token->getValue().getString(), "SPECULAR_COLOR" ) )
- {
- Parser::parseArrOfNumbers<float>( scanner, true, true, 3, &specularCol[0] );
- }
- //** RADIUS **
- else if( token->getCode() == Scanner::TC_IDENTIFIER && !strcmp( token->getValue().getString(), "RADIUS" ) )
- {
- token = &scanner.getNextToken();
- if( token->getCode() != Scanner::TC_NUMBER )
- {
- PARSE_ERR_EXPECTED( "number" );
- return false;
- }
- radius = (token->getDataType() == Scanner::DT_FLOAT) ? token->getValue().getFloat() : float(token->getValue().getInt());
- }
- //** CASTS_SHADOW **
- else if( token->getCode() == Scanner::TC_IDENTIFIER && !strcmp( token->getValue().getString(), "CASTS_SHADOW" ) )
- {
- token = &scanner.getNextToken();
- if( token->getCode() != Scanner::TC_NUMBER || token->getDataType() != Scanner::DT_INT )
- {
- PARSE_ERR_EXPECTED( "number" );
- return false;
- }
- castsShadow_ = token->getValue().getInt();
- }
- //** DISTANCE **
- else if( token->getCode() == Scanner::TC_IDENTIFIER && !strcmp( token->getValue().getString(), "DISTANCE" ) )
- {
- token = &scanner.getNextToken();
- if( token->getCode() != Scanner::TC_NUMBER )
- {
- PARSE_ERR_EXPECTED( "number" );
- return false;
- }
- distance = (token->getDataType() == Scanner::DT_FLOAT) ? token->getValue().getFloat() : float(token->getValue().getInt());
- }
- //** FOV_X **
- else if( token->getCode() == Scanner::TC_IDENTIFIER && !strcmp( token->getValue().getString(), "FOV_X" ) )
- {
- token = &scanner.getNextToken();
- if( token->getCode() != Scanner::TC_NUMBER )
- {
- PARSE_ERR_EXPECTED( "number" );
- return false;
- }
- fovX = (token->getDataType() == Scanner::DT_FLOAT) ? token->getValue().getFloat() : float(token->getValue().getInt());
- }
- //** FOV_Y **
- else if( token->getCode() == Scanner::TC_IDENTIFIER && !strcmp( token->getValue().getString(), "FOV_Y" ) )
- {
- token = &scanner.getNextToken();
- if( token->getCode() != Scanner::TC_NUMBER )
- {
- PARSE_ERR_EXPECTED( "number" );
- return false;
- }
- fovY = (token->getDataType() == Scanner::DT_FLOAT) ? token->getValue().getFloat() : float(token->getValue().getInt());
- }
- //** TEXTURE **
- else if( token->getCode() == Scanner::TC_IDENTIFIER && !strcmp( token->getValue().getString(), "TEXTURE" ) )
- {
- token = &scanner.getNextToken();
- if( token->getCode() != Scanner::TC_STRING )
- {
- PARSE_ERR_EXPECTED( "string" );
- return false;
- }
-
- texture = Rsrc::textures.load( token->getValue().getString() );
- texture->texParameter( GL_TEXTURE_MAX_ANISOTROPY_EXT, 0 );
- }
- // end of file
- else if( token->getCode() == Scanner::TC_EOF )
- {
- break;
- }
- // other crap
- else
- {
- PARSE_ERR_UNEXPECTED();
- return false;
- }
- }while( true );
-
- return true;
- }
- //=====================================================================================================================================
- // unload =
- //=====================================================================================================================================
- void LightProps::unload()
- {
- if( texture != NULL )
- Rsrc::textures.unload( texture );
- }
|