From 729baabf433c83179117cdf1d924515cd7f8582d Mon Sep 17 00:00:00 2001 From: George Saines Date: Thu, 25 Sep 2014 12:34:14 -0700 Subject: [PATCH 1/2] making the spikes appear above the walls --- app/views/editor/level/thangs/ThangsTabView.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/editor/level/thangs/ThangsTabView.coffee b/app/views/editor/level/thangs/ThangsTabView.coffee index 6a9b3376d..9258126d4 100644 --- a/app/views/editor/level/thangs/ThangsTabView.coffee +++ b/app/views/editor/level/thangs/ThangsTabView.coffee @@ -16,7 +16,7 @@ MOVE_MARGIN = 0.15 MOVE_SPEED = 13 # Let us place these on top of other Thangs -overlappableThangTypeNames = ['Torch', 'Chains', 'Bird', 'Cloud 1', 'Cloud 2', 'Cloud 3', 'Waterfall', 'Obstacle', 'Electrowall'] +overlappableThangTypeNames = ['Torch', 'Chains', 'Bird', 'Cloud 1', 'Cloud 2', 'Cloud 3', 'Waterfall', 'Obstacle', 'Spike Walls'] class ThangTypeSearchCollection extends CocoCollection url: '/db/thang.type?project=original,name,version,slug,kind,components' From 61aa2d8b6fd256d858342154db0f4254001a9a9e Mon Sep 17 00:00:00 2001 From: Nick Winter Date: Thu, 25 Sep 2014 13:17:41 -0700 Subject: [PATCH 2/2] Changed default language from JavaScript to Python. Fixed a few InventoryView tests. Adjusted maze real-time playback speed factor code. --- app/lib/world/world.coffee | 8 +-- app/schemas/models/level_session.coffee | 4 +- app/schemas/models/user.coffee | 4 +- app/schemas/schemas.coffee | 4 +- app/treema-ext.coffee | 2 +- app/views/HomeView.coffee | 6 +-- app/views/common/LevelSessionCodeView.coffee | 12 ++--- .../docs/ComponentsDocumentationView.coffee | 2 +- .../docs/SystemsDocumentationView.coffee | 2 +- app/views/game-menu/InventoryView.coffee | 2 +- app/views/play/WorldMapView.coffee | 2 + app/views/play/ladder/LadderPlayModal.coffee | 2 +- .../play/level/modal/EditorConfigModal.coffee | 4 +- app/views/play/level/tome/TomeView.coffee | 4 +- server/levels/level_handler.coffee | 2 +- .../views/game-menu/InventoryView.spec.coffee | 50 ++++--------------- 16 files changed, 41 insertions(+), 69 deletions(-) diff --git a/app/lib/world/world.coffee b/app/lib/world/world.coffee index b3c5f6bd4..d15044dff 100644 --- a/app/lib/world/world.coffee +++ b/app/lib/world/world.coffee @@ -98,7 +98,10 @@ module.exports = class World continueLaterFn = => @loadFrames(loadedCallback, errorCallback, loadProgressCallback, preloadedCallback, skipDeferredLoading, loadUntilFrame) unless @destroyed if @realTime and not @countdownFinished - @realTimeSpeedFactor ?= 1 + if @levelID in ['the-first-kithmaze', 'the-second-kithmaze', 'the-final-kithmaze'] + @realTimeSpeedFactor = 3 + else + @realTimeSpeedFactor = 1 return setTimeout @finishCountdown(continueLaterFn), REAL_TIME_COUNTDOWN_DELAY t1 = now() @t0 ?= t1 @@ -193,8 +196,7 @@ module.exports = class World @flagHistory.push flagEvent loadFromLevel: (level, willSimulate=true) -> - if level.slug in ['the-first-kithmaze', 'the-second-kithmaze', 'the-final-kithmaze'] - @realTimeSpeedFactor = 3 + @levelID = level.slug @levelComponents = level.levelComponents @thangTypes = level.thangTypes @loadSystemsFromLevel level diff --git a/app/schemas/models/level_session.coffee b/app/schemas/models/level_session.coffee index b0feda914..3545c3a1f 100644 --- a/app/schemas/models/level_session.coffee +++ b/app/schemas/models/level_session.coffee @@ -23,8 +23,8 @@ LevelSessionSchema = c.object title: 'Session' description: 'A single session for a given level.' default: - codeLanguage: 'javascript' - submittedCodeLanguage: 'javascript' + codeLanguage: 'python' + submittedCodeLanguage: 'python' playtime: 0 _.extend LevelSessionSchema.properties, diff --git a/app/schemas/models/user.coffee b/app/schemas/models/user.coffee index 3408167e9..9901c5d76 100644 --- a/app/schemas/models/user.coffee +++ b/app/schemas/models/user.coffee @@ -106,8 +106,8 @@ _.extend UserSchema.properties, wizard: c.object {}, colorConfig: c.object {additionalProperties: c.colorConfig()} - aceConfig: c.object { default: { language: 'javascript', keyBindings: 'default', invisibles: false, indentGuides: false, behaviors: false, liveCompletion: true }}, - language: {type: 'string', 'enum': ['javascript', 'coffeescript', 'python', 'clojure', 'lua', 'io']} + aceConfig: c.object { default: { language: 'python', keyBindings: 'default', invisibles: false, indentGuides: false, behaviors: false, liveCompletion: true }}, + language: {type: 'string', 'enum': ['python', 'javascript', 'coffeescript', 'clojure', 'lua', 'io']} keyBindings: {type: 'string', 'enum': ['default', 'vim', 'emacs']} invisibles: {type: 'boolean' } indentGuides: {type: 'boolean' } diff --git a/app/schemas/schemas.coffee b/app/schemas/schemas.coffee index 77808596f..da768fff0 100644 --- a/app/schemas/schemas.coffee +++ b/app/schemas/schemas.coffee @@ -171,7 +171,7 @@ me.FunctionArgumentSchema = me.object { description: 'Examples by code language.', additionalProperties: me.shortString(description: 'Example value for the argument.') format: 'code-languages-object' - default: {javascript: ''} + default: {javascript: '', python: ''} } me.shortString(title: 'Example', description: 'Example value for the argument.') ] @@ -183,7 +183,7 @@ me.FunctionArgumentSchema = me.object { description: 'Example argument descriptions by code language.', additionalProperties: {type: 'string', description: 'Description of the argument.', maxLength: 1000} format: 'code-languages-object' - default: {javascript: ''} + default: {javascript: '', python: ''} } {title: 'Description', type: 'string', description: 'Description of the argument.', maxLength: 1000} ] diff --git a/app/treema-ext.coffee b/app/treema-ext.coffee index 92217b89c..81020adac 100644 --- a/app/treema-ext.coffee +++ b/app/treema-ext.coffee @@ -258,7 +258,7 @@ class JavaScriptTreema extends CodeTreema class InternationalizationNode extends TreemaNode.nodeMap.object findLanguageName: (languageCode) -> - # to get around mongoose emtpy object bug, there's a prop in the object which needs to be ignored + # to get around mongoose empty object bug, there's a prop in the object which needs to be ignored return '' if languageCode is '-' locale[languageCode]?.nativeDescription or "#{languageCode} Not Found" diff --git a/app/views/HomeView.coffee b/app/views/HomeView.coffee index 23f619e56..f51adecdf 100644 --- a/app/views/HomeView.coffee +++ b/app/views/HomeView.coffee @@ -28,7 +28,7 @@ module.exports = class HomeView extends RootView console.warn 'no more jquery browser version...' c.isEnglish = (me.get('preferredLanguage') or 'en').startsWith 'en' c.languageName = me.get('preferredLanguage') - c.codeLanguage = (me.get('aceConfig') ? {}).language or 'javascript' + c.codeLanguage = (me.get('aceConfig') ? {}).language or 'python' c.codeLanguageCountMap = @codeLanguageCountMap c @@ -48,7 +48,7 @@ module.exports = class HomeView extends RootView href = href.join('/') playLink.attr('href', href) - codeLanguage = (me.get('aceConfig') ? {}).language or 'javascript' + codeLanguage = (me.get('aceConfig') ? {}).language or 'python' @$el.find(".code-language[data-code-language=#{codeLanguage}]").addClass 'selected-language' @updateLanguageLogos codeLanguage @@ -61,7 +61,7 @@ module.exports = class HomeView extends RootView @$el.find('.code-language').removeClass 'selected-language' target.addClass 'selected-language' aceConfig = me.get('aceConfig') ? {} - return if (aceConfig.language or 'javascript') is codeLanguage + return if (aceConfig.language or 'python') is codeLanguage aceConfig.language = codeLanguage me.set 'aceConfig', aceConfig me.save() # me.patch() doesn't work if aceConfig previously existed and we switched just once diff --git a/app/views/common/LevelSessionCodeView.coffee b/app/views/common/LevelSessionCodeView.coffee index 1977d9b03..9aaba459e 100644 --- a/app/views/common/LevelSessionCodeView.coffee +++ b/app/views/common/LevelSessionCodeView.coffee @@ -23,7 +23,7 @@ module.exports = class LevelSessionCodeView extends CocoView c.levelSpells = @organizeCode() c.sessionLink = "/play/level/" + (@level.get('slug') or @level.id) + "?team=" + (@session.get('team') || 'humans') + "&session=" + @session.id c - + afterRender: -> super() editors = [] @@ -34,9 +34,9 @@ module.exports = class LevelSessionCodeView extends CocoView editor.setReadOnly true editors.push editor aceSession = editor.getSession() - aceSession.setMode 'ace/mode/javascript' + aceSession.setMode 'ace/mode/javascript' # TODO: they're not all JS @editors = editors - + organizeCode: -> team = @session.get('team') or 'humans' teamSpells = @session.get('teamSpells')[team] or [] @@ -50,8 +50,8 @@ module.exports = class LevelSessionCodeView extends CocoView name: spell height: height } - filteredSpells - + filteredSpells + destroy: -> for editor in @editors - @editors \ No newline at end of file + @editors diff --git a/app/views/docs/ComponentsDocumentationView.coffee b/app/views/docs/ComponentsDocumentationView.coffee index 8d5b01be7..b3ddbd223 100644 --- a/app/views/docs/ComponentsDocumentationView.coffee +++ b/app/views/docs/ComponentsDocumentationView.coffee @@ -35,7 +35,7 @@ module.exports = class ComponentsDocumentationView extends CocoView c = super() c.components = @componentDocs.models c.marked = marked - c.codeLanguage = me.get('aceConfig')?.language ? 'javascript' + c.codeLanguage = me.get('aceConfig')?.language ? 'python' c onToggleAllCode: (e) -> diff --git a/app/views/docs/SystemsDocumentationView.coffee b/app/views/docs/SystemsDocumentationView.coffee index 8c3e251fe..21370c122 100644 --- a/app/views/docs/SystemsDocumentationView.coffee +++ b/app/views/docs/SystemsDocumentationView.coffee @@ -35,7 +35,7 @@ module.exports = class SystemsDocumentationView extends CocoView c = super() c.systems = @systemDocs.models c.marked = marked - c.codeLanguage = me.get('aceConfig')?.language ? 'javascript' + c.codeLanguage = me.get('aceConfig')?.language ? 'python' c onToggleAllCode: (e) -> diff --git a/app/views/game-menu/InventoryView.coffee b/app/views/game-menu/InventoryView.coffee index 12659ff68..c2032813a 100644 --- a/app/views/game-menu/InventoryView.coffee +++ b/app/views/game-menu/InventoryView.coffee @@ -311,7 +311,7 @@ module.exports = class InventoryView extends CocoView 'the-final-kithmaze': {feet: 'simple-boots', 'right-hand': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'} 'kithgard-gates': {feet: 'simple-boots', 'right-hand': 'builders-hammer', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'} 'defence-of-plainswood': {feet: 'simple-boots', 'right-hand': 'builders-hammer', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'} - necessaryGear = gearByLevel[@options.levelID] + return unless necessaryGear = gearByLevel[@options.levelID] for slot, item of necessaryGear ? {} @equipment[slot] ?= gear[item] diff --git a/app/views/play/WorldMapView.coffee b/app/views/play/WorldMapView.coffee index e9b3428be..76ef3645a 100644 --- a/app/views/play/WorldMapView.coffee +++ b/app/views/play/WorldMapView.coffee @@ -617,6 +617,7 @@ hero = [ description: 'Escape the Kithgard dungeons and don\'t let the guardians get you.' x: 47.38 y: 70.55 + disabled: true } { name: 'Defence of Plainswood' @@ -626,6 +627,7 @@ hero = [ description: 'Protect the peasants from the pursuing ogres.' x: 52.66 y: 69.66 + disabled: true } #{ # name: '' diff --git a/app/views/play/ladder/LadderPlayModal.coffee b/app/views/play/ladder/LadderPlayModal.coffee index 92f626248..554ab48a5 100644 --- a/app/views/play/ladder/LadderPlayModal.coffee +++ b/app/views/play/ladder/LadderPlayModal.coffee @@ -89,9 +89,9 @@ module.exports = class LadderPlayModal extends ModalView ctx.otherTeamID = @otherTeam ctx.tutorialLevelExists = @tutorialLevelExists ctx.languages = [ + {id: 'python', name: 'Python'} {id: 'javascript', name: 'JavaScript'} {id: 'coffeescript', name: 'CoffeeScript'} - {id: 'python', name: 'Python (Experimental)'} {id: 'clojure', name: 'Clojure (Experimental)'} {id: 'lua', name: 'Lua (Experimental)'} {id: 'io', name: 'Io (Experimental)'} diff --git a/app/views/play/level/modal/EditorConfigModal.coffee b/app/views/play/level/modal/EditorConfigModal.coffee index d6d416506..f7c9ab857 100644 --- a/app/views/play/level/modal/EditorConfigModal.coffee +++ b/app/views/play/level/modal/EditorConfigModal.coffee @@ -8,7 +8,7 @@ module.exports = class EditorConfigModal extends ModalView aceConfig: {} defaultConfig: - language: 'javascript' + language: 'python' keyBindings: 'default' invisibles: false indentGuides: false @@ -32,9 +32,9 @@ module.exports = class EditorConfigModal extends ModalView @aceConfig = _.defaults @aceConfig, @defaultConfig c = super() c.languages = [ + {id: 'python', name: 'Python'} {id: 'javascript', name: 'JavaScript'} {id: 'coffeescript', name: 'CoffeeScript'} - {id: 'python', name: 'Python (Experimental)'} {id: 'clojure', name: 'Clojure (Experimental)'} {id: 'lua', name: 'Lua (Experimental)'} {id: 'io', name: 'Io (Experimental)'} diff --git a/app/views/play/level/tome/TomeView.coffee b/app/views/play/level/tome/TomeView.coffee index 9a6531984..008953742 100644 --- a/app/views/play/level/tome/TomeView.coffee +++ b/app/views/play/level/tome/TomeView.coffee @@ -36,8 +36,6 @@ ThangListView = require './ThangListView' SpellPaletteView = require './SpellPaletteView' CastButtonView = require './CastButtonView' -window.SHIM_WORKER_PATH = '/javascripts/workers/catiline_worker_shim.js' - module.exports = class TomeView extends CocoView id: 'tome-view' template: template @@ -108,7 +106,7 @@ module.exports = class TomeView extends CocoView return teamSpellMap createSpells: (programmableThangs, world) -> - language = @options.session.get('codeLanguage') ? me.get('aceConfig')?.language ? 'javascript' + language = @options.session.get('codeLanguage') ? me.get('aceConfig')?.language ? 'python' pathPrefixComponents = ['play', 'level', @options.levelID, @options.session.id, 'code'] @spells ?= {} @thangSpells ?= {} diff --git a/server/levels/level_handler.coffee b/server/levels/level_handler.coffee index 74cb8013b..908a6b1dd 100644 --- a/server/levels/level_handler.coffee +++ b/server/levels/level_handler.coffee @@ -93,7 +93,7 @@ LevelHandler = class LevelHandler extends Handler access: 'write' } ] - initVals.codeLanguage = req.user.get('aceConfig')?.language ? 'javascript' + initVals.codeLanguage = req.user.get('aceConfig')?.language ? 'python' session = new Session(initVals) session.save (err) => diff --git a/test/app/views/game-menu/InventoryView.spec.coffee b/test/app/views/game-menu/InventoryView.spec.coffee index 3e66b5035..50307c976 100644 --- a/test/app/views/game-menu/InventoryView.spec.coffee +++ b/test/app/views/game-menu/InventoryView.spec.coffee @@ -9,7 +9,7 @@ thangTypes = [ describe 'InventoryView', -> inventoryView = null - + beforeEach (done) -> equipment = { 'feet':'boots', 'eyes': 'crude-glasses' } inventoryView = new InventoryView({ equipment: equipment }) @@ -19,53 +19,23 @@ describe 'InventoryView', -> _.defer -> inventoryView.render() done() - + it 'selects a slot when you click it', -> inventoryView.getSlot('eyes').click() expect(inventoryView.getSelectedSlot().data('slot')).toBe('eyes') - + it 'unselects a selected slot when you click it', -> inventoryView.getSlot('eyes').click().click() expect(inventoryView.getSelectedSlot().data('slot')).toBeUndefined() - + it 'selects an available item when you click it', -> - inventoryView.getAvailableItemContainer('boots-of-leaping-id').click() - expect(inventoryView.getSelectedAvailableItemContainer().data('item-id')).toBe('boots-of-leaping-id') - + inventoryView.getAvailableItemContainer('boots-of-leaping').click() + expect(inventoryView.getSelectedAvailableItemContainer().data('item-id')).toBe('boots-of-leaping') + it 'equips an available item when you double click it', -> - inventoryView.getAvailableItemContainer('crossbow-id').click().dblclick() + inventoryView.getAvailableItemContainer('crossbow').click().dblclick() expect(inventoryView.getCurrentEquipmentConfig()['right-hand']).toBeTruthy() - - it 'unequips an itm when you double click it', -> + + it 'unequips an item when you double click it', -> inventoryView.getSlot('eyes').find('.item-view').click().dblclick() expect(inventoryView.getCurrentEquipmentConfig().eyes).toBeUndefined() - - describe 'swap button', -> - it 'does nothing if nothing is selected', -> - inventoryView.$el.find('#swap-button').click() - expect(inventoryView.getSelectedSlot()[0]).toBeFalsy() - expect(inventoryView.getSelectedAvailableItemContainer()[0]).toBeFalsy() - - it 'unequips and selects the unequipped item if just an equipped slot is chosen', -> - expect(inventoryView.getCurrentEquipmentConfig().eyes).toBeTruthy() - slot = inventoryView.getSlot('eyes') - inventoryView.selectSlot(slot) - inventoryView.$el.find('#swap-button').click() - expect(inventoryView.getCurrentEquipmentConfig().eyes).toBeUndefined() - expect(inventoryView.getSelectedAvailableItemContainer().data('item-id')).toBe('crude-glasses-id') - - it 'equips the selected item if just an available item is selected', -> - expect(inventoryView.getCurrentEquipmentConfig()['right-hand']).toBeUndefined() - inventoryView.getAvailableItemContainer('crossbow-id').click() - inventoryView.$el.find('#swap-button').click() - expect(inventoryView.getCurrentEquipmentConfig()['right-hand']).toBeTruthy() - expect(inventoryView.getSelectedAvailableItemContainer().data('item-id')).toBeUndefined() - expect(inventoryView.getSelectedSlot().data('slot')).toBe('right-hand') - - it 'swaps items if both a slot and item are selected, and keeps them selected', -> - inventoryView.getAvailableItemContainer('boots-of-leaping-id').click() - inventoryView.getSlot('feet').click() - inventoryView.$el.find('#swap-button').click() - expect(inventoryView.getCurrentEquipmentConfig()['feet']).toBe('boots-of-leaping') - expect(inventoryView.getSelectedAvailableItemContainer().data('item-id')).toBe('boots-id') - expect(inventoryView.getSelectedSlot().data('slot')).toBe('feet') \ No newline at end of file