Unify the library on an akgl_ namespace
This commit is contained in:
110
src/character.c
110
src/character.c
@@ -13,29 +13,29 @@
|
||||
#include <sdl3game/iterator.h>
|
||||
#include <sdl3game/util.h>
|
||||
|
||||
akerr_ErrorContext *character_initialize(character *obj, char *name)
|
||||
akerr_ErrorContext *akgl_character_initialize(akgl_Character *obj, char *name)
|
||||
{
|
||||
PREPARE_ERROR(errctx);
|
||||
FAIL_ZERO_RETURN(errctx, obj, AKERR_NULLPOINTER, "NULL character reference");
|
||||
FAIL_ZERO_RETURN(errctx, obj, AKERR_NULLPOINTER, "NULL akgl_Character reference");
|
||||
FAIL_ZERO_RETURN(errctx, name, AKERR_NULLPOINTER, "NULL name string pointer");
|
||||
memset(obj, 0x00, sizeof(character));
|
||||
strncpy(obj->name, name, SPRITE_MAX_CHARACTER_NAME_LENGTH);
|
||||
memset(obj, 0x00, sizeof(akgl_Character));
|
||||
strncpy(obj->name, name, AKGL_SPRITE_MAX_CHARACTER_NAME_LENGTH);
|
||||
obj->state_sprites = SDL_CreateProperties();
|
||||
FAIL_ZERO_RETURN(errctx, obj->state_sprites, AKERR_NULLPOINTER, "Unable to initialize SDL_PropertiesID for character state map");
|
||||
|
||||
obj->sprite_add = &character_sprite_add;
|
||||
obj->sprite_get = &character_sprite_get;
|
||||
obj->sprite_add = &akgl_character_sprite_add;
|
||||
obj->sprite_get = &akgl_character_sprite_get;
|
||||
|
||||
FAIL_ZERO_RETURN(
|
||||
errctx,
|
||||
SDL_SetPointerProperty(REGISTRY_CHARACTER, name, (void *)obj),
|
||||
SDL_SetPointerProperty(AKGL_REGISTRY_CHARACTER, name, (void *)obj),
|
||||
AKERR_KEY,
|
||||
"Unable to add character to registry");
|
||||
obj->refcount += 1;
|
||||
SUCCEED_RETURN(errctx);
|
||||
}
|
||||
|
||||
akerr_ErrorContext *character_sprite_add(character *basechar, sprite *ref, int state)
|
||||
akerr_ErrorContext *akgl_character_sprite_add(akgl_Character *basechar, akgl_Sprite *ref, int state)
|
||||
{
|
||||
PREPARE_ERROR(errctx);
|
||||
char stateval[32];
|
||||
@@ -49,16 +49,16 @@ akerr_ErrorContext *character_sprite_add(character *basechar, sprite *ref, int s
|
||||
SUCCEED_RETURN(errctx);
|
||||
}
|
||||
|
||||
akerr_ErrorContext *character_sprite_get(character *basechar, int state, sprite **dest)
|
||||
akerr_ErrorContext *akgl_character_sprite_get(akgl_Character *basechar, int state, akgl_Sprite **dest)
|
||||
{
|
||||
sprite *target = NULL;
|
||||
akgl_Sprite *target = NULL;
|
||||
PREPARE_ERROR(errctx);
|
||||
char stateval[32];
|
||||
FAIL_ZERO_RETURN(errctx, dest, AKERR_NULLPOINTER, "NULL pointer to sprite pointer (**dest)");
|
||||
FAIL_ZERO_RETURN(errctx, basechar, AKERR_NULLPOINTER, "NULL character reference");
|
||||
memset(&stateval, 0x00, 32);
|
||||
SDL_itoa(state, (char *)&stateval, 10);
|
||||
*dest = (sprite *)SDL_GetPointerProperty(basechar->state_sprites, (char *)&stateval, NULL);
|
||||
*dest = (akgl_Sprite *)SDL_GetPointerProperty(basechar->state_sprites, (char *)&stateval, NULL);
|
||||
FAIL_ZERO_RETURN(errctx, *dest, AKERR_KEY, "Sprite for state %d (%b) not found in the character's registry", state, state);
|
||||
target = *dest;
|
||||
//SDL_Log("Sprite state %d (%s) has character %s", state, (char *)&stateval, target->name);
|
||||
@@ -67,79 +67,79 @@ akerr_ErrorContext *character_sprite_get(character *basechar, int state, sprite
|
||||
|
||||
// SDL iterator so we can't return error information here, void only
|
||||
// this means we don't have anywhere to send exceptions up to, so if we hit an error, we log and exit(1) here
|
||||
void character_state_sprites_iterate(void *userdata, SDL_PropertiesID registry, const char *name)
|
||||
void akgl_character_state_sprites_iterate(void *userdata, SDL_PropertiesID registry, const char *name)
|
||||
{
|
||||
PREPARE_ERROR(errctx);
|
||||
sprite *spriteptr;
|
||||
iterator *opflags = (iterator *)userdata;
|
||||
akgl_Sprite *spriteptr;
|
||||
akgl_Iterator *opflags = (akgl_Iterator *)userdata;
|
||||
ATTEMPT {
|
||||
FAIL_ZERO_BREAK(errctx, opflags, AKERR_NULLPOINTER, "Character state sprite iterator received null iterator op pointer");
|
||||
FAIL_ZERO_BREAK(errctx, name, AKERR_NULLPOINTER, "Character state sprite iterator received null sprite name");
|
||||
spriteptr = (sprite *)SDL_GetPointerProperty(registry, name, NULL);
|
||||
spriteptr = (akgl_Sprite *)SDL_GetPointerProperty(registry, name, NULL);
|
||||
FAIL_ZERO_BREAK(errctx, spriteptr, AKERR_NULLPOINTER, "Character state sprite for %s not found", name);
|
||||
if ( BITMASK_HAS(opflags->flags, ITERATOR_OP_RELEASE) ) {
|
||||
CATCH(errctx, heap_release_sprite(spriteptr));
|
||||
if ( AKGL_BITMASK_HAS(opflags->flags, AKGL_ITERATOR_OP_RELEASE) ) {
|
||||
CATCH(errctx, akgl_heap_release_sprite(spriteptr));
|
||||
}
|
||||
} CLEANUP {
|
||||
} PROCESS(errctx) {
|
||||
} FINISH_NORETURN(errctx);
|
||||
}
|
||||
|
||||
static akerr_ErrorContext *character_load_json_state_int_from_strings(json_t *states, int *dest)
|
||||
static akerr_ErrorContext *akgl_character_load_json_state_int_from_strings(json_t *states, int *dest)
|
||||
{
|
||||
int i = 0;
|
||||
long newstate = 0;
|
||||
string *tmpstring = NULL;
|
||||
akgl_String *tmpstring = NULL;
|
||||
PREPARE_ERROR(errctx);
|
||||
FAIL_ZERO_RETURN(errctx, states, AKERR_NULLPOINTER, "NULL states array");
|
||||
FAIL_ZERO_RETURN(errctx, states, AKERR_NULLPOINTER, "NULL destination integer");
|
||||
|
||||
ATTEMPT {
|
||||
CATCH(errctx, heap_next_string(&tmpstring));
|
||||
CATCH(errctx, akgl_heap_next_string(&tmpstring));
|
||||
for ( i = 0; i < json_array_size((json_t *)states) ; i++ ) {
|
||||
CATCH(errctx, get_json_array_index_string(states, i, &tmpstring));
|
||||
newstate = (long)SDL_GetNumberProperty(REGISTRY_ACTOR_STATE_STRINGS, (char *)&tmpstring->data, 0);
|
||||
CATCH(errctx, akgl_get_json_array_index_string(states, i, &tmpstring));
|
||||
newstate = (long)SDL_GetNumberProperty(AKGL_AKGL_REGISTRY_ACTOR_STATE_STRINGS, (char *)&tmpstring->data, 0);
|
||||
FAIL_ZERO_BREAK(errctx, newstate, AKERR_KEY, "Unknown actor state %s", (char *)&tmpstring->data);
|
||||
*dest = (*dest | (int)(newstate));
|
||||
}
|
||||
} CLEANUP {
|
||||
IGNORE(heap_release_string(tmpstring));
|
||||
IGNORE(akgl_heap_release_string(tmpstring));
|
||||
} PROCESS(errctx) {
|
||||
} FINISH(errctx, true);
|
||||
SUCCEED_RETURN(errctx);
|
||||
}
|
||||
|
||||
static akerr_ErrorContext *character_load_json_inner(json_t *json, character *obj)
|
||||
static akerr_ErrorContext *akgl_character_load_json_inner(json_t *json, akgl_Character *obj)
|
||||
{
|
||||
PREPARE_ERROR(errctx);
|
||||
json_t *mappings = NULL;
|
||||
json_t *curmapping = NULL;
|
||||
json_t *statearray = NULL;
|
||||
sprite *spriteptr = NULL;
|
||||
akgl_Sprite *spriteptr = NULL;
|
||||
int i = 0;
|
||||
string *tmpstr = NULL;
|
||||
string *tmpstr2 = NULL;
|
||||
akgl_String *tmpstr = NULL;
|
||||
akgl_String *tmpstr2 = NULL;
|
||||
int stateval = 0;
|
||||
|
||||
ATTEMPT {
|
||||
CATCH(errctx, get_json_string_value((json_t *)json, "name", &tmpstr));
|
||||
CATCH(errctx, character_initialize((character *)obj, tmpstr->data));
|
||||
CATCH(errctx, get_json_array_value((json_t *)json, "sprite_mappings", &mappings));
|
||||
CATCH(errctx, akgl_get_json_string_value((json_t *)json, "name", &tmpstr));
|
||||
CATCH(errctx, akgl_character_initialize((akgl_Character *)obj, tmpstr->data));
|
||||
CATCH(errctx, akgl_get_json_array_value((json_t *)json, "sprite_mappings", &mappings));
|
||||
for ( i = 0; i < json_array_size((json_t *)mappings) ; i++ ) {
|
||||
stateval = 0;
|
||||
CATCH(errctx, get_json_array_index_object((json_t *)mappings, i, &curmapping));
|
||||
CATCH(errctx, get_json_string_value((json_t *)curmapping, "sprite", &tmpstr));
|
||||
spriteptr = (sprite *)SDL_GetPointerProperty(
|
||||
REGISTRY_SPRITE,
|
||||
CATCH(errctx, akgl_get_json_array_index_object((json_t *)mappings, i, &curmapping));
|
||||
CATCH(errctx, akgl_get_json_string_value((json_t *)curmapping, "sprite", &tmpstr));
|
||||
spriteptr = (akgl_Sprite *)SDL_GetPointerProperty(
|
||||
AKGL_REGISTRY_SPRITE,
|
||||
tmpstr->data,
|
||||
NULL
|
||||
);
|
||||
CATCH(errctx, get_json_string_value((json_t *)json, "name", &tmpstr2));
|
||||
CATCH(errctx, akgl_get_json_string_value((json_t *)json, "name", &tmpstr2));
|
||||
|
||||
CATCH(errctx, get_json_array_value((json_t *)curmapping, "state", &statearray));
|
||||
CATCH(errctx, character_load_json_state_int_from_strings(statearray, &stateval));
|
||||
CATCH(errctx, akgl_get_json_array_value((json_t *)curmapping, "state", &statearray));
|
||||
CATCH(errctx, akgl_character_load_json_state_int_from_strings(statearray, &stateval));
|
||||
|
||||
CATCH(errctx, get_json_string_value((json_t *)curmapping, "sprite", &tmpstr));
|
||||
CATCH(errctx, akgl_get_json_string_value((json_t *)curmapping, "sprite", &tmpstr));
|
||||
FAIL_ZERO_BREAK(
|
||||
errctx,
|
||||
spriteptr,
|
||||
@@ -149,34 +149,34 @@ static akerr_ErrorContext *character_load_json_inner(json_t *json, character *ob
|
||||
stateval,
|
||||
tmpstr->data
|
||||
);
|
||||
CATCH(errctx, character_sprite_add((character *)obj, (sprite *)spriteptr, stateval));
|
||||
CATCH(errctx, akgl_character_sprite_add((akgl_Character *)obj, (akgl_Sprite *)spriteptr, stateval));
|
||||
}
|
||||
} CLEANUP {
|
||||
if ( tmpstr != NULL ) {
|
||||
IGNORE(heap_release_string(tmpstr));
|
||||
IGNORE(akgl_heap_release_string(tmpstr));
|
||||
}
|
||||
if ( tmpstr2 != NULL ) {
|
||||
IGNORE(heap_release_string(tmpstr2));
|
||||
IGNORE(akgl_heap_release_string(tmpstr2));
|
||||
}
|
||||
} PROCESS(errctx) {
|
||||
} FINISH(errctx, true);
|
||||
SUCCEED_RETURN(errctx);
|
||||
}
|
||||
|
||||
akerr_ErrorContext *character_load_json(char *filename)
|
||||
akerr_ErrorContext *akgl_character_load_json(char *filename)
|
||||
{
|
||||
PREPARE_ERROR(errctx);
|
||||
json_t *json;
|
||||
json_error_t error;
|
||||
character *obj = NULL;
|
||||
//string *tmpstr = NULL;
|
||||
akgl_Character *obj = NULL;
|
||||
//akgl_String *tmpstr = NULL;
|
||||
|
||||
FAIL_ZERO_RETURN(errctx, filename, AKERR_NULLPOINTER, "Received null filename");
|
||||
ATTEMPT {
|
||||
CATCH(errctx, heap_next_character(&obj));
|
||||
//CATCH(errctx, heap_next_string(&tmpstr));
|
||||
//CATCH(errctx, string_initialize(tmpstr, NULL));
|
||||
//SDL_snprintf((char *)&tmpstr->data, MAX_STRING_LENGTH, "%s%s", SDL_GetBasePath(), filename);
|
||||
CATCH(errctx, akgl_heap_next_character(&obj));
|
||||
//CATCH(errctx, akgl_heap_next_string(&tmpstr));
|
||||
//CATCH(errctx, akgl_string_initialize(tmpstr, NULL));
|
||||
//SDL_snprintf((char *)&tmpstr->data, AKGL_MAX_STRING_LENGTH, "%s%s", SDL_GetBasePath(), filename);
|
||||
json = (json_t *)json_load_file(filename, 0, &error);
|
||||
FAIL_ZERO_BREAK(
|
||||
errctx,
|
||||
@@ -184,16 +184,16 @@ akerr_ErrorContext *character_load_json(char *filename)
|
||||
AKERR_NULLPOINTER,
|
||||
"Error while loading character from %s on line %d: %s", filename, error.line, error.text
|
||||
);
|
||||
CATCH(errctx, character_load_json_inner(json, obj));
|
||||
CATCH(errctx, get_json_integer_value(json, "movementspeed", (int *)&obj->movementspeed));
|
||||
obj->movementspeed = obj->movementspeed * TIME_ONESEC_MS;
|
||||
CATCH(errctx, get_json_number_value(json, "velocity_x", &obj->vx));
|
||||
CATCH(errctx, get_json_number_value(json, "velocity_y", &obj->vy));
|
||||
CATCH(errctx, akgl_character_load_json_inner(json, obj));
|
||||
CATCH(errctx, akgl_get_json_integer_value(json, "movementspeed", (int *)&obj->movementspeed));
|
||||
obj->movementspeed = obj->movementspeed * AKGL_TIME_ONESEC_MS;
|
||||
CATCH(errctx, akgl_get_json_number_value(json, "velocity_x", &obj->vx));
|
||||
CATCH(errctx, akgl_get_json_number_value(json, "velocity_y", &obj->vy));
|
||||
} CLEANUP {
|
||||
//IGNORE(heap_release_string(tmpstr));
|
||||
//IGNORE(akgl_heap_release_string(tmpstr));
|
||||
if ( errctx != NULL ) {
|
||||
if ( errctx->status != 0 ) {
|
||||
IGNORE(heap_release_character(obj));
|
||||
IGNORE(akgl_heap_release_character(obj));
|
||||
}
|
||||
}
|
||||
} PROCESS(errctx) {
|
||||
|
||||
Reference in New Issue
Block a user