mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-05-04 18:03:45 -04:00
Merge branch 'master' into production
This commit is contained in:
commit
78a3a5b38b
9 changed files with 63 additions and 9 deletions
|
@ -34,7 +34,7 @@
|
||||||
<script src="/javascripts/aether.js" defer></script>
|
<script src="/javascripts/aether.js" defer></script>
|
||||||
<script src="/javascripts/app.js" defer></script> <!-- it's all Backbone! -->
|
<script src="/javascripts/app.js" defer></script> <!-- it's all Backbone! -->
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
// Placeholder for iPad, which inspects the user object at the bottom of an injected page.
|
// Placeholder for iPad, which inspects the user object at the bottom of an injected page.
|
||||||
window.userObject = "userObjectTag";
|
window.userObject = "userObjectTag";
|
||||||
window.me = {
|
window.me = {
|
||||||
|
@ -42,8 +42,20 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
onLoad = function() {
|
onLoad = function() {
|
||||||
FastClick.attach(document.body);
|
try {
|
||||||
require('core/initialize');
|
// IE8 warning
|
||||||
|
var htmlElement = document.querySelector("html");
|
||||||
|
if (htmlElement) {
|
||||||
|
var classAttribute = htmlElement.getAttribute('class');
|
||||||
|
if (classAttribute && classAttribute.indexOf('lt-ie9') >= 0) {
|
||||||
|
alert("CodeCombat does not run in Internet Explorer 8 or older. Sorry!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// IE8 can't handle this
|
||||||
|
FastClick.attach(document.body);
|
||||||
|
require('core/initialize');
|
||||||
|
} catch (error) { }
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -691,10 +691,13 @@ module.exports = Lank = class Lank extends CocoClass
|
||||||
Backbone.Mediator.publish 'surface:gold-changed', {team: @thang.team, gold: gold, goldEarned: Math.floor(@thang.goldEarned ? 0)}
|
Backbone.Mediator.publish 'surface:gold-changed', {team: @thang.team, gold: gold, goldEarned: Math.floor(@thang.goldEarned ? 0)}
|
||||||
|
|
||||||
shouldMuteMessage: (m) ->
|
shouldMuteMessage: (m) ->
|
||||||
|
if me.getAnnouncesActionAudioGroup() in ['no-audio', 'just-take-damage']
|
||||||
|
return true if m in ['moveRight', 'moveUp', 'moveDown', 'moveLeft']
|
||||||
|
return true if /^attack /.test m
|
||||||
|
return true if /^Repeating loop/.test m
|
||||||
|
return true if /^findNearestEnemy/.test m
|
||||||
|
|
||||||
return false if m in ['moveRight', 'moveUp', 'moveDown', 'moveLeft']
|
return false if m in ['moveRight', 'moveUp', 'moveDown', 'moveLeft']
|
||||||
#return true if /^attack /.test m
|
|
||||||
#return true if /^Repeating loop/.test m
|
|
||||||
#return true if /^findNearestEnemy/.test m
|
|
||||||
@previouslySaidMessages ?= {}
|
@previouslySaidMessages ?= {}
|
||||||
t0 = @previouslySaidMessages[m] ? 0
|
t0 = @previouslySaidMessages[m] ? 0
|
||||||
t1 = new Date()
|
t1 = new Date()
|
||||||
|
@ -704,7 +707,10 @@ module.exports = Lank = class Lank extends CocoClass
|
||||||
|
|
||||||
playSounds: (withDelay=true, volume=1.0) ->
|
playSounds: (withDelay=true, volume=1.0) ->
|
||||||
for event in @thang.currentEvents ? []
|
for event in @thang.currentEvents ? []
|
||||||
@playSound event, withDelay, volume
|
if event is 'take-damage' and me.getAnnouncesActionAudioGroup() in ['no-audio', 'without-take-damage']
|
||||||
|
null # Skip playing it
|
||||||
|
else
|
||||||
|
@playSound event, withDelay, volume
|
||||||
if event is 'pay-bounty-gold' and @thang.bountyGold > 25 and @thang.team isnt me.team
|
if event is 'pay-bounty-gold' and @thang.bountyGold > 25 and @thang.team isnt me.team
|
||||||
AudioPlayer.playInterfaceSound 'coin_1', 0.25
|
AudioPlayer.playInterfaceSound 'coin_1', 0.25
|
||||||
if @thang.actionActivated and (action = @thang.getActionName()) isnt 'say'
|
if @thang.actionActivated and (action = @thang.getActionName()) isnt 'say'
|
||||||
|
|
|
@ -103,6 +103,18 @@ module.exports = class User extends CocoModel
|
||||||
myHeroClasses.push heroClass for heroClass, heroSlugs of ThangType.heroClasses when _.intersection(myHeroSlugs, heroSlugs).length
|
myHeroClasses.push heroClass for heroClass, heroSlugs of ThangType.heroClasses when _.intersection(myHeroSlugs, heroSlugs).length
|
||||||
myHeroClasses
|
myHeroClasses
|
||||||
|
|
||||||
|
getAnnouncesActionAudioGroup: ->
|
||||||
|
return @announcesActionAudioGroup if @announcesActionAudioGroup
|
||||||
|
group = me.get('testGroupNumber') % 4
|
||||||
|
@announcesActionAudioGroup = switch group
|
||||||
|
when 0 then 'all-audio'
|
||||||
|
when 1 then 'no-audio'
|
||||||
|
when 2 then 'just-take-damage'
|
||||||
|
when 3 then 'without-take-damage'
|
||||||
|
@announcesActionAudioGroup = 'all-audio' if me.isAdmin()
|
||||||
|
application.tracker.identify announcesActionAudioGroup: @announcesActionAudioGroup unless me.isAdmin()
|
||||||
|
@announcesActionAudioGroup
|
||||||
|
|
||||||
getGemPromptGroup: ->
|
getGemPromptGroup: ->
|
||||||
return @gemPromptGroup if @gemPromptGroup
|
return @gemPromptGroup if @gemPromptGroup
|
||||||
group = me.get('testGroupNumber') % 8
|
group = me.get('testGroupNumber') % 8
|
||||||
|
|
|
@ -66,7 +66,7 @@
|
||||||
|
|
||||||
@media screen and ( max-height: 800px )
|
@media screen and ( max-height: 800px )
|
||||||
top: 451px
|
top: 451px
|
||||||
|
|
||||||
.alert
|
.alert
|
||||||
top: 213px
|
top: 213px
|
||||||
border: 5px solid darkred
|
border: 5px solid darkred
|
||||||
|
@ -82,3 +82,8 @@
|
||||||
|
|
||||||
a
|
a
|
||||||
color: lighten(#0b63bc, 10%)
|
color: lighten(#0b63bc, 10%)
|
||||||
|
|
||||||
|
body[lang='ru'], body[lang^='de'], body[lang^='pt'], body[lang='pl'], body[lang='tr'], body[lang^='nl'], body[lang^='cs'], body[lang^='sv'], body[lang^='el'], body[lang^='hu'], body[lang^='bg']
|
||||||
|
#home-view #slogan
|
||||||
|
font-size: 22px
|
||||||
|
line-height: 23px
|
||||||
|
|
|
@ -107,3 +107,16 @@
|
||||||
.unequippable
|
.unequippable
|
||||||
position: absolute
|
position: absolute
|
||||||
|
|
||||||
|
|
||||||
|
body:not([lang^='en'])
|
||||||
|
#item-details-view
|
||||||
|
#item-details-body
|
||||||
|
.stat-row
|
||||||
|
text-align: center
|
||||||
|
|
||||||
|
.stat-label, .stat
|
||||||
|
position: initial
|
||||||
|
display: inline-block
|
||||||
|
|
||||||
|
.stat-label
|
||||||
|
margin-right: 8px
|
||||||
|
|
|
@ -13,6 +13,7 @@ block outer_content
|
||||||
|
|
||||||
#slogan(data-i18n="home.slogan")
|
#slogan(data-i18n="home.slogan")
|
||||||
|
|
||||||
|
//- TODO: This does not work on IE8
|
||||||
.alert.alert-danger.lt-ie9
|
.alert.alert-danger.lt-ie9
|
||||||
strong(data-i18n="home.no_ie") CodeCombat does not run in Internet Explorer 8 or older. Sorry!
|
strong(data-i18n="home.no_ie") CodeCombat does not run in Internet Explorer 8 or older. Sorry!
|
||||||
|
|
||||||
|
|
|
@ -147,7 +147,7 @@ module.exports = class PlayLevelView extends RootView
|
||||||
afterRender: ->
|
afterRender: ->
|
||||||
super()
|
super()
|
||||||
window.onPlayLevelViewLoaded? @ # still a hack
|
window.onPlayLevelViewLoaded? @ # still a hack
|
||||||
@insertSubView @loadingView = new LevelLoadingView autoUnveil: @options.autoUnveil, level: @level # May not have @level loaded yet
|
@insertSubView @loadingView = new LevelLoadingView autoUnveil: @options.autoUnveil, level: @levelLoader?.level ? @level # May not have @level loaded yet
|
||||||
@$el.find('#level-done-button').hide()
|
@$el.find('#level-done-button').hide()
|
||||||
$('body').addClass('is-playing')
|
$('body').addClass('is-playing')
|
||||||
$('body').bind('touchmove', false) if @isIPadApp()
|
$('body').bind('touchmove', false) if @isIPadApp()
|
||||||
|
|
|
@ -270,6 +270,10 @@ module.exports = class HeroVictoryModal extends ModalView
|
||||||
levelLabel = xpEl.find('.level')
|
levelLabel = xpEl.find('.level')
|
||||||
utils.replaceText levelLabel, currentLevel
|
utils.replaceText levelLabel, currentLevel
|
||||||
|
|
||||||
|
if leveledUp and (not @displayedLevel or currentLevel > @displayedLevel)
|
||||||
|
@playSound 'level-up'
|
||||||
|
@displayedLevel = currentLevel
|
||||||
|
|
||||||
endSequentialAnimations: ->
|
endSequentialAnimations: ->
|
||||||
clearInterval @sequentialAnimationInterval
|
clearInterval @sequentialAnimationInterval
|
||||||
@animationComplete = true
|
@animationComplete = true
|
||||||
|
|
|
@ -55,6 +55,7 @@ exports.config =
|
||||||
regJoin('^app/core')
|
regJoin('^app/core')
|
||||||
regJoin('^app/views/core')
|
regJoin('^app/views/core')
|
||||||
'app/locale/locale.coffee'
|
'app/locale/locale.coffee'
|
||||||
|
'app/locale/en.coffee'
|
||||||
'app/lib/sprites/SpriteBuilder.coffee' # loaded by ThangType
|
'app/lib/sprites/SpriteBuilder.coffee' # loaded by ThangType
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue