More rendering subsystem breakout, added a physics subsystem, everything now fires from akgl_game_update() for the user
This commit is contained in:
@@ -24,6 +24,7 @@ akerr_ErrorContext *akgl_get_json_tilemap_property(json_t *obj, char *key, char
|
||||
json_t *properties = NULL;
|
||||
json_t *property = NULL;
|
||||
akgl_String *tmpstr = NULL;
|
||||
akgl_String *typestr = NULL;
|
||||
int i = 0;
|
||||
// This is not a generic JSON helper. It assumes we are receiving an object with a 'properties' key
|
||||
// inside of it. That key is an array of objects, and each object has a name, type, and value.
|
||||
@@ -38,9 +39,9 @@ akerr_ErrorContext *akgl_get_json_tilemap_property(json_t *obj, char *key, char
|
||||
CATCH(errctx, akgl_heap_release_string(tmpstr));
|
||||
continue;
|
||||
}
|
||||
CATCH(errctx, akgl_get_json_string_value(property, "type", &tmpstr));
|
||||
if ( strcmp(tmpstr->data, type) != 0 ) {
|
||||
FAIL_BREAK(errctx, AKERR_TYPE, "Object property is present but is incorrect type");
|
||||
CATCH(errctx, akgl_get_json_string_value(property, "type", &typestr));
|
||||
if ( strcmp(typestr->data, type) != 0 ) {
|
||||
FAIL_BREAK(errctx, AKERR_TYPE, "Property %s is present but is incorrect type(expected %s got %s)", key, type, (char *)typestr->data);
|
||||
}
|
||||
*dest = property;
|
||||
SUCCEED_RETURN(errctx);
|
||||
@@ -49,13 +50,15 @@ akerr_ErrorContext *akgl_get_json_tilemap_property(json_t *obj, char *key, char
|
||||
if ( tmpstr != NULL ) {
|
||||
IGNORE(akgl_heap_release_string(tmpstr));
|
||||
}
|
||||
if ( typestr != NULL ) {
|
||||
IGNORE(akgl_heap_release_string(typestr));
|
||||
}
|
||||
} PROCESS(errctx) {
|
||||
} FINISH(errctx, true);
|
||||
|
||||
FAIL_RETURN(errctx, AKERR_KEY, "Property not found in properties map");
|
||||
}
|
||||
|
||||
|
||||
akerr_ErrorContext *akgl_get_json_properties_string(json_t *obj, char *key, akgl_String **dest)
|
||||
{
|
||||
PREPARE_ERROR(errctx);
|
||||
@@ -101,6 +104,20 @@ akerr_ErrorContext *akgl_get_json_properties_number(json_t *obj, char *key, floa
|
||||
SUCCEED_RETURN(errctx);
|
||||
}
|
||||
|
||||
akerr_ErrorContext *akgl_get_json_properties_float(json_t *obj, char *key, float *dest)
|
||||
{
|
||||
PREPARE_ERROR(errctx);
|
||||
json_t *property = NULL;
|
||||
ATTEMPT {
|
||||
CATCH(errctx, akgl_get_json_tilemap_property(obj, key, "float", &property));
|
||||
CATCH(errctx, akgl_get_json_number_value(property, "value", dest));
|
||||
} CLEANUP {
|
||||
} PROCESS(errctx) {
|
||||
} FINISH(errctx, true);
|
||||
|
||||
SUCCEED_RETURN(errctx);
|
||||
}
|
||||
|
||||
akerr_ErrorContext *akgl_tilemap_load_tilesets_each(json_t *tileset, akgl_Tilemap *dest, int tsidx, akgl_String *dirname)
|
||||
{
|
||||
PREPARE_ERROR(e);
|
||||
@@ -302,11 +319,11 @@ akerr_ErrorContext *akgl_tilemap_load_layer_objects(akgl_Tilemap *dest, json_t *
|
||||
if ( strcmp((char *)curobj->name, "p_foreground") == 0 ) {
|
||||
dest->p_foreground_y = curobj->y;
|
||||
CATCH(errctx, akgl_get_json_integer_value((json_t *)layerdatavalue, "height", &dest->p_foreground_h));
|
||||
CATCH(errctx, akgl_get_json_properties_number((json_t *)layerdatavalue, "scale", &dest->p_foreground_scale));
|
||||
CATCH(errctx, akgl_get_json_properties_float((json_t *)layerdatavalue, "scale", &dest->p_foreground_scale));
|
||||
} else if ( strcmp((char *)curobj->name, "p_vanishing") == 0 ) {
|
||||
dest->p_vanishing_y = curobj->y;
|
||||
CATCH(errctx, akgl_get_json_integer_value((json_t *)layerdatavalue, "height", &dest->p_vanishing_h));
|
||||
CATCH(errctx, akgl_get_json_properties_number((json_t *)layerdatavalue, "scale", &dest->p_vanishing_scale));
|
||||
CATCH(errctx, akgl_get_json_properties_float((json_t *)layerdatavalue, "scale", &dest->p_vanishing_scale));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user