mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-28 01:55:38 -05:00
Merge branch 'master' of https://github.com/codecombat/codecombat
This commit is contained in:
commit
e0b49ba2aa
82 changed files with 723 additions and 547 deletions
|
@ -35,7 +35,6 @@ module.exports = class LevelLoader extends CocoClass
|
||||||
|
|
||||||
@worldNecessities = []
|
@worldNecessities = []
|
||||||
@listenTo @supermodel, 'resource-loaded', @onWorldNecessityLoaded
|
@listenTo @supermodel, 'resource-loaded', @onWorldNecessityLoaded
|
||||||
@loadSession()
|
|
||||||
@loadLevel()
|
@loadLevel()
|
||||||
@loadAudio()
|
@loadAudio()
|
||||||
@playJingle()
|
@playJingle()
|
||||||
|
@ -44,14 +43,19 @@ module.exports = class LevelLoader extends CocoClass
|
||||||
else
|
else
|
||||||
@listenToOnce @supermodel, 'loaded-all', @onSupermodelLoaded
|
@listenToOnce @supermodel, 'loaded-all', @onSupermodelLoaded
|
||||||
|
|
||||||
playJingle: ->
|
# Supermodel (Level) Loading
|
||||||
return if @headless
|
|
||||||
# Apparently the jingle, when it tries to play immediately during all this loading, you can't hear it.
|
loadLevel: ->
|
||||||
# Add the timeout to fix this weird behavior.
|
@level = @supermodel.getModel(Level, @levelID) or new Level _id: @levelID
|
||||||
f = ->
|
if @level.loaded
|
||||||
jingles = ['ident_1', 'ident_2']
|
@onLevelLoaded()
|
||||||
AudioPlayer.playInterfaceSound jingles[Math.floor Math.random() * jingles.length]
|
else
|
||||||
setTimeout f, 500
|
@level = @supermodel.loadModel(@level, 'level').model
|
||||||
|
@listenToOnce @level, 'sync', @onLevelLoaded
|
||||||
|
|
||||||
|
onLevelLoaded: ->
|
||||||
|
@loadSession()
|
||||||
|
@populateLevel()
|
||||||
|
|
||||||
# Session Loading
|
# Session Loading
|
||||||
|
|
||||||
|
@ -83,29 +87,19 @@ module.exports = class LevelLoader extends CocoClass
|
||||||
@listenToOnce @opponentSession, 'sync', @loadDependenciesForSession
|
@listenToOnce @opponentSession, 'sync', @loadDependenciesForSession
|
||||||
|
|
||||||
loadDependenciesForSession: (session) ->
|
loadDependenciesForSession: (session) ->
|
||||||
return if @levelID is 'sky-span' # TODO
|
return unless @level.get('type', true) is 'hero'
|
||||||
# TODO: I think this runs afoul of https://github.com/codecombat/codecombat/issues/1108
|
heroConfig = session.get('heroConfig')
|
||||||
# TODO: this shouldn't happen when it's not a hero level, but we don't have level loaded yet,
|
unless heroConfig
|
||||||
# and the sessions are being created with default hero config regardless of whether it's a hero level.
|
heroConfig = {inventory: {}, thangType: '529ffbf1cf1818f2be000001'} # Temp: assign Tharin as the hero
|
||||||
if heroConfig = session.get('heroConfig')
|
session.set 'heroConfig', heroConfig
|
||||||
url = "/db/thang.type/#{heroConfig.thangType}/version?project=name,components,original"
|
url = "/db/thang.type/#{heroConfig.thangType}/version?project=name,components,original"
|
||||||
@worldNecessities.push @maybeLoadURL(url, ThangType, 'thang')
|
@worldNecessities.push @maybeLoadURL(url, ThangType, 'thang')
|
||||||
|
|
||||||
for itemThangType in _.values(heroConfig.inventory)
|
for itemThangType in _.values(heroConfig.inventory)
|
||||||
url = "/db/thang.type/#{itemThangType}/version?project=name,components,original"
|
url = "/db/thang.type/#{itemThangType}/version?project=name,components,original"
|
||||||
@worldNecessities.push @maybeLoadURL(url, ThangType, 'thang')
|
@worldNecessities.push @maybeLoadURL(url, ThangType, 'thang')
|
||||||
# Supermodel (Level) Loading
|
|
||||||
|
|
||||||
loadLevel: ->
|
# Grabbing the rest of the required data for the level
|
||||||
@level = @supermodel.getModel(Level, @levelID) or new Level _id: @levelID
|
|
||||||
if @level.loaded
|
|
||||||
@populateLevel()
|
|
||||||
else
|
|
||||||
@level = @supermodel.loadModel(@level, 'level').model
|
|
||||||
@listenToOnce @level, 'sync', @onLevelLoaded
|
|
||||||
|
|
||||||
onLevelLoaded: ->
|
|
||||||
@populateLevel()
|
|
||||||
|
|
||||||
populateLevel: ->
|
populateLevel: ->
|
||||||
thangIDs = []
|
thangIDs = []
|
||||||
|
@ -167,6 +161,7 @@ module.exports = class LevelLoader extends CocoClass
|
||||||
@loadThangsRequiredFromComponentList thangType.get('components')
|
@loadThangsRequiredFromComponentList thangType.get('components')
|
||||||
|
|
||||||
loadThangsRequiredFromComponentList: (components) ->
|
loadThangsRequiredFromComponentList: (components) ->
|
||||||
|
return unless components
|
||||||
requiredThangTypes = []
|
requiredThangTypes = []
|
||||||
for component in components when component.config
|
for component in components when component.config
|
||||||
if component.original is LevelComponent.EquipsID
|
if component.original is LevelComponent.EquipsID
|
||||||
|
@ -331,6 +326,15 @@ module.exports = class LevelLoader extends CocoClass
|
||||||
|
|
||||||
# Initial Sound Loading
|
# Initial Sound Loading
|
||||||
|
|
||||||
|
playJingle: ->
|
||||||
|
return if @headless
|
||||||
|
# Apparently the jingle, when it tries to play immediately during all this loading, you can't hear it.
|
||||||
|
# Add the timeout to fix this weird behavior.
|
||||||
|
f = ->
|
||||||
|
jingles = ['ident_1', 'ident_2']
|
||||||
|
AudioPlayer.playInterfaceSound jingles[Math.floor Math.random() * jingles.length]
|
||||||
|
setTimeout f, 500
|
||||||
|
|
||||||
loadAudio: ->
|
loadAudio: ->
|
||||||
return if @headless
|
return if @headless
|
||||||
AudioPlayer.preloadInterfaceSounds ['victory']
|
AudioPlayer.preloadInterfaceSounds ['victory']
|
||||||
|
|
|
@ -428,7 +428,7 @@ module.exports = Surface = class Surface extends CocoClass
|
||||||
pageHeight = $('#page-container').height() - $('#control-bar-view').outerHeight() - $('#playback-view').outerHeight()
|
pageHeight = $('#page-container').height() - $('#control-bar-view').outerHeight() - $('#playback-view').outerHeight()
|
||||||
newWidth = Math.min pageWidth, pageHeight * aspectRatio
|
newWidth = Math.min pageWidth, pageHeight * aspectRatio
|
||||||
newHeight = newWidth / aspectRatio
|
newHeight = newWidth / aspectRatio
|
||||||
else if $('#editor-level-thangs-tab-view')
|
else if $('#thangs-tab-view')
|
||||||
newWidth = $('#canvas-wrapper').width()
|
newWidth = $('#canvas-wrapper').width()
|
||||||
newHeight = newWidth / aspectRatio
|
newHeight = newWidth / aspectRatio
|
||||||
else
|
else
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi
|
||||||
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
||||||
# campaign_player_created: "Player-Created"
|
# campaign_player_created: "Player-Created"
|
||||||
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
# level_difficulty: "Difficulty: "
|
# level_difficulty: "Difficulty: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "български език", englishDescri
|
||||||
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
||||||
# campaign_player_created: "Player-Created"
|
# campaign_player_created: "Player-Created"
|
||||||
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
# level_difficulty: "Difficulty: "
|
# level_difficulty: "Difficulty: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "български език", englishDescri
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
|
||||||
campaign_multiplayer_description: "... on programes cara a cara contra altres jugadors."
|
campaign_multiplayer_description: "... on programes cara a cara contra altres jugadors."
|
||||||
campaign_player_created: "Creats pel Jugador"
|
campaign_player_created: "Creats pel Jugador"
|
||||||
campaign_player_created_description: "... on lluites contra la creativitat dels teus companys <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
campaign_player_created_description: "... on lluites contra la creativitat dels teus companys <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Dificultat: "
|
level_difficulty: "Dificultat: "
|
||||||
play_as: "Jugar com"
|
play_as: "Jugar com"
|
||||||
spectate: "Spectate"
|
spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr
|
||||||
campaign_multiplayer_description: "...ve které programujete proti jiným hráčům."
|
campaign_multiplayer_description: "...ve které programujete proti jiným hráčům."
|
||||||
campaign_player_created: "Uživatelsky vytvořené úrovně"
|
campaign_player_created: "Uživatelsky vytvořené úrovně"
|
||||||
campaign_player_created_description: "...ve kterých bojujete proti kreativitě ostatních <a href=\"/contribute#artisan\">Zdatných Kouzelníků</a>."
|
campaign_player_created_description: "...ve kterých bojujete proti kreativitě ostatních <a href=\"/contribute#artisan\">Zdatných Kouzelníků</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Obtížnost: "
|
level_difficulty: "Obtížnost: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
|
||||||
campaign_multiplayer_description: "... hvor du koder ansigt-til-ansigt imod andre spillere."
|
campaign_multiplayer_description: "... hvor du koder ansigt-til-ansigt imod andre spillere."
|
||||||
campaign_player_created: "Spillerkreerede"
|
campaign_player_created: "Spillerkreerede"
|
||||||
campaign_player_created_description: "... hvor du kæmper mod dine med-<a href=\"/contribute#artisan\">Kunsthåndværker-troldmænd</a>s kreativitet."
|
campaign_player_created_description: "... hvor du kæmper mod dine med-<a href=\"/contribute#artisan\">Kunsthåndværker-troldmænd</a>s kreativitet."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Sværhedsgrad: "
|
level_difficulty: "Sværhedsgrad: "
|
||||||
play_as: "Spil Som "
|
play_as: "Spil Som "
|
||||||
spectate: "Observér"
|
spectate: "Observér"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
|
||||||
campaign_multiplayer_description: "... in der Du Kopf-an-Kopf gegen andere Spieler programmierst."
|
campaign_multiplayer_description: "... in der Du Kopf-an-Kopf gegen andere Spieler programmierst."
|
||||||
campaign_player_created: "Von Spielern erstellt"
|
campaign_player_created: "Von Spielern erstellt"
|
||||||
campaign_player_created_description: "... in welchem Du gegen die Kreativität eines <a href=\"/contribute#artisan\">Artisan Zauberers</a> kämpfst."
|
campaign_player_created_description: "... in welchem Du gegen die Kreativität eines <a href=\"/contribute#artisan\">Artisan Zauberers</a> kämpfst."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Schwierigkeit: "
|
level_difficulty: "Schwierigkeit: "
|
||||||
play_as: "Spiele als "
|
play_as: "Spiele als "
|
||||||
spectate: "Zuschauen"
|
spectate: "Zuschauen"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
delta:
|
delta:
|
||||||
added: "hinzugefügt"
|
added: "hinzugefügt"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "Deutsch (Schweiz)", englishDescription: "Ge
|
||||||
campaign_multiplayer_description: "... i dene du Chopf a Chopf geg anderi Spieler spielsch."
|
campaign_multiplayer_description: "... i dene du Chopf a Chopf geg anderi Spieler spielsch."
|
||||||
campaign_player_created: "Vo Spieler erstellti Level"
|
campaign_player_created: "Vo Spieler erstellti Level"
|
||||||
campaign_player_created_description: "... i dene du gege d Kreativität vome <a href=\"/contribute#artisan\">Handwerker Zauberer</a> kämpfsch."
|
campaign_player_created_description: "... i dene du gege d Kreativität vome <a href=\"/contribute#artisan\">Handwerker Zauberer</a> kämpfsch."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Schwierigkeit: "
|
level_difficulty: "Schwierigkeit: "
|
||||||
play_as: "Spiel als"
|
play_as: "Spiel als"
|
||||||
spectate: "Zueluege"
|
spectate: "Zueluege"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "Deutsch (Schweiz)", englishDescription: "Ge
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
|
||||||
campaign_multiplayer_description: "... in der Du Kopf-an-Kopf gegen andere Spieler programmierst."
|
campaign_multiplayer_description: "... in der Du Kopf-an-Kopf gegen andere Spieler programmierst."
|
||||||
campaign_player_created: "Von Spielern erstellt"
|
campaign_player_created: "Von Spielern erstellt"
|
||||||
campaign_player_created_description: "... in welchem Du gegen die Kreativität eines <a href=\"/contribute#artisan\">Artisan Zauberers</a> kämpfst."
|
campaign_player_created_description: "... in welchem Du gegen die Kreativität eines <a href=\"/contribute#artisan\">Artisan Zauberers</a> kämpfst."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Schwierigkeit: "
|
level_difficulty: "Schwierigkeit: "
|
||||||
play_as: "Spiele als "
|
play_as: "Spiele als "
|
||||||
spectate: "Zuschauen"
|
spectate: "Zuschauen"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
delta:
|
delta:
|
||||||
added: "hinzugefügt"
|
added: "hinzugefügt"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "ελληνικά", englishDescription: "Gre
|
||||||
campaign_multiplayer_description: "... στο οποίο μπορείτε να προγραμματίσετε σώμα με σώμα έναντι άλλων παικτών."
|
campaign_multiplayer_description: "... στο οποίο μπορείτε να προγραμματίσετε σώμα με σώμα έναντι άλλων παικτών."
|
||||||
# campaign_player_created: "Player-Created"
|
# campaign_player_created: "Player-Created"
|
||||||
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Δυσκολία: "
|
level_difficulty: "Δυσκολία: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "ελληνικά", englishDescription: "Gre
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "English (AU)", englishDescription: "English
|
||||||
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
||||||
# campaign_player_created: "Player-Created"
|
# campaign_player_created: "Player-Created"
|
||||||
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
# level_difficulty: "Difficulty: "
|
# level_difficulty: "Difficulty: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "English (AU)", englishDescription: "English
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English
|
||||||
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
||||||
# campaign_player_created: "Player-Created"
|
# campaign_player_created: "Player-Created"
|
||||||
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
# level_difficulty: "Difficulty: "
|
# level_difficulty: "Difficulty: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English
|
||||||
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
||||||
# campaign_player_created: "Player-Created"
|
# campaign_player_created: "Player-Created"
|
||||||
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
# level_difficulty: "Difficulty: "
|
# level_difficulty: "Difficulty: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@
|
||||||
campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
||||||
campaign_player_created: "Player-Created"
|
campaign_player_created: "Player-Created"
|
||||||
campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Difficulty: "
|
level_difficulty: "Difficulty: "
|
||||||
play_as: "Play As"
|
play_as: "Play As"
|
||||||
spectate: "Spectate"
|
spectate: "Spectate"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip
|
||||||
campaign_multiplayer_description: "... en las que programas cara-a-cara contra otros jugadores."
|
campaign_multiplayer_description: "... en las que programas cara-a-cara contra otros jugadores."
|
||||||
campaign_player_created: "Creados-Por-Jugadores"
|
campaign_player_created: "Creados-Por-Jugadores"
|
||||||
campaign_player_created_description: "... en los que luchas contra la creatividad de tus compañeros <a href=\"/contribute#artisan\">Hechiceros Artesanales</a>."
|
campaign_player_created_description: "... en los que luchas contra la creatividad de tus compañeros <a href=\"/contribute#artisan\">Hechiceros Artesanales</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Dificultad: "
|
level_difficulty: "Dificultad: "
|
||||||
play_as: "Jugar Como "
|
play_as: "Jugar Como "
|
||||||
spectate: "Observar"
|
spectate: "Observar"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
|
||||||
campaign_multiplayer_description: "... en las que tu código se enfrentará al de otros jugadores."
|
campaign_multiplayer_description: "... en las que tu código se enfrentará al de otros jugadores."
|
||||||
campaign_player_created: "Creaciones de los Jugadores"
|
campaign_player_created: "Creaciones de los Jugadores"
|
||||||
campaign_player_created_description: "... en las que luchas contra la creatividad de tus compañeros <a href=\"/contribute#artisa\">Magos Artesanos</a>."
|
campaign_player_created_description: "... en las que luchas contra la creatividad de tus compañeros <a href=\"/contribute#artisa\">Magos Artesanos</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Dificultad: "
|
level_difficulty: "Dificultad: "
|
||||||
play_as: "Jugar como"
|
play_as: "Jugar como"
|
||||||
spectate: "Observar"
|
spectate: "Observar"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
delta:
|
delta:
|
||||||
added: "Añadido"
|
added: "Añadido"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian",
|
||||||
campaign_multiplayer_description: "... جایی که کد رو به رو شدن با بقیه بازیکنان رو مینویسید."
|
campaign_multiplayer_description: "... جایی که کد رو به رو شدن با بقیه بازیکنان رو مینویسید."
|
||||||
campaign_player_created: "ایجاد بازیکن"
|
campaign_player_created: "ایجاد بازیکن"
|
||||||
campaign_player_created_description: "... جایی که در مقابل خلاقیت نیرو هاتون قرار میگیرید <a href=\"/contribute#artisan\">جادوگران آرتیزان</a>."
|
campaign_player_created_description: "... جایی که در مقابل خلاقیت نیرو هاتون قرار میگیرید <a href=\"/contribute#artisan\">جادوگران آرتیزان</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "سختی: "
|
level_difficulty: "سختی: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian",
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran
|
||||||
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
||||||
# campaign_player_created: "Player-Created"
|
# campaign_player_created: "Player-Created"
|
||||||
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
# level_difficulty: "Difficulty: "
|
# level_difficulty: "Difficulty: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
|
||||||
campaign_multiplayer_description: "... dans laquelle vous coderez en face à face contre d'autres joueurs."
|
campaign_multiplayer_description: "... dans laquelle vous coderez en face à face contre d'autres joueurs."
|
||||||
campaign_player_created: "Niveaux créés par les joueurs"
|
campaign_player_created: "Niveaux créés par les joueurs"
|
||||||
campaign_player_created_description: "... Dans laquelle vous serez confrontés à la créativité des votres.<a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
campaign_player_created_description: "... Dans laquelle vous serez confrontés à la créativité des votres.<a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Difficulté: "
|
level_difficulty: "Difficulté: "
|
||||||
play_as: "Jouer comme "
|
play_as: "Jouer comme "
|
||||||
spectate: "Spectateur"
|
spectate: "Spectateur"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
delta:
|
delta:
|
||||||
added: "Ajouté"
|
added: "Ajouté"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
|
||||||
campaign_multiplayer_description: "..."
|
campaign_multiplayer_description: "..."
|
||||||
campaign_player_created: "תוצרי השחקנים"
|
campaign_player_created: "תוצרי השחקנים"
|
||||||
campaign_player_created_description: "... שבהם תילחם נגד היצירתיות של <a href=\"/contribute#artisan\">בעלי-המלאכה</a>."
|
campaign_player_created_description: "... שבהם תילחם נגד היצירתיות של <a href=\"/contribute#artisan\">בעלי-המלאכה</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "רמת קושי: "
|
level_difficulty: "רמת קושי: "
|
||||||
play_as: "שחק בתור "
|
play_as: "שחק בתור "
|
||||||
spectate: "צופה"
|
spectate: "צופה"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe
|
||||||
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
||||||
# campaign_player_created: "Player-Created"
|
# campaign_player_created: "Player-Created"
|
||||||
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
# level_difficulty: "Difficulty: "
|
# level_difficulty: "Difficulty: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
|
||||||
campaign_multiplayer_description: "... amelyekben a kódod felveheti a versenyt más játékosok kódjával"
|
campaign_multiplayer_description: "... amelyekben a kódod felveheti a versenyt más játékosok kódjával"
|
||||||
campaign_player_created: "Játékosok pályái"
|
campaign_player_created: "Játékosok pályái"
|
||||||
campaign_player_created_description: "...melyekben <a href=\"/contribute#artisan\">Művészi Varázsló</a> társaid ellen kűzdhetsz."
|
campaign_player_created_description: "...melyekben <a href=\"/contribute#artisan\">Művészi Varázsló</a> társaid ellen kűzdhetsz."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Nehézség: "
|
level_difficulty: "Nehézség: "
|
||||||
play_as: "Játssz mint"
|
play_as: "Játssz mint"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind
|
||||||
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
||||||
# campaign_player_created: "Player-Created"
|
# campaign_player_created: "Player-Created"
|
||||||
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
# level_difficulty: "Difficulty: "
|
# level_difficulty: "Difficulty: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
|
||||||
campaign_multiplayer_description: "... nelle quali programmi faccia a faccia contro altri giocatori."
|
campaign_multiplayer_description: "... nelle quali programmi faccia a faccia contro altri giocatori."
|
||||||
campaign_player_created: "Creati dai giocatori"
|
campaign_player_created: "Creati dai giocatori"
|
||||||
campaign_player_created_description: "... nei quali affronterai la creatività dei tuoi compagni <a href=\"/contribute#artisan\">Stregoni Artigiani</a>."
|
campaign_player_created_description: "... nei quali affronterai la creatività dei tuoi compagni <a href=\"/contribute#artisan\">Stregoni Artigiani</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Difficoltà: "
|
level_difficulty: "Difficoltà: "
|
||||||
play_as: "Gioca come "
|
play_as: "Gioca come "
|
||||||
spectate: "Spettatore"
|
spectate: "Spettatore"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
|
||||||
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
||||||
# campaign_player_created: "Player-Created"
|
# campaign_player_created: "Player-Created"
|
||||||
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "難易度: "
|
level_difficulty: "難易度: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
||||||
campaign_multiplayer_description: "... 이곳에서 당신은 다른 인간 플레이어들과 직접 결투할 수 있습니다."
|
campaign_multiplayer_description: "... 이곳에서 당신은 다른 인간 플레이어들과 직접 결투할 수 있습니다."
|
||||||
campaign_player_created: "사용자 직접 제작"
|
campaign_player_created: "사용자 직접 제작"
|
||||||
campaign_player_created_description: "... 당신 동료가 고안한 레벨에 도전하세요 <a href=\"/contributeartisan\">마법사 장인</a>."
|
campaign_player_created_description: "... 당신 동료가 고안한 레벨에 도전하세요 <a href=\"/contributeartisan\">마법사 장인</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "난이도: "
|
level_difficulty: "난이도: "
|
||||||
play_as: "Play As "
|
play_as: "Play As "
|
||||||
spectate: "관중모드"
|
spectate: "관중모드"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
|
||||||
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
||||||
# campaign_player_created: "Player-Created"
|
# campaign_player_created: "Player-Created"
|
||||||
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
# level_difficulty: "Difficulty: "
|
# level_difficulty: "Difficulty: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
|
||||||
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
||||||
# campaign_player_created: "Player-Created"
|
# campaign_player_created: "Player-Created"
|
||||||
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
# level_difficulty: "Difficulty: "
|
# level_difficulty: "Difficulty: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg
|
||||||
campaign_multiplayer_description: "... hvor du spiller direkte mot andre spillere."
|
campaign_multiplayer_description: "... hvor du spiller direkte mot andre spillere."
|
||||||
campaign_player_created: "Spiller-Lagde"
|
campaign_player_created: "Spiller-Lagde"
|
||||||
campaign_player_created_description: "... hvor du kjemper mot kreativiteten til en av dine medspillende <a href=\"/contribute#artisan\">Artisan Trollmenn</a>."
|
campaign_player_created_description: "... hvor du kjemper mot kreativiteten til en av dine medspillende <a href=\"/contribute#artisan\">Artisan Trollmenn</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Vanskelighetsgrad: "
|
level_difficulty: "Vanskelighetsgrad: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription:
|
||||||
campaign_multiplayer_description: "... waarin je direct tegen andere spelers speelt."
|
campaign_multiplayer_description: "... waarin je direct tegen andere spelers speelt."
|
||||||
campaign_player_created: "Door-spelers-gemaakt"
|
campaign_player_created: "Door-spelers-gemaakt"
|
||||||
campaign_player_created_description: "... waarin je ten strijde trekt tegen de creativiteit van andere <a href=\"/contribute#artisan\">Ambachtelijke Tovenaars</a>."
|
campaign_player_created_description: "... waarin je ten strijde trekt tegen de creativiteit van andere <a href=\"/contribute#artisan\">Ambachtelijke Tovenaars</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Moeilijkheidsgraad: "
|
level_difficulty: "Moeilijkheidsgraad: "
|
||||||
play_as: "Speel als "
|
play_as: "Speel als "
|
||||||
spectate: "Toeschouwen"
|
spectate: "Toeschouwen"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription:
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
|
||||||
campaign_multiplayer_description: "... waarin je direct tegen andere spelers speelt."
|
campaign_multiplayer_description: "... waarin je direct tegen andere spelers speelt."
|
||||||
campaign_player_created: "Door-spelers-gemaakt"
|
campaign_player_created: "Door-spelers-gemaakt"
|
||||||
campaign_player_created_description: "... waarin je ten strijde trekt tegen de creativiteit van andere <a href=\"/contribute#artisan\">Ambachtelijke Tovenaars</a>."
|
campaign_player_created_description: "... waarin je ten strijde trekt tegen de creativiteit van andere <a href=\"/contribute#artisan\">Ambachtelijke Tovenaars</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Moeilijkheidsgraad: "
|
level_difficulty: "Moeilijkheidsgraad: "
|
||||||
play_as: "Speel als "
|
play_as: "Speel als "
|
||||||
spectate: "Toeschouwen"
|
spectate: "Toeschouwen"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "Norwegian Nynorsk", englishDescription: "No
|
||||||
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
||||||
# campaign_player_created: "Player-Created"
|
# campaign_player_created: "Player-Created"
|
||||||
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
# level_difficulty: "Difficulty: "
|
# level_difficulty: "Difficulty: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "Norwegian Nynorsk", englishDescription: "No
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "Norsk", englishDescription: "Norwegian", tr
|
||||||
campaign_multiplayer_description: "... hvor du spiller direkte mot andre spillere."
|
campaign_multiplayer_description: "... hvor du spiller direkte mot andre spillere."
|
||||||
campaign_player_created: "Brett laget av andre brukere"
|
campaign_player_created: "Brett laget av andre brukere"
|
||||||
campaign_player_created_description: "... hvor du kjemper mot kreativiteten til en av dine medspillende <a href=\"/contribute#artisan\">Artisan Trollmenn</a>."
|
campaign_player_created_description: "... hvor du kjemper mot kreativiteten til en av dine medspillende <a href=\"/contribute#artisan\">Artisan Trollmenn</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Vanskelighetsgrad: "
|
level_difficulty: "Vanskelighetsgrad: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "Norsk", englishDescription: "Norwegian", tr
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish
|
||||||
campaign_multiplayer_description: "... w których konkurujesz z innymi graczami."
|
campaign_multiplayer_description: "... w których konkurujesz z innymi graczami."
|
||||||
campaign_player_created: "Stworzone przez graczy"
|
campaign_player_created: "Stworzone przez graczy"
|
||||||
campaign_player_created_description: "... w których walczysz przeciwko dziełom <a href=\"/contribute#artisan\">Czarodziejów Rękodzielnictwa</a>"
|
campaign_player_created_description: "... w których walczysz przeciwko dziełom <a href=\"/contribute#artisan\">Czarodziejów Rękodzielnictwa</a>"
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Poziom trudności: "
|
level_difficulty: "Poziom trudności: "
|
||||||
play_as: "Graj jako "
|
play_as: "Graj jako "
|
||||||
spectate: "Oglądaj"
|
spectate: "Oglądaj"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "português do Brasil", englishDescription:
|
||||||
campaign_multiplayer_description: "... nas quais você programará cara-a-cara contra outros jogadores."
|
campaign_multiplayer_description: "... nas quais você programará cara-a-cara contra outros jogadores."
|
||||||
campaign_player_created: "Criados por Jogadores"
|
campaign_player_created: "Criados por Jogadores"
|
||||||
campaign_player_created_description: "... nos quais você batalhará contra a criatividade dos seus companheiros <a href=\"/contribute#artisan\">feiticeiros Artesãos</a>."
|
campaign_player_created_description: "... nos quais você batalhará contra a criatividade dos seus companheiros <a href=\"/contribute#artisan\">feiticeiros Artesãos</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Dificuldade: "
|
level_difficulty: "Dificuldade: "
|
||||||
play_as: "Jogar Como "
|
play_as: "Jogar Como "
|
||||||
spectate: "Assistir"
|
spectate: "Assistir"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "português do Brasil", englishDescription:
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
|
||||||
campaign_multiplayer_description: "... onde programa frente-a-frente contra outros jogadores."
|
campaign_multiplayer_description: "... onde programa frente-a-frente contra outros jogadores."
|
||||||
campaign_player_created: "Criados por Jogadores"
|
campaign_player_created: "Criados por Jogadores"
|
||||||
campaign_player_created_description: "... onde combate contra a criatividade dos seus colegas <a href=\"/contribute#artisan\">Feiticeiros Artesãos</a>."
|
campaign_player_created_description: "... onde combate contra a criatividade dos seus colegas <a href=\"/contribute#artisan\">Feiticeiros Artesãos</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Dificuldade: "
|
level_difficulty: "Dificuldade: "
|
||||||
play_as: "Jogar Como"
|
play_as: "Jogar Como"
|
||||||
spectate: "Espectar"
|
spectate: "Espectar"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
|
||||||
achievement: "Conquista"
|
achievement: "Conquista"
|
||||||
clas: "CLAs"
|
clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
delta:
|
delta:
|
||||||
added: "Adicionados/as"
|
added: "Adicionados/as"
|
||||||
|
|
|
@ -3,21 +3,21 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
|
||||||
loading: "Se incarcă..."
|
loading: "Se incarcă..."
|
||||||
saving: "Se salvează..."
|
saving: "Se salvează..."
|
||||||
sending: "Se trimite..."
|
sending: "Se trimite..."
|
||||||
# send: "Send"
|
send: "Trimite"
|
||||||
cancel: "Anulează"
|
cancel: "Anulează"
|
||||||
save: "Salvează"
|
save: "Salvează"
|
||||||
# publish: "Publish"
|
publish: "Publica"
|
||||||
create: "Crează"
|
create: "Creează"
|
||||||
delay_1_sec: "1 secundă"
|
delay_1_sec: "1 secundă"
|
||||||
delay_3_sec: "3 secunde"
|
delay_3_sec: "3 secunde"
|
||||||
delay_5_sec: "5 secunde"
|
delay_5_sec: "5 secunde"
|
||||||
manual: "Manual"
|
manual: "Manual"
|
||||||
fork: "Fork"
|
fork: "Fork"
|
||||||
play: "Joacă"
|
play: "Joacă"
|
||||||
# retry: "Retry"
|
retry: "Reîncearca"
|
||||||
# watch: "Watch"
|
# watch: "Watch"
|
||||||
# unwatch: "Unwatch"
|
# unwatch: "Unwatch"
|
||||||
# submit_patch: "Submit Patch"
|
submit_patch: "Înainteaza Patch"
|
||||||
|
|
||||||
units:
|
units:
|
||||||
second: "secundă"
|
second: "secundă"
|
||||||
|
@ -26,14 +26,14 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
|
||||||
minutes: "minute"
|
minutes: "minute"
|
||||||
hour: "oră"
|
hour: "oră"
|
||||||
hours: "ore"
|
hours: "ore"
|
||||||
# day: "day"
|
day: "zi"
|
||||||
# days: "days"
|
days: "zile"
|
||||||
# week: "week"
|
week: "săptămână"
|
||||||
# weeks: "weeks"
|
weeks: "săptămâni"
|
||||||
# month: "month"
|
month: "luna"
|
||||||
# months: "months"
|
months: "luni"
|
||||||
# year: "year"
|
year: "an"
|
||||||
# years: "years"
|
years: "ani"
|
||||||
|
|
||||||
modal:
|
modal:
|
||||||
close: "Inchide"
|
close: "Inchide"
|
||||||
|
@ -44,16 +44,16 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
|
||||||
|
|
||||||
nav:
|
nav:
|
||||||
play: "Nivele"
|
play: "Nivele"
|
||||||
# community: "Community"
|
community: "Communitate"
|
||||||
editor: "Editor"
|
editor: "Editor"
|
||||||
blog: "Blog"
|
blog: "Blog"
|
||||||
forum: "Forum"
|
forum: "Forum"
|
||||||
# account: "Account"
|
account: "Cont"
|
||||||
# profile: "Profile"
|
profile: "Profil"
|
||||||
# stats: "Stats"
|
stats: "Statistică"
|
||||||
# code: "Code"
|
code: "Cod"
|
||||||
admin: "Admin"
|
admin: "Admin"
|
||||||
home: "Acasa"
|
home: "Acasă"
|
||||||
contribute: "Contribuie"
|
contribute: "Contribuie"
|
||||||
legal: "Confidențialitate și termeni"
|
legal: "Confidențialitate și termeni"
|
||||||
about: "Despre"
|
about: "Despre"
|
||||||
|
@ -89,8 +89,8 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
|
||||||
creating: "Se creează contul..."
|
creating: "Se creează contul..."
|
||||||
sign_up: "Înscrie-te"
|
sign_up: "Înscrie-te"
|
||||||
log_in: "loghează-te cu parola"
|
log_in: "loghează-te cu parola"
|
||||||
# social_signup: "Or, you can sign up through Facebook or G+:"
|
social_signup: "Sau, te poți inregistra cu Facebook sau G+:"
|
||||||
# required: "You need to log in before you can go that way."
|
required: "Trebuie să te înregistrezi înaite să parcurgi acest drum."
|
||||||
|
|
||||||
home:
|
home:
|
||||||
slogan: "Învață sa scrii cod jucându-te"
|
slogan: "Învață sa scrii cod jucându-te"
|
||||||
|
@ -103,12 +103,12 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
|
||||||
for_beginners: "Pentru Începători"
|
for_beginners: "Pentru Începători"
|
||||||
multiplayer: "Multiplayer"
|
multiplayer: "Multiplayer"
|
||||||
for_developers: "Pentru dezvoltatori"
|
for_developers: "Pentru dezvoltatori"
|
||||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
javascript_blurb: "Limbajul web-ului. Perfect pentru crearea website-urilor, web applicații, jocuri HTML5, si servere. The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
python_blurb: "Simplu dar puternic, Python este un limbaj de uz general extraordinar!"
|
||||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
coffeescript_blurb: "JavaScript cu o syntaxă mai placută! Nicer JavaScript syntax."
|
||||||
# clojure_blurb: "A modern Lisp."
|
clojure_blurb: "Un Lisp modern."
|
||||||
# lua_blurb: "Game scripting language."
|
lua_blurb: "Limbaj de scripting pentru jocuri."
|
||||||
# io_blurb: "Simple but obscure."
|
io_blurb: "Simplu dar obscur."
|
||||||
|
|
||||||
play:
|
play:
|
||||||
choose_your_level: "Alege nivelul"
|
choose_your_level: "Alege nivelul"
|
||||||
|
@ -123,11 +123,13 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
|
||||||
campaign_multiplayer_description: "... în care te lupți cap-la-cap contra alti jucători."
|
campaign_multiplayer_description: "... în care te lupți cap-la-cap contra alti jucători."
|
||||||
campaign_player_created: "Create de jucători"
|
campaign_player_created: "Create de jucători"
|
||||||
campaign_player_created_description: "... în care ai ocazia să testezi creativitatea colegilor tai <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
campaign_player_created_description: "... în care ai ocazia să testezi creativitatea colegilor tai <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Dificultate: "
|
level_difficulty: "Dificultate: "
|
||||||
play_as: "Alege-ți echipa"
|
play_as: "Alege-ți echipa"
|
||||||
spectate: "Spectator"
|
spectate: "Spectator"
|
||||||
# players: "players"
|
players: "jucători"
|
||||||
# hours_played: "hours played"
|
hours_played: "ore jucate"
|
||||||
|
|
||||||
contact:
|
contact:
|
||||||
contact_us: "Contact CodeCombat"
|
contact_us: "Contact CodeCombat"
|
||||||
|
@ -139,8 +141,8 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
|
||||||
forum_page: "forumul nostru"
|
forum_page: "forumul nostru"
|
||||||
forum_suffix: " în schimb."
|
forum_suffix: " în schimb."
|
||||||
send: "Trimite Feedback"
|
send: "Trimite Feedback"
|
||||||
# contact_candidate: "Contact Candidate"
|
contact_candidate: "Contacteaza Candidatul"
|
||||||
# recruitment_reminder: "Use this form to reach out to candidates you are interested in interviewing. Remember that CodeCombat charges 15% of first-year salary. The fee is due upon hiring the employee and is refundable for 90 days if the employee does not remain employed. Part time, remote, and contract employees are free, as are interns."
|
recruitment_reminder: "Folosiți acest formular pentru a ajunge la candidații care va intereseaza pentru interviu. CodeCombat percepe 15% din salariu în primul an. Taxa este datorată la angajare și este rambursabilă pentru 90 de zile în cazul în care salariatul nu rămâne angajat. Cele part time, și angajați cu contract la distanță sunt gratuite, așa cum sunt stagiari."
|
||||||
|
|
||||||
diplomat_suggestion:
|
diplomat_suggestion:
|
||||||
title: "Ajută-ne să traducem CodeCombat!"
|
title: "Ajută-ne să traducem CodeCombat!"
|
||||||
|
@ -153,16 +155,16 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
|
||||||
wizard_settings:
|
wizard_settings:
|
||||||
title: "Setări Wizard"
|
title: "Setări Wizard"
|
||||||
customize_avatar: "Personalizează-ți Avatarul"
|
customize_avatar: "Personalizează-ți Avatarul"
|
||||||
# active: "Active"
|
active: "Activ"
|
||||||
# color: "Color"
|
color: "Culoare"
|
||||||
# group: "Group"
|
group: "Grup"
|
||||||
clothes: "Haine"
|
clothes: "Haine"
|
||||||
trim: "Margine"
|
trim: "Margine"
|
||||||
cloud: "Nor"
|
cloud: "Nor"
|
||||||
# team: "Team"
|
team: "Echipa"
|
||||||
spell: "Vrajă"
|
spell: "Vrajă"
|
||||||
boots: "Încălțăminte"
|
boots: "Încălțăminte"
|
||||||
hue: "Culoare"
|
hue: "Nuanță"
|
||||||
saturation: "Saturație"
|
saturation: "Saturație"
|
||||||
lightness: "Luminozitate"
|
lightness: "Luminozitate"
|
||||||
|
|
||||||
|
@ -172,7 +174,7 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
|
||||||
autosave: "Modificările se salvează automat"
|
autosave: "Modificările se salvează automat"
|
||||||
me_tab: "Eu"
|
me_tab: "Eu"
|
||||||
picture_tab: "Poză"
|
picture_tab: "Poză"
|
||||||
# upload_picture: "Upload a picture"
|
upload_picture: "Uploadeaza o imagine"
|
||||||
wizard_tab: "Wizard"
|
wizard_tab: "Wizard"
|
||||||
password_tab: "Parolă"
|
password_tab: "Parolă"
|
||||||
emails_tab: "Email-uri"
|
emails_tab: "Email-uri"
|
||||||
|
@ -181,16 +183,16 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
|
||||||
new_password: "Parolă nouă"
|
new_password: "Parolă nouă"
|
||||||
new_password_verify: "Verifică"
|
new_password_verify: "Verifică"
|
||||||
email_subscriptions: "Subscripție Email"
|
email_subscriptions: "Subscripție Email"
|
||||||
# email_subscriptions_none: "No Email Subscriptions."
|
email_subscriptions_none: "Nu ai subscripții Email."
|
||||||
email_announcements: "Anunțuri"
|
email_announcements: "Anunțuri"
|
||||||
email_announcements_description: "Primește email-uri cu ultimele știri despre CodeCombat."
|
email_announcements_description: "Primește email-uri cu ultimele știri despre CodeCombat."
|
||||||
email_notifications: "Notificări"
|
email_notifications: "Notificări"
|
||||||
# email_notifications_summary: "Controls for personalized, automatic email notifications related to your CodeCombat activity."
|
email_notifications_summary: "Control pentru notificări email personalizate, legate de activitatea CodeCombat."
|
||||||
# email_any_notes: "Any Notifications"
|
email_any_notes: "Orice Notificări"
|
||||||
# email_any_notes_description: "Disable to stop all activity notification emails."
|
email_any_notes_description: "Dezactivați pentru a opri toate e-mailurile de notificare a activității. Disable to stop all activity notification emails."
|
||||||
# email_news: "News"
|
email_news: "Noutăți"
|
||||||
# email_recruit_notes: "Job Opportunities"
|
email_recruit_notes: "Oportunități de job-uri"
|
||||||
# email_recruit_notes_description: "If you play really well, we may contact you about getting you a (better) job."
|
email_recruit_notes_description: "Daca joci foarte bine, este posibil sa te contactăm pentru obținerea unui loc (mai bun) de muncă."
|
||||||
contributor_emails: "Contributor Class Emails"
|
contributor_emails: "Contributor Class Emails"
|
||||||
contribute_prefix: "Căutăm oameni să se alăture distracției! Intră pe "
|
contribute_prefix: "Căutăm oameni să se alăture distracției! Intră pe "
|
||||||
contribute_page: "pagina de contribuție"
|
contribute_page: "pagina de contribuție"
|
||||||
|
@ -199,49 +201,49 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
|
||||||
error_saving: "Salvare erori"
|
error_saving: "Salvare erori"
|
||||||
saved: "Modificări salvate"
|
saved: "Modificări salvate"
|
||||||
password_mismatch: "Parola nu se potrivește."
|
password_mismatch: "Parola nu se potrivește."
|
||||||
# password_repeat: "Please repeat your password."
|
password_repeat: "Te rugăm sa repeți parola."
|
||||||
# job_profile: "Job Profile"
|
# job_profile: "Job Profile"
|
||||||
# job_profile_approved: "Your job profile has been approved by CodeCombat. Employers will be able to see it until you either mark it inactive or it has not been changed for four weeks."
|
# job_profile_approved: "Your job profile has been approved by CodeCombat. Employers will be able to see it until you either mark it inactive or it has not been changed for four weeks."
|
||||||
# job_profile_explanation: "Hi! Fill this out, and we will get in touch about finding you a software developer job."
|
# job_profile_explanation: "Hi! Fill this out, and we will get in touch about finding you a software developer job."
|
||||||
# sample_profile: "See a sample profile"
|
sample_profile: "Vezi un profil exemplu"
|
||||||
# view_profile: "View Your Profile"
|
view_profile: "Vizualizează Profilul"
|
||||||
|
|
||||||
account_profile:
|
account_profile:
|
||||||
# settings: "Settings"
|
settings: "Setări"
|
||||||
# edit_profile: "Edit Profile"
|
edit_profile: "Modifica Profil"
|
||||||
# done_editing: "Done Editing"
|
done_editing: "Am terminat modificările."
|
||||||
profile_for_prefix: "Profil pentru "
|
profile_for_prefix: "Profil pentru "
|
||||||
profile_for_suffix: ""
|
profile_for_suffix: ""
|
||||||
# featured: "Featured"
|
featured: "Recomandate"
|
||||||
# not_featured: "Not Featured"
|
# not_featured: "Not Featured"
|
||||||
# looking_for: "Looking for:"
|
# looking_for: "Looking for:"
|
||||||
# last_updated: "Last updated:"
|
# last_updated: "Last updated:"
|
||||||
# contact: "Contact"
|
# contact: "Contact"
|
||||||
# active: "Looking for interview offers now"
|
active: "Caut oferte de interviu."
|
||||||
# inactive: "Not looking for offers right now"
|
inactive: "Nu caut oferte"
|
||||||
# complete: "complete"
|
complete: "complet"
|
||||||
# next: "Next"
|
next: "Urmatorul"
|
||||||
# next_city: "city?"
|
next_city: "oras?"
|
||||||
# next_country: "pick your country."
|
next_country: "alege țara."
|
||||||
# next_name: "name?"
|
next_name: "nume?"
|
||||||
# next_short_description: "write a short description."
|
next_short_description: "scrie o scurta descriere."
|
||||||
# next_long_description: "describe your desired position."
|
next_long_description: "descrie poziția dorită."
|
||||||
# next_skills: "list at least five skills."
|
next_skills: "listeaza cel puțin cinci competențe."
|
||||||
# next_work: "chronicle your work history."
|
next_work: "cronica istoricului dvs. de lucru."
|
||||||
# next_education: "recount your educational ordeals."
|
next_education: "povesteste-ne de chinurile educaționale"
|
||||||
# next_projects: "show off up to three projects you've worked on."
|
next_projects: "scoate in evidență pana la 3 proiecte la care ai lucrat."
|
||||||
# next_links: "add any personal or social links."
|
next_links: "adăuga orice link-uri personale sau sociale."
|
||||||
# next_photo: "add an optional professional photo."
|
next_photo: "adăuga o fotografie profesionala opțională."
|
||||||
# next_active: "mark yourself open to offers to show up in searches."
|
next_active: "indica că esti deschis la oferte ca să apară în căutări."
|
||||||
# example_blog: "Blog"
|
example_blog: "Blog"
|
||||||
# example_personal_site: "Personal Site"
|
example_personal_site: "Site Personal"
|
||||||
# links_header: "Personal Links"
|
links_header: "Link-uri Personale"
|
||||||
# links_blurb: "Link any other sites or profiles you want to highlight, like your GitHub, your LinkedIn, or your blog."
|
links_blurb: "Link către orice alte site-uri sau profiluri pe care doriți să se sublinieze, ca GitHub, LinkedIn, sau blog-ul personal."
|
||||||
# links_name: "Link Name"
|
links_name: "Nume Link"
|
||||||
# links_name_help: "What are you linking to?"
|
links_name_help: "Catre ce faci link?"
|
||||||
# links_link_blurb: "Link URL"
|
links_link_blurb: "Link URL"
|
||||||
# basics_header: "Update basic info"
|
basics_header: "Actualizați informații de bază"
|
||||||
# basics_active: "Open to Offers"
|
basics_active: "Deschis la Oferte"
|
||||||
# basics_active_help: "Want interview offers right now?"
|
# basics_active_help: "Want interview offers right now?"
|
||||||
# basics_job_title: "Desired Job Title"
|
# basics_job_title: "Desired Job Title"
|
||||||
# basics_job_title_help: "What role are you looking for?"
|
# basics_job_title_help: "What role are you looking for?"
|
||||||
|
@ -359,15 +361,15 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
|
||||||
done: "Gata"
|
done: "Gata"
|
||||||
customize_wizard: "Personalizează Wizard-ul"
|
customize_wizard: "Personalizează Wizard-ul"
|
||||||
home: "Acasă"
|
home: "Acasă"
|
||||||
# stop: "Stop"
|
stop: "Stop"
|
||||||
# game_menu: "Game Menu"
|
game_menu: "Meniul Jocului"
|
||||||
guide: "Ghid"
|
guide: "Ghid"
|
||||||
restart: "Restart"
|
restart: "Restart"
|
||||||
goals: "Obiective"
|
goals: "Obiective"
|
||||||
# success: "Success!"
|
success: "Success!"
|
||||||
# incomplete: "Incomplete"
|
incomplete: "Incomplet"
|
||||||
# timed_out: "Ran out of time"
|
timed_out: "Ai ramas fara timp"
|
||||||
# failing: "Failing"
|
failing: "Eşec"
|
||||||
action_timeline: "Timeline-ul acțiunii"
|
action_timeline: "Timeline-ul acțiunii"
|
||||||
click_to_select: "Apasă pe o unitate pentru a o selecta."
|
click_to_select: "Apasă pe o unitate pentru a o selecta."
|
||||||
reload_title: "Reîncarcă tot codul?"
|
reload_title: "Reîncarcă tot codul?"
|
||||||
|
@ -397,7 +399,7 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
|
||||||
hud_continue: "Continuă (apasă shift-space)"
|
hud_continue: "Continuă (apasă shift-space)"
|
||||||
spell_saved: "Vrajă salvată"
|
spell_saved: "Vrajă salvată"
|
||||||
skip_tutorial: "Sari peste (esc)"
|
skip_tutorial: "Sari peste (esc)"
|
||||||
# keyboard_shortcuts: "Key Shortcuts"
|
keyboard_shortcuts: "Scurtături Keyboard"
|
||||||
loading_ready: "Gata!"
|
loading_ready: "Gata!"
|
||||||
tip_insert_positions: "Shift+Click oriunde pe harta pentru a insera punctul în editorul de vrăji."
|
tip_insert_positions: "Shift+Click oriunde pe harta pentru a insera punctul în editorul de vrăji."
|
||||||
tip_toggle_play: "Pune sau scoate pauza cu Ctrl+P."
|
tip_toggle_play: "Pune sau scoate pauza cu Ctrl+P."
|
||||||
|
@ -421,7 +423,7 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
|
||||||
# tip_binary: "There are only 10 types of people in the world: those who understand binary, and those who don't."
|
# tip_binary: "There are only 10 types of people in the world: those who understand binary, and those who don't."
|
||||||
# tip_commitment_yoda: "A programmer must have the deepest commitment, the most serious mind. ~ Yoda"
|
# tip_commitment_yoda: "A programmer must have the deepest commitment, the most serious mind. ~ Yoda"
|
||||||
# tip_no_try: "Do. Or do not. There is no try. - Yoda"
|
# tip_no_try: "Do. Or do not. There is no try. - Yoda"
|
||||||
# tip_patience: "Patience you must have, young Padawan. - Yoda"
|
tip_patience: "Să ai rabdare trebuie, tinere Padawan. - Yoda"
|
||||||
# tip_documented_bug: "A documented bug is not a bug; it is a feature."
|
# tip_documented_bug: "A documented bug is not a bug; it is a feature."
|
||||||
# tip_impossible: "It always seems impossible until it's done. - Nelson Mandela"
|
# tip_impossible: "It always seems impossible until it's done. - Nelson Mandela"
|
||||||
# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds"
|
# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds"
|
||||||
|
@ -444,9 +446,9 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
|
||||||
# inventory_caption: "Equip your hero"
|
# inventory_caption: "Equip your hero"
|
||||||
# choose_hero_caption: "Choose hero, language"
|
# choose_hero_caption: "Choose hero, language"
|
||||||
# save_load_caption: "... and view history"
|
# save_load_caption: "... and view history"
|
||||||
# options_caption: "Configure settings"
|
options_caption: "Configurarea setărilor"
|
||||||
# guide_caption: "Docs and tips"
|
guide_caption: "Documentație si sfaturi"
|
||||||
# multiplayer_caption: "Play with friends!"
|
multiplayer_caption: "Joaca cu prieteni!"
|
||||||
|
|
||||||
# inventory:
|
# inventory:
|
||||||
# temp: "Temp"
|
# temp: "Temp"
|
||||||
|
@ -660,7 +662,7 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
|
||||||
nick_description: "Programming wizard, eccentric motivation mage, and upside-down experimenter. Nick poate să facă orice si a ales să dezvolte CodeCombat."
|
nick_description: "Programming wizard, eccentric motivation mage, and upside-down experimenter. Nick poate să facă orice si a ales să dezvolte CodeCombat."
|
||||||
jeremy_description: "Customer support mage, usability tester, and community organizer; probabil ca ați vorbit deja cu Jeremy."
|
jeremy_description: "Customer support mage, usability tester, and community organizer; probabil ca ați vorbit deja cu Jeremy."
|
||||||
michael_description: "Programmer, sys-admin, and undergrad technical wunderkind, Michael este cel care ține serverele in picioare."
|
michael_description: "Programmer, sys-admin, and undergrad technical wunderkind, Michael este cel care ține serverele in picioare."
|
||||||
# matt_description: "Bicyclist, Software Engineer, reader of heroic fantasy, connoisseur of peanut butter, sipper of coffee."
|
matt_description: "Bicyclist, Software Engineer, cititor de fantezie eroică, cunoscator de unt de arahide, sorbitor de cafea."
|
||||||
|
|
||||||
legal:
|
legal:
|
||||||
page_title: "Aspecte Legale"
|
page_title: "Aspecte Legale"
|
||||||
|
@ -831,9 +833,9 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
|
||||||
simulate_all: "RESETEAZĂ ȘI SIMULEAZĂ JOCURI"
|
simulate_all: "RESETEAZĂ ȘI SIMULEAZĂ JOCURI"
|
||||||
games_simulated_by: "Jocuri simulate de tine:"
|
games_simulated_by: "Jocuri simulate de tine:"
|
||||||
games_simulated_for: "Jocuri simulate pentru tine:"
|
games_simulated_for: "Jocuri simulate pentru tine:"
|
||||||
# games_simulated: "Games simulated"
|
games_simulated: "Jocuri simulate"
|
||||||
# games_played: "Games played"
|
games_played: "Jocuri jucate"
|
||||||
# ratio: "Ratio"
|
ratio: "Ratie"
|
||||||
leaderboard: "Clasament"
|
leaderboard: "Clasament"
|
||||||
battle_as: "Luptă ca "
|
battle_as: "Luptă ca "
|
||||||
summary_your: "Al tău "
|
summary_your: "Al tău "
|
||||||
|
@ -852,7 +854,7 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
|
||||||
no_ranked_matches_pre: "Nici un meci de clasament pentru "
|
no_ranked_matches_pre: "Nici un meci de clasament pentru "
|
||||||
no_ranked_matches_post: " echipă! Joacă împotriva unor concurenți și revino apoi aici pentr a-ți plasa meciul in clasament."
|
no_ranked_matches_post: " echipă! Joacă împotriva unor concurenți și revino apoi aici pentr a-ți plasa meciul in clasament."
|
||||||
choose_opponent: "Alege un adversar"
|
choose_opponent: "Alege un adversar"
|
||||||
# select_your_language: "Select your language!"
|
select_your_language: "Alege limbă!"
|
||||||
tutorial_play: "Joacă Tutorial-ul"
|
tutorial_play: "Joacă Tutorial-ul"
|
||||||
tutorial_recommended: "Recomandat dacă nu ai mai jucat niciodată înainte"
|
tutorial_recommended: "Recomandat dacă nu ai mai jucat niciodată înainte"
|
||||||
tutorial_skip: "Sari peste Tutorial"
|
tutorial_skip: "Sari peste Tutorial"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
|
||||||
campaign_multiplayer_description: "... в которых вы соревнуетесь в программировании с другими игроками."
|
campaign_multiplayer_description: "... в которых вы соревнуетесь в программировании с другими игроками."
|
||||||
campaign_player_created: "Уровни игроков"
|
campaign_player_created: "Уровни игроков"
|
||||||
campaign_player_created_description: "... в которых вы сражаетесь с креативностью ваших друзей <a href=\"/contribute#artisan\">Ремесленников</a>."
|
campaign_player_created_description: "... в которых вы сражаетесь с креативностью ваших друзей <a href=\"/contribute#artisan\">Ремесленников</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Сложность: "
|
level_difficulty: "Сложность: "
|
||||||
play_as: "Играть за "
|
play_as: "Играть за "
|
||||||
spectate: "Наблюдать"
|
spectate: "Наблюдать"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
delta:
|
delta:
|
||||||
added: "Добавлено"
|
added: "Добавлено"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak",
|
||||||
campaign_multiplayer_description: "... v ktorej si zmeriaš svoje programátorské sily proti ostatným hráčom."
|
campaign_multiplayer_description: "... v ktorej si zmeriaš svoje programátorské sily proti ostatným hráčom."
|
||||||
campaign_player_created: "Hráčmi vytvorené úrovne"
|
campaign_player_created: "Hráčmi vytvorené úrovne"
|
||||||
campaign_player_created_description: "... v ktorých sa popasuješ s kreativitou svojich <a href=\"/contribute#artisan\">kúzelníckych súdruhov</a>."
|
campaign_player_created_description: "... v ktorých sa popasuješ s kreativitou svojich <a href=\"/contribute#artisan\">kúzelníckych súdruhov</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Obtiažnosť."
|
level_difficulty: "Obtiažnosť."
|
||||||
play_as: "Hraj ako"
|
play_as: "Hraj ako"
|
||||||
spectate: "Sleduj"
|
spectate: "Sleduj"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak",
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven
|
||||||
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
||||||
# campaign_player_created: "Player-Created"
|
# campaign_player_created: "Player-Created"
|
||||||
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
# level_difficulty: "Difficulty: "
|
# level_difficulty: "Difficulty: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
|
||||||
campaign_multiplayer_description: "... у којима кодираш 1 на 1 мечеве против осталих играча."
|
campaign_multiplayer_description: "... у којима кодираш 1 на 1 мечеве против осталих играча."
|
||||||
campaign_player_created: "Направљено од стране играча"
|
campaign_player_created: "Направљено од стране играча"
|
||||||
campaign_player_created_description: "... у којима се бориш против креативности својих колега."
|
campaign_player_created_description: "... у којима се бориш против креативности својих колега."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Тежина: "
|
level_difficulty: "Тежина: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
|
||||||
campaign_multiplayer_description: "... i vilken du tävlar i kodande mot andra spelare"
|
campaign_multiplayer_description: "... i vilken du tävlar i kodande mot andra spelare"
|
||||||
campaign_player_created: "Spelarskapade"
|
campaign_player_created: "Spelarskapade"
|
||||||
campaign_player_created_description: "... i vilken du tävlar mot kreativiteten hos andra <a href=\"/contribute#artisan\">Hantverkare</a>."
|
campaign_player_created_description: "... i vilken du tävlar mot kreativiteten hos andra <a href=\"/contribute#artisan\">Hantverkare</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Svårighetsgrad: "
|
level_difficulty: "Svårighetsgrad: "
|
||||||
play_as: "Spela som "
|
play_as: "Spela som "
|
||||||
spectate: "Titta på"
|
spectate: "Titta på"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra
|
||||||
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
||||||
# campaign_player_created: "Player-Created"
|
# campaign_player_created: "Player-Created"
|
||||||
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
# level_difficulty: "Difficulty: "
|
# level_difficulty: "Difficulty: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t
|
||||||
campaign_multiplayer_description: "Diğer oyuncularla kafa kafaya verip kodlamak için..."
|
campaign_multiplayer_description: "Diğer oyuncularla kafa kafaya verip kodlamak için..."
|
||||||
campaign_player_created: "Oyuncuların Oluşturdukları"
|
campaign_player_created: "Oyuncuların Oluşturdukları"
|
||||||
campaign_player_created_description: "<a href=\"/contribute#artisan\">Zanaatkâr Büyücüler</a>in yaratıcılıklarına karşı mücadele etmek için..."
|
campaign_player_created_description: "<a href=\"/contribute#artisan\">Zanaatkâr Büyücüler</a>in yaratıcılıklarına karşı mücadele etmek için..."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Zorluk: "
|
level_difficulty: "Zorluk: "
|
||||||
play_as: "Olarak Oyna"
|
play_as: "Olarak Oyna"
|
||||||
spectate: "İzleyici olarak katıl"
|
spectate: "İzleyici olarak katıl"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
||||||
campaign_multiplayer_description: "... в яких ви програмуєте віч-на-віч із іншими гравцями."
|
campaign_multiplayer_description: "... в яких ви програмуєте віч-на-віч із іншими гравцями."
|
||||||
campaign_player_created: "Рівні, створені гравцями"
|
campaign_player_created: "Рівні, створені гравцями"
|
||||||
campaign_player_created_description: "... у яких ви змагаєтесь у креативності із вашими друзями-<a href=\"/contribute#artisan\">Архітекторами</a>."
|
campaign_player_created_description: "... у яких ви змагаєтесь у креативності із вашими друзями-<a href=\"/contribute#artisan\">Архітекторами</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Складність: "
|
level_difficulty: "Складність: "
|
||||||
play_as: "Грати як"
|
play_as: "Грати як"
|
||||||
spectate: "Спостерігати"
|
spectate: "Спостерігати"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu",
|
||||||
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
||||||
# campaign_player_created: "Player-Created"
|
# campaign_player_created: "Player-Created"
|
||||||
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
# level_difficulty: "Difficulty: "
|
# level_difficulty: "Difficulty: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu",
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
|
||||||
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
||||||
campaign_player_created: "Tạo người chơi"
|
campaign_player_created: "Tạo người chơi"
|
||||||
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "Khó: "
|
level_difficulty: "Khó: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
|
||||||
campaign_multiplayer_description: "……在这里你可以与其他玩家进行代码肉搏战。"
|
campaign_multiplayer_description: "……在这里你可以与其他玩家进行代码肉搏战。"
|
||||||
campaign_player_created: "创建玩家"
|
campaign_player_created: "创建玩家"
|
||||||
campaign_player_created_description: "……在这里你可以与你的小伙伴的创造力战斗 <a href=\"/contribute#artisan\">技术指导</a>."
|
campaign_player_created_description: "……在这里你可以与你的小伙伴的创造力战斗 <a href=\"/contribute#artisan\">技术指导</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "难度:"
|
level_difficulty: "难度:"
|
||||||
play_as: "Play As"
|
play_as: "Play As"
|
||||||
spectate: "旁观他人的游戏"
|
spectate: "旁观他人的游戏"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "繁体中文", englishDescription: "Chinese
|
||||||
campaign_multiplayer_description: "...在這裡你可以和其他玩家進行對戰。"
|
campaign_multiplayer_description: "...在這裡你可以和其他玩家進行對戰。"
|
||||||
campaign_player_created: "玩家建立的關卡"
|
campaign_player_created: "玩家建立的關卡"
|
||||||
campaign_player_created_description: "...挑戰同伴的創意 <a href=\"/contribute#artisan\">技術指導</a>."
|
campaign_player_created_description: "...挑戰同伴的創意 <a href=\"/contribute#artisan\">技術指導</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "難度"
|
level_difficulty: "難度"
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "繁体中文", englishDescription: "Chinese
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi
|
||||||
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
# campaign_multiplayer_description: "... in which you code head-to-head against other players."
|
||||||
# campaign_player_created: "Player-Created"
|
# campaign_player_created: "Player-Created"
|
||||||
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
# campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
# level_difficulty: "Difficulty: "
|
# level_difficulty: "Difficulty: "
|
||||||
# play_as: "Play As"
|
# play_as: "Play As"
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -123,6 +123,8 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio
|
||||||
campaign_multiplayer_description: "……徠箇搭爾好搭別人代碼捉跤。"
|
campaign_multiplayer_description: "……徠箇搭爾好搭別人代碼捉跤。"
|
||||||
campaign_player_created: "造玩家"
|
campaign_player_created: "造玩家"
|
||||||
campaign_player_created_description: "……徠箇搭爾好搭爾夥計造起來個賭打 <a href=\"/contribute#artisan\">技術相幫</a>."
|
campaign_player_created_description: "……徠箇搭爾好搭爾夥計造起來個賭打 <a href=\"/contribute#artisan\">技術相幫</a>."
|
||||||
|
# campaign_classic_algorithms: "Classic Algorithms"
|
||||||
|
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
||||||
level_difficulty: "難度:"
|
level_difficulty: "難度:"
|
||||||
play_as: "Play As"
|
play_as: "Play As"
|
||||||
spectate: "望別人攪遊戲"
|
spectate: "望別人攪遊戲"
|
||||||
|
@ -953,6 +955,7 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio
|
||||||
# achievement: "Achievement"
|
# achievement: "Achievement"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
|
# feedback: "Feedback"
|
||||||
|
|
||||||
# delta:
|
# delta:
|
||||||
# added: "Added"
|
# added: "Added"
|
||||||
|
|
|
@ -12,12 +12,12 @@ module.exports = class Level extends CocoModel
|
||||||
o = @denormalize supermodel, session
|
o = @denormalize supermodel, session
|
||||||
|
|
||||||
# Figure out Components
|
# Figure out Components
|
||||||
o.levelComponents = _.cloneDeep (lc.attributes for lc in supermodel.getModels LevelComponent)
|
o.levelComponents = $.extend true, [], (lc.attributes for lc in supermodel.getModels LevelComponent)
|
||||||
@sortThangComponents o.thangs, o.levelComponents, 'Level Thang'
|
@sortThangComponents o.thangs, o.levelComponents, 'Level Thang'
|
||||||
@fillInDefaultComponentConfiguration o.thangs, o.levelComponents
|
@fillInDefaultComponentConfiguration o.thangs, o.levelComponents
|
||||||
|
|
||||||
# Figure out Systems
|
# Figure out Systems
|
||||||
systemModels = _.cloneDeep (ls.attributes for ls in supermodel.getModels LevelSystem)
|
systemModels = $.extend true, [], (ls.attributes for ls in supermodel.getModels LevelSystem)
|
||||||
o.systems = @sortSystems o.systems, systemModels
|
o.systems = @sortSystems o.systems, systemModels
|
||||||
@fillInDefaultSystemConfiguration o.systems
|
@fillInDefaultSystemConfiguration o.systems
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ module.exports = class Level extends CocoModel
|
||||||
|
|
||||||
denormalize: (supermodel, session) ->
|
denormalize: (supermodel, session) ->
|
||||||
o = $.extend true, {}, @attributes
|
o = $.extend true, {}, @attributes
|
||||||
if @get('type') is 'hero'
|
if @get('type', true) is 'hero'
|
||||||
# TOOD: figure out if/when/how we are doing this for non-Hero levels that aren't expecting denormalization.
|
# TOOD: figure out if/when/how we are doing this for non-Hero levels that aren't expecting denormalization.
|
||||||
for levelThang in o.thangs
|
for levelThang in o.thangs
|
||||||
@denormalizeThang(levelThang, supermodel, session)
|
@denormalizeThang(levelThang, supermodel, session)
|
||||||
|
@ -93,7 +93,7 @@ module.exports = class Level extends CocoModel
|
||||||
system2 = _.find levelSystems, {original: d.original}
|
system2 = _.find levelSystems, {original: d.original}
|
||||||
visit system2
|
visit system2
|
||||||
#console.log 'sorted systems adding', systemModel.name
|
#console.log 'sorted systems adding', systemModel.name
|
||||||
sorted.push {model: systemModel, config: _.cloneDeep system.config}
|
sorted.push {model: systemModel, config: $.extend true, {}, system.config}
|
||||||
originalsSeen[system.original] = true
|
originalsSeen[system.original] = true
|
||||||
visit system for system in levelSystems ? []
|
visit system for system in levelSystems ? []
|
||||||
sorted
|
sorted
|
||||||
|
@ -140,7 +140,7 @@ module.exports = class Level extends CocoModel
|
||||||
for component in thang.components or []
|
for component in thang.components or []
|
||||||
continue unless lc = _.find levelComponents, {original: component.original}
|
continue unless lc = _.find levelComponents, {original: component.original}
|
||||||
component.config ?= {}
|
component.config ?= {}
|
||||||
TreemaUtils.populateDefaults(component.config, lc.configSchema)
|
TreemaUtils.populateDefaults(component.config, lc.configSchema, tv4)
|
||||||
@lastType = 'component'
|
@lastType = 'component'
|
||||||
@lastOriginal = component.original
|
@lastOriginal = component.original
|
||||||
@walkDefaults component.config, lc.configSchema.properties
|
@walkDefaults component.config, lc.configSchema.properties
|
||||||
|
@ -148,7 +148,7 @@ module.exports = class Level extends CocoModel
|
||||||
fillInDefaultSystemConfiguration: (levelSystems) ->
|
fillInDefaultSystemConfiguration: (levelSystems) ->
|
||||||
for system in levelSystems ? []
|
for system in levelSystems ? []
|
||||||
system.config ?= {}
|
system.config ?= {}
|
||||||
TreemaUtils.populateDefaults(system.config, system.model.configSchema)
|
TreemaUtils.populateDefaults(system.config, system.model.configSchema, tv4)
|
||||||
@lastType = 'system'
|
@lastType = 'system'
|
||||||
@lastOriginal = system.model.name
|
@lastOriginal = system.model.name
|
||||||
@walkDefaults system.config, system.model.configSchema.properties
|
@walkDefaults system.config, system.model.configSchema.properties
|
||||||
|
|
|
@ -7,6 +7,10 @@ module.exports = class LevelComponent extends CocoModel
|
||||||
@EquipsID: '53e217d253457600003e3ebb'
|
@EquipsID: '53e217d253457600003e3ebb'
|
||||||
@ItemID: '53e12043b82921000051cdf9'
|
@ItemID: '53e12043b82921000051cdf9'
|
||||||
@AttacksID: '524b7ba57fc0f6d519000016'
|
@AttacksID: '524b7ba57fc0f6d519000016'
|
||||||
|
@PhysicalID: '524b75ad7fc0f6d519000001'
|
||||||
|
@ExistsID: '524b4150ff92f1f4f8000024'
|
||||||
|
@LandID: '524b7aff7fc0f6d519000006'
|
||||||
|
@CollidesID: '524b7b857fc0f6d519000012'
|
||||||
urlRoot: '/db/level.component'
|
urlRoot: '/db/level.component'
|
||||||
|
|
||||||
set: (key, val, options) ->
|
set: (key, val, options) ->
|
||||||
|
|
|
@ -212,6 +212,11 @@ LevelSchema = c.object {
|
||||||
thangs: []
|
thangs: []
|
||||||
systems: []
|
systems: []
|
||||||
victory: {}
|
victory: {}
|
||||||
|
type: 'hero'
|
||||||
|
goals: [
|
||||||
|
{id: 'ogres-die', name: 'Ogres must die.', killThangs: ['ogres'], worldEndsAfter: 3}
|
||||||
|
{id: 'humans-survive', name: 'Humans must survive.', saveThangs: ['humans'], howMany: 1, worldEndsAfter: 3, hiddenGoal: true}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
c.extendNamedProperties LevelSchema # let's have the name be the first property
|
c.extendNamedProperties LevelSchema # let's have the name be the first property
|
||||||
_.extend LevelSchema.properties,
|
_.extend LevelSchema.properties,
|
||||||
|
@ -240,6 +245,7 @@ _.extend LevelSchema.properties,
|
||||||
banner: {type: 'string', format: 'image-file', title: 'Banner'}
|
banner: {type: 'string', format: 'image-file', title: 'Banner'}
|
||||||
goals: c.array {title: 'Goals', description: 'An array of goals which are visible to the player and can trigger scripts.'}, GoalSchema
|
goals: c.array {title: 'Goals', description: 'An array of goals which are visible to the player and can trigger scripts.'}, GoalSchema
|
||||||
type: c.shortString(title: 'Type', description: 'What kind of level this is.', 'enum': ['campaign', 'ladder', 'ladder-tutorial', 'hero'])
|
type: c.shortString(title: 'Type', description: 'What kind of level this is.', 'enum': ['campaign', 'ladder', 'ladder-tutorial', 'hero'])
|
||||||
|
terrain: c.terrainString
|
||||||
showsGuide: c.shortString(title: 'Shows Guide', description: 'If the guide is shown at the beginning of the level.', 'enum': ['first-time', 'always'])
|
showsGuide: c.shortString(title: 'Shows Guide', description: 'If the guide is shown at the beginning of the level.', 'enum': ['first-time', 'always'])
|
||||||
|
|
||||||
c.extendBasicProperties LevelSchema, 'level'
|
c.extendBasicProperties LevelSchema, 'level'
|
||||||
|
|
|
@ -106,6 +106,7 @@ _.extend ThangTypeSchema.properties,
|
||||||
containers: c.object {title: 'Containers', additionalProperties: ContainerObjectSchema}
|
containers: c.object {title: 'Containers', additionalProperties: ContainerObjectSchema}
|
||||||
animations: c.object {title: 'Animations', additionalProperties: RawAnimationObjectSchema}
|
animations: c.object {title: 'Animations', additionalProperties: RawAnimationObjectSchema}
|
||||||
kind: c.shortString {enum: ['Unit', 'Floor', 'Wall', 'Doodad', 'Misc', 'Mark', 'Item'], default: 'Misc', title: 'Kind'}
|
kind: c.shortString {enum: ['Unit', 'Floor', 'Wall', 'Doodad', 'Misc', 'Mark', 'Item'], default: 'Misc', title: 'Kind'}
|
||||||
|
terrains: c.array {title: 'Terrains', description: 'If specified, limits this ThangType to levels with matching terrains.', uniqueItems: true}, c.terrainString
|
||||||
|
|
||||||
actions: c.object {title: 'Actions', additionalProperties: {$ref: '#/definitions/action'}}
|
actions: c.object {title: 'Actions', additionalProperties: {$ref: '#/definitions/action'}}
|
||||||
soundTriggers: c.object {title: 'Sound Triggers', additionalProperties: c.array({}, {$ref: '#/definitions/sound'})},
|
soundTriggers: c.object {title: 'Sound Triggers', additionalProperties: c.array({}, {$ref: '#/definitions/sound'})},
|
||||||
|
|
|
@ -200,3 +200,5 @@ me.activity = me.object {description: 'Stats on an activity'},
|
||||||
first: me.date()
|
first: me.date()
|
||||||
last: me.date()
|
last: me.date()
|
||||||
count: {type: 'integer', minimum: 0}
|
count: {type: 'integer', minimum: 0}
|
||||||
|
|
||||||
|
me.terrainString = me.shortString {enum: ['Grass', 'Dungeon', 'Indoor'], title: 'Terrain', description: 'Which terrain type this is.'}
|
||||||
|
|
|
@ -43,5 +43,19 @@ module.exports =
|
||||||
'level:reload-thang-type': c.object {required: ['thangType']},
|
'level:reload-thang-type': c.object {required: ['thangType']},
|
||||||
thangType: {type: 'object'}
|
thangType: {type: 'object'}
|
||||||
|
|
||||||
'editor:random-terrain-generated': c.object {required: ['thangs']},
|
'editor:random-terrain-generated': c.object {required: ['thangs', 'terrain']},
|
||||||
thangs: c.array {}, {type: 'object'}
|
thangs: c.array {}, {type: 'object'}
|
||||||
|
terrain: c.terrainString
|
||||||
|
|
||||||
|
'editor:terrain-changed': c.object {required: ['terrain']},
|
||||||
|
terrain:
|
||||||
|
oneOf: [
|
||||||
|
c.terrainString
|
||||||
|
{type: ['null', 'undefined']}
|
||||||
|
]
|
||||||
|
|
||||||
|
'editor:thang-type-kind-changed': c.object {required: ['kind']},
|
||||||
|
kind: {type: 'string'}
|
||||||
|
|
||||||
|
'editor:thang-type-color-groups-changed': c.object {required: ['colorGroups']},
|
||||||
|
colorGroups: {type: 'object'}
|
||||||
|
|
|
@ -25,7 +25,7 @@ module.exports =
|
||||||
viewClass: {type: 'function'}
|
viewClass: {type: 'function'}
|
||||||
viewArgs: {type: 'array'}
|
viewArgs: {type: 'array'}
|
||||||
|
|
||||||
'achievements:new': c.object {required: 'earnedAchievements'},
|
'achievements:new': c.object {required: ['earnedAchievements']},
|
||||||
earnedAchievements: {type: 'object'}
|
earnedAchievements: {type: 'object'}
|
||||||
|
|
||||||
'ladder:game-submitted': c.object {required: ['session', 'level']},
|
'ladder:game-submitted': c.object {required: ['session', 'level']},
|
||||||
|
|
76
app/styles/editor/level/add-thangs-view.sass
Normal file
76
app/styles/editor/level/add-thangs-view.sass
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
@import "../../bootstrap/mixins"
|
||||||
|
|
||||||
|
#add-thangs-view
|
||||||
|
$addPaletteIconColumns: 6
|
||||||
|
$addPaletteIconWidth: 40px
|
||||||
|
$addPaletteIconPadding: 0px
|
||||||
|
$addPaletteIconMargin: 4px
|
||||||
|
$addPaletteWidth: ($addPaletteIconWidth + 2 * $addPaletteIconPadding + 2 * $addPaletteIconMargin) * $addPaletteIconColumns + 20
|
||||||
|
|
||||||
|
width: $addPaletteWidth
|
||||||
|
background: white
|
||||||
|
box-sizing: border-box
|
||||||
|
position: absolute
|
||||||
|
right: 0
|
||||||
|
top: 0
|
||||||
|
bottom: 0
|
||||||
|
padding: 5px
|
||||||
|
border: 1px solid
|
||||||
|
|
||||||
|
input
|
||||||
|
width: 100%
|
||||||
|
margin-top: 5px
|
||||||
|
|
||||||
|
#thangs-list
|
||||||
|
position: absolute
|
||||||
|
left: 8px
|
||||||
|
top: 80px
|
||||||
|
bottom: 0px
|
||||||
|
overflow: scroll
|
||||||
|
margin: 0
|
||||||
|
|
||||||
|
h3
|
||||||
|
margin: 0 0 10px
|
||||||
|
width: 100%
|
||||||
|
|
||||||
|
h4
|
||||||
|
margin: 0 0 10px
|
||||||
|
clear: both
|
||||||
|
padding: 5px
|
||||||
|
background: rgba(150, 150, 150, 0.5)
|
||||||
|
width: $addPaletteWidth - 20px
|
||||||
|
box-sizing: border-box
|
||||||
|
|
||||||
|
.clearfix
|
||||||
|
margin-bottom: 20px
|
||||||
|
|
||||||
|
.add-thang-palette-icon
|
||||||
|
position: relative
|
||||||
|
float: left
|
||||||
|
background: white
|
||||||
|
padding: $addPaletteIconPadding
|
||||||
|
margin: $addPaletteIconMargin
|
||||||
|
cursor: pointer
|
||||||
|
width: $addPaletteIconWidth
|
||||||
|
height: $addPaletteIconWidth
|
||||||
|
|
||||||
|
img
|
||||||
|
position: absolute
|
||||||
|
width: $addPaletteIconWidth
|
||||||
|
height: $addPaletteIconWidth
|
||||||
|
transition: box-shadow 0.25s ease-out
|
||||||
|
|
||||||
|
&:hover
|
||||||
|
$hoverScaleIncreaseFactor: 0.2
|
||||||
|
outline: 1px dotted blue
|
||||||
|
img
|
||||||
|
left: -($hoverScaleIncreaseFactor / 2) * $addPaletteIconWidth
|
||||||
|
top: -($hoverScaleIncreaseFactor / 2) * $addPaletteIconWidth
|
||||||
|
width: (1 + $hoverScaleIncreaseFactor) * $addPaletteIconWidth
|
||||||
|
height: (1 + $hoverScaleIncreaseFactor) * $addPaletteIconWidth
|
||||||
|
|
||||||
|
&.selected
|
||||||
|
outline: 1px solid blue
|
||||||
|
@include box-shadow(0px 5px 25px rgba(79, 79, 213, 0.6))
|
||||||
|
background: #add8e6
|
||||||
|
|
85
app/styles/editor/level/thangs-tab-view.sass
Normal file
85
app/styles/editor/level/thangs-tab-view.sass
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
@import "../../bootstrap/mixins"
|
||||||
|
|
||||||
|
#thangs-tab-view
|
||||||
|
$extantThangsWidth: 300px
|
||||||
|
|
||||||
|
position: absolute
|
||||||
|
top: 0
|
||||||
|
bottom: 0
|
||||||
|
overflow: hidden
|
||||||
|
left: 0
|
||||||
|
right: 0
|
||||||
|
|
||||||
|
#thangs-container-toggle
|
||||||
|
left: 0
|
||||||
|
|
||||||
|
#thangs-palette-toggle
|
||||||
|
right: 0
|
||||||
|
|
||||||
|
.toggle
|
||||||
|
position: absolute
|
||||||
|
z-index: 12
|
||||||
|
padding: 8px
|
||||||
|
|
||||||
|
.thangs-container
|
||||||
|
background: white
|
||||||
|
width: $extantThangsWidth
|
||||||
|
position: absolute
|
||||||
|
left: 0
|
||||||
|
top: 0
|
||||||
|
bottom: 0
|
||||||
|
z-index: 11
|
||||||
|
padding: 5px
|
||||||
|
border: 1px solid black
|
||||||
|
|
||||||
|
h3
|
||||||
|
text-align: right
|
||||||
|
margin: 0
|
||||||
|
|
||||||
|
.editor-nano-container
|
||||||
|
height: 90%
|
||||||
|
position: relative
|
||||||
|
top: 20px
|
||||||
|
#thangs-treema
|
||||||
|
position: absolute
|
||||||
|
top: 37px
|
||||||
|
left: 0
|
||||||
|
right: 0
|
||||||
|
bottom: 0
|
||||||
|
overflow: scroll
|
||||||
|
margin: 0
|
||||||
|
outline: thin
|
||||||
|
border: none
|
||||||
|
border-top: 1px solid black
|
||||||
|
|
||||||
|
.treema-children .treema-row *
|
||||||
|
cursor: pointer !important
|
||||||
|
|
||||||
|
.world-container
|
||||||
|
margin-left: 0
|
||||||
|
margin-right: 0
|
||||||
|
box-sizing: border-box
|
||||||
|
|
||||||
|
.world-container
|
||||||
|
position: relative
|
||||||
|
|
||||||
|
#canvas-wrapper
|
||||||
|
width: 100%
|
||||||
|
position: relative
|
||||||
|
text-align: center
|
||||||
|
|
||||||
|
#randomize-button
|
||||||
|
position: absolute
|
||||||
|
top: 45%
|
||||||
|
height: 40px
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Below snatched from play/level.sass; should refactor?
|
||||||
|
|
||||||
|
canvas#surface
|
||||||
|
background-color: #ddd
|
||||||
|
width: 100%
|
||||||
|
display: block
|
||||||
|
z-index: 1
|
||||||
|
border: 1px solid black
|
|
@ -1,265 +0,0 @@
|
||||||
@import "../../bootstrap/mixins"
|
|
||||||
|
|
||||||
$mobile: 1050px
|
|
||||||
|
|
||||||
#editor-level-thangs-tab-view
|
|
||||||
$addPaletteIconColumns: 3
|
|
||||||
$extantThangsWidth: 300px
|
|
||||||
$addPaletteIconWidth: 40px
|
|
||||||
$addPaletteIconPadding: 0px
|
|
||||||
$addPaletteIconMargin: 4px
|
|
||||||
$addPaletteWidth: ($addPaletteIconWidth + 2 * $addPaletteIconPadding + 2 * $addPaletteIconMargin) * $addPaletteIconColumns + 20
|
|
||||||
|
|
||||||
#toggle
|
|
||||||
display: none
|
|
||||||
position: absolute
|
|
||||||
z-index: 11
|
|
||||||
left: -14px
|
|
||||||
@media screen and (max-width: $mobile)
|
|
||||||
display: block
|
|
||||||
|
|
||||||
.toggle
|
|
||||||
left: 0
|
|
||||||
|
|
||||||
.toggle
|
|
||||||
display: none
|
|
||||||
float: none
|
|
||||||
z-index: 11
|
|
||||||
position: absolute
|
|
||||||
right: -14px
|
|
||||||
z-index: 11
|
|
||||||
margin: 0
|
|
||||||
padding: 8px
|
|
||||||
@media screen and (max-width: $mobile)
|
|
||||||
display: block
|
|
||||||
|
|
||||||
.thangs-column
|
|
||||||
background-color: #E4CF8C
|
|
||||||
|
|
||||||
@media screen and (max-width: $mobile)
|
|
||||||
display: block
|
|
||||||
|
|
||||||
h3
|
|
||||||
@media screen and (max-width: $mobile)
|
|
||||||
display: none
|
|
||||||
|
|
||||||
#all-thangs
|
|
||||||
display: block
|
|
||||||
@media screen and (max-width: $mobile)
|
|
||||||
display: none
|
|
||||||
|
|
||||||
.thangs-container
|
|
||||||
width: $extantThangsWidth
|
|
||||||
position: absolute
|
|
||||||
left: 0
|
|
||||||
top: 0
|
|
||||||
bottom: 0
|
|
||||||
z-index: 11
|
|
||||||
@media screen and (max-width: $mobile)
|
|
||||||
width: auto
|
|
||||||
left: 18px
|
|
||||||
bottom: -18px
|
|
||||||
|
|
||||||
.btn-group
|
|
||||||
margin: 0
|
|
||||||
@media screen and (max-width: $mobile)
|
|
||||||
margin: 5px
|
|
||||||
|
|
||||||
h3
|
|
||||||
margin: 0 -20px 0 0
|
|
||||||
|
|
||||||
.editor-nano-container
|
|
||||||
height: 90%
|
|
||||||
position: relative
|
|
||||||
top: 20px
|
|
||||||
#thangs-treema
|
|
||||||
height: 100%
|
|
||||||
width: 100%
|
|
||||||
position: absolute
|
|
||||||
left: 0
|
|
||||||
right: 0
|
|
||||||
bottom: 0
|
|
||||||
overflow: scroll
|
|
||||||
margin: 0
|
|
||||||
outline: thin
|
|
||||||
@media screen and (max-width: $mobile)
|
|
||||||
margin: 5px
|
|
||||||
top: 40px
|
|
||||||
|
|
||||||
&.hide-except-Unit
|
|
||||||
.treema-node
|
|
||||||
display: none
|
|
||||||
.treema-node.treema-Unit
|
|
||||||
display: block
|
|
||||||
|
|
||||||
&.hide-except-Doodad
|
|
||||||
.treema-node
|
|
||||||
display: none
|
|
||||||
.treema-node.treema-Doodad
|
|
||||||
display: block
|
|
||||||
|
|
||||||
&.hide-except-Floor
|
|
||||||
.treema-node
|
|
||||||
display: none
|
|
||||||
.treema-node.treema-Floor
|
|
||||||
display: block
|
|
||||||
|
|
||||||
&.hide-except-Wall
|
|
||||||
.treema-node
|
|
||||||
display: none
|
|
||||||
.treema-node.treema-Wall
|
|
||||||
display: block
|
|
||||||
|
|
||||||
&.hide-except-Item
|
|
||||||
.treema-node
|
|
||||||
display: none
|
|
||||||
.treema-node.treema-Item
|
|
||||||
display: block
|
|
||||||
|
|
||||||
&.hide-except-Misc
|
|
||||||
.treema-node
|
|
||||||
display: none
|
|
||||||
.treema-node.treema-Misc
|
|
||||||
display: block
|
|
||||||
|
|
||||||
.treema-children .treema-row *
|
|
||||||
cursor: pointer !important
|
|
||||||
|
|
||||||
.world-container
|
|
||||||
margin-left: $extantThangsWidth
|
|
||||||
margin-right: $addPaletteWidth
|
|
||||||
@media screen and (max-width: $mobile)
|
|
||||||
margin-left: 0
|
|
||||||
margin-right: 0
|
|
||||||
padding: 0 20px
|
|
||||||
box-sizing: border-box
|
|
||||||
|
|
||||||
h3
|
|
||||||
margin: 0 -10px 0 0
|
|
||||||
text-align: center
|
|
||||||
|
|
||||||
.add-thangs-palette
|
|
||||||
width: $addPaletteWidth
|
|
||||||
box-sizing: border-box
|
|
||||||
position: absolute
|
|
||||||
right: 0
|
|
||||||
top: 0
|
|
||||||
bottom: 0
|
|
||||||
@media screen and (max-width: $mobile)
|
|
||||||
display: none
|
|
||||||
right: 18px
|
|
||||||
z-index: 11
|
|
||||||
width: $addPaletteWidth + 10
|
|
||||||
bottom: -15px
|
|
||||||
//height: auto
|
|
||||||
//padding-bottom: 10px
|
|
||||||
|
|
||||||
input
|
|
||||||
width: $addPaletteWidth
|
|
||||||
margin: 0
|
|
||||||
margin-top: 5px
|
|
||||||
padding-left: 5px
|
|
||||||
@media screen and (max-width: $mobile)
|
|
||||||
margin: 0 5px
|
|
||||||
|
|
||||||
#thangs-list-container
|
|
||||||
height: 90%
|
|
||||||
|
|
||||||
#thangs-list
|
|
||||||
position: relative
|
|
||||||
right: 0
|
|
||||||
top: 10px
|
|
||||||
bottom: 10px
|
|
||||||
overflow: scroll
|
|
||||||
height: 100%
|
|
||||||
margin: 0
|
|
||||||
@media screen and (max-width: $mobile)
|
|
||||||
margin: 0 5px
|
|
||||||
|
|
||||||
h3
|
|
||||||
margin: 0 -20px 0 0
|
|
||||||
width: 100%
|
|
||||||
|
|
||||||
h4
|
|
||||||
margin: 0 0 10px
|
|
||||||
clear: both
|
|
||||||
padding: 5px
|
|
||||||
background: rgba(150, 150, 150, 0.5)
|
|
||||||
width: $addPaletteWidth - 20px
|
|
||||||
box-sizing: border-box
|
|
||||||
|
|
||||||
.clearfix
|
|
||||||
margin-bottom: 20px
|
|
||||||
|
|
||||||
.add-thang-palette-icon
|
|
||||||
position: relative
|
|
||||||
float: left
|
|
||||||
background: white
|
|
||||||
padding: $addPaletteIconPadding
|
|
||||||
margin: $addPaletteIconMargin
|
|
||||||
cursor: pointer
|
|
||||||
width: $addPaletteIconWidth
|
|
||||||
height: $addPaletteIconWidth
|
|
||||||
|
|
||||||
img
|
|
||||||
position: absolute
|
|
||||||
width: $addPaletteIconWidth
|
|
||||||
height: $addPaletteIconWidth
|
|
||||||
transition: box-shadow 0.25s ease-out
|
|
||||||
|
|
||||||
&:hover
|
|
||||||
$hoverScaleIncreaseFactor: 0.2
|
|
||||||
outline: 1px dotted blue
|
|
||||||
img
|
|
||||||
left: -($hoverScaleIncreaseFactor / 2) * $addPaletteIconWidth
|
|
||||||
top: -($hoverScaleIncreaseFactor / 2) * $addPaletteIconWidth
|
|
||||||
width: (1 + $hoverScaleIncreaseFactor) * $addPaletteIconWidth
|
|
||||||
height: (1 + $hoverScaleIncreaseFactor) * $addPaletteIconWidth
|
|
||||||
|
|
||||||
&.selected
|
|
||||||
outline: 1px solid blue
|
|
||||||
@include box-shadow(0px 5px 25px rgba(79, 79, 213, 0.6))
|
|
||||||
background: #add8e6
|
|
||||||
|
|
||||||
.world-container
|
|
||||||
position: relative
|
|
||||||
|
|
||||||
#canvas-wrapper
|
|
||||||
width: 100%
|
|
||||||
position: relative
|
|
||||||
text-align: center
|
|
||||||
|
|
||||||
#randomize-button
|
|
||||||
position: absolute
|
|
||||||
top: 45%
|
|
||||||
height: 40px
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Below snatched from play/level.sass; should refactor?
|
|
||||||
|
|
||||||
canvas#surface
|
|
||||||
background-color: #ddd
|
|
||||||
width: 100%
|
|
||||||
display: block
|
|
||||||
z-index: 1
|
|
||||||
|
|
||||||
$GI: 0.5 // gradient intensity; can tweak this 0-1
|
|
||||||
|
|
||||||
.gradient
|
|
||||||
position: absolute
|
|
||||||
z-index: 10
|
|
||||||
|
|
||||||
#canvas-left-gradient
|
|
||||||
left: 0px
|
|
||||||
width: 5px
|
|
||||||
background: linear-gradient(to left, rgba(0,0,0,0) 0%,rgba(0,0,0,0.8*$GI) 100%)
|
|
||||||
bottom: 0
|
|
||||||
top: 0
|
|
||||||
|
|
||||||
#canvas-top-gradient
|
|
||||||
top: 0
|
|
||||||
height: 5px
|
|
||||||
left: 0
|
|
||||||
right: 0
|
|
||||||
background: linear-gradient(to top, rgba(0,0,0,0) 0%,rgba(0,0,0,0.8*$GI) 100%)
|
|
|
@ -18,7 +18,7 @@ block header
|
||||||
|
|
||||||
ul.nav.navbar-nav.nav-tabs
|
ul.nav.navbar-nav.nav-tabs
|
||||||
li.active
|
li.active
|
||||||
a(href="#editor-level-thangs-tab-view", data-toggle="tab", data-i18n="editor.level_tab_thangs") Thangs
|
a(href="#thangs-tab-view", data-toggle="tab", data-i18n="editor.level_tab_thangs") Thangs
|
||||||
li
|
li
|
||||||
a(href="#editor-level-scripts-tab-view", data-toggle="tab", data-i18n="editor.level_tab_scripts") Scripts
|
a(href="#editor-level-scripts-tab-view", data-toggle="tab", data-i18n="editor.level_tab_scripts") Scripts
|
||||||
li
|
li
|
||||||
|
@ -115,7 +115,7 @@ block header
|
||||||
block outer_content
|
block outer_content
|
||||||
.outer-content
|
.outer-content
|
||||||
div.tab-content#level-editor-tabs
|
div.tab-content#level-editor-tabs
|
||||||
div.tab-pane.active#editor-level-thangs-tab-view
|
div.tab-pane.active#thangs-tab-view
|
||||||
|
|
||||||
div.tab-pane#editor-level-scripts-tab-view
|
div.tab-pane#editor-level-scripts-tab-view
|
||||||
|
|
||||||
|
|
|
@ -21,3 +21,8 @@ block modal-body-content
|
||||||
label
|
label
|
||||||
input(type="checkbox", name="queryOptions" id="#{goal.id}" value="#{goal.id}")
|
input(type="checkbox", name="queryOptions" id="#{goal.id}" value="#{goal.id}")
|
||||||
span.spl= goal.name
|
span.spl= goal.name
|
||||||
|
|
||||||
|
block modal-footer
|
||||||
|
.modal-footer
|
||||||
|
button.btn(data-dismiss="modal", data-i18n="common.cancel") Cancel
|
||||||
|
button#save-new-achievement-link.btn.btn-primary.new-model-submit(data-i18n="common.create") Create
|
||||||
|
|
22
app/templates/editor/level/thangs-tab-view.jade
Normal file
22
app/templates/editor/level/thangs-tab-view.jade
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
button.toggle.btn-primary#thangs-container-toggle
|
||||||
|
span.icon-list
|
||||||
|
button.toggle.btn-primary#thangs-palette-toggle
|
||||||
|
span.icon-plus
|
||||||
|
.thangs-container.hide#all-thangs
|
||||||
|
h3(data-i18n="editor.level_tab_thangs_title") Current Thangs
|
||||||
|
#thangs-treema(title="Double click to configure a thang")
|
||||||
|
|
||||||
|
.world-container
|
||||||
|
#canvas-wrapper
|
||||||
|
button.btn.btn-primary(id="randomize-button", data-toggle="coco-modal", data-target="editor/level/modals/TerrainRandomizeModal", data-i18n="editor.randomize", title="Randomize Terrain") Randomize
|
||||||
|
ul.dropdown-menu#contextmenu
|
||||||
|
li#delete
|
||||||
|
a(data-i18n="editor.delete") Delete
|
||||||
|
li#duplicate
|
||||||
|
a(data-i18n="editor.duplicate") Duplicate
|
||||||
|
canvas(width=924, height=589)#surface
|
||||||
|
#canvas-left-gradient.gradient
|
||||||
|
#canvas-top-gradient.gradient
|
||||||
|
|
||||||
|
#add-thangs-view
|
||||||
|
#level-thang-edit-view.secret
|
|
@ -1,39 +0,0 @@
|
||||||
div#toggle
|
|
||||||
button.navbar-toggle.toggle.btn-primary#thangs-container-toggle(type="button", data-toggle="collapse", data-target="#all-thangs")
|
|
||||||
span.icon-list
|
|
||||||
button.navbar-toggle.toggle.btn-primary#thangs-palette-toggle(type="button", data-toggle="collapse", data-target="#add-thangs-column")
|
|
||||||
span.icon-plus
|
|
||||||
.thangs-container.thangs-column#all-thangs
|
|
||||||
h3(data-i18n="editor.level_tab_thangs_title") Current Thangs
|
|
||||||
.btn-group(data-toggle="buttons-radio")#extant-thangs-filter
|
|
||||||
button.btn.btn-primary(data-i18n="editor.level_tab_thangs_all") All
|
|
||||||
button.btn.btn-primary(value="Unit", title="Unit")
|
|
||||||
i.icon-user
|
|
||||||
button.btn.btn-primary(value="Wall", title="Wall")
|
|
||||||
i.icon-home
|
|
||||||
button.btn.btn-primary(value="Floor", title="Floor")
|
|
||||||
i.icon-globe
|
|
||||||
button.btn.btn-primary(value="Doodad", title="Doodad")
|
|
||||||
i.icon-leaf
|
|
||||||
button.btn.btn-primary(value="Item", title="Item")
|
|
||||||
i.icon-gift
|
|
||||||
button.btn.btn-primary(value="Misc", title="Misc")
|
|
||||||
i.icon-question-sign
|
|
||||||
.editor-nano-container.nano
|
|
||||||
#thangs-treema.nano-content(title="Double click to configure a thang")
|
|
||||||
|
|
||||||
.world-container.thangs-column
|
|
||||||
h3(data-i18n="editor.level_tab_thangs_conditions") Starting Conditions
|
|
||||||
#canvas-wrapper
|
|
||||||
button.btn.btn-primary(id="randomize-button", data-toggle="coco-modal", data-target="editor/level/modals/TerrainRandomizeModal", data-i18n="editor.randomize", title="Randomize Terrain") Randomize
|
|
||||||
ul.dropdown-menu#contextmenu
|
|
||||||
li#delete
|
|
||||||
a(data-i18n="editor.delete") Delete
|
|
||||||
li#duplicate
|
|
||||||
a(data-i18n="editor.duplicate") Duplicate
|
|
||||||
canvas(width=924, height=589)#surface
|
|
||||||
#canvas-left-gradient.gradient
|
|
||||||
#canvas-top-gradient.gradient
|
|
||||||
|
|
||||||
.add-thangs-palette.thangs-column#add-thangs-column
|
|
||||||
#level-thang-edit-view.secret
|
|
|
@ -8,8 +8,9 @@ block modal-body-content
|
||||||
- if (!showDevBits) { // Not done yet.
|
- if (!showDevBits) { // Not done yet.
|
||||||
- submenus.splice(4, 1);
|
- submenus.splice(4, 1);
|
||||||
- submenus.splice(2, 1);
|
- submenus.splice(2, 1);
|
||||||
- submenus.splice(0, 1);
|
|
||||||
- }
|
- }
|
||||||
|
- if (!showInventory)
|
||||||
|
- submenus.splice(0, 1);
|
||||||
ul.nav.nav-tabs
|
ul.nav.nav-tabs
|
||||||
for submenu, index in submenus
|
for submenu, index in submenus
|
||||||
li(class=index ? "" : "active")
|
li(class=index ? "" : "active")
|
||||||
|
@ -19,10 +20,6 @@ block modal-body-content
|
||||||
.tab-content
|
.tab-content
|
||||||
for submenu, index in submenus
|
for submenu, index in submenus
|
||||||
.tab-pane(id=submenu + '-view')
|
.tab-pane(id=submenu + '-view')
|
||||||
h3= submenu + submenu + submenu
|
|
||||||
p
|
|
||||||
| Lorem ipsum dolor sit amet, charetra varius quam sit amet vulputate.
|
|
||||||
| Quisque mauris augue, molestie tincidunt condimentum vitae, gravida a libero.
|
|
||||||
.clearfix
|
.clearfix
|
||||||
|
|
||||||
block modal-footer
|
block modal-footer
|
|
@ -19,7 +19,8 @@ block modal-body-content
|
||||||
tr
|
tr
|
||||||
td
|
td
|
||||||
input(type="checkbox", value=data._id).select
|
input(type="checkbox", value=data._id).select
|
||||||
td #{data.version.major}.#{data.version.minor}
|
td
|
||||||
|
a(href="/editor/#{page}/#{data._id}") #{data.version.major}.#{data.version.minor}
|
||||||
td= moment(data.created).format('l')
|
td= moment(data.created).format('l')
|
||||||
td= data.creator
|
td= data.creator
|
||||||
td #{data.commitMessage}
|
td #{data.commitMessage}
|
||||||
|
|
|
@ -12,6 +12,28 @@ nodes = require '../level/treema_nodes'
|
||||||
ThangType = require 'models/ThangType'
|
ThangType = require 'models/ThangType'
|
||||||
CocoCollection = require 'collections/CocoCollection'
|
CocoCollection = require 'collections/CocoCollection'
|
||||||
|
|
||||||
|
LC = (componentName, config) -> original: LevelComponent[componentName + 'ID'], majorVersion: 0, config: config
|
||||||
|
DEFAULT_COMPONENTS =
|
||||||
|
Unit: [LC('Equips')]
|
||||||
|
Floor: [
|
||||||
|
LC('Exists', stateless: true)
|
||||||
|
LC('Physical', width: 20, height: 17, depth: 2, shape: 'sheet', pos: {x: 10, y: 8.5, z: 1})
|
||||||
|
LC('Land')
|
||||||
|
]
|
||||||
|
Wall: [
|
||||||
|
LC('Exists', stateless: true)
|
||||||
|
LC('Physical', width: 4, height: 4, depth: 12, shape: 'box', pos: {x: 2, y: 2, z: 6})
|
||||||
|
LC('Collides', collisionType: 'static', collisionCategory: 'obstacles', mass: 1000, fixedRotation: true, restitution: 1)
|
||||||
|
]
|
||||||
|
Doodad: [
|
||||||
|
LC('Exists', stateless: true)
|
||||||
|
LC('Physical')
|
||||||
|
LC('Collides', collisionType: 'static', fixedRotation: true)
|
||||||
|
]
|
||||||
|
Misc: [LC('Exists'), LC('Physical')]
|
||||||
|
Mark: []
|
||||||
|
Item: [LC('Item')]
|
||||||
|
|
||||||
class ItemThangTypeSearchCollection extends CocoCollection
|
class ItemThangTypeSearchCollection extends CocoCollection
|
||||||
url: '/db/thang.type?view=items&project=original,name,version,slug,kind,components'
|
url: '/db/thang.type?view=items&project=original,name,version,slug,kind,components'
|
||||||
model: ThangType
|
model: ThangType
|
||||||
|
@ -20,6 +42,9 @@ module.exports = class ThangComponentsEditView extends CocoView
|
||||||
id: 'thang-components-edit-view'
|
id: 'thang-components-edit-view'
|
||||||
template: template
|
template: template
|
||||||
|
|
||||||
|
subscriptions:
|
||||||
|
'editor:thang-type-kind-changed': 'onThangTypeKindChanged'
|
||||||
|
|
||||||
events:
|
events:
|
||||||
'click #add-components-button': 'onAddComponentsButtonClicked'
|
'click #add-components-button': 'onAddComponentsButtonClicked'
|
||||||
|
|
||||||
|
@ -345,6 +370,12 @@ module.exports = class ThangComponentsEditView extends CocoView
|
||||||
@components = @components.concat(sparseComponents)
|
@components = @components.concat(sparseComponents)
|
||||||
@onComponentsChanged()
|
@onComponentsChanged()
|
||||||
|
|
||||||
|
onThangTypeKindChanged: (e) ->
|
||||||
|
return unless defaultComponents = DEFAULT_COMPONENTS[e.kind]
|
||||||
|
for component in defaultComponents when not _.find(@components, original: component.original)
|
||||||
|
@components.push component
|
||||||
|
@onComponentsAdded()
|
||||||
|
|
||||||
destroy: ->
|
destroy: ->
|
||||||
@componentsTreema?.destroy()
|
@componentsTreema?.destroy()
|
||||||
super()
|
super()
|
||||||
|
|
|
@ -35,7 +35,9 @@ module.exports = class RelatedAchievementsView extends CocoView
|
||||||
c
|
c
|
||||||
|
|
||||||
onNewAchievementSaved: (achievement) ->
|
onNewAchievementSaved: (achievement) ->
|
||||||
app.router.navigate('/editor/achievement/' + (achievement.get('slug') or achievement.id), {trigger: true})
|
# We actually open the new tab in NewAchievementModal, so we don't replace this window.
|
||||||
|
#url = '/editor/achievement/' + (achievement.get('slug') or achievement.id)
|
||||||
|
#app.router.navigate(, {trigger: true}) # Let's open a new tab instead.
|
||||||
|
|
||||||
makeNewAchievement: ->
|
makeNewAchievement: ->
|
||||||
modal = new NewAchievementModal model: Achievement, modelLabel: 'Achievement', level: @level
|
modal = new NewAchievementModal model: Achievement, modelLabel: 'Achievement', level: @level
|
||||||
|
|
|
@ -8,6 +8,9 @@ module.exports = class NewAchievementModal extends NewModelModal
|
||||||
template: template
|
template: template
|
||||||
plain: false
|
plain: false
|
||||||
|
|
||||||
|
events:
|
||||||
|
'click #save-new-achievement-link': 'onAchievementSubmitted'
|
||||||
|
|
||||||
constructor: (options) ->
|
constructor: (options) ->
|
||||||
super options
|
super options
|
||||||
@level = options.level
|
@level = options.level
|
||||||
|
@ -18,6 +21,11 @@ module.exports = class NewAchievementModal extends NewModelModal
|
||||||
console.debug 'level', c.level
|
console.debug 'level', c.level
|
||||||
c
|
c
|
||||||
|
|
||||||
|
onAchievementSubmitted: (e) ->
|
||||||
|
slug = _.string.slugify @$el.find('#name').val()
|
||||||
|
url = "/editor/achievement/#{slug}"
|
||||||
|
window.open url, '_blank'
|
||||||
|
|
||||||
createQuery: ->
|
createQuery: ->
|
||||||
checked = @$el.find('[name=queryOptions]:checked')
|
checked = @$el.find('[name=queryOptions]:checked')
|
||||||
checkedValues = ($(check).val() for check in checked)
|
checkedValues = ($(check).val() for check in checked)
|
||||||
|
|
|
@ -3,17 +3,21 @@ template = require 'templates/editor/level/modal/terrain_randomize'
|
||||||
CocoModel = require 'models/CocoModel'
|
CocoModel = require 'models/CocoModel'
|
||||||
|
|
||||||
clusters = {
|
clusters = {
|
||||||
|
'hero': {
|
||||||
|
'thangs': ['Hero Placeholder']
|
||||||
|
'margin': 1
|
||||||
|
}
|
||||||
'rocks': {
|
'rocks': {
|
||||||
'thangs': ['Rock 1', 'Rock 2', 'Rock 3', 'Rock 4', 'Rock 5', 'Rock Cluster 1', 'Rock Cluster 2', 'Rock Cluster 3']
|
'thangs': ['Rock 1', 'Rock 2', 'Rock 3', 'Rock 4', 'Rock 5', 'Rock Cluster 1', 'Rock Cluster 2', 'Rock Cluster 3']
|
||||||
'margin': 1
|
'margin': 1
|
||||||
}
|
}
|
||||||
'trees': {
|
'trees': {
|
||||||
'thangs': ['Tree 1', 'Tree 2', 'Tree 3', 'Tree 4']
|
'thangs': ['Tree 1', 'Tree 2', 'Tree 3', 'Tree 4']
|
||||||
'margin': 0
|
'margin': 0.5
|
||||||
}
|
}
|
||||||
'shrubs': {
|
'shrubs': {
|
||||||
'thangs': ['Shrub 1', 'Shrub 2', 'Shrub 3']
|
'thangs': ['Shrub 1', 'Shrub 2', 'Shrub 3']
|
||||||
'margin': 0
|
'margin': 0.5
|
||||||
}
|
}
|
||||||
'houses': {
|
'houses': {
|
||||||
'thangs': ['House 1', 'House 2', 'House 3', 'House 4']
|
'thangs': ['House 1', 'House 2', 'House 3', 'House 4']
|
||||||
|
@ -83,6 +87,7 @@ clusters = {
|
||||||
|
|
||||||
presets = {
|
presets = {
|
||||||
'dungeon': {
|
'dungeon': {
|
||||||
|
'terrainName': 'Dungeon'
|
||||||
'type':'dungeon'
|
'type':'dungeon'
|
||||||
'borders':'dungeon_wall'
|
'borders':'dungeon_wall'
|
||||||
'borderNoise':0
|
'borderNoise':0
|
||||||
|
@ -97,6 +102,14 @@ presets = {
|
||||||
'thickness': [2,2]
|
'thickness': [2,2]
|
||||||
'cluster': 'dungeon_wall'
|
'cluster': 'dungeon_wall'
|
||||||
}
|
}
|
||||||
|
'hero': {
|
||||||
|
'num': [1, 1]
|
||||||
|
'width': 2
|
||||||
|
'height': 2
|
||||||
|
'clusters': {
|
||||||
|
'hero': [1, 1]
|
||||||
|
}
|
||||||
|
}
|
||||||
'Barrels': {
|
'Barrels': {
|
||||||
'num': [1,1]
|
'num': [1,1]
|
||||||
'width': [8, 12]
|
'width': [8, 12]
|
||||||
|
@ -116,6 +129,7 @@ presets = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
'indoor': {
|
'indoor': {
|
||||||
|
'terrainName': 'Indoor'
|
||||||
'type':'indoor'
|
'type':'indoor'
|
||||||
'borders':'indoor_wall'
|
'borders':'indoor_wall'
|
||||||
'borderNoise':0
|
'borderNoise':0
|
||||||
|
@ -130,6 +144,14 @@ presets = {
|
||||||
'thickness': [2,2]
|
'thickness': [2,2]
|
||||||
'cluster': 'indoor_wall'
|
'cluster': 'indoor_wall'
|
||||||
}
|
}
|
||||||
|
'hero': {
|
||||||
|
'num': [1, 1]
|
||||||
|
'width': 2
|
||||||
|
'height': 2
|
||||||
|
'clusters': {
|
||||||
|
'hero': [1, 1]
|
||||||
|
}
|
||||||
|
}
|
||||||
'furniture': {
|
'furniture': {
|
||||||
'num':[1,2]
|
'num':[1,2]
|
||||||
'width': 15
|
'width': 15
|
||||||
|
@ -141,6 +163,7 @@ presets = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
'grassy': {
|
'grassy': {
|
||||||
|
'terrainName': 'Grass'
|
||||||
'type':'grassy'
|
'type':'grassy'
|
||||||
'borders':'trees'
|
'borders':'trees'
|
||||||
'borderNoise':1
|
'borderNoise':1
|
||||||
|
@ -148,6 +171,14 @@ presets = {
|
||||||
'borderThickness':3
|
'borderThickness':3
|
||||||
'floors':'grass_floor'
|
'floors':'grass_floor'
|
||||||
'decorations': {
|
'decorations': {
|
||||||
|
'hero': {
|
||||||
|
'num': [1, 1]
|
||||||
|
'width': 2
|
||||||
|
'height': 2
|
||||||
|
'clusters': {
|
||||||
|
'hero': [1, 1]
|
||||||
|
}
|
||||||
|
}
|
||||||
'house': {
|
'house': {
|
||||||
'num':[1,2] #min-max
|
'num':[1,2] #min-max
|
||||||
'width': 15
|
'width': 15
|
||||||
|
@ -195,8 +226,8 @@ thangSizes = {
|
||||||
'borderSize': {
|
'borderSize': {
|
||||||
'x':4
|
'x':4
|
||||||
'y':4
|
'y':4
|
||||||
}
|
}}
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = class TerrainRandomizeModal extends ModalView
|
module.exports = class TerrainRandomizeModal extends ModalView
|
||||||
id: 'terrain-randomize-modal'
|
id: 'terrain-randomize-modal'
|
||||||
|
@ -215,7 +246,7 @@ module.exports = class TerrainRandomizeModal extends ModalView
|
||||||
presetType = target.attr 'data-preset-type'
|
presetType = target.attr 'data-preset-type'
|
||||||
presetSize = target.attr 'data-preset-size'
|
presetSize = target.attr 'data-preset-size'
|
||||||
@randomizeThangs presetType, presetSize
|
@randomizeThangs presetType, presetSize
|
||||||
Backbone.Mediator.publish 'editor:random-terrain-generated', thangs: @thangs
|
Backbone.Mediator.publish 'editor:random-terrain-generated', thangs: @thangs, terrain: presets[presetType].terrainName
|
||||||
@hide()
|
@hide()
|
||||||
|
|
||||||
randomizeThangs: (presetName, presetSize) ->
|
randomizeThangs: (presetName, presetSize) ->
|
||||||
|
@ -280,7 +311,7 @@ module.exports = class TerrainRandomizeModal extends ModalView
|
||||||
'id': @getRandomThang(clusters['torch'].thangs)
|
'id': @getRandomThang(clusters['torch'].thangs)
|
||||||
'pos': {
|
'pos': {
|
||||||
'x': i + preset.borderSize
|
'x': i + preset.borderSize
|
||||||
'y': presetSize.y - preset.borderSize
|
'y': presetSize.y - preset.borderSize / 2
|
||||||
}
|
}
|
||||||
'margin': clusters['torch'].margin
|
'margin': clusters['torch'].margin
|
||||||
}
|
}
|
||||||
|
@ -289,7 +320,7 @@ module.exports = class TerrainRandomizeModal extends ModalView
|
||||||
'id': @getRandomThang(clusters['chains'].thangs)
|
'id': @getRandomThang(clusters['chains'].thangs)
|
||||||
'pos': {
|
'pos': {
|
||||||
'x': i + preset.borderSize
|
'x': i + preset.borderSize
|
||||||
'y': presetSize.y - preset.borderSize
|
'y': presetSize.y - preset.borderSize / 2
|
||||||
}
|
}
|
||||||
'margin': clusters['chains'].margin
|
'margin': clusters['chains'].margin
|
||||||
}
|
}
|
||||||
|
@ -346,53 +377,57 @@ module.exports = class TerrainRandomizeModal extends ModalView
|
||||||
continue
|
continue
|
||||||
|
|
||||||
buildRoom: (preset, presetSize, room) ->
|
buildRoom: (preset, presetSize, room) ->
|
||||||
|
grid = preset.borderSize
|
||||||
while true
|
while true
|
||||||
rect = {
|
rect = {
|
||||||
'width':presetSize.sizeFactor * (room.width[0] + preset.borderSize * _.random(0, (room.width[1] - room.width[0])/preset.borderSize))
|
'width':presetSize.sizeFactor * (room.width[0] + grid * _.random(0, (room.width[1] - room.width[0])/grid))
|
||||||
'height':presetSize.sizeFactor * (room.height[0] + preset.borderSize * _.random(0, (room.height[1] - room.height[0])/preset.borderSize))
|
'height':presetSize.sizeFactor * (room.height[0] + grid * _.random(0, (room.height[1] - room.height[0])/grid))
|
||||||
}
|
}
|
||||||
|
# This logic isn't quite right--it makes the rooms bigger than intended--but it's snapping correctly, which is fine for now.
|
||||||
|
rect.width = Math.round((rect.width - grid) / (2 * grid)) * 2 * grid + grid
|
||||||
|
rect.height = Math.round((rect.height - grid) / (2 * grid)) * 2 * grid + grid
|
||||||
roomThickness = _.random(room.thickness[0], room.thickness[1])
|
roomThickness = _.random(room.thickness[0], room.thickness[1])
|
||||||
rect.x = _.random(rect.width/2 + preset.borderSize * (roomThickness+1.5), presetSize.x - rect.width/2 - preset.borderSize * (roomThickness+1.5))
|
rect.x = _.random(rect.width/2 + grid * (roomThickness+1.5), presetSize.x - rect.width/2 - grid * (roomThickness+1.5))
|
||||||
rect.y = _.random(rect.height/2 + preset.borderSize * (roomThickness+2.5), presetSize.y - rect.height/2 - preset.borderSize * (roomThickness+3.5))
|
rect.y = _.random(rect.height/2 + grid * (roomThickness+2.5), presetSize.y - rect.height/2 - grid * (roomThickness+3.5))
|
||||||
# Snap room walls to the wall grid.
|
# Snap room walls to the wall grid.
|
||||||
rect.x = Math.round((rect.x - preset.borderSize / 2) / preset.borderSize) * preset.borderSize + preset.borderSize / 2
|
rect.x = Math.round((rect.x - grid / 2) / grid) * grid
|
||||||
rect.y = Math.round((rect.y - preset.borderSize / 2) / preset.borderSize) * preset.borderSize + preset.borderSize / 2
|
rect.y = Math.round((rect.y - grid / 2) / grid) * grid
|
||||||
break if @addRect {
|
break if @addRect {
|
||||||
'x': rect.x
|
'x': rect.x
|
||||||
'y': rect.y
|
'y': rect.y
|
||||||
'width': rect.width + 2.5 * roomThickness * preset.borderSize
|
'width': rect.width + 2.5 * roomThickness * grid
|
||||||
'height': rect.height + 2.5 * roomThickness * preset.borderSize
|
'height': rect.height + 2.5 * roomThickness * grid
|
||||||
}
|
}
|
||||||
|
|
||||||
xRange = _.range(rect.x - rect.width/2 + preset.borderSize, rect.x + rect.width/2, preset.borderSize)
|
xRange = _.range(rect.x - rect.width/2 + grid, rect.x + rect.width/2, grid)
|
||||||
topDoor = _.random(1) > 0.5
|
topDoor = _.random(1) > 0.5
|
||||||
topDoorX = xRange[_.random(0, xRange.length-1)]
|
topDoorX = xRange[_.random(0, xRange.length-1)]
|
||||||
bottomDoor = if not topDoor then true else _.random(1) > 0.5
|
bottomDoor = if not topDoor then true else _.random(1) > 0.5
|
||||||
bottomDoorX = xRange[_.random(0, xRange.length-1)]
|
bottomDoorX = xRange[_.random(0, xRange.length-1)]
|
||||||
|
|
||||||
for t in _.range(0, roomThickness+1)
|
for t in _.range(0, roomThickness+1)
|
||||||
for i in _.range(rect.x - rect.width/2 - (t-1) * preset.borderSize, rect.x + rect.width/2 + t * preset.borderSize, preset.borderSize)
|
for i in _.range(rect.x - rect.width/2 - (t-1) * grid, rect.x + rect.width/2 + t * grid, grid)
|
||||||
# Bottom wall
|
# Bottom wall
|
||||||
thang = {
|
thang = {
|
||||||
'id': @getRandomThang(clusters[room.cluster].thangs)
|
'id': @getRandomThang(clusters[room.cluster].thangs)
|
||||||
'pos': {
|
'pos': {
|
||||||
'x': i
|
'x': i
|
||||||
'y': rect.y - rect.height/2 - t * preset.borderSize
|
'y': rect.y - rect.height/2 - t * grid
|
||||||
}
|
}
|
||||||
'margin': clusters[room.cluster].margin
|
'margin': clusters[room.cluster].margin
|
||||||
}
|
}
|
||||||
if i is bottomDoorX and bottomDoor
|
if i is bottomDoorX and bottomDoor
|
||||||
thang.id = @getRandomThang(clusters['doors'].thangs)
|
thang.id = @getRandomThang(clusters['doors'].thangs)
|
||||||
thang.pos.y -= preset.borderSize/3
|
thang.pos.y -= grid/3
|
||||||
@addThang thang unless i is bottomDoorX and t isnt roomThickness and bottomDoor
|
@addThang thang unless i is bottomDoorX and t isnt roomThickness and bottomDoor
|
||||||
|
|
||||||
if t is roomThickness and i isnt rect.x - rect.width/2 - (t-1) * preset.borderSize and preset.type is 'dungeon'
|
if t is roomThickness and i isnt rect.x - rect.width/2 - (t-1) * grid and preset.type is 'dungeon'
|
||||||
if ( i isnt bottomDoorX and i isnt bottomDoorX + preset.borderSize ) or not bottomDoor
|
if ( i isnt bottomDoorX and i isnt bottomDoorX + grid ) or not bottomDoor
|
||||||
@addThang {
|
@addThang {
|
||||||
'id': @getRandomThang(clusters['torch'].thangs)
|
'id': @getRandomThang(clusters['torch'].thangs)
|
||||||
'pos': {
|
'pos': {
|
||||||
'x': thang.pos.x - preset.borderSize / 2
|
'x': thang.pos.x - grid / 2
|
||||||
'y': thang.pos.y + preset.borderSize / 2
|
'y': thang.pos.y + grid
|
||||||
}
|
}
|
||||||
'margin': clusters['torch'].margin
|
'margin': clusters['torch'].margin
|
||||||
}
|
}
|
||||||
|
@ -402,22 +437,22 @@ module.exports = class TerrainRandomizeModal extends ModalView
|
||||||
'id': @getRandomThang(clusters[room.cluster].thangs)
|
'id': @getRandomThang(clusters[room.cluster].thangs)
|
||||||
'pos': {
|
'pos': {
|
||||||
'x': i
|
'x': i
|
||||||
'y': rect.y + rect.height/2 + t * preset.borderSize
|
'y': rect.y + rect.height/2 + t * grid
|
||||||
}
|
}
|
||||||
'margin': clusters[room.cluster].margin
|
'margin': clusters[room.cluster].margin
|
||||||
}
|
}
|
||||||
if i is topDoorX and topDoor
|
if i is topDoorX and topDoor
|
||||||
thang.id = @getRandomThang(clusters['doors'].thangs)
|
thang.id = @getRandomThang(clusters['doors'].thangs)
|
||||||
thang.pos.y -= preset.borderSize
|
thang.pos.y -= grid
|
||||||
@addThang thang unless i is topDoorX and t isnt roomThickness and topDoor
|
@addThang thang unless i is topDoorX and t isnt roomThickness and topDoor
|
||||||
|
|
||||||
for t in _.range(0, roomThickness)
|
for t in _.range(0, roomThickness)
|
||||||
for i in _.range(rect.y - rect.height/2 - t * preset.borderSize, rect.y + rect.height/2 + (t+1) * preset.borderSize, preset.borderSize)
|
for i in _.range(rect.y - rect.height/2 - t * grid, rect.y + rect.height/2 + (t+1) * grid, grid)
|
||||||
# Left wall
|
# Left wall
|
||||||
@addThang {
|
@addThang {
|
||||||
'id': @getRandomThang(clusters[room.cluster].thangs)
|
'id': @getRandomThang(clusters[room.cluster].thangs)
|
||||||
'pos': {
|
'pos': {
|
||||||
'x': rect.x - rect.width/2 - t * preset.borderSize
|
'x': rect.x - rect.width/2 - t * grid
|
||||||
'y': i
|
'y': i
|
||||||
}
|
}
|
||||||
'margin': clusters[room.cluster].margin
|
'margin': clusters[room.cluster].margin
|
||||||
|
@ -427,7 +462,7 @@ module.exports = class TerrainRandomizeModal extends ModalView
|
||||||
@addThang {
|
@addThang {
|
||||||
'id': @getRandomThang(clusters[room.cluster].thangs)
|
'id': @getRandomThang(clusters[room.cluster].thangs)
|
||||||
'pos': {
|
'pos': {
|
||||||
'x': rect.x + rect.width/2 + t * preset.borderSize
|
'x': rect.x + rect.width/2 + t * grid
|
||||||
'y': i
|
'y': i
|
||||||
}
|
}
|
||||||
'margin': clusters[room.cluster].margin
|
'margin': clusters[room.cluster].margin
|
||||||
|
|
|
@ -13,12 +13,13 @@ module.exports = class SettingsTabView extends CocoView
|
||||||
# not thangs or scripts or the backend stuff
|
# not thangs or scripts or the backend stuff
|
||||||
editableSettings: [
|
editableSettings: [
|
||||||
'name', 'description', 'documentation', 'nextLevel', 'background', 'victory', 'i18n', 'icon', 'goals',
|
'name', 'description', 'documentation', 'nextLevel', 'background', 'victory', 'i18n', 'icon', 'goals',
|
||||||
'type', 'showsGuide', 'banner', 'employerDescription'
|
'type', 'terrain', 'showsGuide', 'banner', 'employerDescription'
|
||||||
]
|
]
|
||||||
|
|
||||||
subscriptions:
|
subscriptions:
|
||||||
'editor:level-loaded': 'onLevelLoaded'
|
'editor:level-loaded': 'onLevelLoaded'
|
||||||
'editor:thangs-edited': 'onThangsEdited'
|
'editor:thangs-edited': 'onThangsEdited'
|
||||||
|
'editor:random-terrain-generated': 'onRandomTerrainGenerated'
|
||||||
|
|
||||||
constructor: (options) ->
|
constructor: (options) ->
|
||||||
super options
|
super options
|
||||||
|
@ -47,6 +48,7 @@ module.exports = class SettingsTabView extends CocoView
|
||||||
@settingsTreema = @$el.find('#settings-treema').treema treemaOptions
|
@settingsTreema = @$el.find('#settings-treema').treema treemaOptions
|
||||||
@settingsTreema.build()
|
@settingsTreema.build()
|
||||||
@settingsTreema.open()
|
@settingsTreema.open()
|
||||||
|
@lastTerrain = data.terrain
|
||||||
|
|
||||||
getThangIDs: ->
|
getThangIDs: ->
|
||||||
(t.id for t in @level.get('thangs') ? [])
|
(t.id for t in @level.get('thangs') ? [])
|
||||||
|
@ -56,11 +58,17 @@ module.exports = class SettingsTabView extends CocoView
|
||||||
for key in @editableSettings
|
for key in @editableSettings
|
||||||
continue if @settingsTreema.data[key] is undefined
|
continue if @settingsTreema.data[key] is undefined
|
||||||
@level.set key, @settingsTreema.data[key]
|
@level.set key, @settingsTreema.data[key]
|
||||||
|
if (terrain = @settingsTreema.data.terrain) isnt @lastTerrain
|
||||||
|
@lastTerrain = terrain
|
||||||
|
Backbone.Mediator.publish 'editor:terrain-changed', terrain: terrain
|
||||||
|
|
||||||
onThangsEdited: (e) ->
|
onThangsEdited: (e) ->
|
||||||
# Update in-place so existing Treema nodes refer to the same array.
|
# Update in-place so existing Treema nodes refer to the same array.
|
||||||
@thangIDs?.splice(0, @thangIDs.length, @getThangIDs()...)
|
@thangIDs?.splice(0, @thangIDs.length, @getThangIDs()...)
|
||||||
|
|
||||||
|
onRandomTerrainGenerated: (e) ->
|
||||||
|
@settingsTreema.set '/terrain', e.terrain
|
||||||
|
|
||||||
destroy: ->
|
destroy: ->
|
||||||
@settingsTreema?.destroy()
|
@settingsTreema?.destroy()
|
||||||
super()
|
super()
|
||||||
|
|
|
@ -17,6 +17,7 @@ module.exports = class SystemsTabView extends CocoView
|
||||||
'editor:edit-level-system': 'editLevelSystem'
|
'editor:edit-level-system': 'editLevelSystem'
|
||||||
'editor:level-system-editing-ended': 'onLevelSystemEditingEnded'
|
'editor:level-system-editing-ended': 'onLevelSystemEditingEnded'
|
||||||
'editor:level-loaded': 'onLevelLoaded'
|
'editor:level-loaded': 'onLevelLoaded'
|
||||||
|
'editor:terrain-changed': 'onTerrainChanged'
|
||||||
|
|
||||||
events:
|
events:
|
||||||
'click #add-system-button': 'addLevelSystem'
|
'click #add-system-button': 'addLevelSystem'
|
||||||
|
@ -103,6 +104,20 @@ module.exports = class SystemsTabView extends CocoView
|
||||||
@removeSubView @levelSystemEditView
|
@removeSubView @levelSystemEditView
|
||||||
@levelSystemEditView = null
|
@levelSystemEditView = null
|
||||||
|
|
||||||
|
onTerrainChanged: (e) ->
|
||||||
|
defaultPathfinding = e.terrain in ['Dungeon', 'Indoor']
|
||||||
|
return unless AI = @systemsTreema.get 'original=528110f30268d018e3000001'
|
||||||
|
return if AI.config?.findsPaths is defaultPathfinding
|
||||||
|
AI.config ?= {}
|
||||||
|
AI.config.findsPaths = defaultPathfinding
|
||||||
|
@systemsTreema.set 'original=528110f30268d018e3000001', AI
|
||||||
|
noty {
|
||||||
|
text: "AI System defaulted pathfinding to #{defaultPathfinding} for terrain #{e.terrain}."
|
||||||
|
layout: 'topCenter'
|
||||||
|
timeout: 5000
|
||||||
|
type: 'information'
|
||||||
|
}
|
||||||
|
|
||||||
buildDefaultSystems: ->
|
buildDefaultSystems: ->
|
||||||
[
|
[
|
||||||
{original: '528112c00268d018e3000008', majorVersion: 0} # Event
|
{original: '528112c00268d018e3000008', majorVersion: 0} # Event
|
||||||
|
@ -120,6 +135,9 @@ module.exports = class SystemsTabView extends CocoView
|
||||||
{original: '528111b30268d018e3000004', majorVersion: 0} # Alliance
|
{original: '528111b30268d018e3000004', majorVersion: 0} # Alliance
|
||||||
{original: '528114e60268d018e300001a', majorVersion: 0} # UI
|
{original: '528114e60268d018e300001a', majorVersion: 0} # UI
|
||||||
{original: '528114040268d018e3000011', majorVersion: 0} # Physics
|
{original: '528114040268d018e3000011', majorVersion: 0} # Physics
|
||||||
|
{original: '52ae4f02a4dcd4415200000b', majorVersion: 0} # Display
|
||||||
|
{original: '52e953e81b2028d102000004', majorVersion: 0} # Effect
|
||||||
|
{original: '52f1354370fb890000000005', majorVersion: 0} # Magic
|
||||||
]
|
]
|
||||||
|
|
||||||
destroy: ->
|
destroy: ->
|
||||||
|
@ -146,8 +164,9 @@ class LevelSystemNode extends TreemaObjectNode
|
||||||
|
|
||||||
buildValueForDisplay: (valEl, data) ->
|
buildValueForDisplay: (valEl, data) ->
|
||||||
return super valEl unless data.original and @system
|
return super valEl unless data.original and @system
|
||||||
name = "#{@system.get('name')} v#{@system.get('version').major}"
|
name = @system.get 'name'
|
||||||
@buildValueForDisplaySimply valEl, "#{name}"
|
name += " v#{@system.get('version').major}" if @system.get('version').major
|
||||||
|
@buildValueForDisplaySimply valEl, name
|
||||||
|
|
||||||
onEnterPressed: (e) ->
|
onEnterPressed: (e) ->
|
||||||
super e
|
super e
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
CocoView = require 'views/kinds/CocoView'
|
CocoView = require 'views/kinds/CocoView'
|
||||||
add_thangs_template = require 'templates/editor/level/add_thangs'
|
add_thangs_template = require 'templates/editor/level/add-thangs-view'
|
||||||
ThangType = require 'models/ThangType'
|
ThangType = require 'models/ThangType'
|
||||||
CocoCollection = require 'collections/CocoCollection'
|
CocoCollection = require 'collections/CocoCollection'
|
||||||
|
|
||||||
|
@ -11,8 +11,8 @@ class ThangTypeSearchCollection extends CocoCollection
|
||||||
@url += "&term=#{term}" if term
|
@url += "&term=#{term}" if term
|
||||||
|
|
||||||
module.exports = class AddThangsView extends CocoView
|
module.exports = class AddThangsView extends CocoView
|
||||||
id: 'add-thangs-column'
|
id: 'add-thangs-view'
|
||||||
className: 'add-thangs-palette thangs-column'
|
className: 'add-thangs-palette hide'
|
||||||
template: add_thangs_template
|
template: add_thangs_template
|
||||||
|
|
||||||
events:
|
events:
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
CocoView = require 'views/kinds/CocoView'
|
CocoView = require 'views/kinds/CocoView'
|
||||||
AddThangsView = require './AddThangsView'
|
AddThangsView = require './AddThangsView'
|
||||||
thangs_template = require 'templates/editor/level/thangs_tab'
|
thangs_template = require 'templates/editor/level/thangs-tab-view'
|
||||||
Level = require 'models/Level'
|
Level = require 'models/Level'
|
||||||
ThangType = require 'models/ThangType'
|
ThangType = require 'models/ThangType'
|
||||||
LevelComponent = require 'models/LevelComponent'
|
LevelComponent = require 'models/LevelComponent'
|
||||||
|
@ -15,17 +15,15 @@ ComponentsCollection = require 'collections/ComponentsCollection'
|
||||||
MOVE_MARGIN = 0.15
|
MOVE_MARGIN = 0.15
|
||||||
MOVE_SPEED = 13
|
MOVE_SPEED = 13
|
||||||
|
|
||||||
# Essential component original ids
|
# Let us place these on top of other Thangs
|
||||||
componentOriginals =
|
overlappableThangTypeNames = ['Torch', 'Chains', 'Bird', 'Cloud 1', 'Cloud 2', 'Cloud 3', 'Waterfall', 'Obstacle']
|
||||||
'existence.Exists': '524b4150ff92f1f4f8000024'
|
|
||||||
'physics.Physical': '524b75ad7fc0f6d519000001'
|
|
||||||
|
|
||||||
class ThangTypeSearchCollection extends CocoCollection
|
class ThangTypeSearchCollection extends CocoCollection
|
||||||
url: '/db/thang.type?project=original,name,version,slug,kind,components'
|
url: '/db/thang.type?project=original,name,version,slug,kind,components'
|
||||||
model: ThangType
|
model: ThangType
|
||||||
|
|
||||||
module.exports = class ThangsTabView extends CocoView
|
module.exports = class ThangsTabView extends CocoView
|
||||||
id: 'editor-level-thangs-tab-view'
|
id: 'thangs-tab-view'
|
||||||
className: 'tab-pane active'
|
className: 'tab-pane active'
|
||||||
template: thangs_template
|
template: thangs_template
|
||||||
|
|
||||||
|
@ -40,6 +38,7 @@ module.exports = class ThangsTabView extends CocoView
|
||||||
'editor:view-switched': 'onViewSwitched'
|
'editor:view-switched': 'onViewSwitched'
|
||||||
'sprite:dragged': 'onSpriteDragged'
|
'sprite:dragged': 'onSpriteDragged'
|
||||||
'sprite:mouse-up': 'onSpriteMouseUp'
|
'sprite:mouse-up': 'onSpriteMouseUp'
|
||||||
|
'sprite:mouse-down': 'onSpriteMouseDown'
|
||||||
'sprite:double-clicked': 'onSpriteDoubleClicked'
|
'sprite:double-clicked': 'onSpriteDoubleClicked'
|
||||||
'surface:stage-mouse-up': 'onStageMouseUp'
|
'surface:stage-mouse-up': 'onStageMouseUp'
|
||||||
'editor:random-terrain-generated': 'onRandomTerrainGenerated'
|
'editor:random-terrain-generated': 'onRandomTerrainGenerated'
|
||||||
|
@ -49,7 +48,7 @@ module.exports = class ThangsTabView extends CocoView
|
||||||
'click #delete': 'onDeleteClicked'
|
'click #delete': 'onDeleteClicked'
|
||||||
'click #duplicate': 'onDuplicateClicked'
|
'click #duplicate': 'onDuplicateClicked'
|
||||||
'click #thangs-container-toggle': 'toggleThangsContainer'
|
'click #thangs-container-toggle': 'toggleThangsContainer'
|
||||||
# 'click #thangs-palette-toggle': 'toggleThangsPalette'
|
'click #thangs-palette-toggle': 'toggleThangsPalette'
|
||||||
# 'click .add-thang-palette-icon': 'toggleThangsPalette'
|
# 'click .add-thang-palette-icon': 'toggleThangsPalette'
|
||||||
|
|
||||||
shortcuts:
|
shortcuts:
|
||||||
|
@ -96,17 +95,6 @@ module.exports = class ThangsTabView extends CocoView
|
||||||
context.groups = groups
|
context.groups = groups
|
||||||
context
|
context
|
||||||
|
|
||||||
onWindowResize: (e) ->
|
|
||||||
$('#thangs-list').height('100%')
|
|
||||||
thangsHeaderHeight = $('#thangs-header').height()
|
|
||||||
oldHeight = $('#thangs-list').height()
|
|
||||||
if $(document).width() < 1050
|
|
||||||
$('#thangs-list').height(oldHeight - thangsHeaderHeight - 40)
|
|
||||||
else
|
|
||||||
$('#thangs-list').height(oldHeight - thangsHeaderHeight - 80)
|
|
||||||
$('#all-thangs').collapse 'show'
|
|
||||||
$('#add-thangs-column').collapse 'show'
|
|
||||||
|
|
||||||
undo: (e) ->
|
undo: (e) ->
|
||||||
if not @editThangView then @thangsTreema.undo() else @editThangView.undo()
|
if not @editThangView then @thangsTreema.undo() else @editThangView.undo()
|
||||||
|
|
||||||
|
@ -190,10 +178,11 @@ module.exports = class ThangsTabView extends CocoView
|
||||||
super()
|
super()
|
||||||
|
|
||||||
onViewSwitched: (e) ->
|
onViewSwitched: (e) ->
|
||||||
@selectAddThang()
|
@selectAddThang null, true
|
||||||
@surface?.spriteBoss?.selectSprite null, null
|
@surface?.spriteBoss?.selectSprite null, null
|
||||||
|
|
||||||
onSpriteMouseDown: (e) ->
|
onSpriteMouseDown: (e) ->
|
||||||
|
@dragged = false
|
||||||
# Sprite clicks happen after stage clicks, but we need to know whether a sprite is being clicked.
|
# Sprite clicks happen after stage clicks, but we need to know whether a sprite is being clicked.
|
||||||
# clearTimeout @backgroundAddClickTimeout
|
# clearTimeout @backgroundAddClickTimeout
|
||||||
# if e.originalEvent.nativeEvent.button == 2
|
# if e.originalEvent.nativeEvent.button == 2
|
||||||
|
@ -208,6 +197,7 @@ module.exports = class ThangsTabView extends CocoView
|
||||||
|
|
||||||
onSpriteDragged: (e) ->
|
onSpriteDragged: (e) ->
|
||||||
return unless @selectedExtantThang and e.thang?.id is @selectedExtantThang?.id
|
return unless @selectedExtantThang and e.thang?.id is @selectedExtantThang?.id
|
||||||
|
@dragged = true
|
||||||
@surface.camera.dragDisabled = true
|
@surface.camera.dragDisabled = true
|
||||||
{stageX, stageY} = e.originalEvent
|
{stageX, stageY} = e.originalEvent
|
||||||
wop = @surface.camera.screenToWorld x: stageX, y: stageY
|
wop = @surface.camera.screenToWorld x: stageX, y: stageY
|
||||||
|
@ -226,14 +216,13 @@ module.exports = class ThangsTabView extends CocoView
|
||||||
@surface.camera.dragDisabled = false
|
@surface.camera.dragDisabled = false
|
||||||
return unless @selectedExtantThang and e.thang?.id is @selectedExtantThang?.id
|
return unless @selectedExtantThang and e.thang?.id is @selectedExtantThang?.id
|
||||||
pos = @selectedExtantThang.pos
|
pos = @selectedExtantThang.pos
|
||||||
physicalOriginal = componentOriginals['physics.Physical']
|
path = "id=#{@selectedExtantThang.id}/components/original=#{LevelComponent.PhysicalID}"
|
||||||
path = "id=#{@selectedExtantThang.id}/components/original=#{physicalOriginal}" # TODO: hack
|
|
||||||
physical = @thangsTreema.get path
|
physical = @thangsTreema.get path
|
||||||
return if not physical or (physical.config.pos.x is pos.x and physical.config.pos.y is pos.y)
|
return if not physical or (physical.config.pos.x is pos.x and physical.config.pos.y is pos.y)
|
||||||
@thangsTreema.set path + '/config/pos', x: pos.x, y: pos.y, z: pos.z
|
@thangsTreema.set path + '/config/pos', x: pos.x, y: pos.y, z: pos.z
|
||||||
|
|
||||||
onSpriteDoubleClicked: (e) ->
|
onSpriteDoubleClicked: (e) ->
|
||||||
return unless e.thang
|
return unless e.thang and not @dragged
|
||||||
@editThang thangID: e.thang.id
|
@editThang thangID: e.thang.id
|
||||||
|
|
||||||
onRandomTerrainGenerated: (e) ->
|
onRandomTerrainGenerated: (e) ->
|
||||||
|
@ -255,9 +244,12 @@ module.exports = class ThangsTabView extends CocoView
|
||||||
if e.thang and (key.alt or key.meta)
|
if e.thang and (key.alt or key.meta)
|
||||||
# We alt-clicked, so create a clone addThang
|
# We alt-clicked, so create a clone addThang
|
||||||
@selectAddThangType e.thang.spriteName, @selectedExtantThang
|
@selectAddThangType e.thang.spriteName, @selectedExtantThang
|
||||||
else if e.thang and not (@addThangSprite and @addThangType is 'Blood Torch Test') # TODO: figure out which Thangs can be placed on other Thangs
|
else if @justAdded()
|
||||||
|
# Skip double insert due to extra selection event
|
||||||
|
null
|
||||||
|
else if e.thang and not (@addThangSprite and @addThangType.get('name') in overlappableThangTypeNames)
|
||||||
# We clicked on a Thang (or its Treema), so select the Thang
|
# We clicked on a Thang (or its Treema), so select the Thang
|
||||||
@selectAddThang null
|
@selectAddThang null, true
|
||||||
@selectedExtantThangClickTime = new Date()
|
@selectedExtantThangClickTime = new Date()
|
||||||
treemaThang = _.find @thangsTreema.childrenTreemas, (treema) => treema.data.id is @selectedExtantThang.id
|
treemaThang = _.find @thangsTreema.childrenTreemas, (treema) => treema.data.id is @selectedExtantThang.id
|
||||||
if treemaThang
|
if treemaThang
|
||||||
|
@ -270,16 +262,13 @@ module.exports = class ThangsTabView extends CocoView
|
||||||
else if @addThangSprite
|
else if @addThangSprite
|
||||||
# We clicked on the background when we had an add Thang selected, so add it
|
# We clicked on the background when we had an add Thang selected, so add it
|
||||||
@addThang @addThangType, @addThangSprite.thang.pos
|
@addThang @addThangType, @addThangSprite.thang.pos
|
||||||
|
@lastAddTime = new Date()
|
||||||
|
|
||||||
# Commented out this bit so the extant thangs treema editor can select invisible thangs like arrows.
|
justAdded: -> @lastAddTime and (new Date() - @lastAddTime) < 150
|
||||||
# Couldn't spot any bugs... But if there are any, better come up with a better solution.
|
|
||||||
# else
|
|
||||||
# # We clicked on the background, so deselect anything selected
|
|
||||||
# @thangsTreema.deselectAll()
|
|
||||||
|
|
||||||
selectAddThang: (e) =>
|
selectAddThang: (e, forceDeselect=false) =>
|
||||||
return if e? and $(e.target).closest('#thang-search').length # Ignore if you're trying to search thangs
|
return if e? and $(e.target).closest('#thang-search').length # Ignore if you're trying to search thangs
|
||||||
return unless e? and $(e.target).closest('#editor-level-thangs-tab-view').length or key.isPressed('esc')
|
return unless (e? and $(e.target).closest('#thangs-tab-view').length) or key.isPressed('esc') or forceDeselect
|
||||||
if e then target = $(e.target) else target = @$el.find('.add-thangs-palette') # pretend to click on background if no event
|
if e then target = $(e.target) else target = @$el.find('.add-thangs-palette') # pretend to click on background if no event
|
||||||
return true if target.attr('id') is 'surface'
|
return true if target.attr('id') is 'surface'
|
||||||
target = target.closest('.add-thang-palette-icon')
|
target = target.closest('.add-thang-palette-icon')
|
||||||
|
@ -316,11 +305,11 @@ module.exports = class ThangsTabView extends CocoView
|
||||||
|
|
||||||
createEssentialComponents: (defaultComponents) ->
|
createEssentialComponents: (defaultComponents) ->
|
||||||
physicalConfig = {pos: {x: 10, y: 10, z: 1}}
|
physicalConfig = {pos: {x: 10, y: 10, z: 1}}
|
||||||
if physicalOriginal = _.find(defaultComponents ? [], original: componentOriginals['physics.Physical'])
|
if physicalOriginal = _.find(defaultComponents ? [], original: LevelComponent.PhysicalID)
|
||||||
physicalConfig.pos.z = physicalOriginal.config?.pos?.z ? 1 # Get the z right
|
physicalConfig.pos.z = physicalOriginal.config?.pos?.z ? 1 # Get the z right
|
||||||
[
|
[
|
||||||
{original: componentOriginals['existence.Exists'], majorVersion: 0, config: {}}
|
{original: LevelComponent.ExistsID, majorVersion: 0, config: {}}
|
||||||
{original: componentOriginals['physics.Physical'], majorVersion: 0, config: physicalConfig}
|
{original: LevelComponent.PhysicalID, majorVersion: 0, config: physicalConfig}
|
||||||
]
|
]
|
||||||
|
|
||||||
createAddThang: ->
|
createAddThang: ->
|
||||||
|
@ -405,6 +394,11 @@ module.exports = class ThangsTabView extends CocoView
|
||||||
thang.isSelectable = not thang.isLand for thang in @world.thangs # let us select walls and such
|
thang.isSelectable = not thang.isLand for thang in @world.thangs # let us select walls and such
|
||||||
@surface?.setWorld @world
|
@surface?.setWorld @world
|
||||||
@selectAddThangType @addThangType, @cloneSourceThang if @addThangType # make another addThang sprite, since the World just refreshed
|
@selectAddThangType @addThangType, @cloneSourceThang if @addThangType # make another addThang sprite, since the World just refreshed
|
||||||
|
|
||||||
|
# update selection, since the thangs have been remade
|
||||||
|
if @selectedExtantThang
|
||||||
|
@selectedExtantSprite = @surface.spriteBoss.sprites[@selectedExtantThang.id]
|
||||||
|
@selectedExtantThang = @selectedExtantSprite?.thang
|
||||||
Backbone.Mediator.publish 'editor:thangs-edited', thangs: @world.thangs
|
Backbone.Mediator.publish 'editor:thangs-edited', thangs: @world.thangs
|
||||||
|
|
||||||
onTreemaThangSelected: (e, selectedTreemas) =>
|
onTreemaThangSelected: (e, selectedTreemas) =>
|
||||||
|
@ -423,12 +417,15 @@ module.exports = class ThangsTabView extends CocoView
|
||||||
addThang: (thangType, pos, batchInsert=false) ->
|
addThang: (thangType, pos, batchInsert=false) ->
|
||||||
@$el.find('#randomize-button').hide()
|
@$el.find('#randomize-button').hide()
|
||||||
if batchInsert
|
if batchInsert
|
||||||
|
if thangType.get('name') is 'Hero Placeholder'
|
||||||
|
thangID = 'Hero Placeholder'
|
||||||
|
return if @level.get('type') isnt 'hero' or @thangsTreema.get "id=#{thangID}"
|
||||||
|
else
|
||||||
thangID = "Random #{thangType.get('name')} #{@thangsBatch.length}"
|
thangID = "Random #{thangType.get('name')} #{@thangsBatch.length}"
|
||||||
else
|
else
|
||||||
thangID = Thang.nextID(thangType.get('name'), @world) until thangID and not @thangsTreema.get "id=#{thangID}"
|
thangID = Thang.nextID(thangType.get('name'), @world) until thangID and not @thangsTreema.get "id=#{thangID}"
|
||||||
if @cloneSourceThang
|
if @cloneSourceThang
|
||||||
components = _.cloneDeep @thangsTreema.get "id=#{@cloneSourceThang.id}/components"
|
components = _.cloneDeep @thangsTreema.get "id=#{@cloneSourceThang.id}/components"
|
||||||
@selectAddThang null
|
|
||||||
else if @level.get('type') is 'hero'
|
else if @level.get('type') is 'hero'
|
||||||
components = [] # Load them all from default ThangType Components
|
components = [] # Load them all from default ThangType Components
|
||||||
else
|
else
|
||||||
|
@ -450,7 +447,8 @@ module.exports = class ThangsTabView extends CocoView
|
||||||
thangData = @thangsTreema.get "id=#{e.thangID}"
|
thangData = @thangsTreema.get "id=#{e.thangID}"
|
||||||
@editThangView = new LevelThangEditView thangData: thangData, level: @level, world: @world, supermodel: @supermodel # supermodel needed for checkForMissingSystems
|
@editThangView = new LevelThangEditView thangData: thangData, level: @level, world: @world, supermodel: @supermodel # supermodel needed for checkForMissingSystems
|
||||||
@insertSubView @editThangView
|
@insertSubView @editThangView
|
||||||
@$el.find('.thangs-column').hide()
|
@$el.find('>').hide()
|
||||||
|
@editThangView.$el.show()
|
||||||
Backbone.Mediator.publish 'editor:view-switched', {}
|
Backbone.Mediator.publish 'editor:view-switched', {}
|
||||||
|
|
||||||
onLevelThangEdited: (e) ->
|
onLevelThangEdited: (e) ->
|
||||||
|
@ -461,7 +459,7 @@ module.exports = class ThangsTabView extends CocoView
|
||||||
@removeSubView @editThangView
|
@removeSubView @editThangView
|
||||||
@editThangView = null
|
@editThangView = null
|
||||||
@onThangsChanged()
|
@onThangsChanged()
|
||||||
@$el.find('.thangs-column').show()
|
@$el.find('>').show()
|
||||||
|
|
||||||
preventDefaultContextMenu: (e) ->
|
preventDefaultContextMenu: (e) ->
|
||||||
return unless $(e.target).closest('#canvas-wrapper').length
|
return unless $(e.target).closest('#canvas-wrapper').length
|
||||||
|
@ -485,11 +483,10 @@ module.exports = class ThangsTabView extends CocoView
|
||||||
@selectAddThangType @selectedExtantThang.spriteName, @selectedExtantThang
|
@selectAddThangType @selectedExtantThang.spriteName, @selectedExtantThang
|
||||||
|
|
||||||
toggleThangsContainer: (e) ->
|
toggleThangsContainer: (e) ->
|
||||||
$('#all-thangs').toggle()
|
$('#all-thangs').toggleClass('hide')
|
||||||
|
|
||||||
toggleThangsPalette: (e) ->
|
toggleThangsPalette: (e) ->
|
||||||
$('#add-thangs-column').toggle()
|
$('#add-thangs-view').toggleClass('hide')
|
||||||
@onWindowResize e
|
|
||||||
|
|
||||||
class ThangsNode extends TreemaNode.nodeMap.array
|
class ThangsNode extends TreemaNode.nodeMap.array
|
||||||
valueClass: 'treema-array-replacement'
|
valueClass: 'treema-array-replacement'
|
||||||
|
@ -518,11 +515,8 @@ class ThangNode extends TreemaObjectNode
|
||||||
s = "#{data.thangType}"
|
s = "#{data.thangType}"
|
||||||
if isObjectID s
|
if isObjectID s
|
||||||
unless name = ThangNode.thangNameMap[s]
|
unless name = ThangNode.thangNameMap[s]
|
||||||
thangType = _.find @settings.supermodel.getModels(ThangType), (m) -> m.get('original') is s and m.get('kind')
|
thangType = _.find @settings.supermodel.getModels(ThangType), (m) -> m.get('original') is s
|
||||||
name = ThangNode.thangNameMap[s] = thangType.get 'name'
|
name = ThangNode.thangNameMap[s] = thangType.get 'name'
|
||||||
ThangNode.thangKindMap[s] = thangType.get 'kind'
|
|
||||||
kind = ThangNode.thangKindMap[s]
|
|
||||||
@$el.addClass "treema-#{kind}"
|
|
||||||
s = name
|
s = name
|
||||||
s += ' - ' + data.id if data.id isnt s
|
s += ' - ' + data.id if data.id isnt s
|
||||||
if pos
|
if pos
|
||||||
|
|
|
@ -136,6 +136,7 @@ module.exports = class ThangTypeColorsTabView extends CocoView
|
||||||
|
|
||||||
onColorGroupsChanged: =>
|
onColorGroupsChanged: =>
|
||||||
@thangType.set('colorGroups', @colorGroups.data)
|
@thangType.set('colorGroups', @colorGroups.data)
|
||||||
|
Backbone.Mediator.publish 'editor:thang-type-color-groups-changed', colorGroups: @colorGroups.data
|
||||||
|
|
||||||
onColorGroupSelected: (e, selected) =>
|
onColorGroupSelected: (e, selected) =>
|
||||||
@$el.find('#color-group-settings').toggle selected.length > 0
|
@$el.find('#color-group-settings').toggle selected.length > 0
|
||||||
|
|
|
@ -44,6 +44,7 @@ module.exports = class ThangTypeEditView extends RootView
|
||||||
'keyup .play-with-level-input': 'onPlayLevelKeyUp'
|
'keyup .play-with-level-input': 'onPlayLevelKeyUp'
|
||||||
|
|
||||||
subscriptions:
|
subscriptions:
|
||||||
|
'editor:thang-type-color-groups-changed': 'onColorGroupsChanged'
|
||||||
'editor:save-new-version': 'saveNewThangType'
|
'editor:save-new-version': 'saveNewThangType'
|
||||||
|
|
||||||
# init / render
|
# init / render
|
||||||
|
@ -102,6 +103,11 @@ module.exports = class ThangTypeEditView extends RootView
|
||||||
onComponentsChanged: (components) =>
|
onComponentsChanged: (components) =>
|
||||||
@thangType.set 'components', components
|
@thangType.set 'components', components
|
||||||
|
|
||||||
|
onColorGroupsChanged: (e) ->
|
||||||
|
@temporarilyIgnoringChanges = true
|
||||||
|
@treema.set 'colorGroups', e.colorGroups
|
||||||
|
@temporarilyIgnoringChanges = false
|
||||||
|
|
||||||
makeDot: (color) ->
|
makeDot: (color) ->
|
||||||
circle = new createjs.Shape()
|
circle = new createjs.Shape()
|
||||||
circle.graphics.beginFill(color).beginStroke('black').drawCircle(0, 0, 5)
|
circle.graphics.beginFill(color).beginStroke('black').drawCircle(0, 0, 5)
|
||||||
|
@ -380,8 +386,10 @@ module.exports = class ThangTypeEditView extends RootView
|
||||||
el = @$el.find('#thang-type-treema')
|
el = @$el.find('#thang-type-treema')
|
||||||
@treema = @$el.find('#thang-type-treema').treema(options)
|
@treema = @$el.find('#thang-type-treema').treema(options)
|
||||||
@treema.build()
|
@treema.build()
|
||||||
|
@lastKind = data.kind
|
||||||
|
|
||||||
pushChangesToPreview: =>
|
pushChangesToPreview: =>
|
||||||
|
return if @temporarilyIgnoringChanges
|
||||||
# TODO: This doesn't delete old Treema keys you deleted
|
# TODO: This doesn't delete old Treema keys you deleted
|
||||||
for key, value of @treema.data
|
for key, value of @treema.data
|
||||||
@thangType.set(key, value)
|
@thangType.set(key, value)
|
||||||
|
@ -389,6 +397,11 @@ module.exports = class ThangTypeEditView extends RootView
|
||||||
@refreshAnimation()
|
@refreshAnimation()
|
||||||
@updateDots()
|
@updateDots()
|
||||||
@updatePortrait()
|
@updatePortrait()
|
||||||
|
if (kind = @treema.data.kind) isnt @lastKind
|
||||||
|
@lastKind = kind
|
||||||
|
Backbone.Mediator.publish 'editor:thang-type-kind-changed', kind: kind
|
||||||
|
if kind in ['Doodad', 'Floor', 'Wall'] and not @treema.data.terrains
|
||||||
|
@treema.set '/terrains', ['Grass', 'Dungeon', 'Indoor'] # So editors know to set them.
|
||||||
|
|
||||||
onSelectNode: (e, selected) =>
|
onSelectNode: (e, selected) =>
|
||||||
selected = selected[0]
|
selected = selected[0]
|
||||||
|
|
|
@ -18,6 +18,7 @@ module.exports = class GameMenuModal extends ModalView
|
||||||
constructor: (options) ->
|
constructor: (options) ->
|
||||||
super options
|
super options
|
||||||
@options.showDevBits = me.isAdmin() or /https?:\/\/localhost/.test(window.location.href)
|
@options.showDevBits = me.isAdmin() or /https?:\/\/localhost/.test(window.location.href)
|
||||||
|
@options.showInventory = @options.level.get('type', true) is 'hero'
|
||||||
|
|
||||||
events:
|
events:
|
||||||
'change input.select': 'onSelectionChanged'
|
'change input.select': 'onSelectionChanged'
|
||||||
|
@ -25,13 +26,14 @@ module.exports = class GameMenuModal extends ModalView
|
||||||
getRenderData: (context={}) ->
|
getRenderData: (context={}) ->
|
||||||
context = super(context)
|
context = super(context)
|
||||||
context.showDevBits = @options.showDevBits
|
context.showDevBits = @options.showDevBits
|
||||||
|
context.showInventory = @options.showInventory
|
||||||
context
|
context
|
||||||
|
|
||||||
afterRender: ->
|
afterRender: ->
|
||||||
super()
|
super()
|
||||||
@$el.toggleClas
|
@$el.toggleClas
|
||||||
@insertSubView new submenuView @options for submenuView in submenuViews
|
@insertSubView new submenuView @options for submenuView in submenuViews
|
||||||
(if @options.showDevBits then @subviews.inventory_view else @subviews.choose_hero_view).$el.addClass 'active'
|
(if @options.showInventory then @subviews.inventory_view else @subviews.choose_hero_view).$el.addClass 'active'
|
||||||
|
|
||||||
onHidden: ->
|
onHidden: ->
|
||||||
subview.onHidden?() for subviewKey, subview of @subviews
|
subview.onHidden?() for subviewKey, subview of @subviews
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
ModalView = require 'views/kinds/ModalView'
|
ModalView = require 'views/kinds/ModalView'
|
||||||
template = require 'templates/modal/versions'
|
template = require 'templates/modal/versions'
|
||||||
tableTemplate = require 'templates/kinds/table'
|
|
||||||
DeltaView = require 'views/editor/DeltaView'
|
DeltaView = require 'views/editor/DeltaView'
|
||||||
PatchModal = require 'views/editor/PatchModal'
|
PatchModal = require 'views/editor/PatchModal'
|
||||||
nameLoader = require 'lib/NameLoader'
|
nameLoader = require 'lib/NameLoader'
|
||||||
|
|
|
@ -117,7 +117,9 @@ describe 'LevelLoader', ->
|
||||||
levelLoader = new LevelLoader({supermodel:new SuperModel(), sessionID: 'id', levelID: 'id'})
|
levelLoader = new LevelLoader({supermodel:new SuperModel(), sessionID: 'id', levelID: 'id'})
|
||||||
|
|
||||||
# first load Tharin by the 'normal' session load
|
# first load Tharin by the 'normal' session load
|
||||||
responses = { '/db/level_session/id': sessionWithTharinWithHelmet }
|
responses = '/db/level/id': levelWithOgreWithMace
|
||||||
|
jasmine.Ajax.requests.sendResponses(responses)
|
||||||
|
responses = '/db/level_session/id': sessionWithTharinWithHelmet
|
||||||
jasmine.Ajax.requests.sendResponses(responses)
|
jasmine.Ajax.requests.sendResponses(responses)
|
||||||
numRequestsBefore = jasmine.Ajax.requests.count()
|
numRequestsBefore = jasmine.Ajax.requests.count()
|
||||||
|
|
||||||
|
@ -127,7 +129,7 @@ describe 'LevelLoader', ->
|
||||||
levelLoader.loadDependenciesForSession(session)
|
levelLoader.loadDependenciesForSession(session)
|
||||||
levelLoader.loadDependenciesForSession(session)
|
levelLoader.loadDependenciesForSession(session)
|
||||||
numRequestsAfter = jasmine.Ajax.requests.count()
|
numRequestsAfter = jasmine.Ajax.requests.count()
|
||||||
expect(numRequestsBefore).toBe(numRequestsAfter)
|
expect(numRequestsAfter).toBe(numRequestsBefore)
|
||||||
|
|
||||||
it 'loads thangs for items that the level thangs have in their Equips component configs', ->
|
it 'loads thangs for items that the level thangs have in their Equips component configs', ->
|
||||||
new LevelLoader({supermodel:supermodel = new SuperModel(), sessionID: 'id', levelID: 'id'})
|
new LevelLoader({supermodel:supermodel = new SuperModel(), sessionID: 'id', levelID: 'id'})
|
||||||
|
|
Loading…
Reference in a new issue