mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-03-14 07:00:01 -04:00
Fixed #847. Fixed some subscription schemas.
This commit is contained in:
parent
cd3bf4d0db
commit
02255044e3
11 changed files with 45 additions and 23 deletions
|
@ -29,6 +29,9 @@ module.exports =
|
|||
|
||||
'editor:level-thang-done-editing': c.object {}
|
||||
|
||||
'editor:thangs-edited': c.object {required: ['thangs']},
|
||||
thangs: c.array {}, {type: 'object'}
|
||||
|
||||
'editor:level-loaded': c.object {required: ['level']},
|
||||
level: {type: 'object'}
|
||||
|
||||
|
|
|
@ -39,18 +39,18 @@ module.exports = # /app/lib/surface
|
|||
'sprite:speech-updated': c.object {required: ['sprite', 'thang']},
|
||||
sprite: {type: 'object'}
|
||||
thang: {type: 'object'}
|
||||
blurb: {type: 'string'}
|
||||
blurb: {type: ['string', 'null']}
|
||||
message: {type: 'string'}
|
||||
mood: {type: 'string'}
|
||||
responses: {type: 'array'}
|
||||
responses: {type: ['array', 'null', 'undefined']}
|
||||
spriteID: {type: 'string'}
|
||||
sound: {type: ['null', 'undefined', 'object']}
|
||||
|
||||
'level:sprite-dialogue': c.object {required: ['spriteID', 'message']},
|
||||
blurb: {type: 'string'}
|
||||
blurb: {type: ['string', 'null']}
|
||||
message: {type: 'string'}
|
||||
mood: {type: 'string'}
|
||||
responses: {type: 'array'}
|
||||
responses: {type: ['array', 'null', 'undefined']}
|
||||
spriteID: {type: 'string'}
|
||||
sound: {type: ['null', 'undefined', 'object']}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
c = require 'schemas/schemas'
|
||||
|
||||
module.exports =
|
||||
'tome:cast-spell': c.object {title: 'Cast Spell', description: 'Published when a spell is cast', required: ['spell', 'thang', 'preload', 'realTime']},
|
||||
'tome:cast-spell': c.object {title: 'Cast Spell', description: 'Published when a spell is cast', required: []},
|
||||
spell: {type: 'object'}
|
||||
thang: {type: 'object'}
|
||||
preload: {type: 'boolean'}
|
||||
|
@ -106,4 +106,6 @@ module.exports =
|
|||
|
||||
'tome:focus-editor': c.object {title: 'Focus Editor', description: 'Published whenever we want to give focus back to the editor'}
|
||||
|
||||
'tome:fullscreen-view': c.object {title: 'Fullscreen View', description: 'Published when we want to make the Tome take up most of the screen'}
|
||||
'tome:toggle-maximize': c.object {title: 'Toggle Maximize', description: 'Published when we want to make the Tome take up most of the screen'}
|
||||
|
||||
'tome:maximize-toggled': c.object {title: 'Maximize Toggled', description: 'Published when the Tome has changed maximize/minimize state.'}
|
||||
|
|
|
@ -12,6 +12,7 @@ module.exports = class ScriptsTabView extends CocoView
|
|||
|
||||
subscriptions:
|
||||
'editor:level-loaded': 'onLevelLoaded'
|
||||
'editor:thangs-edited': 'onThangsEdited'
|
||||
|
||||
constructor: (options) ->
|
||||
super options
|
||||
|
@ -53,7 +54,7 @@ module.exports = class ScriptsTabView extends CocoView
|
|||
@selectedScriptPath = null
|
||||
return
|
||||
|
||||
thangIDs = @getThangIDs()
|
||||
@thangIDs = @getThangIDs()
|
||||
treemaOptions =
|
||||
world: @world
|
||||
filePath: "db/level/#{@level.get('original')}"
|
||||
|
@ -61,7 +62,7 @@ module.exports = class ScriptsTabView extends CocoView
|
|||
view: @
|
||||
schema: Level.schema.properties.scripts.items
|
||||
data: selected.data
|
||||
thangIDs: thangIDs
|
||||
thangIDs: @thangIDs
|
||||
dimensions: @dimensions
|
||||
supermodel: @supermodel
|
||||
readOnly: me.get('anonymous')
|
||||
|
@ -88,7 +89,7 @@ module.exports = class ScriptsTabView extends CocoView
|
|||
@selectedScriptPath = newPath
|
||||
|
||||
getThangIDs: ->
|
||||
(t.id for t in @level.get('thangs') when t.id isnt 'Interface')
|
||||
(t.id for t in @level.get('thangs'))
|
||||
|
||||
onNewScriptAdded: (scriptNode) =>
|
||||
return unless scriptNode
|
||||
|
@ -110,6 +111,11 @@ module.exports = class ScriptsTabView extends CocoView
|
|||
onScriptChanged: =>
|
||||
@scriptsTreema.set(@selectedScriptPath, @scriptTreema.data)
|
||||
|
||||
onThangsEdited: (e) ->
|
||||
# Update in-place so existing Treema nodes refer to the same array.
|
||||
@thangIDs.splice(0, @thangIDs.length, @getThangIDs()...)
|
||||
|
||||
|
||||
class ScriptsNode extends TreemaArrayNode
|
||||
nodeDescription: 'Script'
|
||||
addNewChild: ->
|
||||
|
|
|
@ -18,6 +18,7 @@ module.exports = class SettingsTabView extends CocoView
|
|||
|
||||
subscriptions:
|
||||
'editor:level-loaded': 'onLevelLoaded'
|
||||
'editor:thangs-edited': 'onThangsEdited'
|
||||
|
||||
constructor: (options) ->
|
||||
super options
|
||||
|
@ -29,7 +30,7 @@ module.exports = class SettingsTabView extends CocoView
|
|||
schema = _.cloneDeep Level.schema
|
||||
schema.properties = _.pick schema.properties, (value, key) => key in @editableSettings
|
||||
schema.required = _.intersection schema.required, @editableSettings
|
||||
thangIDs = @getThangIDs()
|
||||
@thangIDs = @getThangIDs()
|
||||
treemaOptions =
|
||||
filePath: "db/level/#{@level.get('original')}"
|
||||
supermodel: @supermodel
|
||||
|
@ -37,7 +38,7 @@ module.exports = class SettingsTabView extends CocoView
|
|||
data: data
|
||||
readOnly: me.get('anonymous')
|
||||
callbacks: {change: @onSettingsChanged}
|
||||
thangIDs: thangIDs
|
||||
thangIDs: @thangIDs
|
||||
nodeClasses:
|
||||
object: SettingsNode
|
||||
thang: nodes.ThangNode
|
||||
|
@ -47,7 +48,7 @@ module.exports = class SettingsTabView extends CocoView
|
|||
@settingsTreema.open()
|
||||
|
||||
getThangIDs: ->
|
||||
(t.id for t in @level.get('thangs') when t.id isnt 'Interface')
|
||||
(t.id for t in @level.get('thangs'))
|
||||
|
||||
onSettingsChanged: (e) =>
|
||||
$('.level-title').text @settingsTreema.data.name
|
||||
|
@ -55,5 +56,10 @@ module.exports = class SettingsTabView extends CocoView
|
|||
continue if @settingsTreema.data[key] is undefined
|
||||
@level.set key, @settingsTreema.data[key]
|
||||
|
||||
onThangsEdited: (e) ->
|
||||
# Update in-place so existing Treema nodes refer to the same array.
|
||||
@thangIDs.splice(0, @thangIDs.length, @getThangIDs()...)
|
||||
|
||||
|
||||
class SettingsNode extends TreemaObjectNode
|
||||
nodeDescription: 'Settings'
|
||||
|
|
|
@ -402,7 +402,7 @@ module.exports = class ThangsTabView extends CocoView
|
|||
thang.isSelectable = not thang.isLand for thang in @world.thangs # let us select walls and such
|
||||
@surface?.setWorld @world
|
||||
@selectAddThangType @addThangType, @cloneSourceThang if @addThangType # make another addThang sprite, since the World just refreshed
|
||||
null
|
||||
Backbone.Mediator.publish 'editor:thangs-edited', thangs: @world.thangs
|
||||
|
||||
onTreemaThangSelected: (e, selectedTreemas) =>
|
||||
selectedThangID = _.last(selectedTreemas)?.data.id
|
||||
|
|
|
@ -31,7 +31,7 @@ module.exports = class LevelHUDView extends CocoView
|
|||
@$el.addClass 'no-selection'
|
||||
|
||||
onClick: (e) ->
|
||||
Backbone.Mediator.publish 'tome:focus-editor' unless $(e.target).parents('.thang-props').length
|
||||
Backbone.Mediator.publish 'tome:focus-editor', {} unless $(e.target).parents('.thang-props').length
|
||||
|
||||
onFrameChanged: (e) ->
|
||||
@timeProgress = e.progress
|
||||
|
@ -207,10 +207,10 @@ module.exports = class LevelHUDView extends CocoView
|
|||
if @lastResponses
|
||||
buttons = $('.enter button')
|
||||
for response, i in @lastResponses
|
||||
f = (r) => => setTimeout((-> Backbone.Mediator.publish(r.channel, r.event)), 10)
|
||||
f = (r) => => setTimeout((-> Backbone.Mediator.publish(r.channel, r.event or {})), 10)
|
||||
$(buttons[i]).click(f(response))
|
||||
else
|
||||
$('.enter', @bubble).click(-> Backbone.Mediator.publish('script:end-current-script'))
|
||||
$('.enter', @bubble).click(-> Backbone.Mediator.publish('script:end-current-script', {}))
|
||||
return
|
||||
@animator.tick()
|
||||
|
||||
|
@ -221,7 +221,7 @@ module.exports = class LevelHUDView extends CocoView
|
|||
# If we decide that always having the last one fire is bad, we should make it smarter.
|
||||
return unless @lastResponses?.length
|
||||
r = @lastResponses[@lastResponses.length - 1]
|
||||
_.delay (-> Backbone.Mediator.publish(r.channel, r.event)), 10
|
||||
_.delay (-> Backbone.Mediator.publish(r.channel, r.event or {})), 10
|
||||
|
||||
onEscapePressed: (e) ->
|
||||
@escapePressed = true
|
||||
|
|
|
@ -68,7 +68,7 @@ module.exports = class PlayLevelView extends RootView
|
|||
|
||||
events:
|
||||
'click #level-done-button': 'onDonePressed'
|
||||
'click #fullscreen-editor-background-screen': (e) -> Backbone.Mediator.publish 'tome:fullscreen-view', {}
|
||||
'click #fullscreen-editor-background-screen': (e) -> Backbone.Mediator.publish 'tome:toggle-maximize', {}
|
||||
|
||||
shortcuts:
|
||||
'ctrl+s': 'onCtrlS'
|
||||
|
|
|
@ -171,7 +171,7 @@ module.exports = class SpellDebugView extends CocoView
|
|||
@frameRate = e.world.frameRate
|
||||
|
||||
onFrameChanged: (data) ->
|
||||
@currentFrame = data.frame
|
||||
@currentFrame = Math.round(data.frame)
|
||||
@frameRate = data.world.frameRate
|
||||
|
||||
onSpellChangedCalculation: (data) ->
|
||||
|
|
|
@ -16,13 +16,13 @@ module.exports = class SpellListTabEntryView extends SpellListEntryView
|
|||
'tome:spell-changed': 'onSpellChanged'
|
||||
'god:new-world-created': 'onNewWorld'
|
||||
'tome:spell-changed-language': 'onSpellChangedLanguage'
|
||||
'tome:fullscreen-view': 'onFullscreenClick'
|
||||
'tome:toggle-maximize': 'onToggleMaximize'
|
||||
|
||||
events:
|
||||
'click .spell-list-button': 'onDropdownClick'
|
||||
'click .reload-code': 'onCodeReload'
|
||||
'click .beautify-code': 'onBeautifyClick'
|
||||
'click .fullscreen-code': 'onFullscreenClick'
|
||||
'click .fullscreen-code': 'onToggleMaximize'
|
||||
|
||||
constructor: (options) ->
|
||||
super options
|
||||
|
@ -98,11 +98,12 @@ module.exports = class SpellListTabEntryView extends SpellListEntryView
|
|||
return unless @controlsEnabled
|
||||
Backbone.Mediator.publish 'tome:spell-beautify', spell: @spell
|
||||
|
||||
onFullscreenClick: (e) ->
|
||||
onToggleMaximize: (e) ->
|
||||
$codearea = $('html')
|
||||
$('#code-area').css 'z-index', 20 unless $codearea.hasClass 'fullscreen-editor'
|
||||
$('html').toggleClass 'fullscreen-editor'
|
||||
$('.fullscreen-code').toggleClass 'maximized'
|
||||
Backbone.Mediator.publish 'tome:maximize-toggled', {}
|
||||
|
||||
updateReloadButton: ->
|
||||
changed = @spell.hasChanged null, @spell.getSource()
|
||||
|
|
|
@ -50,6 +50,7 @@ module.exports = class SpellView extends CocoView
|
|||
'tome:update-snippets': 'addZatannaSnippets'
|
||||
'tome:insert-snippet': 'onInsertSnippet'
|
||||
'tome:spell-beautify': 'onSpellBeautify'
|
||||
'tome:maximize-toggled': 'onMaximizeToggled'
|
||||
'script:state-changed': 'onScriptStateChange'
|
||||
|
||||
events:
|
||||
|
@ -182,7 +183,7 @@ module.exports = class SpellView extends CocoView
|
|||
addCommand
|
||||
name: 'open-fullscreen-editor'
|
||||
bindKey: {win: 'Ctrl-Shift-M', mac: 'Command-Shift-M|Ctrl-Shift-M'}
|
||||
exec: -> Backbone.Mediator.publish 'tome:fullscreen-view', {}
|
||||
exec: -> Backbone.Mediator.publish 'tome:toggle-maximize', {}
|
||||
|
||||
fillACE: ->
|
||||
@ace.setValue @spell.source
|
||||
|
@ -665,6 +666,9 @@ module.exports = class SpellView extends CocoView
|
|||
pretty = @spellThang.aether.beautify ugly
|
||||
@ace.setValue pretty
|
||||
|
||||
onMaximizeToggled: (e) ->
|
||||
@ace.resize true
|
||||
|
||||
onChangeEditorConfig: (e) ->
|
||||
aceConfig = me.get('aceConfig') ? {}
|
||||
@ace.setDisplayIndentGuides aceConfig.indentGuides # default false
|
||||
|
|
Loading…
Reference in a new issue