def Hurt(self, amount): self.health -= amount if self.health > 0: #print 'switching to state stunned' self.stun() events.Fire('EnemyHurt', self) else: #print 'enemy death!' events.Fire('EnemyDeath', self)
def Hurt(self, amount): # Note: Hurt is instantaneous, unlike On_AttackHit, which is called # when the events module dispatches its events if amount <= 0: return #not actually hurt #print 'reducing heatlh', self.health self.health -= amount if self.health == 0 and self.strings: self.health = 1 self.strings = [] if self.health > 0: events.Fire('AvatarHurt', self) else: events.Fire('AvatarDeath', self)
def fire(self, firer): if self.fired: return TriggerZone.fire(self) #print "GOOOOOOAL" events.Fire('LevelCompletedEvent', getActiveLevel())
def update(self, timeChange=None): self.x = self.origX + window.bgOffset[0] self.y = self.origY + window.bgOffset[1] if self.state == 'die': self.opacity -= 5 self.scale += 0.1 if self.opacity < 50: events.Fire('SpriteRemove', self)
def update(self, timeChange=None): self.x = self.logicalX + window.bgOffset[0] self.y = self.logicalY + window.bgOffset[1] self.logicalX += randint(-2, 2) self.logicalY += 5 self.opacity -= 2 self.scale += 0.01 if self.opacity < 80: events.Fire('SpriteRemove', self)
def fire(self, firer): if self.fired: return if not isinstance(firer, Avatar): return #print 'string pickup!' self.fired = True firer.pickupString() del self.sprite events.Fire('TriggerZoneRemove', self)
def update(self, timeChange=None): self.x = self.logicalX + window.bgOffset[0] self.y = self.logicalY + window.bgOffset[1] self.color = ( self.color[0] - 2, self.color[1] - 2, self.color[2] - 2, ) self.opacity -= 2 if self.color[0] < 20: events.Fire('SpriteRemove', self)
def Event(evName, *args, **kwargs): """Fire off an inconsequential event""" try: import events events.Fire(evName, *args, **kwargs) except Exception, details: #totally don't care if it doesn't work. Even if the module #doesn't load, I don't care because these events are not #mission-critical log.info('failed to fire an event') log.info(details)
def fire(self, firer): if self.fired: return if not isinstance(firer, Avatar): return ##print 'yoyo pickup!' self.fired = True yoyo = LogicalYoyo() firer.pickupYoyo(yoyo) events.Fire('TriggerZoneRemove', self)
def fireSpecial(self): if not self.yoyo: return if not self.yoyo.gfxYoyo: # hack hack todo return x = self.yoyo.gfxYoyo.yoyoX y = self.yoyo.gfxYoyo.yoyoY if self.getStringLength() <= 5: events.Fire('WhiffSpecial', (x,y)) else: events.Fire('ExplosionSpecial', (x,y)) self.strings.pop() #todo: move this into ExplosionAttack targets = self.getAttackables() for t in targets: xdistance = abs(t.feetPos[0] - x) ydistance = abs(t.feetPos[1] - y) if math.sqrt(xdistance**2 + ydistance**2) < 150: t.Hurt(self.getEnergy()) events.Fire('AttackHit', attacks.ExplosionAttack(), self, t)
def update_talk(self, timeChange): if self.currentPart == None: events.Fire('StartSpeech', self) self.speechIter = iter(self.speech) try: self.currentPart = self.speechIter.next() except StopIteration: events.Fire('StopSpeech', self) self.state = State.fastWalking return events.Fire('SpeechPart', self, self.currentPart[1]) return self.speechCounter += timeChange if self.speechCounter > self.currentPart[0]: self.speechCounter = 0.0 try: self.currentPart = self.speechIter.next() events.Fire('SpeechPart', self, self.currentPart[1]) except StopIteration: events.Fire('StopSpeech', self) self.state = State.fastWalking
def update_attack(self, timeChange): attStates = attacks.State target = self.knownAvatars[0] self.attack.update(timeChange, self.feetPos, self.facing, target) self.state = self.attack.state #HACK!!! victimsAndAmount = self.attack.GetVictimsAndAmount() for victim, attackAmt in victimsAndAmount: power = attackAmt * self.energy victim.Hurt(power) events.Fire('AttackHit', self.attack, self, victim) if (self.attack.state == attStates.attacking and not self.desireWithinReach()): self.attack.end() if self.attack.state == attStates.done: self.state = State.fastWalking
def update_attack(self, timeChange): if not self.yoyo.gfxYoyo: # todo this is a hack fix return attStates = attacks.State ##print 'va', len(self.selectedAttack.victimsAndAmounts) #print 'vt', len(self.selectedAttack.visitedTargets) self.selectedAttack.update(timeChange, self.feetPos, self.facing, self.getAttackables(), self.yoyo.gfxYoyo) victimsAndAmount = self.selectedAttack.GetVictimsAndAmount() for victim, attackAmt in victimsAndAmount: power = attackAmt*self.getEnergy() victim.Hurt(power) events.Fire('AttackHit', self.selectedAttack, self, victim) if self.selectedAttack.state == attStates.done: self.state = State.normal
def stun(self): if self.state == State.talking: events.Fire('StopSpeech', self) self.state = State.stunned
def ShowServer(self): events.Fire("ShowServer")
def ShowGreen(self): events.Fire("ShowGreen")
def ShowRed(self): events.Fire("ShowRed")
def Pause(self): events.Fire("Pause")
def doEnemy(self, cls, args, pos, firer): enemy = cls(*args) enemy.feetPos = pos enemy.walkMask = self.level.walkMask enemy.showAvatar(firer) events.Fire('EnemyBirth', enemy)
def die(self): events.Fire('SpriteRemove', self)
def Save( self ): events.Fire( "SaveRequest" )
events.AddEvent( "MouseMove" ) events.AddEvent( "MouseClick" ) lastReload = 0 clock = pygame.time.Clock() oldfps = 0 nextGUIRefresh = 1 while 1: timeChange = clock.tick(simulation.fps) lastReload += timeChange if lastReload > 5000: lastReload = 0 reload(simulation) newfps = int(clock.get_fps()) if newfps != oldfps: events.Fire( "FPSChange", newfps ) oldfps = newfps allobjects.thousandCounter += 1 allobjects.thousandCounter %= 1000 #Handle Input Events remainingEvents = pygame.event.get() for event in remainingEvents: upKeys = [x for x in remainingEvents if x.type == KEYUP] if event.type == QUIT: return elif event.type == KEYDOWN and event.key == K_ESCAPE: return elif event.type == KEYDOWN or event.type == KEYUP: parkPanel.SignalKey( event, upKeys )
def Clone( self ): events.Fire( "CloneRequest" )
def Pause( self ): events.Fire( "PauseToggleRequest" )
displayer = UIPanel(bgSurf, Rect(0, 0, *RESOLUTION)) allobjects.server = TravelBuddyServer() lastReload = 0 #Main Loop oldfps = 0 while 1: timeChange = clock.tick(simulation.fps) lastReload += timeChange if lastReload > 5000: lastReload = 0 reload(simulation) newfps = int(clock.get_fps()) if newfps != oldfps: events.Fire("FPSChange", newfps) oldfps = newfps #Handle Input Events remainingEvents = pygame.event.get() for event in remainingEvents: if event.type == QUIT: displayer.isDone = 1 elif event.type == KEYDOWN and event.key == K_ESCAPE: displayer.isDone = 1 elif event.type == MOUSEBUTTONDOWN: displayer.Click(event.pos) if event.type == MOUSEMOTION: displayer.MouseOver(event) #Draw Everything
def ToggleSnap( self ): events.Fire( "SnapToggleRequest" )
def run(self): global _activeLevel global soundtrack _activeLevel = self self.done = False clock.set_fps_limit(60) win = window.window avSprite = AvatarSprite(self.avatar) self.avatar.feetPos = self.startLoc self.avatar.walkMask = self.walkMask self.avatar.triggerZones = self.triggerZones events.Fire('AvatarBirth', self.avatar) events.Fire('LevelStartedEvent', self) while not self.done: timeChange = clock.tick() #if soundtrack and self.sound: # print soundtrack # soundtrack.dispatch_events() events.ConsumeEventQueue() win.dispatch_events() if self.deathDelay: self.deathDelay -= timeChange if self.deathDelay <= 0: self.done = True if self.done or win.has_exit: player.strings = self.avatar.strings[:] events.Reset() break avSprite.update(timeChange) for miscSprite in self.miscSprites: miscSprite.update(timeChange) for enemySprite in self.enemySprites.values(): enemySprite.update(timeChange) for sprite in self.visualEffects.sprites: sprite.update(timeChange) win.clear() # find the combined height of the background images bgWidth = 0 bgHeight = 0 for bg in self.bgImages: bgWidth += bg.width bgHeight += bg.height offset = self.calcBGOffset(self.avatar.x, self.avatar.y, win.width, win.height, bgWidth, bgHeight) window.bgOffset[0] = offset[0] window.bgOffset[1] = offset[1] #self.bg.blit(*window.bgOffset) #[bg.blit(*window.bgOffset) for bg in self.bgImages] for count, bg in enumerate(self.bgImages): bg.blit(count * 1024 + window.bgOffset[0], window.bgOffset[1]) for miscSprite in self.miscSprites: miscSprite.draw() avSprite.draw() for enemySprite in self.enemySprites.values(): enemySprite.draw() for sprite in self.visualEffects.sprites: sprite.draw() #self.healthText.draw() self.healthBar.draw(self.avatar) self.energyBar.draw(self.avatar) if DEBUG: self.fpsText.text = "fps: %d" % clock.get_fps() self.fpsText.draw() if clock.get_fps() < 30: events.Fire('LowFPS30') win.flip() return self.getNextScene()