Exemple #1
0
   def __init__(self, background, player, location, walls=()):
      Environment.__init__(self, background)
      self.player = player
      self.playergroup = sprite.GroupSingle(player)
      self.walls = sprite.RenderPlain(walls)
      self.npcgroup = sprite.Group()

      self.sprites = sprite.RenderUpdates()
      self.sprites.add(self.player)

      self.statusBar = OverWorldStatus(self.player, location)
Exemple #2
0
class Overworld(Environment):
   def __init__(self, background, player, location, walls=()):
      Environment.__init__(self, background)
      self.player = player
      self.playergroup = sprite.GroupSingle(player)
      self.walls = sprite.RenderPlain(walls)
      self.npcgroup = sprite.Group()

      self.sprites = sprite.RenderUpdates()
      self.sprites.add(self.player)

      self.statusBar = OverWorldStatus(self.player, location)

   @staticmethod
   def fromJson(jsonData, player):
      backgroundTile = jsonData["backgroundTile"]
      walls = Wall.fromJson(jsonData["walls"])
      location = jsonData["locationName"]
      ov =  Overworld(backgroundTile, player, location, walls)

      for monster in jsonData['monsters']:
         center = (monster['location'][0] * 32 + 16,
                   monster['location'][1] * 32 + 16)
         ov.addNPC(load_monster(monster['name'], center=center))

      return ov


   def addNPC(self, npc):
      self.npcgroup.add(npc)
      self.sprites.add(npc)

   def processEvent(self, event):
      if event.type == KEYDOWN:
         if event.key == K_UP:
            self.player.startWalking(Direction.BACK)
         elif event.key == K_LEFT:
            self.player.startWalking(Direction.LEFT)
         elif event.key == K_RIGHT:
            self.player.startWalking(Direction.RIGHT)
         elif event.key == K_DOWN:
            self.player.startWalking(Direction.FRONT)
         # the following events are temporary for testing
         elif event.key == K_d:
            self.player._die()
         elif event.key == K_u:
            self.player._revive()
         elif event.key == K_a:
            self.player.startAttack()

      elif event.type == KEYUP:
         if event.key == K_UP:
            self.player.stopWalking(Direction.BACK)
         elif event.key == K_LEFT:
            self.player.stopWalking(Direction.LEFT)
         elif event.key == K_RIGHT:
            self.player.stopWalking(Direction.RIGHT)
         elif event.key == K_DOWN:
            self.player.stopWalking(Direction.FRONT)

   def update(self):
      self.player.update()
      self.npcgroup.update()
      if sprite.spritecollideany(self.player, self.walls):
         self.player._goback()
      for npc in sprite.groupcollide(self.npcgroup, self.walls, False, False):
         npc._goback()
      npcCollisions = sprite.spritecollide(self.player, self.npcgroup, False)
      if len(npcCollisions) > 0:
         self.prepareForBattle()
         npcCollisions[0].kill()
         return BattleEvent(self.player, npcCollisions[0])
      return None
         
   def prepareForBattle(self):
      self.player.prepareForBattle()

   def returnFromBattle(self):
      self.player.returnFromBattle()
   
   def draw(self, surface):
      # TODO: shouldn't be reblitting when nothing has changed...probably
      if self._shouldFillBackground:
         self.fill_background(surface)
         self.walls.draw(surface)
      self.sprites.clear(surface, self.clear_callback)
      self.sprites.draw(surface)
      self.statusBar.draw(surface)

   def fulldraw(self, surface):
      self._shouldFillBackground = True
      self.draw(surface)