Add a small bomb exploding animation, fixes #31
This commit is contained in:
parent
1986630da1
commit
8608ce346f
@ -62,6 +62,7 @@ TexturePack.ASCII_PACK = TexturePack(
|
||||
BODY_SNATCH_POTION='S',
|
||||
BOMB='o',
|
||||
EMPTY=' ',
|
||||
EXPLOSION='%',
|
||||
FLOOR='.',
|
||||
HAZELNUT='¤',
|
||||
HEART='❤',
|
||||
@ -87,6 +88,7 @@ TexturePack.SQUIRREL_PACK = TexturePack(
|
||||
BODY_SNATCH_POTION='🔀',
|
||||
BOMB='💣',
|
||||
EMPTY=' ',
|
||||
EXPLOSION='💥',
|
||||
FLOOR='██',
|
||||
HAZELNUT='🌰',
|
||||
HEART='💜',
|
||||
|
@ -158,6 +158,10 @@ class Bomb(Item):
|
||||
m.logs.add_message(log_message)
|
||||
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:
|
||||
"""
|
||||
Saves the state of the bomb into a dictionary
|
||||
@ -168,6 +172,26 @@ class Bomb(Item):
|
||||
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):
|
||||
"""
|
||||
Non-throwable items that improve player damage
|
||||
|
@ -3,7 +3,8 @@
|
||||
|
||||
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.player import Player
|
||||
from squirrelbattle.interfaces import Entity, Map
|
||||
@ -138,6 +139,20 @@ class TestEntities(unittest.TestCase):
|
||||
self.assertTrue(teddy_bear.dead)
|
||||
bomb_state = item.save_state()
|
||||
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:
|
||||
"""
|
||||
|
Loading…
Reference in New Issue
Block a user