예제 #1
0
 def _swingSword(self):
     self.setSpriteAnimation(SKELETON_ANI_DICT[self.facing][0][1])
     self.Schedule(self._finishSwordSwing,
                   SKELETON_SWING_FOLLOW_THROUGH_TIME)
     if self.facing in {DIRECTION_UP, DIRECTION_DOWN}:
         hitbox_x_left = self.getPos()[0] - SKELETON_SWING_HITBOX_WIDE / 2
         hitbox_x_right = hitbox_x_left + SKELETON_SWING_HITBOX_WIDE
         if self.facing == DIRECTION_UP:
             hitbox_y_top = self.getPos()[1] + SKELETON_SWING_HITBOX_FAR
             hitbox_y_bottom = self.getPos()[1]
         else:
             hitbox_y_top = self.getPos()[1]
             hitbox_y_bottom = self.getPos()[1] - SKELETON_SWING_HITBOX_FAR
     else:
         hitbox_y_bottom = self.getPos()[1] - SKELETON_SWING_HITBOX_WIDE / 2
         hitbox_y_top = hitbox_y_bottom + SKELETON_SWING_HITBOX_WIDE
         if self.facing == DIRECTION_RIGHT:
             hitbox_x_left = self.getPos()[0]
             hitbox_x_right = self.getPos()[0] + SKELETON_SWING_HITBOX_FAR
         else:
             hitbox_x_left = self.getPos()[0] - SKELETON_SWING_HITBOX_FAR
             hitbox_x_right = self.getPos()[0]
     x, y = self.mappe.getPlayerActor().getPos()
     if x >= hitbox_x_left and x <= hitbox_x_right and y >= hitbox_y_bottom and y <= hitbox_y_top:
         customEvent(PLAYER_HURT_PLAYER_EVENT, *self.getPos())
예제 #2
0
 def checkForPlayerToSave(self):
     pactor = self.mappe.getPlayerActor()
     x, y = map(operator.sub, pactor.getPos(), self.getPos())
     if abs(x) + abs(y) <= SAVE_DISTANCE:
         self.Unschedule(self.checkForPlayerToSave)
         playSound(SOUND_SAVE, True)
         customEvent(PUSH_SAVE_EVENT)
         customEvent(PLAYER_MAX_HP_EVENT)
예제 #3
0
 def checkPlayerCollision(self):
     if not self.isHurt() and not self.mappe.getPlayerActor().isCharging(
     ) and not self.isStunned():
         distance = reduce(
             lambda x, y: abs(x) + abs(y),
             map(operator.sub, self.getPos(),
                 self.mappe.getPlayerActor().getPos()))
         if distance <= COLLISION_DISTANCE:
             customEvent(PLAYER_HURT_PLAYER_EVENT, *self.getPos())
예제 #4
0
def _fireHeldKeyEvents():
    binds = settings.getValue(DYNAMIC_SETTINGS_KEY_BINDS)
    for key in _held_keys:
        args = []
        if key in (KAI_KEY_MOUSE_LEFT, KAI_KEY_MOUSE_RIGHT):
            args = list(getMousePosition())
        key += INPUT_EVENT_TYPE_HOLD
        try:
            args.insert(0,binds[key])
        except KeyError:
            pass
        else:
            customEvent(*args)
예제 #5
0
 def checkPlayerCollision(self):
     if not self.isHurt() and not self.mappe.getPlayerActor(
     ).charging_forward and not self.isStunned():
         distance = reduce(
             lambda x, y: abs(x) + abs(y),
             map(operator.sub, self.getPos(),
                 self.mappe.getPlayerActor().getPos()))
         if self.charging_forward:
             col_distance = MINOTAUR_CHARGING_COLLISION_DISTANCE
         else:
             col_distance = COLLISION_DISTANCE
         if distance <= col_distance:
             customEvent(PLAYER_HURT_PLAYER_EVENT, *self.getPos())
예제 #6
0
 def hurtPlayer(self, x, y):
     if not self.hurt:
         self._chargeFinish()  #just in case
         self._finishSwordSwing()
         self.setHurt(90)
         self.setKnockbackVel(x, y, HURT_KNOCKBACK_VEL)
         self.hurt_control_loss = True
         playSound(SOUND_HIT_PLAYER, True)
         customEvent(PLAYER_REDUCE_HP_EVENT)
         if callQuery(CHECK_PLAYER_DEAD_QUERY):
             self.setVelocity(0, 0)
             self.Schedule(self._vanishForever, 91)
             self.Unschedule(self._endHurt)
         else:
             self.Schedule(self._regainHurtControl, HURT_CONTROL_LOSS_TIME)
예제 #7
0
 def relayBinding(kai_key, *args, **kwargs):
     binds = settings.getValue(DYNAMIC_SETTINGS_KEY_BINDS)
     try:
         bind = binds[(kai_key + event_type)]
     except KeyError:
         pass
     else:
         hold_func(kai_key)
         return customEvent(bind, *args, **kwargs)
예제 #8
0
 def updateScreenTransitions(self):
     if not self.mappe.getScreenTransitioning():
         x, y = self.getSpriteScreenPosition()
         if x < SCREEN_BOUNDARIES:
             customEvent(START_SCREEN_TRANSITION_EVENT, DIRECTION_LEFT)
         elif x > MAP_SIZE[0] - SCREEN_BOUNDARIES:
             customEvent(START_SCREEN_TRANSITION_EVENT, DIRECTION_RIGHT)
         elif y > MAP_SIZE[1] - SCREEN_BOUNDARIES:
             customEvent(START_SCREEN_TRANSITION_EVENT, DIRECTION_UP)
         elif y < SCREEN_BOUNDARIES:
             customEvent(START_SCREEN_TRANSITION_EVENT, DIRECTION_DOWN)
 def updateHitSomething(self):
     if not self.hit_something:
         for enemy in self.mappe.getEnemyActors():
             distance = reduce(
                 lambda x, y: abs(x) + abs(y),
                 map(operator.sub, self.getPos(), enemy.getPos()))
             if distance <= COLLISION_DISTANCE:
                 enemy_index = enemy.getEnemyIndex()
                 if enemy_index:
                     customEvent(PLAYER_FORM_CHANGE_EVENT,
                                 enemy.getEnemyIndex())
                     playSound(SOUND_POWERUP, True)
                     self._hitSomething()
                     return
         if self.checkCollision():
             playSound(SOUND_POP, True)
             self._hitSomething()
             return
         if self.checkSpriteOffscreen():
             playSound(SOUND_POP, True)
             self._hitSomething()
             return
예제 #10
0
 def getEventCaller(self, key, *args, **kwargs):
     #convenience function for delaying a custom event
     return lambda: customEvent(key, *args, **kwargs)
예제 #11
0
 def checkOffscreen(self):
     if self.getPos(
     )[0] > getWindowDimensionsScaled()[0] + OFFSCREEN_BUFFER:
         customEvent(REMOVE_BOULDER_EVENT, self.index)
예제 #12
0
def _relayEventFromServer(key, json_object):
    customEvent(_SERVER_EVENT_PREFIX + key, json_object)
예제 #13
0
 def callFlagListeners(self, anikey, flag, frames):
     for frame in frames:
         customEvent(self.generateAniKeyFlag(anikey, flag))
예제 #14
0
 def callFinishListeners(self, anikey):
     customEvent(self.generateAniKeyFinish(anikey))
예제 #15
0
 def callTimeListeners(self,anikey, times):
     for time in times:
         customEvent(self.generateAniKeyTime(anikey, time))
예제 #16
0
 def callFrameListeners(self, anikey, frames):
     for frame in frames:
         customEvent(self.generateAniKeyFrame(anikey, frame))
예제 #17
0
 def collectSquid(self):
     playSound(SOUND_COLLECT_SQUID, True)
     customEvent(FINAL_SQUID_OBTAINED_EVENT)
     self.cleanupSelf()
예제 #18
0
 def respondKeyPress(self, symbol, modifiers):
     if keyMatches(CANCEL, symbol):
         customEvent(PLAYER_JUMP_EVENT)
     return False
예제 #19
0
 def _vanishForever(self):
     self.setSpriteAlpha(0.0)
     self.Unschedule(self._hurtFlash)
     customEvent(GAME_LOST_EVENT)
예제 #20
0
def _relayEventFromClient(key, client_id, json_object):
    customEvent(_CLIENT_EVENT_PREFIX + key, client_id, json_object)
 def collectSquid(self):
     playSound(SOUND_COLLECT_SQUID, True)
     customEvent(SQUID_TROPHY_OBTAINED_EVENT, self.getSquidTrophyIndex())
     self.cleanupSelf()