mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-04-14 05:55:00 -04:00
Allow multiplayer levels to earn achievements
This commit is contained in:
parent
a725cd70d8
commit
a5fc31dbb3
4 changed files with 50 additions and 46 deletions
app
templates/play/level/modal
views
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Add table
Reference in a new issue