Allow multiplayer levels to earn achievements

This commit is contained in:
Nick Winter 2015-11-17 15:23:35 -08:00
parent a725cd70d8
commit a5fc31dbb3
4 changed files with 50 additions and 46 deletions

View file

@ -26,48 +26,49 @@ block modal-body-content
textarea(data-i18n="[placeholder]play_level.victory_review_placeholder")
.clearfix
for achievement in achievements
- var animate = achievement.completed && !achievement.completedAWhileAgo
.achievement-panel(class=achievement.completedAWhileAgo ? 'earned' : '' data-achievement-id=achievement.id data-animate=animate)
- var rewards = achievement.get('rewards') || {};
div.achievement-description= achievement.description
div.achievement-rewards
- var worth = achievement.worth;
- var previousWorth = achievement.previousWorth;
- var gems = achievement.gems;
- var previousGems = achievement.previousGems;
if worth
.reward-panel.numerical.xp(data-number=worth, data-number-unit='xp', data-previous-number=previousWorth || 0)
.reward-image-container(class=animate ? 'pending-reward-image' : 'show')
img(src="/images/pages/play/level/modal/reward_icon_xp.png")
.reward-text= animate ? '+0' : '+'+worth
if level.get('type', true) === 'hero' || level.get('type') == 'hero-ladder'
for achievement in achievements
- var animate = achievement.completed && !achievement.completedAWhileAgo
.achievement-panel(class=achievement.completedAWhileAgo ? 'earned' : '' data-achievement-id=achievement.id data-animate=animate)
- var rewards = achievement.get('rewards') || {};
if gems
.reward-panel.numerical.gems(data-number=gems, data-number-unit='gem', data-previous-number=previousGems || 0)
.reward-image-container(class=animate ? 'pending-reward-image' : 'show')
img(src="/images/pages/play/level/modal/reward_icon_gems.png")
.reward-text= animate ? '+0' : '+'+gems
if rewards.heroes
for hero in rewards.heroes
- var hero = thangTypes[hero];
.reward-panel.hero(data-hero-thang-type=hero.get('original'))
.reward-image-container(class=animate ? 'pending-reward-image' : 'show')
img(src=hero.getPortraitURL())
.reward-text= animate ? 'New Hero' : hero.get('name')
div.achievement-description= achievement.description
if rewards.items
for item in rewards.items
- var item = thangTypes[item];
.reward-panel.item(data-item-thang-type=item.get('original'))
div.achievement-rewards
- var worth = achievement.worth;
- var previousWorth = achievement.previousWorth;
- var gems = achievement.gems;
- var previousGems = achievement.previousGems;
if worth
.reward-panel.numerical.xp(data-number=worth, data-number-unit='xp', data-previous-number=previousWorth || 0)
.reward-image-container(class=animate ? 'pending-reward-image' : 'show')
img(src=item.getPortraitURL())
if animate
.reward-text(data-i18n="play_level.victory_new_item") New Item
else
.reward-text= i18n(item.attributes, 'name')
img(src="/images/pages/play/level/modal/reward_icon_xp.png")
.reward-text= animate ? '+0' : '+'+worth
if gems
.reward-panel.numerical.gems(data-number=gems, data-number-unit='gem', data-previous-number=previousGems || 0)
.reward-image-container(class=animate ? 'pending-reward-image' : 'show')
img(src="/images/pages/play/level/modal/reward_icon_gems.png")
.reward-text= animate ? '+0' : '+'+gems
if rewards.heroes
for hero in rewards.heroes
- var hero = thangTypes[hero];
.reward-panel.hero(data-hero-thang-type=hero.get('original'))
.reward-image-container(class=animate ? 'pending-reward-image' : 'show')
img(src=hero.getPortraitURL())
.reward-text= animate ? 'New Hero' : hero.get('name')
if rewards.items
for item in rewards.items
- var item = thangTypes[item];
.reward-panel.item(data-item-thang-type=item.get('original'))
.reward-image-container(class=animate ? 'pending-reward-image' : 'show')
img(src=item.getPortraitURL())
if animate
.reward-text(data-i18n="play_level.victory_new_item") New Item
else
.reward-text= i18n(item.attributes, 'name')
block modal-footer-content
#totals

View file

@ -38,7 +38,7 @@ module.exports = class RootView extends CocoView
showNewAchievement: (achievement, earnedAchievement) ->
earnedAchievement.set('notified', true)
earnedAchievement.patch()
return if achievement.get('collection') is 'level.sessions'
return if achievement.get('collection') is 'level.sessions' and not achievement.get('query')?.team
#return if @isIE() # Some bugs in IE right now, TODO fix soon! # Maybe working now with not caching achievement fetches in CocoModel?
new AchievementPopup achievement: achievement, earnedAchievement: earnedAchievement

View file

@ -48,7 +48,7 @@ module.exports = class HeroVictoryModal extends ModalView
@session = options.session
@level = options.level
@thangTypes = {}
if @level.get('type', true) is 'hero'
if @level.get('type', true) in ['hero', 'hero-ladder', 'course', 'course-ladder']
achievements = new CocoCollection([], {
url: "/db/achievement?related=#{@session.get('level').original}"
model: Achievement
@ -212,7 +212,7 @@ module.exports = class HeroVictoryModal extends ModalView
afterRender: ->
super()
@$el.toggleClass 'with-achievements', @level.get('type', true) is 'hero'
@$el.toggleClass 'with-achievements', @level.get('type', true) in ['hero', 'hero-ladder']
return unless @supermodel.finished()
@playSelectionSound hero, true for original, hero of @thangTypes # Preload them
@updateSavingProgressStatus()
@ -222,8 +222,8 @@ module.exports = class HeroVictoryModal extends ModalView
@insertSubView @ladderSubmissionView, @$el.find('.ladder-submission-view')
initializeAnimations: ->
if @level.get('type', true) is 'hero'
@updateXPBars 0
return @endSequentialAnimations() unless @level.get('type', true) in ['hero', 'hero-ladder']
@updateXPBars 0
#playVictorySound = => @playSound 'victory-title-appear' # TODO: actually add this
@$el.find('#victory-header').delay(250).queue(->
$(@).removeClass('out').dequeue()
@ -253,7 +253,7 @@ module.exports = class HeroVictoryModal extends ModalView
beginSequentialAnimations: ->
return if @destroyed
return unless @level.get('type', true) is 'hero'
return unless @level.get('type', true) in ['hero', 'hero-ladder']
@sequentialAnimatedPanels = _.map(@animatedPanels.find('.reward-panel'), (panel) -> {
number: $(panel).data('number')
previousNumber: $(panel).data('previous-number')

View file

@ -31,6 +31,7 @@ module.exports = class PlayAchievementsModal extends ModalView
'rewards'
'collection'
'function'
'query'
])
earnedAchievementsFetcher = new CocoCollection([], {url: '/db/earned_achievement', model: EarnedAchievement})
@ -72,8 +73,10 @@ module.exports = class PlayAchievementsModal extends ModalView
@onEverythingLoaded()
onEverythingLoaded: =>
@achievements.set(@achievements.filter((m) -> m.get('collection') isnt 'level.sessions'))
console.log 'got achievements', m.attributes for m in @achievements.models
@achievements.set(@achievements.filter((m) -> m.get('collection') isnt 'level.sessions' or m.get('query')?.team))
for achievement in @achievements.models
console.log 'kept achievement', achievement.attributes
if earned = @earnedMap[achievement.id]
achievement.earned = earned
achievement.earnedDate = earned.getCreationDate()