diff --git a/src/graphics/sdl/config.c b/src/graphics/sdl/config.c index 90e8223..1ab1790 100644 --- a/src/graphics/sdl/config.c +++ b/src/graphics/sdl/config.c @@ -76,6 +76,7 @@ uint8_t ARC_Point_Read(ARC_Config *config, ARC_String *string, void **value){ } if(string->data[0] != '{' || string->data[string->length - 1] != '}'){ + ARC_DEBUG_LOG(arc_errno, "in ARC_Point_Read(config, string, value); no matching curly braces: %s", string->data); arc_errno = ARC_ERRNO_DATA; return 0; } @@ -108,6 +109,7 @@ uint8_t ARC_Rect_Read(ARC_Config *config, ARC_String *string, void **value){ if(string->data[0] != '{' || string->data[string->length - 1] != '}'){ arc_errno = ARC_ERRNO_DATA; + ARC_DEBUG_LOG(arc_errno, "in ARC_Rect_Read(config, string, value); no matching curly braces: %s", string->data); return 0; } @@ -208,8 +210,8 @@ void ARC_RectArray_ReadRect(ARC_Config* config, ARC_String *stripped, uint64_t i //reading in value ARC_Rect_Read(config, substr, (void **) &tempRect); if(arc_errno){ + ARC_DEBUG_LOG(arc_errno, "in ARC_RectArray_ReadRect(config, string, index, length, arrayIndex, value); failed to read rect: %s", substr->data); ARC_String_Destroy(substr); - ARC_String_Destroy(stripped); return; } @@ -218,9 +220,6 @@ void ARC_RectArray_ReadRect(ARC_Config* config, ARC_String *stripped, uint64_t i ARC_Rect_Delete(config, substr, (void *)tempRect); ARC_String_Destroy(substr); - if(arc_errno){ - return; - } } uint8_t ARC_RectArray_Read(ARC_Config* config, ARC_String *string, void **value){ @@ -231,6 +230,7 @@ uint8_t ARC_RectArray_Read(ARC_Config* config, ARC_String *string, void **value) if(string->data[0] != '{' || string->data[string->length - 1] != '}'){ arc_errno = ARC_ERRNO_DATA; + ARC_DEBUG_LOG(arc_errno, "in ARC_RectArray_Read(config, string, value); no matching curly braces: %s", string->data); return 0; } @@ -289,7 +289,7 @@ uint8_t ARC_RectArray_Read(ARC_Config* config, ARC_String *string, void **value) return 0; } - index = i; + index = i + 1; if(arraySize == *((ARC_Array *) *value)->size){ break; @@ -297,7 +297,9 @@ uint8_t ARC_RectArray_Read(ARC_Config* config, ARC_String *string, void **value) } } - ARC_RectArray_ReadRect(config, stripped, index, stripped->length - index, &arraySize, value); + if(arraySize != *((ARC_Array *) *value)->size){ + ARC_RectArray_ReadRect(config, stripped, index, stripped->length - index, &arraySize, value); + } ARC_String_Destroy(stripped); return 0; } @@ -363,7 +365,7 @@ uint8_t ARC_Spritesheet_Read(ARC_Config* config, ARC_String *string, void **valu } ARC_String *temp, *textureStr, *sizeStr; - ARC_String_CopySubstring(&temp, string, 1, split - 1); + ARC_String_CopySubstring(&temp, string, 1, split - 2); ARC_String_StripEndsWhitespace(temp, &textureStr); ARC_String_Destroy(temp); @@ -444,6 +446,16 @@ uint8_t ARC_Sprite_Read(ARC_Config* config, ARC_String *string, void **value){ ARC_String_Destroy(spritesheetStr); ARC_String_Destroy(framesStr ); + // Scale frames to match spritesheet size + // TODO: possible bug for sheets that use same frames + if(spritesheet->size){ + for(uint32_t i = 0; i < *frames->size; i++){ + ((ARC_Rect *)frames->data)[i].x *= *spritesheet->size; + ((ARC_Rect *)frames->data)[i].y *= *spritesheet->size; + ((ARC_Rect *)frames->data)[i].w *= *spritesheet->size; + ((ARC_Rect *)frames->data)[i].h *= *spritesheet->size; + } + } //sprite *value = malloc(sizeof(ARC_Sprite)); ((ARC_Sprite *) *value)->frameIndex = malloc(sizeof(uint32_t)); diff --git a/src/std/config.c b/src/std/config.c index 6a6fc10..86a7702 100644 --- a/src/std/config.c +++ b/src/std/config.c @@ -120,11 +120,12 @@ void ARC_Config_SetGroup(ARC_Config *config, ARC_String *groupname){ } void ARC_Config_Get(ARC_Config *config, ARC_String *keyname, void **value){ - ARC_ConfigTypeTemplate *temp; + ARC_ConfigTypeTemplate *temp = NULL; uint64_t length = ARC_String_FindCString(keyname, "::", 2); if(arc_errno){ //TODO: Debug info here + ARC_DEBUG_ERR("in ARC_Config_Get(config, keyname, value); length threw error"); *value = NULL; return; } @@ -140,6 +141,7 @@ void ARC_Config_Get(ARC_Config *config, ARC_String *keyname, void **value){ ARC_Hashtable *currgroup = config->currgroup; ARC_Config_SetGroup(config, group); if(arc_errno){ + ARC_DEBUG_ERR("in ARC_Config_Get(config, keyname, value); setting group threw error"); ARC_String_Destroy(group); *value = NULL; return;