X-Git-Url: https://plomlompom.com/repos/feed.xml?a=blobdiff_plain;f=src%2Fmap_objects.c;h=e825755b86a991b1b823756038d1df0a4181ec89;hb=aafa0cb49e7ec8600dad902411de6e76e111c939;hp=e69028122d694d64ea24d5ffd9724541d34ec645;hpb=fb8ddca6abc66eb7e52a007850689309b4cda938;p=plomrogue diff --git a/src/map_objects.c b/src/map_objects.c index e690281..e825755 100644 --- a/src/map_objects.c +++ b/src/map_objects.c @@ -78,9 +78,10 @@ extern void read_map_objects(struct World * world, FILE * file, char * line, char * f_name = "read_map_objects()"; struct MapObj ** mo_ptr_ptr = &world->map_objs; char * delim = " "; + struct MapObj * mo; while (try_fgets(line, linemax + 1, file, world, f_name)) { - struct MapObj * mo = malloc(sizeof(struct MapObj)); + mo = malloc(sizeof(struct MapObj)); mo->next = NULL; mo->id = atoi(strtok(line, delim)); if (mo->id > world->map_obj_count) @@ -94,31 +95,42 @@ extern void read_map_objects(struct World * world, FILE * file, char * line, * mo_ptr_ptr = mo; mo_ptr_ptr = &mo->next; } + world->last_map_obj = mo; } -extern struct MapObj ** build_map_objects(struct World * w, - struct MapObj ** mo_ptr_ptr, - uint8_t type, uint8_t n) +extern void add_map_object(struct World * world, uint8_t type) { - char * f_name = "build_map_objects()"; - uint8_t i = 0; - struct MapObjDef * mod = get_map_object_def(w, type); - while (i < n) + char * f_name = "add_map_object"; + struct MapObjDef * mod = get_map_object_def(world, type); + struct MapObj * mo = try_malloc(sizeof(struct MapObj), world, f_name); + mo->id = world->map_obj_count; + world->map_obj_count++; + mo->type = mod->id; + mo->lifepoints = mod->lifepoints; + mo->pos = find_passable_pos(world->map); + mo->next = NULL; + if (NULL == world->last_map_obj) { - struct MapObj * mo = try_malloc(sizeof(struct MapObj), w, f_name); - mo->id = w->map_obj_count; - w->map_obj_count++; - mo->type = mod->id; - mo->next = NULL; - mo->lifepoints = mod->lifepoints; - mo->pos = find_passable_pos(w->map); - i++; - * mo_ptr_ptr = mo; - mo_ptr_ptr = &mo->next; + world->map_objs = mo; + } + else + { + world->last_map_obj->next = mo; + } + world->last_map_obj = mo; +} + + + +extern void add_map_objects(struct World * world, uint8_t type, uint8_t n) +{ + uint8_t i; + for (i = 0; i < n; i++) + { + add_map_object(world, type); } - return mo_ptr_ptr; } @@ -135,6 +147,25 @@ extern void free_map_objects(struct MapObj * mo_start) +extern struct MapObj * get_player(struct World * world) +{ + struct MapObj * ptr = world->map_objs; + while (1) + { + if (NULL == ptr) + { + return ptr; + } + if (0 == ptr->id) + { + return ptr; + } + ptr = ptr->next; + } +} + + + extern struct MapObjDef * get_map_object_def(struct World * w, uint8_t id) { struct MapObjDef * mod = w->map_obj_defs;