Starting to show opponent code languages.

This commit is contained in:
Nick Winter 2014-07-13 20:19:51 -07:00
parent bd47b3bc83
commit 1a016394fe
14 changed files with 60 additions and 13 deletions

View file

@ -106,7 +106,7 @@ module.exports = class SpriteBoss extends CocoClass
createOpponentWizard: (opponent) ->
# TODO: colorize name and cloud by team, colorize wizard by user's color config, level-specific wizard spawn points
sprite = @createWizardSprite thangID: opponent.id, name: opponent.name
sprite = @createWizardSprite thangID: opponent.id, name: opponent.name, codeLanguage: opponent.codeLanguage
if not opponent.levelSlug or opponent.levelSlug is 'brawlwood'
sprite.targetPos = if opponent.team is 'ogres' then {x: 52, y: 52} else {x: 28, y: 28}
else if opponent.levelSlug is 'dungeon-arena'

View file

@ -54,6 +54,11 @@ module.exports = class WizardSprite extends IndieSprite
@updateRotation()
# Don't call general update() because Thang isn't built yet
setNameLabel: (name) ->
if @options.codeLanguage and @options.codeLanguage isnt 'javascript' and not @isSelf
name += " (#{@options.codeLanguage})" # TODO: move on second line, capitalize properly
super name
onPlayerStatesChanged: (e) ->
for playerID, state of e.states
continue unless playerID is @thang.id

View file

@ -239,6 +239,9 @@ _.extend LevelSessionSchema.properties,
title: 'Opponent Rank'
description: 'The opponent\'s ranking in a given match'
type: 'number'
codeLanguage:
type: 'string'
description: 'What submittedCodeLanguage the opponent used during the match'
c.extendBasicProperties LevelSessionSchema, 'level.session'
c.extendPermissionsProperties LevelSessionSchema, 'level.session'

View file

@ -50,3 +50,9 @@
td
padding: 1px 2px
.code-language-cell
padding: 0 10px
background: transparent url(/images/pages/home/language_logo_javascript.png) no-repeat center center
background-size: contain
height: 19px

View file

@ -37,3 +37,9 @@
td
padding: 1px 2px
.code-language-cell
padding: 0 10px
background: transparent url(/images/pages/home/language_logo_javascript.png) no-repeat center center
background-size: contain
height: 19px

View file

@ -95,7 +95,17 @@
span
position: relative
top: 1px
.code-language
position: absolute
background: transparent url(/images/pages/home/language_logo_javascript.png) no-repeat center center
background-size: contain
width: 40px
height: 40px
right: -5px
top: -15px
display: block
.my-name
border-right: 15px solid transparent
left: 0
@ -145,4 +155,4 @@
top: 35px
font-size: 40px
font-weight: bolder
color: black
color: black

View file

@ -4,13 +4,13 @@ div#columns.row
div(id="histogram-display-#{team.name}", class="histogram-display",data-team-name=team.name)
table.table.table-bordered.table-condensed.table-hover
tr
th
th(colspan=2)
th(colspan=3, style="color: #{team.primaryColor}")
span= team.name
span
span(data-i18n="ladder.leaderboard") Leaderboard
tr
th
th(colspan=2)
th(data-i18n="general.score") Score
th(data-i18n="general.name").name-col-cell Name
th
@ -21,6 +21,7 @@ div#columns.row
for session, rank in topSessions
- var myRow = session.get('creator') == me.id
tr(class=myRow ? "success" : "", data-player-id=session.get('creator'), data-session-id=session.id)
td.code-language-cell(style="background-image: url(/images/pages/home/language_logo_" + session.get('submittedCodeLanguage') + ".png)")
td.rank-cell= rank + 1
td.score-cell= Math.round(session.get('totalScore') * 100)
td.name-col-cell= session.get('creatorName') || "Anonymous"
@ -34,6 +35,7 @@ div#columns.row
for session in team.leaderboard.nearbySessions()
- var myRow = session.get('creator') == me.id
tr(class=myRow ? "success" : "", data-player-id=session.get('creator'), data-session-id=session.id)
td.code-language-cell(style="background-image: url(/images/pages/home/language_logo_" + session.get('submittedCodeLanguage') + ".png)")
td.rank-cell= session.rank
td.score-cell= Math.round(session.get('totalScore') * 100)
td.name-col-cell= session.get('creatorName') || "Anonymous"

View file

@ -4,7 +4,7 @@ div#columns.row
table.table.table-bordered.table-condensed
tr
th(colspan=4, style="color: #{team.primaryColor}")
th(colspan=5, style="color: #{team.primaryColor}")
span(data-i18n="ladder.summary_your") Your
|#{team.name}
|
@ -16,16 +16,17 @@ div#columns.row
if team.session
tr
th(colspan=4)
th(colspan=5)
.ladder-submission-view(data-session-id=team.session.id)
if team.scoreHistory
tr
th(colspan=4, style="color: #{team.primaryColor}")
th(colspan=5, style="color: #{team.primaryColor}")
div(class="score-chart-wrapper", data-team-name=team.name, id="score-chart-#{team.name}")
tr
th(data-i18n="general.result") Result
th
th(data-i18n="general.opponent") Opponent
th(data-i18n="general.when") When
th
@ -38,6 +39,7 @@ div#columns.row
span(data-i18n="general.loss").loss Loss
if match.state === 'tie'
span(data-i18n="general.tie").tie Tie
td.code-language-cell(style="background-image: url(/images/pages/home/language_logo_" + match.codeLanguage + ".png)")
td.name-cell= match.opponentName || "Anonymous"
td.time-cell= match.when
td.battle-cell

View file

@ -33,6 +33,7 @@ block modal-body-content
span= myName
div.opponent-name.name-label
span(data-i18n="ladder.simple_ai") Simple AI
//span.code-language(style="background-image: url(/images/pages/home/language_logo_javascript.png)")
div.difficulty
span(data-i18n="ladder.warmup") Warmup
div(data-i18n="ladder.vs").vs VS
@ -48,6 +49,8 @@ block modal-body-content
span= myName
div.opponent-name.name-label
span= challengers.easy.opponentName
if challengers.easy.codeLanguage
span.code-language(style="background-image: url(/images/pages/home/language_logo_" + challengers.easy.codeLanguage + ".png)")
div.difficulty
span(data-i18n="general.easy") Easy
div(data-i18n="ladder.vs").vs VS
@ -63,6 +66,8 @@ block modal-body-content
span= myName
div.opponent-name.name-label
span= challengers.medium.opponentName
if challengers.medium.codeLanguage
span.code-language(style="background-image: url(/images/pages/home/language_logo_" + challengers.medium.codeLanguage + ".png)")
div.difficulty
span(data-i18n="general.medium") Medium
div(data-i18n="ladder.vs").vs VS
@ -78,6 +83,8 @@ block modal-body-content
span= myName
div.opponent-name.name-label
span= challengers.hard.opponentName
if challengers.hard.codeLanguage
span.code-language(style="background-image: url(/images/pages/home/language_logo_" + challengers.hard.codeLanguage + ".png)")
div.difficulty
span(data-i18n="general.hard") Hard
div(data-i18n="ladder.vs").vs VS

View file

@ -73,6 +73,7 @@ module.exports = class MyMatchesTabView extends CocoView
sessionID: opponent.sessionID
stale: match.date < submitDate
fresh: fresh
codeLanguage: match.codeLanguage
}
for team in @teams

View file

@ -24,14 +24,14 @@ module.exports = class LadderPlayModal extends View
indentGuides: false
behaviors: false
liveCompletion: true
constructor: (options, @level, @session, @team) ->
super(options)
@nameMap = {}
@otherTeam = if team is 'ogres' then 'humans' else 'ogres'
@startLoadingChallengersMaybe()
@wizardType = ThangType.loadUniversalWizard()
updateLanguage: ->
aceConfig = _.cloneDeep me.get('aceConfig') ? {}
aceConfig = _.defaults aceConfig, @defaultAceConfig
@ -176,7 +176,8 @@ module.exports = class LadderPlayModal extends View
return unless session
return {
sessionID: session.id
opponentID: session.get('creator')
opponentID: session.get 'creator'
codeLanguage: session.get 'submittedCodeLanguage'
}
challengeInfoFromMatches: (matches) ->
@ -186,6 +187,7 @@ module.exports = class LadderPlayModal extends View
return {
sessionID: opponent.sessionID
opponentID: opponent.userID
codeLanguage: opponent.codeLanguage
}
class ChallengersData

View file

@ -287,7 +287,7 @@ module.exports = class PlayLevelView extends View
@surface.showLevel()
if @otherSession
# TODO: colorize name and cloud by team, colorize wizard by user's color config
@surface.createOpponentWizard id: @otherSession.get('creator'), name: @otherSession.get('creatorName'), team: @otherSession.get('team'), levelSlug: @level.get('slug')
@surface.createOpponentWizard id: @otherSession.get('creator'), name: @otherSession.get('creatorName'), team: @otherSession.get('team'), levelSlug: @level.get('slug'), codeLanguage: @otherSession.get('submittedCodeLanguage')
@loadingView?.unveil()
onLoadingViewUnveiled: (e) ->

View file

@ -155,7 +155,7 @@ LevelHandler = class LevelHandler extends Handler
sortParameters =
'totalScore': req.query.order
selectProperties = ['totalScore', 'creatorName', 'creator']
selectProperties = ['totalScore', 'creatorName', 'creator', 'submittedCodeLanguage']
query = Session
.find(sessionsQueryParameters)

View file

@ -579,6 +579,7 @@ addMatchToSessions = (newScoreObject, callback) ->
matchObject.opponents[sessionID].totalScore = session.totalScore
matchObject.opponents[sessionID].metrics = {}
matchObject.opponents[sessionID].metrics.rank = Number(newScoreObject[sessionID]?.gameRanking ? 0)
matchObject.opponents[sessionID].codeLanguage = newScoreObject[sessionID].submittedCodeLanguage
#log.info "Match object computed, result: #{matchObject}"
#log.info 'Writing match object to database...'
@ -595,6 +596,7 @@ updateMatchesInSession = (matchObject, sessionID, callback) ->
opponentsClone = _.omit opponentsClone, sessionID
opponentsArray = _.toArray opponentsClone
currentMatchObject.opponents = opponentsArray
currentMatchObject.codeLanguage = matchObject.opponents[opponentsArray[0].sessionID].codeLanguage
LevelSession.findOne {'_id': sessionID}, (err, session) ->
session = session.toObject()
currentMatchObject.playtime = session.playtime ? 0
@ -770,6 +772,7 @@ retrieveOldSessionData = (sessionID, callback) ->
'meanStrength': session.meanStrength ? 25
'totalScore': session.totalScore ? (25 - 1.8*(25/3))
'id': sessionID
'submittedCodeLanguage': session.submittedCodeLanguage
callback err, oldScoreObject
markSessionAsDoneRanking = (sessionID, cb) ->