Skip to content

Commit 76daf63

Browse files
committed
fixed dmg calc and multiple kill()s
1 parent 0bb3c8e commit 76daf63

File tree

5 files changed

+46
-16
lines changed

5 files changed

+46
-16
lines changed

game/base/being.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,21 @@ def __init__(self, app, scene, filename=None):
1212
super().__init__(app, scene, filename)
1313
self.solid = True
1414
self.hp = 1.0
15+
self.score = 0
16+
self.alive = True # prevent mutliple kill()
1517

16-
def hurt(self, dmg, bullet, player):
18+
def hurt(self, dmg, bullet, damager):
19+
"""
20+
Apply damage from bullet shot by damager
21+
Returns amount of damage taken (won't be more than self.hp)
22+
"""
1723
if not self.hp:
1824
return 0
19-
self.hp -= dmg
20-
if self.hp <= 0:
21-
player.score += max(int(dmg), 1)
22-
self.kill(dmg, bullet, player)
23-
return dmg
24-
return dmg
25+
dmg_taken = min(self.hp, dmg)
26+
if dmg_taken > 0:
27+
self.hp -= dmg_taken
28+
assert self.hp >= 0
29+
if self.hp == 0:
30+
self.kill(dmg_taken, bullet, damager)
31+
damager.score += max(int(dmg_taken), 1)
32+
return dmg_taken

game/base/entity.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def __init__(self, app, scene, filename=None, **kwargs):
2626
self.scene = scene
2727
self.slot = None # weakref
2828
self.slots = SlotList()
29-
self._life = kwargs.get("life")
29+
self._life = kwargs.get("life") # particle life (length of time to exist)
3030
self.on_move = Signal()
3131
self.on_remove = Signal()
3232
# self.dirty = True

game/entities/bullet.py

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,39 @@
33
from game.constants import *
44
from game.base.entity import Entity
55
from glm import vec3, normalize
6-
from game.entities.butterfly import Butterfly
6+
from game.base.enemy import Enemy
77

88

99
class Bullet(Entity):
1010
def __init__(
11-
self, app, scene, parent, position, direction, damage, img=BULLET_IMAGE_PATH
11+
self,
12+
app,
13+
scene,
14+
parent,
15+
position,
16+
direction,
17+
damage,
18+
img=BULLET_IMAGE_PATH,
19+
life=1,
20+
**kwargs
1221
):
1322

1423
velocity = normalize(direction) * BULLET_SPEED
1524
super().__init__(
16-
app, scene, BULLET_IMAGE_PATH, position=position, velocity=velocity, life=1,
25+
app,
26+
scene,
27+
BULLET_IMAGE_PATH,
28+
position=position,
29+
velocity=velocity,
30+
life=life,
31+
**kwargs
1732
)
1833
self.damage = damage
1934
self.solid = True
2035
self.size.z = 1000 # to prevent tunneling
2136
self.parent = parent # whoever shot the bullet
2237

2338
def collision(self, other, dt):
24-
if isinstance(other, Butterfly):
25-
other.hurt(self.damage, self, self.parent)
26-
self.remove()
39+
if isinstance(other, Enemy):
40+
other.hurt(self.damage, self, self.parent) # apply dmg
41+
self.remove() # remove the bullet

game/entities/butterfly.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,13 @@ def get_animation(self, color):
6464

6565
def fall(self):
6666
self.velocity = -Y * 100
67-
self.life = 2
67+
self.life = 2 # remove in 2 seconds
6868

6969
def kill(self, damage, bullet, player):
70+
71+
if not self.alive:
72+
return False
73+
7074
# Butterfly will turn gray when killed
7175
self.frames = self.get_animation(GRAY)
7276

@@ -91,6 +95,9 @@ def kill(self, damage, bullet, player):
9195
self.play_sound("butterfly.wav")
9296
self.fall()
9397

98+
self.alive = False
99+
return True
100+
94101
# def hurt(self, damage, bullet, player):
95102
# return super().hurt(damage, bullet, player)
96103

game/entities/player.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def hurt(self, damage, bullet, enemy):
6666
damage = min(self.hp, damage) # calc effective damage (not more than hp)
6767
self.hp -= damage
6868
if self.hp <= 0:
69-
self.kill(damage, bullet, enemy)
69+
self.kill(damage, bullet, enemy) # kill self
7070
# if self.hp < 3:
7171
# self.smoke_event = scene.when.every(1, self.smoke)
7272
return damage

0 commit comments

Comments
 (0)