From aa8d5029e32783fa1a56cedb4c0b8aa8e79885e4 Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Tue, 24 Dec 2019 00:23:41 +0100 Subject: [PATCH] Use self.max_map_awakeness to recude magic numbering. --- new/plomrogue/game.py | 45 +++++++++++++++++++++++----------------- new/plomrogue/mapping.py | 7 ++++--- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/new/plomrogue/game.py b/new/plomrogue/game.py index 0e1ff9a..a2421ad 100755 --- a/new/plomrogue/game.py +++ b/new/plomrogue/game.py @@ -94,6 +94,7 @@ class Game(GameBase): self.player_id = 0 self.player_is_alive = True self.maps = {} + self.max_map_awakeness = 100 self.rand = PRNGod(0) def get_string_options(self, string_option_type): @@ -208,7 +209,8 @@ class Game(GameBase): def get_map(self, map_pos): if not (map_pos in self.maps and self.maps[map_pos].size == self.map_size): - self.maps[map_pos] = Map(self.map_size) + self.maps[map_pos] = Map(self.map_size, + awakeness=self.max_map_awakeness) for pos in self.maps[map_pos]: self.maps[map_pos][pos] = '.' return self.maps[map_pos] @@ -248,32 +250,38 @@ class Game(GameBase): self.player.proceed(is_AI=False) def reality_bubble(): - import math + + def regenerate_chunk_from_map_stats(map_): + import math + max_stat = self.max_map_awakeness + for t_type in map_.stats: + stat = map_.stats[t_type] + to_create = stat['population'] // max_stat + mod_created = int(self.rand.randint(0, max_stat - 1) < + (stat['population'] % max_stat)) + to_create = (stat['population'] // max_stat) + mod_created + if to_create == 0: + continue + average_health = None + if stat['health'] > 0: + average_health = math.ceil(stat['health'] / + stat['population']) + for i in range(to_create): + t = self.add_thing_at_random(map_pos, t_type) + if average_health: + t.health = average_health + for map_pos in self.maps: m = self.maps[map_pos] if map_pos in self.player.close_maps: # Newly inside chunks are regenerated from .stats. if not m.awake: - for t_type in m.stats: - stat = m.stats[t_type] - to_create = stat['population'] // 100 - to_create = stat['population'] // 100 +\ - int(self.rand.randint(0, 99) < (stat['population'] % 100)) - if to_create == 0: - continue - average_health = None - if stat['health'] > 0: - average_health = math.ceil(stat['health'] / - stat['population']) - for i in range(to_create): - t = self.add_thing_at_random(map_pos, t_type) - if average_health: - t.health = average_health + regenerate_chunk_from_map_stats(m) # Inside chunks are set to max .awake and don't collect # stats. - m.awake = 100 + m.awake = self.max_map_awakeness m.stats = {} # Outside chunks grow distant through .awake decremention. @@ -289,7 +297,6 @@ class Game(GameBase): m.stats[t.type_]['population'] += 1 if isinstance(t, ThingAnimate): m.stats[t.type_]['health'] += t.health - if not m.awake: if not m.awake: del self.things[self.things.index(t)] diff --git a/new/plomrogue/mapping.py b/new/plomrogue/mapping.py index 3cfe022..9ae5444 100644 --- a/new/plomrogue/mapping.py +++ b/new/plomrogue/mapping.py @@ -18,11 +18,12 @@ class YX(collections.namedtuple('YX', ('y', 'x'))): class Map: - def __init__(self, size=YX(0, 0), init_char = '?', start_indented=True): + def __init__(self, size=YX(0, 0), init_char = '?', start_indented=True, + awakeness=0): self.size = size - self.terrain = init_char*self.size_i + self.terrain = init_char * self.size_i self.start_indented = start_indented - self.awake = 100 # asleep if zero + self.awake = awakeness # asleep if zero self.stats = {} def __getitem__(self, yx): -- 2.30.2