LightProps.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #include "LightProps.h"
  2. #include "Parser.h"
  3. #include "Texture.h"
  4. //=====================================================================================================================================
  5. // load =
  6. //=====================================================================================================================================
  7. bool LightProps::load( const char* filename )
  8. {
  9. Scanner scanner;
  10. if( !scanner.loadFile( filename ) ) return false;
  11. const Scanner::Token* token;
  12. do
  13. {
  14. token = &scanner.getNextToken();
  15. //** DIFFUSE_COL **
  16. if( token->getCode() == Scanner::TC_IDENTIFIER && !strcmp( token->getValue().getString(), "DIFFUSE_COLOR" ) )
  17. {
  18. Parser::parseArrOfNumbers<float>( scanner, true, true, 3, &diffuseCol[0] );
  19. }
  20. //** SPECULAR_COL **
  21. else if( token->getCode() == Scanner::TC_IDENTIFIER && !strcmp( token->getValue().getString(), "SPECULAR_COLOR" ) )
  22. {
  23. Parser::parseArrOfNumbers<float>( scanner, true, true, 3, &specularCol[0] );
  24. }
  25. //** RADIUS **
  26. else if( token->getCode() == Scanner::TC_IDENTIFIER && !strcmp( token->getValue().getString(), "RADIUS" ) )
  27. {
  28. token = &scanner.getNextToken();
  29. if( token->getCode() != Scanner::TC_NUMBER )
  30. {
  31. PARSE_ERR_EXPECTED( "number" );
  32. return false;
  33. }
  34. radius = (token->getDataType() == Scanner::DT_FLOAT) ? token->getValue().getFloat() : float(token->getValue().getInt());
  35. }
  36. //** CASTS_SHADOW **
  37. else if( token->getCode() == Scanner::TC_IDENTIFIER && !strcmp( token->getValue().getString(), "CASTS_SHADOW" ) )
  38. {
  39. token = &scanner.getNextToken();
  40. if( token->getCode() != Scanner::TC_NUMBER || token->getDataType() != Scanner::DT_INT )
  41. {
  42. PARSE_ERR_EXPECTED( "number" );
  43. return false;
  44. }
  45. castsShadow_ = token->getValue().getInt();
  46. }
  47. //** DISTANCE **
  48. else if( token->getCode() == Scanner::TC_IDENTIFIER && !strcmp( token->getValue().getString(), "DISTANCE" ) )
  49. {
  50. token = &scanner.getNextToken();
  51. if( token->getCode() != Scanner::TC_NUMBER )
  52. {
  53. PARSE_ERR_EXPECTED( "number" );
  54. return false;
  55. }
  56. distance = (token->getDataType() == Scanner::DT_FLOAT) ? token->getValue().getFloat() : float(token->getValue().getInt());
  57. }
  58. //** FOV_X **
  59. else if( token->getCode() == Scanner::TC_IDENTIFIER && !strcmp( token->getValue().getString(), "FOV_X" ) )
  60. {
  61. token = &scanner.getNextToken();
  62. if( token->getCode() != Scanner::TC_NUMBER )
  63. {
  64. PARSE_ERR_EXPECTED( "number" );
  65. return false;
  66. }
  67. fovX = (token->getDataType() == Scanner::DT_FLOAT) ? token->getValue().getFloat() : float(token->getValue().getInt());
  68. }
  69. //** FOV_Y **
  70. else if( token->getCode() == Scanner::TC_IDENTIFIER && !strcmp( token->getValue().getString(), "FOV_Y" ) )
  71. {
  72. token = &scanner.getNextToken();
  73. if( token->getCode() != Scanner::TC_NUMBER )
  74. {
  75. PARSE_ERR_EXPECTED( "number" );
  76. return false;
  77. }
  78. fovY = (token->getDataType() == Scanner::DT_FLOAT) ? token->getValue().getFloat() : float(token->getValue().getInt());
  79. }
  80. //** TEXTURE **
  81. else if( token->getCode() == Scanner::TC_IDENTIFIER && !strcmp( token->getValue().getString(), "TEXTURE" ) )
  82. {
  83. token = &scanner.getNextToken();
  84. if( token->getCode() != Scanner::TC_STRING )
  85. {
  86. PARSE_ERR_EXPECTED( "string" );
  87. return false;
  88. }
  89. texture = Rsrc::textures.load( token->getValue().getString() );
  90. texture->texParameter( GL_TEXTURE_MAX_ANISOTROPY_EXT, 0 );
  91. }
  92. // end of file
  93. else if( token->getCode() == Scanner::TC_EOF )
  94. {
  95. break;
  96. }
  97. // other crap
  98. else
  99. {
  100. PARSE_ERR_UNEXPECTED();
  101. return false;
  102. }
  103. }while( true );
  104. return true;
  105. }
  106. //=====================================================================================================================================
  107. // unload =
  108. //=====================================================================================================================================
  109. void LightProps::unload()
  110. {
  111. if( texture != NULL )
  112. Rsrc::textures.unload( texture );
  113. }