From fa0c416ccad4c4278813909ca1b799cd0600840c Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Wed, 30 Jul 2014 06:38:31 +0200 Subject: [PATCH] Server: Refactor writing of field of view to Thing struct. --- src/server/field_of_view.c | 5 +++-- src/server/field_of_view.h | 4 ++-- src/server/god_commands.c | 11 +++-------- src/server/init.c | 5 ++++- src/server/thing_actions.c | 3 +-- 5 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/server/field_of_view.c b/src/server/field_of_view.c index 1a9acd5..f34885d 100644 --- a/src/server/field_of_view.c +++ b/src/server/field_of_view.c @@ -327,7 +327,7 @@ static void eval_position(uint16_t dist, uint16_t hex_i, uint8_t * fov_map, -extern uint8_t * build_fov_map(struct Thing * eye) +extern void build_fov_map(struct Thing * eye) { uint32_t map_size = world.map.length * world.map.length; uint8_t * fov_map = try_malloc(map_size, __func__); @@ -363,5 +363,6 @@ extern uint8_t * build_fov_map(struct Thing * eye) } mv_yx_in_dir_wrap(0, NULL, 1); free_angles(shadows); - return fov_map; + free(eye->fov_map); + eye->fov_map = fov_map; } diff --git a/src/server/field_of_view.h b/src/server/field_of_view.h index 85a414f..555ae63 100644 --- a/src/server/field_of_view.h +++ b/src/server/field_of_view.h @@ -19,8 +19,8 @@ enum fov_cell_states { VISIBLE = 0x01 }; -/* Return field of view map of the world as seen from the position of "eye". */ -extern uint8_t * build_fov_map(struct Thing * eye); +/* Build "eye"'s field of view. */ +extern void build_fov_map(struct Thing * eye); diff --git a/src/server/god_commands.c b/src/server/god_commands.c index b0aa86a..6eec572 100644 --- a/src/server/god_commands.c +++ b/src/server/god_commands.c @@ -239,10 +239,9 @@ static uint8_t parse_position(char* tok0, char * tok1, struct Thing * t) { t->pos.x = length; } - free(t->fov_map); if (world.exists && t->lifepoints) { - t->fov_map = build_fov_map(t); + build_fov_map(t); } } return 1; @@ -302,7 +301,7 @@ static uint8_t parse_thing_manipulation(char * tok0, char * tok1) t = add_thing(id, world.thing_types->id, 0, 0); if (world.exists && t->lifepoints) { - t->fov_map = build_fov_map(t); + build_fov_map(t); } } } @@ -371,11 +370,7 @@ static uint8_t parse_world_active(char * tok0, char * tok1) { if (ti->lifepoints) { - if (ti->fov_map) - { - free(ti->fov_map); - } - ti->fov_map = build_fov_map(ti); + build_fov_map(ti); } } world.exists = 1; diff --git a/src/server/init.c b/src/server/init.c index 01950bc..42ec699 100644 --- a/src/server/init.c +++ b/src/server/init.c @@ -215,7 +215,10 @@ extern uint8_t remake_world() struct Thing * t; for (t = world.things; NULL != t; t = t->next) { - t->fov_map = t->lifepoints ? build_fov_map(t) : NULL; + if (t->lifepoints) + { + build_fov_map(t); + } } world.turn = 1; world.do_update = 1; diff --git a/src/server/thing_actions.c b/src/server/thing_actions.c index bcf9e45..8d6a802 100644 --- a/src/server/thing_actions.c +++ b/src/server/thing_actions.c @@ -266,8 +266,7 @@ extern void actor_move(struct Thing * t) if (passable) { set_thing_position(t, target); - free(t->fov_map); - t->fov_map = build_fov_map(t); + build_fov_map(t); } if (t == get_player()) { -- 2.30.2