mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-04-14 05:55:00 -04:00
A/B test experimental languages hero select
Test group not shown experimental languages on first hero select.
This commit is contained in:
parent
97c4ff2e7e
commit
c5b26a4376
4 changed files with 45 additions and 20 deletions
app
lib
models
views/play
|
@ -16,7 +16,7 @@ module.exports = class LevelSetupManager extends CocoClass
|
|||
@loadSession(@supermodel)
|
||||
|
||||
# build modals and prevent them from disappearing.
|
||||
@heroesModal = new PlayHeroesModal({supermodel: @supermodel, session: @session, confirmButtonI18N: 'play.next', levelID: options.levelID})
|
||||
@heroesModal = new PlayHeroesModal({supermodel: @supermodel, session: @session, confirmButtonI18N: 'play.next', levelID: options.levelID, hadEverChosenHero: @options.hadEverChosenHero})
|
||||
@inventoryModal = new InventoryModal({supermodel: @supermodel, session: @session, levelID: options.levelID})
|
||||
@heroesModalDestroy = @heroesModal.destroy
|
||||
@inventoryModalDestroy = @inventoryModal.destroy
|
||||
|
|
|
@ -102,16 +102,31 @@ module.exports = class User extends CocoModel
|
|||
@castButtonTextGroup
|
||||
|
||||
getDirectFirstGroup: ->
|
||||
# Group -1 is not participating
|
||||
# Group 0 is original behavior
|
||||
# Group 1 goes directly to first level if new user
|
||||
# Targetting users with testGroupNumber < 128
|
||||
unless @directFirstGroup?
|
||||
if me.isAdmin()
|
||||
@directFirstGroup = 0
|
||||
if me.isAdmin() or me.get('testGroupNumber') >= 128
|
||||
@directFirstGroup = -1
|
||||
else
|
||||
@directFirstGroup = me.get('testGroupNumber') % 2
|
||||
application.tracker.identify directFirstGroup: @directFirstGroup
|
||||
@directFirstGroup
|
||||
|
||||
getExperimentalLangGroup: ->
|
||||
# Group -1 is not participating
|
||||
# Group 0 is original behavior
|
||||
# Group 1 isn't shown experimental languages in hero modal when launching beginner campaign level
|
||||
# Targetting users with testGroupNumber >= 128
|
||||
unless @experimentalLangGroup?
|
||||
if me.isAdmin() or me.get('testGroupNumber') < 128
|
||||
@experimentalLangGroup = -1
|
||||
else
|
||||
@experimentalLangGroup = me.get('testGroupNumber') % 2
|
||||
application.tracker.identify experimentalLangGroup: @experimentalLangGroup
|
||||
@experimentalLangGroup
|
||||
|
||||
getHighlightArrowSoundGroup: ->
|
||||
return @highlightArrowGroup if @highlightArrowGroup
|
||||
group = me.get('testGroupNumber') % 8
|
||||
|
|
|
@ -131,27 +131,24 @@ module.exports = class WorldMapView extends RootView
|
|||
if @nextLevel and @levelStatusMap[@nextLevel] is 'complete'
|
||||
@nextLevel = null
|
||||
@render()
|
||||
if @supermodel.finished()
|
||||
@initABTestAutoFirstLevel()
|
||||
@initABTestAutoFirstLevel()
|
||||
|
||||
initABTestAutoFirstLevel: ->
|
||||
# A/B testing directly navigating to first level
|
||||
# Excluding admins and users who have already started
|
||||
# TODO: Cleanup @afterRender when this test is finished
|
||||
firstLevelID = 'dungeons-of-kithgard'
|
||||
unless @nextLevel? or (firstLevelID of @levelStatusMap) or me.isAdmin()
|
||||
testGroup = me.getDirectFirstGroup()
|
||||
testGroup = me.getDirectFirstGroup()
|
||||
console.log 'WorldMapView initABTestAutoFirstLevel', testGroup
|
||||
unless @nextLevel? or (firstLevelID of @levelStatusMap) or testGroup is -1
|
||||
@ABTestSkipHighlight = testGroup is 1
|
||||
if testGroup is 1
|
||||
@ABTestSkipHighlight = true
|
||||
target = $("a[data-level-id='" + firstLevelID + "']")
|
||||
return if $(target).attr('disabled') or $(target).parent().hasClass 'locked'
|
||||
levelElement = $(target).parents('.level')
|
||||
levelID = levelElement.data('level-id')
|
||||
@startLevel levelElement
|
||||
window.tracker?.trackEvent 'World Map', levelID: firstLevelID, directFirstGroup: testGroup
|
||||
else
|
||||
window.tracker?.trackEvent 'World Map', levelID: firstLevelID, directFirstGroup: testGroup
|
||||
@ABTestSkipHighlight = false
|
||||
window.tracker?.trackEvent 'World Map', levelID: firstLevelID, directFirstGroup: testGroup
|
||||
else
|
||||
@ABTestSkipHighlight = false
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@ module.exports = class PlayHeroesModal extends ModalView
|
|||
@supermodel.loadCollection(@heroes, 'heroes')
|
||||
@stages = {}
|
||||
@session = options.session
|
||||
@initCodeLanguageList options.hadEverChosenHero
|
||||
|
||||
onHeroesLoaded: ->
|
||||
for hero in @heroes.models
|
||||
|
@ -48,14 +49,7 @@ module.exports = class PlayHeroesModal extends ModalView
|
|||
context = super(context)
|
||||
context.heroes = @heroes.models
|
||||
context.level = @options.level
|
||||
context.codeLanguages = [
|
||||
{id: 'python', name: 'Python (Default)'}
|
||||
{id: 'javascript', name: 'JavaScript'}
|
||||
{id: 'coffeescript', name: 'CoffeeScript'}
|
||||
{id: 'clojure', name: 'Clojure (Experimental)'}
|
||||
{id: 'lua', name: 'Lua (Experimental)'}
|
||||
{id: 'io', name: 'Io (Experimental)'}
|
||||
]
|
||||
context.codeLanguages = @codeLanguageList
|
||||
context.codeLanguage = @codeLanguage = @options?.session?.get('codeLanguage') ? me.get('aceConfig')?.language ? 'python'
|
||||
context.confirmButtonI18N = @confirmButtonI18N
|
||||
context
|
||||
|
@ -78,6 +72,25 @@ module.exports = class PlayHeroesModal extends ModalView
|
|||
@buildCodeLanguages()
|
||||
Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'game-menu-open', volume: 1
|
||||
|
||||
initCodeLanguageList: (hadEverChosenHero) ->
|
||||
@codeLanguageList = [
|
||||
{id: 'python', name: 'Python (Default)'}
|
||||
{id: 'javascript', name: 'JavaScript'}
|
||||
{id: 'coffeescript', name: 'CoffeeScript'}
|
||||
]
|
||||
|
||||
# A/B test showing experimental languages on first hero select
|
||||
# Group -1 is not participating
|
||||
# Group 0 is original behavior
|
||||
# Group 1 isn't shown experimental languages in hero modal when launching beginner campaign level
|
||||
testGroup = me.getExperimentalLangGroup()
|
||||
if hadEverChosenHero? or testGroup isnt 1
|
||||
@codeLanguageList.push id: 'clojure', name: 'Clojure (Experimental)'
|
||||
@codeLanguageList.push id: 'lua', name: 'Lua (Experimental)'
|
||||
@codeLanguageList.push id: 'io', name: 'Io (Experimental)'
|
||||
unless hadEverChosenHero? or testGroup is -1
|
||||
window.tracker?.trackEvent 'Heroes Modal', experimentalLangGroup: testGroup
|
||||
|
||||
onHeroChanged: (e) ->
|
||||
direction = e.direction # 'left' or 'right'
|
||||
heroItem = $(e.relatedTarget)
|
||||
|
|
Loading…
Add table
Reference in a new issue