コード例 #1
0
ファイル: achievement.py プロジェクト: kedder/skylines
def unlock_user_achievements(user, ach_definitions):
    """Calculate and unlock user activity achievements on SkyLines
    """
    unlocked_achievements = {a.name: a for a in user.achievements}
    achievements = get_user_achievements(user, ach_definitions)
    now = datetime.now()
    newunlocked = []

    for a in achievements:
        if a.name in unlocked_achievements:
            # This achievement is already unlocked, do not unlock it twice
            continue

        newach = UnlockedAchievement(name=a.name,
                                     pilot=user,
                                     time_achieved=now)
        newunlocked.append(newach)
        db.session.add(newach)
        create_achievement_notification(newach)

    return newunlocked
コード例 #2
0
def unlock_user_achievements(user, ach_definitions):
    """Calculate and unlock user activity achievements on SkyLines
    """
    unlocked_achievements = {a.name: a for a in user.achievements}
    achievements = get_user_achievements(user, ach_definitions)
    now = datetime.now()
    newunlocked = []

    for a in achievements:
        if a.name in unlocked_achievements:
            # This achievement is already unlocked, do not unlock it twice
            continue

        newach = UnlockedAchievement(name=a.name,
                                     pilot=user,
                                     time_achieved=now)
        newunlocked.append(newach)
        db.session.add(newach)
        create_achievement_notification(newach)

    return newunlocked
コード例 #3
0
def unlock_flight_achievements(flight):
    """Calculate new flight achievements for the pilot and store them in
    database.
    """
    pilot = flight.pilot
    assert pilot is not None

    unlocked_achievements = {a.name: a for a in pilot.achievements}
    achievements = get_flight_achievements(flight)

    newunlocked = []
    for a in achievements:
        time_achieved = flight.landing_time

        if a.name in unlocked_achievements:
            # check if flight was started prior the flight in existing
            # achievement and update both acievement and notification event in
            # this case.
            oldach = unlocked_achievements[a.name]
            if oldach.time_achieved > time_achieved:
                # reassign the flight
                oldach.flight = flight
                oldach.time_achieved = time_achieved
                # Update achievement event too
                event = Event.query(achievement_id=oldach.id).one()
                event.flight = flight

        else:
            newach = UnlockedAchievement(name=a.name,
                                         pilot=pilot,
                                         flight=flight,
                                         time_achieved=flight.landing_time)
            newunlocked.append(newach)
            db.session.add(newach)
            create_achievement_notification(newach)

    return newunlocked
コード例 #4
0
ファイル: achievement.py プロジェクト: kedder/skylines
def unlock_flight_achievements(flight):
    """Calculate new flight achievements for the pilot and store them in
    database.
    """
    pilot = flight.pilot
    assert pilot is not None

    unlocked_achievements = {a.name: a for a in pilot.achievements}
    achievements = get_flight_achievements(flight)

    newunlocked = []
    for a in achievements:
        time_achieved = flight.landing_time

        if a.name in unlocked_achievements:
            # check if flight was started prior the flight in existing
            # achievement and update both acievement and notification event in
            # this case.
            oldach = unlocked_achievements[a.name]
            if oldach.time_achieved > time_achieved:
                # reassign the flight
                oldach.flight = flight
                oldach.time_achieved = time_achieved
                # Update achievement event too
                event = Event.query(achievement_id=oldach.id).one()
                event.flight = flight

        else:
            newach = UnlockedAchievement(name=a.name,
                                         pilot=pilot, flight=flight,
                                         time_achieved=flight.landing_time)
            newunlocked.append(newach)
            db.session.add(newach)
            create_achievement_notification(newach)

    return newunlocked