Merge branch 'fix-explosions' into 'master'
Fix explosions Closes #80 See merge request ynerant/squirrel-battle!79
This commit was merged in pull request #160.
	This commit is contained in:
		@@ -232,13 +232,18 @@ class Explosion(Item):
 | 
				
			|||||||
    """
 | 
					    """
 | 
				
			||||||
    When a bomb explodes, the explosion is displayed.
 | 
					    When a bomb explodes, the explosion is displayed.
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    def __init__(self, *args, **kwargs):
 | 
					    living_ticks: int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __init__(self, living_ticks: int = 2, *args, **kwargs):
 | 
				
			||||||
        super().__init__(name="explosion", *args, **kwargs)
 | 
					        super().__init__(name="explosion", *args, **kwargs)
 | 
				
			||||||
 | 
					        self.living_ticks = living_ticks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def act(self, m: Map) -> None:
 | 
					    def act(self, m: Map) -> None:
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        The bomb disappears after exploding.
 | 
					        The bomb disappears after exploding.
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
 | 
					        self.living_ticks -= 1
 | 
				
			||||||
 | 
					        if self.living_ticks <= 0:
 | 
				
			||||||
            m.remove_entity(self)
 | 
					            m.remove_entity(self)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def hold(self, player: InventoryHolder) -> None:
 | 
					    def hold(self, player: InventoryHolder) -> None:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -848,7 +848,6 @@ class InventoryHolder(Entity):
 | 
				
			|||||||
        for i in range(len(inventory)):
 | 
					        for i in range(len(inventory)):
 | 
				
			||||||
            if isinstance(inventory[i], dict):
 | 
					            if isinstance(inventory[i], dict):
 | 
				
			||||||
                inventory[i] = self.dict_to_item(inventory[i])
 | 
					                inventory[i] = self.dict_to_item(inventory[i])
 | 
				
			||||||
                inventory[i].held_by = self
 | 
					 | 
				
			||||||
        return inventory
 | 
					        return inventory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def dict_to_item(self, item_dict: dict) -> Entity:
 | 
					    def dict_to_item(self, item_dict: dict) -> Entity:
 | 
				
			||||||
@@ -859,7 +858,9 @@ class InventoryHolder(Entity):
 | 
				
			|||||||
        entity_classes = self.get_all_entity_classes_in_a_dict()
 | 
					        entity_classes = self.get_all_entity_classes_in_a_dict()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        item_class = entity_classes[item_dict["type"]]
 | 
					        item_class = entity_classes[item_dict["type"]]
 | 
				
			||||||
        return item_class(**item_dict)
 | 
					        item = item_class(**item_dict)
 | 
				
			||||||
 | 
					        item.held_by = self
 | 
				
			||||||
 | 
					        return item
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def save_state(self) -> dict:
 | 
					    def save_state(self) -> dict:
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
@@ -875,6 +876,7 @@ class InventoryHolder(Entity):
 | 
				
			|||||||
        Adds an object to the inventory.
 | 
					        Adds an object to the inventory.
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        if obj not in self.inventory:
 | 
					        if obj not in self.inventory:
 | 
				
			||||||
 | 
					            obj.held_by = self
 | 
				
			||||||
            self.inventory.append(obj)
 | 
					            self.inventory.append(obj)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def remove_from_inventory(self, obj: Any) -> None:
 | 
					    def remove_from_inventory(self, obj: Any) -> None:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -209,7 +209,8 @@ class TestEntities(unittest.TestCase):
 | 
				
			|||||||
        self.assertNotIn(explosion, self.player.inventory)
 | 
					        self.assertNotIn(explosion, self.player.inventory)
 | 
				
			||||||
        self.assertIsNone(explosion.held_by)
 | 
					        self.assertIsNone(explosion.held_by)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # The explosion disappears after one tick
 | 
					        # The explosion disappears after two ticks
 | 
				
			||||||
 | 
					        explosion.act(self.map)
 | 
				
			||||||
        explosion.act(self.map)
 | 
					        explosion.act(self.map)
 | 
				
			||||||
        self.assertNotIn(explosion, self.map.entities)
 | 
					        self.assertNotIn(explosion, self.map.entities)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -255,6 +255,7 @@ class TestGame(unittest.TestCase):
 | 
				
			|||||||
        self.game.map.add_entity(explosion)
 | 
					        self.game.map.add_entity(explosion)
 | 
				
			||||||
        self.assertIn(explosion, self.game.map.entities)
 | 
					        self.assertIn(explosion, self.game.map.entities)
 | 
				
			||||||
        self.game.handle_key_pressed(KeyValues.WAIT)
 | 
					        self.game.handle_key_pressed(KeyValues.WAIT)
 | 
				
			||||||
 | 
					        self.game.handle_key_pressed(KeyValues.WAIT)
 | 
				
			||||||
        self.assertNotIn(explosion, self.game.map.entities)
 | 
					        self.assertNotIn(explosion, self.game.map.entities)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        rabbit = Rabbit()
 | 
					        rabbit = Rabbit()
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user