Beispiel #1
0
 def apply_end_effect(self, game_state: GameState,
                      buffed_entity: WorldEntity,
                      buffed_npc: NonPlayerCharacter):
     game_state.player_state.stun_status.remove_one()
     hero_center_pos = game_state.player_entity.get_center_position()
     distance = 80
     affected_enemies = game_state.get_enemies_within_x_y_distance_of(
         distance, hero_center_pos)
     game_state.visual_effects.append(
         VisualRect((50, 50, 50), hero_center_pos, distance * 2,
                    int(distance * 2.1), Millis(200), 2, None))
     game_state.visual_effects.append(
         VisualRect((150, 150, 0), hero_center_pos, distance, distance * 2,
                    Millis(150), 3, None))
     game_state.visual_effects.append(
         VisualRect((250, 250, 0), hero_center_pos, distance, distance * 2,
                    Millis(100), 4, None))
     for enemy in affected_enemies:
         damage: float = MIN_DMG + random.random() * (MAX_DMG - MIN_DMG)
         deal_player_damage_to_enemy(game_state, enemy, damage,
                                     DamageType.PHYSICAL)
         enemy.gain_buff_effect(get_buff_effect(STUNNED_BY_STOMP),
                                STUN_DURATION)
     game_state.player_state.gain_buff_effect(
         get_buff_effect(BuffType.RECOVERING_AFTER_ABILITY), Millis(300))
     play_sound(SoundId.ABILITY_STOMP_HIT)
     game_state.camera_shake = CameraShake(Millis(50), Millis(200), 12)
Beispiel #2
0
    def control_npc(self, game_state: GameState, npc: NonPlayerCharacter, player_entity: WorldEntity,
                    is_player_invisible: bool, time_passed: Millis):
        self._time_since_updated_path += time_passed
        self._time_since_reevaluated += time_passed
        self._time_since_attack += time_passed

        summon_entity = npc.world_entity

        if self._time_since_updated_path > self._update_path_interval:
            self._time_since_updated_path = 0
            nearby_enemies = game_state.get_enemies_within_x_y_distance_of(300, npc.world_entity.get_position())
            if nearby_enemies:
                target_entity = nearby_enemies[0].world_entity
            else:
                target_entity = game_state.player_entity
            self.pathfinder.update_path_towards_target(summon_entity, game_state, target_entity)

        new_next_waypoint = self.pathfinder.get_next_waypoint_along_path(summon_entity)

        should_update_waypoint = self.next_waypoint != new_next_waypoint
        if self._time_since_reevaluated > self._reevaluate_next_waypoint_direction_interval:
            self._time_since_reevaluated = 0
            should_update_waypoint = True

        if should_update_waypoint:
            self.next_waypoint = new_next_waypoint
            if self.next_waypoint:
                direction = self.pathfinder.get_dir_towards_considering_collisions(
                    game_state, summon_entity, self.next_waypoint)
                _move_in_dir(summon_entity, direction)
            else:
                summon_entity.set_not_moving()
        if self._time_since_attack > self._attack_interval:
            self._time_since_attack = 0
            nearby_enemies = game_state.get_enemies_within_x_y_distance_of(100, summon_entity.get_position())
            if nearby_enemies:
                damage_amount = 3
                target = nearby_enemies[0]
                deal_npc_damage_to_npc(game_state, target, damage_amount)
                game_state.visual_effects.append(
                    VisualLine((220, 0, 0), summon_entity.get_center_position(),
                               target.world_entity.get_center_position(), Millis(100), damage_amount))
 def apply_middle_effect(self, game_state: GameState, time_passed: Millis):
     if self.timer.update_and_check_if_ready(time_passed):
         player_entity = game_state.player_entity
         player_center_position = player_entity.get_center_position()
         close_enemies = game_state.get_enemies_within_x_y_distance_of(
             140, player_center_position)
         if close_enemies:
             damage_amount: float = self.min_dmg + random.random() * (
                 self.max_dmg - self.min_dmg)
             deal_player_damage_to_enemy(game_state, close_enemies[0],
                                         damage_amount, DamageType.MAGIC)
             enemy_center_position = close_enemies[
                 0].world_entity.get_center_position()
             game_state.visual_effects.append(
                 VisualCircle((250, 250, 0), player_center_position, 50,
                              140, Millis(100), 1, player_entity))
             game_state.visual_effects.append(
                 VisualLine((250, 250, 0), player_center_position,
                            enemy_center_position, Millis(80), 3))
Beispiel #4
0
def _apply_ability(game_state: GameState) -> AbilityResult:
    player_entity = game_state.player_entity

    player_center_pos = player_entity.get_center_position()
    game_state.visual_effects.append(
        VisualCircle((150, 150, 250), player_center_pos, 95, 190, Millis(200),
                     3))
    affected_enemies = game_state.get_enemies_within_x_y_distance_of(
        180, player_center_pos)
    effect_position = get_position_from_center_position(
        player_center_pos, EFFECT_SPRITE_SIZE)
    game_state.visual_effects.append(
        VisualSprite(Sprite.EFFECT_ABILITY_FROST_NOVA, effect_position,
                     Millis(200), player_entity))
    for enemy in affected_enemies:
        damage_was_dealt = deal_player_damage_to_enemy(game_state, enemy, 5,
                                                       DamageType.MAGIC)
        if damage_was_dealt:
            enemy.gain_buff_effect(
                get_buff_effect(BuffType.REDUCED_MOVEMENT_SPEED), Millis(4000))
    return AbilityWasUsedSuccessfully()
Beispiel #5
0
def _apply_ability(game_state: GameState) -> AbilityResult:
    player_entity = game_state.player_entity
    for enemy in game_state.get_enemies_within_x_y_distance_of(
            400, player_entity.get_center_position()):
        enemy.health_resource.set_zero()
    return AbilityWasUsedSuccessfully()