diff options
author | Ludovic Pouzenc <lpouzenc@gmail.com> | 2013-07-21 00:41:15 +0200 |
---|---|---|
committer | Ludovic Pouzenc <lpouzenc@gmail.com> | 2013-07-21 00:41:15 +0200 |
commit | bf2391843b679d8919e0a9d054d71e320b9f5afc (patch) | |
tree | f22c3ab55e71f2e0d9f0c9f2032053db10a7bea7 /src/parser.c | |
parent | 5d0b6e197f11004753484ad383d66fe0c3588857 (diff) | |
download | mplemmings-bf2391843b679d8919e0a9d054d71e320b9f5afc.tar.gz mplemmings-bf2391843b679d8919e0a9d054d71e320b9f5afc.tar.bz2 mplemmings-bf2391843b679d8919e0a9d054d71e320b9f5afc.zip |
paint_terrain, la suite. Enfait, le parsing des ficheirs ini n'est pas complet. Et il n'y a pas de message d'erreur en cas d'arret du parseur sur une erreur !
Diffstat (limited to 'src/parser.c')
-rw-r--r-- | src/parser.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/parser.c b/src/parser.c index 027d1fc..89f3c55 100644 --- a/src/parser.c +++ b/src/parser.c @@ -206,6 +206,49 @@ int callback_ini_level(const mTCHAR *section, const mTCHAR *key, const mTCHAR *v MATCH_STRING(style,MAX_NAMELEN); MATCH_STRING(name,MAX_NAMELEN); + if (SDL_strncasecmp(key,"object",6)==0 && key[6]=='_') { + return 1; + } + if (SDL_strncasecmp(key,"steel",5)==0 && key[5]=='_') { + return 1; + } + + if (SDL_strncasecmp(key,"terrain",7)==0 && key[7]=='_') { + char *wordBoundary; + int v; + int k = atoi(key+8); + if ( k<0 || k>MAX_TERRAINS_COUNT) { *err=ERR_KEY_OUT_OF_RANGE; return 0; } + if (data->terrainCount < k+1) data->terrainCount = k+1; + + if ( (wordBoundary=SDL_strchr(value,','))==NULL ) { *err=ERR_BAD_FIELDS; return 0; } + *wordBoundary='\0'; + v = atoi(value); + if ( v<0 || v>MAX_OBJECTS_COUNT) { *err=ERR_VAL_OUT_OF_RANGE; return 0; } + data->terrains[k].id = v; + value = wordBoundary+1; + + if ( (wordBoundary=SDL_strchr(value,','))==NULL ) { *err=ERR_BAD_FIELDS; return 0; } + *wordBoundary='\0'; + v = atoi(value); + if ( v<0 || v>LEVEL_WIDTH) { *err=ERR_VAL_OUT_OF_RANGE; return 0; } + data->terrains[k].xpos = v; + value = wordBoundary+1; + + if ( (wordBoundary=SDL_strchr(value,','))==NULL ) { *err=ERR_BAD_FIELDS; return 0; } + *wordBoundary='\0'; + v = atoi(value); + if ( v<0 || v>LEVEL_HEIGHT) { *err=ERR_VAL_OUT_OF_RANGE; return 0; } + data->terrains[k].ypos = v; + value = wordBoundary+1; + + v = atoi(value); + if ( v<0 || v>16) { *err=ERR_VAL_OUT_OF_RANGE; return 0; } + data->terrains[k].modifier = v; + + return 1; + } + //MATCH_INT_ARRAY_QUAD(terrain,MAX_OBJECTS_COUNT,data->terrainCount,data->terrains,id,xpos,ypos,modifier); + //MATCH_INT_ARRAY_QUAD(terrain,MAX_STEELS_COUNT,data->terrainCount,data->terrains,id,xpos,ypos,modifier); // TODO : object/terrain/steel à la main (car struct, et complications) // No match is an error (unkown key) |