projects
/
tabakrolletjie.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
made mould more mouldy; probably need to fix collision detection now
[tabakrolletjie.git]
/
tabakrolletjie
/
enemies.py
diff --git
a/tabakrolletjie/enemies.py
b/tabakrolletjie/enemies.py
index f668f1afe0f50fbf19a6655fd7a2bf3754af6816..7ed6cf9f7355b63a9edb013efb9ecc19266e35e9 100644
(file)
--- a/
tabakrolletjie/enemies.py
+++ b/
tabakrolletjie/enemies.py
@@
-30,6
+30,7
@@
class Mould(pymunk.Body):
self._resistances = {}
self._age = 0
self._img = None
self._resistances = {}
self._age = 0
self._img = None
+ self._health = 500
def pygame_pos(self, surface):
"""Convert to pygame coordinates and offset position so
def pygame_pos(self, surface):
"""Convert to pygame coordinates and offset position so
@@
-42,13
+43,19
@@
class Mould(pymunk.Body):
if not self._img:
name = random.choice(
('mouldA.png', 'mouldB.png', 'mouldC.png'))
if not self._img:
name = random.choice(
('mouldA.png', 'mouldB.png', 'mouldC.png'))
- self._img = loader.load_image("32", name)
+ size = "16" if self._age < 10 else "32" if self._age < 20 else "64"
+ self._img = loader.load_image(size, name)
return self._img
def tick(self, gamestate, space, moulds):
"""Grow and / or Die"""
return self._img
def tick(self, gamestate, space, moulds):
"""Grow and / or Die"""
+
self._age += 1
self._age += 1
+ # we regain a health every tick, so we heal in the dark
+ if self._health < 100:
+ self._health += 1
+
refresh = False
if (self._age % 15) == 0 and len(moulds) < 1000:
refresh = False
if (self._age % 15) == 0 and len(moulds) < 1000:
@@
-78,9
+85,15
@@
class Mould(pymunk.Body):
spawn = False
if spawn:
child = Mould(gamestate, space, pos)
spawn = False
if spawn:
child = Mould(gamestate, space, pos)
+ child._health = self._health
moulds.append(child)
refresh = True
moulds.append(child)
refresh = True
+ if self._age in (10, 20):
+ # Segment grows in size
+ refresh = True
+ self._img = None # invalidate cached image
+
if self._age > 120:
# We die of old age
space.remove(self, self._shape)
if self._age > 120:
# We die of old age
space.remove(self, self._shape)
@@
-88,31
+101,49
@@
class Mould(pymunk.Body):
refresh = True
return refresh
refresh = True
return refresh
- def damage(self, light_color, intensity):
+ def damage(self, light_color, intensity
, space, moulds
):
"""Take damage for light, adjusted for resistances."""
"""Take damage for light, adjusted for resistances."""
+ self._health -= 3
+ if self._health <= 0 and self._age <= 120:
+ # We die of damage
+ space.remove(self, self._shape)
+ moulds.remove(self)
+ return True
+ return False
class Boyd(object):
def __init__(self, gamestate, space):
class Boyd(object):
def __init__(self, gamestate, space):
- seed = Mould(gamestate, space, (350, 3
5
0))
+ seed = Mould(gamestate, space, (350, 3
7
0))
self._moulds = [seed]
self._image = pygame.surface.Surface(SCREEN_SIZE)
self._image.convert_alpha(pygame.display.get_surface())
self._moulds = [seed]
self._image = pygame.surface.Surface(SCREEN_SIZE)
self._image.convert_alpha(pygame.display.get_surface())
+ self._draw_moulds()
+
+ def _draw_moulds(self):
self._image.fill((0, 0, 0, 0))
self._image.fill((0, 0, 0, 0))
- self._image.blit(seed.get_image(),
- seed.pygame_pos(self._image), None, pgl.BLEND_RGBA_ADD)
+ for m in self._moulds:
+ self._image.blit(m.get_image(),
+ m.pygame_pos(self._image), None,
+ 0)
- def tick(self, gamestate, space):
+ def tick(self, gamestate, space
, lights
):
redraw = False
redraw = False
+ # Handle spawn events
for mould in self._moulds[:]:
for mould in self._moulds[:]:
+ # Handle updates
if mould.tick(gamestate, space, self._moulds):
redraw = True
if mould.tick(gamestate, space, self._moulds):
redraw = True
+ # Check for damage
+ lit_by = lights.light_query(mould._shape)
+ for light in lit_by:
+ # Todo: extract colour and intensity from light
+ if mould.damage(None, None, space, self._moulds):
+ redraw = True
+ break # we only die once
if redraw:
if redraw:
- self._image.fill((0, 0, 0, 0))
- for mould in self._moulds:
- self._image.blit(mould.get_image(),
- mould.pygame_pos(self._image), None, pgl.BLEND_RGBA_ADD)
+ self._draw_moulds()
def render(self, surface):
"""Draw ourselves"""
def render(self, surface):
"""Draw ourselves"""