def test_health_pack_in_backpack_does_not_prevent_equip(self) -> None:
        dng_ctrl = make_dungeon_controller()
        fake_player_data = HumanoidData(Status(100), Inventory())
        dng_ctrl.set_player_data(fake_player_data)
        inventory = fake_player_data.inventory

        pos = Vector2(0, 0)
        pistol = build_map_object('pistol', pos)
        shotgun = build_map_object('shotgun', pos)

        inventory.attempt_pickup(pistol)
        inventory.attempt_pickup(
            shotgun)  # shotgun mod goes to slot 0 in backpack
        inventory.attempt_pickup(
            build_map_object('healthpack', pos))
        inventory.attempt_pickup(
            build_map_object('healthpack', pos))

        mock_view = Mock(spec=DungeonView)

        mock_view.selected_item = lambda: 0
        dng_ctrl._view = mock_view

        pistol_mod = pistol.mod
        shotgun_mod = shotgun.mod
        weapon_loc = pistol_mod.loc
        self.assertEqual(inventory.active_mods[weapon_loc], pistol_mod)
        dng_ctrl._equip_mod_in_backpack()
        self.assertEqual(inventory.active_mods[weapon_loc], shotgun_mod)
Example #2
0
    def test_pickup_stackable_adds_to_active_mods(self) -> None:
        player = make_player()

        player.inventory.attempt_pickup(build_map_object('rock', player.pos))

        self.assertFalse(player.inventory.backpack.slot_occupied(0))

        player.inventory.attempt_pickup(build_map_object('rock', player.pos))
        self.assertFalse(player.inventory.backpack.slot_occupied(0))
    def test_set_player_data(self) -> None:
        ctrl = make_dungeon_controller()
        player = make_player()
        pos = Vector2(0, 0)
        pistol = build_map_object('pistol', pos)
        shotgun = build_map_object('shotgun', pos)

        player.inventory.attempt_pickup(pistol)
        player.inventory.attempt_pickup(
            shotgun)  # shotgun mod goes to slot 0 in backpack
        player.status.increment_health(-10)

        ctrl.set_player_data(player.data)

        self.assertEqual(ctrl._dungeon.player.data, player.data)
Example #4
0
def make_zombie(
    player: Union[creatures.players.Player, None] = None
) -> creatures.enemies.Enemy:
    if player is None:
        player = make_player()
    pos = player.pos + pygame.math.Vector2(100, 0)
    return build_map_object('zombie', pos, player)
    def test_unequip(self) -> None:
        dng_ctrl = make_dungeon_controller()

        fake_player_data = HumanoidData(Status(100), Inventory())
        dng_ctrl.set_player_data(fake_player_data)
        inventory = fake_player_data.inventory

        pos = Vector2(0, 0)
        pistol = build_map_object('pistol', pos)

        inventory.attempt_pickup(pistol)

        # ensure nothing in backpack
        self.assertEqual(inventory.backpack._slots_filled, 0)

        # ensure one mod equiped
        arm_mod = inventory.active_mods[mods.ModLocation.ARMS]
        self.assertTrue(arm_mod is not None)

        # unequip
        inventory.unequip(mods.ModLocation.ARMS)

        # ensure something now in backpack
        self.assertEqual(inventory.backpack._slots_filled, 1)

        # ensure nothing on the arms
        self.assertNotIn(mods.ModLocation.ARMS, inventory.active_mods)
    def test_items_do_not_move_in_backpack_after_equip(self) -> None:
        player = make_player()

        pos = Vector2(0, 0)
        shotgun = build_map_object('shotgun', pos)

        inventory = player.inventory
        inventory.attempt_pickup(build_map_object('pistol', pos))
        inventory.attempt_pickup(
            shotgun)  # shotgun mod goes to slot 0 in backpack

        inventory.attempt_pickup(build_map_object('healthpack', pos))
        shotgun_2 = build_map_object('shotgun', pos)
        inventory.attempt_pickup(shotgun_2)

        self.assertIs(inventory.backpack[1], shotgun_2.mod)
        inventory.equip(shotgun.mod)
        self.assertIs(inventory.backpack[1], shotgun_2.mod)
Example #7
0
 def make_controller_and_resolutions(self) -> ControllerAndResolutions:
     continue_decision = MakeDecision('continue')
     if self._gained_item_label is not None:
         gained_item = constructors.build_map_object(
             self._gained_item_label)
     else:
         gained_item = None
     ctrl = TransitionController(self._description, continue_decision,
                                 gained_item)
     return ctrl, [continue_decision]
Example #8
0
    def test_mod_stacking_in_active_mods(self) -> None:
        player = make_player()
        pos = Vector2(0, 0)
        hp = build_map_object('healthpack', pos)

        self.assertNotIn(hp.mod.loc, player.inventory.active_mods)

        player.inventory.attempt_pickup(hp)
        player_mod = player.inventory.active_mods[hp.mod.loc]
        self.assertIs(player_mod, hp.mod)
        self.assertEqual(player_mod.ability.uses_left, 1)

        player.inventory.attempt_pickup(build_map_object('healthpack', pos))
        player_mod = player.inventory.active_mods[hp.mod.loc]
        self.assertEqual(player_mod.ability.uses_left, 2)

        player.inventory.attempt_pickup(build_map_object('healthpack', pos))
        player_mod = player.inventory.active_mods[hp.mod.loc]
        self.assertEqual(player_mod.ability.uses_left, 3)
Example #9
0
    def test_set_player_gained_item_removed_from_groups_even_if_not_picked_up(
            self) -> None:
        transition = TransitionScene('description', 'shotgun')

        player = make_player()

        while not player.inventory.backpack.is_full:
            pistol = constructors.build_map_object('pistol')
            player.inventory.attempt_pickup(pistol)

        num_items = len(self.groups.items)
        ctrl, _ = transition.make_controller_and_resolutions()
        self.assertEqual(len(self.groups.items), num_items + 1)
        ctrl.set_player_data(player.data)
        self.assertEqual(len(self.groups.items), num_items)

        shotgun = constructors.build_map_object('shotgun')
        self.assertNotIn(shotgun.mod, player.inventory.backpack)
        active_mod = player.inventory.active_mods[shotgun.mod.loc]
        self.assertNotEqual(shotgun.mod, active_mod)
Example #10
0
    def test_mod_stacking_in_backpack(self) -> None:
        player = make_player()
        pos = Vector2(0, 0)

        player.inventory.attempt_pickup(build_map_object('pistol', pos))

        self.assertFalse(player.inventory.backpack.slot_occupied(0))

        player.inventory.attempt_pickup(build_map_object('rock', pos))
        self.assertTrue(player.inventory.backpack.slot_occupied(0))
        self.assertEqual(player.inventory.backpack[0].ability.uses_left, 1)

        player.inventory.attempt_pickup(build_map_object('rock', pos))
        self.assertEqual(player.inventory.backpack[0].ability.uses_left, 2)

        player.inventory.attempt_pickup(build_map_object('rock', pos))
        self.assertEqual(player.inventory.backpack[0].ability.uses_left, 3)

        player.inventory.attempt_pickup(build_map_object('rock', pos))
        self.assertEqual(player.inventory.backpack[0].ability.uses_left, 4)
Example #11
0
    def test_pickup_several_items(self) -> None:
        player = make_player()
        pos = Vector2(0, 0)

        laser_gun = build_map_object('laser', pos)
        battery = build_map_object('battery', pos)
        pistol = build_map_object('pistol', pos)
        medpack = build_map_object('healthpack', pos)

        player.inventory.attempt_pickup(laser_gun)
        self.assertIs(laser_gun.mod,
                      player.inventory.active_mods[mods.ModLocation.ARMS])
        player.inventory.attempt_pickup(battery)
        self.assertIs(battery.mod,
                      player.inventory.active_mods[mods.ModLocation.CHEST])
        player.inventory.attempt_pickup(pistol)
        self.assertIn(pistol.mod, player.inventory.backpack)
        self.assertTrue(player.inventory.backpack.slot_occupied(0))
        player.inventory.attempt_pickup(medpack)
        self.assertIn(medpack.mod, player.inventory.backpack)
        self.assertTrue(player.inventory.backpack.slot_occupied(1))
Example #12
0
    def test_set_player_adds_gained_item(self) -> None:
        description = 'description'
        decision = MakeDecision('decision')

        rock: ItemObject = constructors.build_map_object('rock')

        player = make_player()

        self.assertNotIn(rock.mod.loc, player.inventory.active_mods)
        ctrl = TransitionController(description, decision, rock)
        self.assertNotIn(rock.mod.loc, player.inventory.active_mods)
        ctrl.set_player_data(player.data)
        self.assertIn(rock.mod.loc, player.inventory.active_mods)
Example #13
0
    def test_item_object_bob_motion(self) -> None:
        pistol_item = build_map_object('pistol', Vector2(0, 0))
        time_for_sweep = int(pistol_item._bob_period * 10)

        center = pistol_item.rect.center
        original_center_y = center[1]
        original_center_x = center[0]
        min_center_y = center[1]
        max_center_y = center[1]

        for _ in range(time_for_sweep):
            min_center_y = min(min_center_y, center[1])
            max_center_y = max(max_center_y, center[1])
            self.assertEqual(center[1], original_center_x)

        self.assertEqual(original_center_y, min_center_y)
        self.assertEqual(-original_center_y, max_center_y)
Example #14
0
 def test_build_zone(self) -> None:
     self.assertEqual(len(self.groups.zones), 0)
     build_map_object(ObjectType.ZONE, Vector2(0, 0), None, (30, 30))
     self.assertEqual(len(self.groups.zones), 1)
Example #15
0
 def test_build_obstacle(self) -> None:
     self.assertEqual(len(self.groups.walls), 0)
     build_map_object(ObjectType.WALL, Vector2(0, 0), None, (30, 30))
     self.assertEqual(len(self.groups.walls), 1)
Example #16
0
 def activate(self, humanoid: Any) -> None:
     # TODO(dvirk): I need to import locally to avoid circular import
     # errors. Is this bad?
     from data.constructors import build_map_object
     build_map_object(self.item_label, humanoid.pos)
Example #17
0
 def kill(self) -> None:
     super().kill()
     if self._data.drops_on_kill is not None:
         from data.constructors import build_map_object
         build_map_object(self._data.drops_on_kill, self.pos)
Example #18
0
def make_item(label: str) -> items.ItemObject:
    pos = Vector2(0, 0)
    return build_map_object(label, pos)