Add a small bomb exploding animation, fixes #31
This commit is contained in:
		@@ -62,6 +62,7 @@ TexturePack.ASCII_PACK = TexturePack(
 | 
				
			|||||||
    BODY_SNATCH_POTION='S',
 | 
					    BODY_SNATCH_POTION='S',
 | 
				
			||||||
    BOMB='o',
 | 
					    BOMB='o',
 | 
				
			||||||
    EMPTY=' ',
 | 
					    EMPTY=' ',
 | 
				
			||||||
 | 
					    EXPLOSION='%',
 | 
				
			||||||
    FLOOR='.',
 | 
					    FLOOR='.',
 | 
				
			||||||
    HAZELNUT='¤',
 | 
					    HAZELNUT='¤',
 | 
				
			||||||
    HEART='❤',
 | 
					    HEART='❤',
 | 
				
			||||||
@@ -87,6 +88,7 @@ TexturePack.SQUIRREL_PACK = TexturePack(
 | 
				
			|||||||
    BODY_SNATCH_POTION='🔀',
 | 
					    BODY_SNATCH_POTION='🔀',
 | 
				
			||||||
    BOMB='💣',
 | 
					    BOMB='💣',
 | 
				
			||||||
    EMPTY='  ',
 | 
					    EMPTY='  ',
 | 
				
			||||||
 | 
					    EXPLOSION='💥',
 | 
				
			||||||
    FLOOR='██',
 | 
					    FLOOR='██',
 | 
				
			||||||
    HAZELNUT='🌰',
 | 
					    HAZELNUT='🌰',
 | 
				
			||||||
    HEART='💜',
 | 
					    HEART='💜',
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -158,6 +158,10 @@ class Bomb(Item):
 | 
				
			|||||||
                m.logs.add_message(log_message)
 | 
					                m.logs.add_message(log_message)
 | 
				
			||||||
                m.entities.remove(self)
 | 
					                m.entities.remove(self)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                # Add sparkles where the bomb exploded.
 | 
				
			||||||
 | 
					                explosion = Explosion(y=self.y, x=self.x)
 | 
				
			||||||
 | 
					                self.map.add_entity(explosion)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def save_state(self) -> dict:
 | 
					    def save_state(self) -> dict:
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        Saves the state of the bomb into a dictionary
 | 
					        Saves the state of the bomb into a dictionary
 | 
				
			||||||
@@ -168,6 +172,26 @@ class Bomb(Item):
 | 
				
			|||||||
        return d
 | 
					        return d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Explosion(Item):
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    When a bomb explodes, the explosion is displayed.
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    def __init__(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        super().__init__(name="explosion", *args, **kwargs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def act(self, m: Map) -> None:
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        The explosion instant dies.
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        m.remove_entity(self)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def hold(self, player: InventoryHolder) -> None:
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        The player can't hold any explosion.
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Weapon(Item):
 | 
					class Weapon(Item):
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    Non-throwable items that improve player damage
 | 
					    Non-throwable items that improve player damage
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import unittest
 | 
					import unittest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from squirrelbattle.entities.items import BodySnatchPotion, Bomb, Heart, Item
 | 
					from squirrelbattle.entities.items import BodySnatchPotion, Bomb, Heart, Item, \
 | 
				
			||||||
 | 
					    Explosion
 | 
				
			||||||
from squirrelbattle.entities.monsters import Tiger, Hedgehog, Rabbit, TeddyBear
 | 
					from squirrelbattle.entities.monsters import Tiger, Hedgehog, Rabbit, TeddyBear
 | 
				
			||||||
from squirrelbattle.entities.player import Player
 | 
					from squirrelbattle.entities.player import Player
 | 
				
			||||||
from squirrelbattle.interfaces import Entity, Map
 | 
					from squirrelbattle.interfaces import Entity, Map
 | 
				
			||||||
@@ -138,6 +139,20 @@ class TestEntities(unittest.TestCase):
 | 
				
			|||||||
        self.assertTrue(teddy_bear.dead)
 | 
					        self.assertTrue(teddy_bear.dead)
 | 
				
			||||||
        bomb_state = item.save_state()
 | 
					        bomb_state = item.save_state()
 | 
				
			||||||
        self.assertEqual(bomb_state["damage"], item.damage)
 | 
					        self.assertEqual(bomb_state["damage"], item.damage)
 | 
				
			||||||
 | 
					        explosions = self.map.find_entities(Explosion)
 | 
				
			||||||
 | 
					        self.assertTrue(explosions)
 | 
				
			||||||
 | 
					        explosion = explosions[0]
 | 
				
			||||||
 | 
					        self.assertEqual(explosion.y, item.y)
 | 
				
			||||||
 | 
					        self.assertEqual(explosion.x, item.x)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # The player can't hold the explosion
 | 
				
			||||||
 | 
					        explosion.hold(self.player)
 | 
				
			||||||
 | 
					        self.assertNotIn(explosion, self.player.inventory)
 | 
				
			||||||
 | 
					        self.assertFalse(explosion.held)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # The explosion disappears after one tick
 | 
				
			||||||
 | 
					        explosion.act(self.map)
 | 
				
			||||||
 | 
					        self.assertNotIn(explosion, self.map.entities)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_hearts(self) -> None:
 | 
					    def test_hearts(self) -> None:
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user