From be9de0ec0fae496fa1af09e917157b5d9eb5ca90 Mon Sep 17 00:00:00 2001 From: erickbickler Date: Wed, 23 Jun 2021 14:07:11 -0500 Subject: [PATCH 1/3] started loot generation --- game/common/stats.py | 3 +++ game/utils/loot_generation.py | 8 ++++++++ 2 files changed, 11 insertions(+) create mode 100644 game/utils/loot_generation.py diff --git a/game/common/stats.py b/game/common/stats.py index 032f0867..c83cb3fa 100644 --- a/game/common/stats.py +++ b/game/common/stats.py @@ -77,3 +77,6 @@ class GameStats: Upgrades.gun_upgrades = 20 #Could potentially incease bullet speed? Upgrades.movement_upgrades = 20 #May be used to make the player go faster? Upgrades.sight_upgrades = 20 #Increase how far player can see? + + # Loot generation stats + density_constant = 10 # 0 < density < 1 diff --git a/game/utils/loot_generation.py b/game/utils/loot_generation.py new file mode 100644 index 00000000..f89052d4 --- /dev/null +++ b/game/utils/loot_generation.py @@ -0,0 +1,8 @@ +import random +from game.common.stats import GameStats + +def generate_chunk(level, density): + for i in range(random.randint(1, GameStats.density_constant * density)): + + # use higher level loot to try to force a winner by making it easier to kill + # take chunk density from stats and create a representation of the loot \ No newline at end of file From 11c1de6ca4b437302f80f1d4217902b24142c768 Mon Sep 17 00:00:00 2001 From: erickbickler Date: Mon, 28 Jun 2021 11:47:38 -0500 Subject: [PATCH 2/3] added property for defining which gun is considered the currently equipped one --- game/common/moving/shooter.py | 43 +++++++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/game/common/moving/shooter.py b/game/common/moving/shooter.py index 9f560ee1..7887a0a1 100644 --- a/game/common/moving/shooter.py +++ b/game/common/moving/shooter.py @@ -1,12 +1,14 @@ from copy import deepcopy from game.common.moving.moving_object import MovingObject +from game.common.items.gun import Gun from game.common.errors.inventory_full_error import InventoryFullError from game.common.stats import GameStats from game.common.enums import * class Shooter(MovingObject): + """The main player within the game logic""" def __init__(self, heading=0, speed=0, coordinates=GameStats.player_stats['starting_coordinates'][0]): super().__init__( heading, @@ -38,21 +40,23 @@ def __init__(self, heading=0, speed=0, coordinates=GameStats.player_stats['start for slot_type, slot_obj_type in self.slot_obj_types } + # set initial primary gun to be none + self.__primary_pointer = 0 + self.__primary = self.__inventory['guns'][self.__primary_pointer] + @property def inventory(self): return deepcopy(self.__inventory) - @inventory.setter - def inventory(self, value): - self.__inventory = value - def has_empty_slot(self, slot_type): + """check if there's an empty slot of a particular type in the inventory""" for slot in self.__inventory[slot_type]: if not slot: return True return False def append_inventory(self, value): + """Add object to inventory""" if not isinstance(value, tuple(slot_type[1] for slot_type in self.slot_obj_types)): raise TypeError(f"Value appended must be of type " f"{[obj_type[1] for obj_type in self.slot_obj_types]} " @@ -64,17 +68,47 @@ def append_inventory(self, value): raise InventoryFullError(f"Inventory full for type {type(value)}") def remove_from_inventory(self, obj): + """Remove object from inventory""" for slot_type in self.__inventory: # this try except block checks to make sure you're only checking the correct slot type try: self.__inventory[slot_type][self.__inventory[slot_type].index(obj)] = None except ValueError: continue + # if a gun is removed and it's the primary one, cycle to the next one + if isinstance(obj, Gun) and obj == self.primary_gun: + self.cycle_primary() return obj return None + @property + def primary_gun(self): + """Gun currently equipped""" + return self.__inventory['guns'][self.__primary_pointer] + + def cycle_primary(self): + """Cycle primary gun to the next one in the inventory""" + def cycle(): + if self.__primary_pointer >= len(self.__inventory['guns']): + self.__primary_pointer = 0 + return self.primary_gun + self.__primary_pointer += 1 + + # cycle to the next gun + cycle() + # if the next gun is None, cycle until you find one that isn't + if self.primary_gun is None: + # use a for loop here because you don't want infinite loop scenarios if they're all None + for gun in self.__inventory['guns']: + if gun is None: + cycle() + else: + break + return self.primary_gun + # set the heading and direction in a controlled way, might need to add distance attribute later def move(self, heading, speed): + """Set heading and speed to handle moving""" super().heading = heading if speed < GameStats.player_stats['move_speed']: super().speed = speed @@ -82,6 +116,7 @@ def move(self, heading, speed): raise ValueError("Speed must be less than max move speed for the player") def stop(self): + """Define stop movement""" super().speed = 0 self.moving = False From f96f19130879adf5fc79ce4e9ee1db48cc9230bd Mon Sep 17 00:00:00 2001 From: erickbickler Date: Mon, 28 Jun 2021 11:50:19 -0500 Subject: [PATCH 3/3] Revert "started loot generation" This reverts commit be9de0ec --- game/common/stats.py | 3 --- game/utils/loot_generation.py | 8 -------- 2 files changed, 11 deletions(-) delete mode 100644 game/utils/loot_generation.py diff --git a/game/common/stats.py b/game/common/stats.py index c83cb3fa..032f0867 100644 --- a/game/common/stats.py +++ b/game/common/stats.py @@ -77,6 +77,3 @@ class GameStats: Upgrades.gun_upgrades = 20 #Could potentially incease bullet speed? Upgrades.movement_upgrades = 20 #May be used to make the player go faster? Upgrades.sight_upgrades = 20 #Increase how far player can see? - - # Loot generation stats - density_constant = 10 # 0 < density < 1 diff --git a/game/utils/loot_generation.py b/game/utils/loot_generation.py deleted file mode 100644 index f89052d4..00000000 --- a/game/utils/loot_generation.py +++ /dev/null @@ -1,8 +0,0 @@ -import random -from game.common.stats import GameStats - -def generate_chunk(level, density): - for i in range(random.randint(1, GameStats.density_constant * density)): - - # use higher level loot to try to force a winner by making it easier to kill - # take chunk density from stats and create a representation of the loot \ No newline at end of file