Fixed #847. Fixed some subscription schemas.

This commit is contained in:
Nick Winter 2014-08-27 18:43:17 -07:00
parent cd3bf4d0db
commit 02255044e3
11 changed files with 45 additions and 23 deletions

View file

@ -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'}

View file

@ -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']}

View file

@ -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.'}

View file

@ -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: ->

View file

@ -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'

View file

@ -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

View file

@ -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

View file

@ -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'

View file

@ -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) ->

View file

@ -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()

View file

@ -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