From ce6526863db5b104bcdacd5b53e3fe1e257e8c84 Mon Sep 17 00:00:00 2001 From: Nick Winter Date: Thu, 6 Nov 2014 08:57:13 -0800 Subject: [PATCH 01/47] Support for hiding optional bonus goals until they are achieved instead of until they are failed. --- app/views/play/level/LevelGoalsView.coffee | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/views/play/level/LevelGoalsView.coffee b/app/views/play/level/LevelGoalsView.coffee index 0db73106b..0ae0a507f 100644 --- a/app/views/play/level/LevelGoalsView.coffee +++ b/app/views/play/level/LevelGoalsView.coffee @@ -45,7 +45,9 @@ module.exports = class LevelGoalsView extends CocoView goals = [] for goal in e.goals state = e.goalStates[goal.id] - continue if goal.hiddenGoal and state.status isnt 'failure' + if goal.hiddenGoal + continue if goal.optional and state.status isnt 'success' + continue if not goal.optional and state.status isnt 'failure' continue if goal.team and me.team isnt goal.team text = utils.i18n goal, 'name' if state.killed From 546b74ae671e5b41e6932eda45f10172e9752e42 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Thu, 6 Nov 2014 21:36:54 +0300 Subject: [PATCH 02/47] update RU translation --- app/locale/ru.coffee | 74 ++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/app/locale/ru.coffee b/app/locale/ru.coffee index c07473b96..91c469055 100644 --- a/app/locale/ru.coffee +++ b/app/locale/ru.coffee @@ -28,7 +28,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi about: "О нас" contact: "Контакты" twitter_follow: "Подписаться" -# teachers: "Teachers" + teachers: "Учителям" modal: close: "Закрыть" @@ -51,11 +51,11 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi players: "игроки" # Hover over a level on /play hours_played: "часов сыграно" # Hover over a level on /play items: "Предметы" # Tooltip on item shop button from /play -# unlock: "Unlock" # For purchasing items and heroes -# confirm: "Confirm" + unlock: "Разблокировать" # For purchasing items and heroes + confirm: "Подтвердить" # owned: "Owned" # For items you own # locked: "Locked" -# skills_granted: "Skills Granted" # Property documentation details + skills_granted: "Умение получено" # Property documentation details heroes: "Герои" # Tooltip on hero shop button from /play achievements: "Достижения" # Tooltip on achievement list button from /play account: "Аккаунт" # Tooltip on account button from /play @@ -81,8 +81,8 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi campaign_player_created_description: "... в которых вы сражаетесь с креативностью ваших друзей Ремесленников." campaign_classic_algorithms: "Классические принципы" campaign_classic_algorithms_description: "... которые чаще всего встречаются в копьютерных науках." -# campaign_forest: "Forest Campaign" -# campaign_dungeon: "Dungeon Campaign" + campaign_forest: "Лесная кампания" + campaign_dungeon: "Кампания в подземелии" login: sign_up: "Создать аккаунт" @@ -109,12 +109,12 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi # recovery_sent: "Recovery email sent." items: -# primary: "Primary" -# secondary: "Secondary" + primary: "Основное" + secondary: "Второстепенное" armor: "Броня" accessories: "Аксессуары" misc: "Разное" -# books: "Books" + books: "Книги" common: loading: "Загрузка..." @@ -183,7 +183,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi play_level: done: "Готово" home: "На главную" # Not used any more, will be removed soon. -# level: "Level" # Like "Level: Dungeons of Kithgard" + level: "Уровень" # Like "Level: Dungeons of Kithgard" skip: "Пропустить" game_menu: "Меню игры" guide: "Руководство" @@ -206,13 +206,13 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi victory_rate_the_level: "Оцените уровень:" # Only in old-style levels. victory_return_to_ladder: "Вернуться к ладдеру" victory_play_continue: "Продолжить" -# victory_play_skip: "Skip Ahead" + victory_play_skip: "Пропустить" victory_play_next_level: "Следующий уровень" -# victory_play_more_practice: "More Practice" -# victory_play_too_easy: "Too Easy" -# victory_play_just_right: "Just Right" -# victory_play_too_hard: "Too Hard" -# victory_saving_progress: "Saving Progress" + victory_play_more_practice: "Попрактиковаться еще" + victory_play_too_easy: "Очень легко" + victory_play_just_right: "То, что надо" + victory_play_too_hard: "Очень сложно" + victory_saving_progress: "Процесс сохранения" victory_go_home: "На главную" # Only in old-style levels. victory_review: "Расскажите нам больше!" # Only in old-style levels. victory_hour_of_code_done: "Вы закончили?" @@ -224,18 +224,18 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi tome_cast_button_castable: "Читать заклинание" # Temporary, if tome_cast_button_run isn't translated. tome_cast_button_casting: "Заклинание читается" # Temporary, if tome_cast_button_running isn't translated. tome_cast_button_cast: "Заклинание прочитано" # Temporary, if tome_cast_button_ran isn't translated. -# tome_cast_button_run: "Run" -# tome_cast_button_running: "Running" -# tome_cast_button_ran: "Ran" -# tome_submit_button: "Submit" -# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button. -# tome_select_method: "Select a Method" -# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos). + tome_cast_button_run: "Запустить" + tome_cast_button_running: "В процессе" + tome_cast_button_ran: "Запущен" + tome_submit_button: "Отправить" + tome_reload_method: "Загрузить оригинальный код для этого метода" # Title text for individual method reload button. + tome_select_method: "Выбрать метод" + tome_see_all_methods: "Показать все методы, доступные для редактирования" # Title text for method list selector (shown when there are multiple programmable methdos). tome_select_a_thang: "Выбрать кого-нибудь для " tome_available_spells: "Доступные заклинания" tome_your_skills: "Ваши навыки" hud_continue: "Продолжить (Shift+Пробел)" -# hud_continue_short: "Continue" + hud_continue_short: "Продолжить" code_saved: "Код сохранен" skip_tutorial: "Пропуск (Esc)" keyboard_shortcuts: "Горячие клавиши" @@ -285,22 +285,22 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi options_tab: "Настройки" guide_tab: "Руководство" multiplayer_tab: "Мультиплеер" -# auth_tab: "Sign Up" + auth_tab: "Зарегистрироваться" inventory_caption: "Оденьте своего героя" choose_hero_caption: "Выбор героя, языка" -# save_load_caption: "... and view history" + save_load_caption: "... и посмотреть историю" options_caption: "Выбор настроек" # guide_caption: "Docs and tips" multiplayer_caption: "Играй с друзьями!" -# auth_caption: "Save your progress." + auth_caption: "Сохранить прогресс." inventory: choose_inventory: "Выбрать предметы" -# equipped_item: "Equipped" -# available_item: "Available" -# should_equip: "(double-click to equip)" -# equipped: "(equipped)" -# locked: "(locked)" + equipped_item: "Выбранный" + available_item: "Доступный" + should_equip: "(двойной клик чтобы одеть)" + equipped: "(выбранный)" + locked: "(заблокированный)" choose_hero: choose_hero: "Выберите героя" @@ -314,13 +314,13 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi io_blurb: "Простой, но непонятный." status: "Статус" weapons: "Оружие" -# attack: "Damage" # Can also translate as "Attack" + attack: "Урон" # Can also translate as "Attack" health: "Жизнь" speed: "Скорость" -# regeneration: "Regeneration" -# range: "Range" # As in "attack or visual range" -# blocks: "Blocks" # As in "this shield blocks this much damage" -# skills: "Skills" + regeneration: "Регенерация" + range: "Зона" # As in "attack or visual range" + blocks: "Блокирует" # As in "this shield blocks this much damage" + skills: "Умения" save_load: granularity_saved_games: "Сохранено" From 98a0173badb66a1ad1a1c13167949b04fc48e3a0 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Thu, 6 Nov 2014 21:40:44 +0300 Subject: [PATCH 03/47] Update ru.coffee --- app/locale/ru.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/locale/ru.coffee b/app/locale/ru.coffee index 91c469055..7d44ac529 100644 --- a/app/locale/ru.coffee +++ b/app/locale/ru.coffee @@ -82,7 +82,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi campaign_classic_algorithms: "Классические принципы" campaign_classic_algorithms_description: "... которые чаще всего встречаются в копьютерных науках." campaign_forest: "Лесная кампания" - campaign_dungeon: "Кампания в подземелии" + campaign_dungeon: "Кампания в подземелье" login: sign_up: "Создать аккаунт" From 453960b3fb4f87932bb3608212f405aaa0b75917 Mon Sep 17 00:00:00 2001 From: Matt Lott Date: Thu, 6 Nov 2014 14:44:56 -0800 Subject: [PATCH 04/47] A/B Run and Submit button text --- .../play/level/tome/cast_button.jade | 5 +- .../play/level/tome/CastButtonView.coffee | 47 +++++++++++++++---- 2 files changed, 43 insertions(+), 9 deletions(-) diff --git a/app/templates/play/level/tome/cast_button.jade b/app/templates/play/level/tome/cast_button.jade index 02facd457..a6290974c 100644 --- a/app/templates/play/level/tome/cast_button.jade +++ b/app/templates/play/level/tome/cast_button.jade @@ -1,3 +1,6 @@ button.btn.btn-lg.btn-inverse.banner.cast-button(title=castVerbose, data-i18n="play_level.tome_run_button_ran") Ran -button.btn.btn-lg.btn-success.banner.submit-button(title=castRealTimeVerbose, data-i18n="play_level.tome_submit_button") Submit +if testSubmitText != null && testSubmitText.length > 0 + button.btn.btn-lg.btn-success.banner.submit-button(title=castRealTimeVerbose) #{testSubmitText} +else + button.btn.btn-lg.btn-success.banner.submit-button(title=castRealTimeVerbose, data-i18n="play_level.tome_submit_button") Submit diff --git a/app/views/play/level/tome/CastButtonView.coffee b/app/views/play/level/tome/CastButtonView.coffee index 1bafd950f..c49482806 100644 --- a/app/views/play/level/tome/CastButtonView.coffee +++ b/app/views/play/level/tome/CastButtonView.coffee @@ -25,6 +25,7 @@ module.exports = class CastButtonView extends CocoView @spells = options.spells @levelID = options.levelID @castShortcut = '⇧↵' + @initButtonTextABTest() getRenderData: (context={}) -> context = super context @@ -34,6 +35,8 @@ module.exports = class CastButtonView extends CocoView castRealTimeShortcutVerbose = (if @isMac() then 'Cmd' else 'Ctrl') + '+' + castShortcutVerbose context.castVerbose = castShortcutVerbose + ': ' + $.i18n.t('keyboard_shortcuts.cast_spell') context.castRealTimeVerbose = castRealTimeShortcutVerbose + ': ' + $.i18n.t('keyboard_shortcuts.run_real_time') + # A/B test submit button text + context.testSubmitText = @testButtonsText.submit if @testGroup? and @testGroup isnt 0 context afterRender: -> @@ -102,15 +105,20 @@ module.exports = class CastButtonView extends CocoView , (castable) => Backbone.Mediator.publish 'tome:spell-has-changed-significantly-calculation', hasChangedSignificantly: castable @castButton.toggleClass('castable', castable).toggleClass('casting', @casting) - if @casting - s = $.i18n.t('play_level.tome_cast_button_running') - else if castable or true - s = $.i18n.t('play_level.tome_cast_button_run') - unless @options.levelID in ['dungeons-of-kithgard', 'gems-in-the-deep', 'shadow-guard', 'forgetful-gemsmith', 'kounter-kithwise', 'true-names', 'the-raised-sword', 'favorable-odds', 'the-first-kithmaze', 'haunted-kithmaze'] # Hide for first few. - s += ' ' + @castShortcut + + # A/B testing cast button text for en-US + if $.i18n.lng() isnt 'en-US' or not @testGroup? or @testGroup is 0 + if @casting + castText = $.i18n.t('play_level.tome_cast_button_running') + else if castable or true + castText = $.i18n.t('play_level.tome_cast_button_run') + unless @options.levelID in ['dungeons-of-kithgard', 'gems-in-the-deep', 'shadow-guard', 'forgetful-gemsmith', 'kounter-kithwise', 'true-names', 'the-raised-sword', 'favorable-odds', 'the-first-kithmaze', 'haunted-kithmaze'] # Hide for first few. + castText += ' ' + @castShortcut + else + castText = $.i18n.t('play_level.tome_cast_button_ran') else - s = $.i18n.t('play_level.tome_cast_button_ran') - @castButton.text s + castText = @testButtonsText.run + @castButton.text castText #@castButton.prop 'disabled', not castable setAutocastDelay: (delay) -> @@ -131,3 +139,26 @@ module.exports = class CastButtonView extends CocoView if @multiplayerSession @multiplayerSession.off 'change' @multiplayerSession = null + + initButtonTextABTest: -> + if $.i18n.lng() is 'en-US' + # A/B test buttons text + # Only testing 'en-US' for simplicity and it accounts for a significant % of users + # Test group 0 is existing behavior + # Intentionally leaving out cast shortcut for test groups for simplicity + @testGroup = Math.floor(Math.random() * 7) + console.info 'Cast button text test group', @testGroup + @testButtonsText = switch @testGroup + when 0 then run: 'Run/Running', submit: 'Submit' + when 1 then run: 'Run', submit: 'Submit' + when 2 then run: 'Test', submit: 'Submit' + when 3 then run: 'Run', submit: 'Continue' + when 4 then run: 'Test', submit: 'Continue' + when 5 then run: 'Run', submit: 'Finish' + when 6 then run: 'Test', submit: 'Finish' + application.tracker?.trackEvent 'Spell View', + Action: 'Loaded' + levelID: @levelID + castButtonText: @testButtonsText.run + ' ' + @testButtonsText.submit + + From 1630f7e03360ac37e46767d8208895fcb0a22f81 Mon Sep 17 00:00:00 2001 From: Matt Lott Date: Thu, 6 Nov 2014 15:03:39 -0800 Subject: [PATCH 05/47] Remove time from problem alert message --- app/views/play/level/tome/ProblemAlertView.coffee | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/app/views/play/level/tome/ProblemAlertView.coffee b/app/views/play/level/tome/ProblemAlertView.coffee index 80785b932..7f43af83e 100644 --- a/app/views/play/level/tome/ProblemAlertView.coffee +++ b/app/views/play/level/tome/ProblemAlertView.coffee @@ -18,14 +18,7 @@ module.exports = class ProblemAlertView extends CocoView getRenderData: (context={}) -> context = super context format = (s) -> s?.replace(//g, '>').replace(/\n/g, '
') - message = @problem.aetherProblem.message - age = @problem.aetherProblem.userInfo?.age - if age? - if /^Line \d+:/.test message - message = message.replace /^(Line \d+)/, "$1, time #{age.toFixed(1)}" - else - message = "Time #{age.toFixed(1)}: #{message}" - context.message = format message + context.message = format @problem.aetherProblem.message context.hint = format @problem.aetherProblem.hint context From 790dd8e7e0504b0f558a0a957ffef4d0f234e20f Mon Sep 17 00:00:00 2001 From: Scott Erickson Date: Wed, 5 Nov 2014 19:07:06 -0800 Subject: [PATCH 06/47] Enabled the heroes button on the world map. --- app/templates/play/world-map-view.jade | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/templates/play/world-map-view.jade b/app/templates/play/world-map-view.jade index 42b1d040c..487e7ebd3 100644 --- a/app/templates/play/world-map-view.jade +++ b/app/templates/play/world-map-view.jade @@ -34,10 +34,9 @@ .game-controls.header-font button.btn.items(data-toggle='coco-modal', data-target='play/modal/PlayItemsModal', data-i18n="[title]play.items") + button.btn.heroes(data-toggle='coco-modal', data-target='play/modal/PlayHeroesModal', data-i18n="[title]play.heroes") if me.isAdmin() - button.btn.heroes(data-toggle='coco-modal', data-target='play/modal/PlayHeroesModal', data-i18n="[title]play.heroes") button.btn.achievements(data-toggle='coco-modal', data-target='play/modal/PlayAchievementsModal', data-i18n="[title]play.achievements") - if me.isAdmin() button.btn.account(data-toggle='coco-modal', data-target='play/modal/PlayAccountModal', data-i18n="[title]play.account") button.btn.settings(data-toggle='coco-modal', data-target='play/modal/PlaySettingsModal', data-i18n="[title]play.settings") else if me.get('anonymous') From 424c3a6d3ebbc0374e8f13c4184a2d37f96bfc45 Mon Sep 17 00:00:00 2001 From: Scott Erickson Date: Thu, 6 Nov 2014 16:23:23 -0800 Subject: [PATCH 07/47] Integrated the new PlayHeroesModal into the game, refactoring PlayLevelModal into LevelSetupManager. --- app/lib/LevelSetupManager.coffee | 79 +++++++++++ app/styles/game-menu/game-menu-modal.sass | 2 +- ...ventory-view.sass => inventory-modal.sass} | 16 ++- app/templates/game-menu/game-menu-modal.jade | 8 +- app/templates/game-menu/inventory-modal.jade | 68 ++++++++++ app/templates/game-menu/inventory-view.jade | 59 -------- .../play/modal/play-level-modal.jade | 2 +- app/views/game-menu/GameMenuModal.coffee | 45 +----- ...ntoryView.coffee => InventoryModal.coffee} | 56 ++++++-- app/views/play/WorldMapView.coffee | 6 +- app/views/play/level/PlayLevelView.coffee | 5 +- app/views/play/modal/PlayHeroesModal.coffee | 6 +- app/views/play/modal/PlayLevelModal.coffee | 128 ------------------ 13 files changed, 221 insertions(+), 259 deletions(-) create mode 100644 app/lib/LevelSetupManager.coffee rename app/styles/game-menu/{inventory-view.sass => inventory-modal.sass} (98%) create mode 100644 app/templates/game-menu/inventory-modal.jade delete mode 100644 app/templates/game-menu/inventory-view.jade rename app/views/game-menu/{InventoryView.coffee => InventoryModal.coffee} (92%) delete mode 100644 app/views/play/modal/PlayLevelModal.coffee diff --git a/app/lib/LevelSetupManager.coffee b/app/lib/LevelSetupManager.coffee new file mode 100644 index 000000000..e4638eda3 --- /dev/null +++ b/app/lib/LevelSetupManager.coffee @@ -0,0 +1,79 @@ +CocoClass = require 'lib/CocoClass' +PlayHeroesModal = require 'views/play/modal/PlayHeroesModal' +InventoryModal = require 'views/game-menu/InventoryModal' +PlayLevelView = require 'views/play/level/PlayLevelView' +LadderView = require 'views/play/ladder/LadderView' +LevelSession = require 'models/LevelSession' +SuperModel = require 'models/SuperModel' + +module.exports = class LevelSetupManager extends CocoClass + + constructor: (@options) -> + super() + @options.showDevBits = true #? + @supermodel = new SuperModel() + @session = @options.session + if @session + @fillSessionWithDefaults() + else + @loadSession(@supermodel) + + # build modals and prevent them from disappearing. + @heroesModal = new PlayHeroesModal({supermodel: @supermodel, session: @session, confirmButtonI18N: 'play.next', levelID: options.levelID}) + @inventoryModal = new InventoryModal({supermodel: @supermodel, session: @session, levelID: options.levelID}) + @heroesModalDestroy = @heroesModal.destroy + @inventoryModalDestroy = @inventoryModal.destroy + @heroesModal.destroy = @inventoryModal.destroy = _.noop + @listenTo @heroesModal, 'confirm-click', @onHeroesModalConfirmClicked + @listenToOnce @heroesModal, 'hero-loaded', @onceHeroLoaded + @listenTo @inventoryModal, 'choose-hero-click', @onChooseHeroClicked + @listenTo @inventoryModal, 'play-click', @onInventoryModalPlayClicked + + loadSession: (supermodel) -> + url = "/db/level/#{@options.levelID}/session" + #url += "?team=#{@team}" if @options.team # TODO: figure out how to get the teams for multiplayer PVP hero style + @session = new LevelSession().setURL url + @listenToOnce @session, 'sync', -> + @session.url = -> '/db/level.session/' + @id + @fillSessionWithDefaults() + supermodel.loadModel(@session, 'level_session').model + + fillSessionWithDefaults: -> + heroConfig = _.merge {}, me.get('heroConfig'), @session.get('heroConfig') + @session.set('heroConfig', heroConfig) + + open: -> + firstModal = if @options.hadEverChosenHero then @inventoryModal else @heroesModal + @options.parent.openModalView(firstModal) + # @inventoryModal.onShown() # replace? + Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'game-menu-open', volume: 1 + + + #- Modal events + + onceHeroLoaded: (e) -> + @inventoryModal.setHero(e.hero) + + onHeroesModalConfirmClicked: (e) -> + @options.parent.openModalView(@inventoryModal) + @inventoryModal.render() + @inventoryModal.didReappear() + @inventoryModal.onShown() + @inventoryModal.setHero(e.hero) + window.tracker?.trackEvent 'Play Level Modal', Action: 'Choose Inventory' + + onChooseHeroClicked: -> + @options.parent.openModalView(@heroesModal) + @heroesModal.render() + @heroesModal.didReappear() + @inventoryModal.endHighlight() + window.tracker?.trackEvent 'Play Level Modal', Action: 'Choose Hero' + + onInventoryModalPlayClicked: -> + @navigatingToPlay = true + viewClass = if @options.levelPath is 'ladder' then LadderView else PlayLevelView + Backbone.Mediator.publish 'router:navigate', { + route: "/play/#{@options.levelPath || 'level'}/#{@options.levelID}" + viewClass: viewClass + viewArgs: [{supermodel: @supermodel}, @options.levelID] + } \ No newline at end of file diff --git a/app/styles/game-menu/game-menu-modal.sass b/app/styles/game-menu/game-menu-modal.sass index 743a7958b..e0167d9f5 100644 --- a/app/styles/game-menu/game-menu-modal.sass +++ b/app/styles/game-menu/game-menu-modal.sass @@ -23,7 +23,7 @@ right: 35px bottom: 20px - #inventory-view #available-equipment + #inventory-modal #available-equipment bottom: 60px .modal-dialog diff --git a/app/styles/game-menu/inventory-view.sass b/app/styles/game-menu/inventory-modal.sass similarity index 98% rename from app/styles/game-menu/inventory-view.sass rename to app/styles/game-menu/inventory-modal.sass index 346c89d61..e3d022a80 100644 --- a/app/styles/game-menu/inventory-view.sass +++ b/app/styles/game-menu/inventory-modal.sass @@ -19,9 +19,15 @@ $stashWidth: $totalWidth - $equippedWidth - $stashMargin @include box-shadow(0 0 10px #28f) z-index: 9001 -#inventory-view - position: relative - height: $inventoryHeight +#inventory-modal + .modal-dialog + margin: 30px auto 0 auto + width: 720px + + .modal-body + height: 450px + margin: 0 + +user-select(none) h3 @@ -34,7 +40,7 @@ $stashWidth: $totalWidth - $equippedWidth - $stashMargin #equipped width: $equippedWidth position: absolute - left: 0 + left: 20px top: 0 bottom: 0 //bottom: $selectedAreaHeight + 10 @@ -197,7 +203,7 @@ $stashWidth: $totalWidth - $equippedWidth - $stashMargin #available-equipment width: $stashWidth position: absolute - right: 0 + right: 20px top: 0 bottom: 0 overflow-y: scroll diff --git a/app/templates/game-menu/game-menu-modal.jade b/app/templates/game-menu/game-menu-modal.jade index cfee1d3cb..5939a109c 100644 --- a/app/templates/game-menu/game-menu-modal.jade +++ b/app/templates/game-menu/game-menu-modal.jade @@ -5,15 +5,13 @@ block modal-header block modal-body-content .button.close(type="button", data-dismiss="modal", aria-hidden="true") × .tabbable.tabs-left - - var submenus = ["inventory", "choose-hero", "save-load", "options", "guide", "multiplayer"] + - var submenus = ["save-load", "options", "guide", "multiplayer"] - if (!showsGuide) { - - submenus.splice(4, 1); - - } - - if (!showDevBits) { // Not done yet. - submenus.splice(2, 1); - } - - if (!showInventory) + - if (!showDevBits) { // Not done yet. - submenus.splice(0, 1); + - } ul.nav.nav-tabs#game-menu-nav for submenu, index in submenus li(class=submenu === showTab || index === 0 && !showTab ? "active" : "") diff --git a/app/templates/game-menu/inventory-modal.jade b/app/templates/game-menu/inventory-modal.jade new file mode 100644 index 000000000..9bd81e4a8 --- /dev/null +++ b/app/templates/game-menu/inventory-modal.jade @@ -0,0 +1,68 @@ +extends /templates/modal/modal_base + +block modal-header-content + h1#choose-inventory-header.choose-inventory-active(data-i18n="inventory.choose_inventory") Equip Items + +block modal-body-content + #equipped + .item-slot-row + for slot in ['left-ring', 'neck', 'eyes', 'head', 'wrists', 'right-ring'] + .item-slot(data-slot=slot) + .placeholder + .item-container + if equipment[slot] + .replace-me(data-item-id=equipment[slot].get('original')) + + .item-slot-column.pull-left + // TODO: add in 'misc-0' again somehow? Used to be where 'flag' is now. + for slot in ['minion', 'torso', 'gloves', 'left-hand', 'flag'] + .item-slot(data-slot=slot) + .placeholder + .item-container + if equipment[slot] + .replace-me(data-item-id=equipment[slot].get('original')) + + .hero-container + canvas.equipped-hero-canvas + .hero-feature-image + img + #selected-items + #selected-equipped-item.well + h3(data-i18n="inventory.equipped_item") Equipped + .item-view-stub + #selected-available-item.well + h3(data-i18n="inventory.available_item") Available + .item-view-stub + + .item-slot-column.pull-right + for slot in ['pet', 'waist', 'feet', 'right-hand', 'programming-book'] + .item-slot(data-slot=slot) + .placeholder + .item-container + if equipment[slot] + .replace-me(data-item-id=equipment[slot].get('original')) + + // TODO: work in misc 1 again + //hr.slot-row-separator + // + //.item-slot-row.row-4 + // for slot in ['misc-1'] + // .item-slot(data-slot=slot) + // .placeholder + // .item-container + // if equipment[slot] + // .replace-me(data-item-id=equipment[slot].get('original')) + + #available-equipment + h4#unlocked-description + ul.list-group + for item in unlockedItems + li.list-group-item(class=item.classes, data-item-id=item.get('original')) + h4#locked-description + ul.list-group + for item in lockedItems + li.list-group-item(class=item.classes, data-item-id=item.get('original'), style="display: none") + +block modal-footer-content + button#choose-hero-button.btn.btn-lg.btn-primary.choose-inventory-active.pull-left(data-i18n="play.change_hero") Change Hero + button#play-level-button.btn.btn-lg.btn-success.choose-inventory-active(data-i18n="common.play") Play diff --git a/app/templates/game-menu/inventory-view.jade b/app/templates/game-menu/inventory-view.jade deleted file mode 100644 index e743d8e9f..000000000 --- a/app/templates/game-menu/inventory-view.jade +++ /dev/null @@ -1,59 +0,0 @@ -#equipped - .item-slot-row - for slot in ['left-ring', 'neck', 'eyes', 'head', 'wrists', 'right-ring'] - .item-slot(data-slot=slot) - .placeholder - .item-container - if equipment[slot] - .replace-me(data-item-id=equipment[slot].get('original')) - - .item-slot-column.pull-left - // TODO: add in 'misc-0' again somehow? Used to be where 'flag' is now. - for slot in ['minion', 'torso', 'gloves', 'left-hand', 'flag'] - .item-slot(data-slot=slot) - .placeholder - .item-container - if equipment[slot] - .replace-me(data-item-id=equipment[slot].get('original')) - - .hero-container - canvas.equipped-hero-canvas - .hero-feature-image - img - #selected-items - #selected-equipped-item.well - h3(data-i18n="inventory.equipped_item") Equipped - .item-view-stub - #selected-available-item.well - h3(data-i18n="inventory.available_item") Available - .item-view-stub - - .item-slot-column.pull-right - for slot in ['pet', 'waist', 'feet', 'right-hand', 'programming-book'] - .item-slot(data-slot=slot) - .placeholder - .item-container - if equipment[slot] - .replace-me(data-item-id=equipment[slot].get('original')) - - // TODO: work in misc 1 again - //hr.slot-row-separator - // - //.item-slot-row.row-4 - // for slot in ['misc-1'] - // .item-slot(data-slot=slot) - // .placeholder - // .item-container - // if equipment[slot] - // .replace-me(data-item-id=equipment[slot].get('original')) - -#available-equipment - h4#unlocked-description - ul.list-group - for item in unlockedItems - li.list-group-item(class=item.classes, data-item-id=item.get('original')) - h4#locked-description - ul.list-group - for item in lockedItems - li.list-group-item(class=item.classes, data-item-id=item.get('original'), style="display: none") - diff --git a/app/templates/play/modal/play-level-modal.jade b/app/templates/play/modal/play-level-modal.jade index 3090aebb0..dbcce9e80 100644 --- a/app/templates/play/modal/play-level-modal.jade +++ b/app/templates/play/modal/play-level-modal.jade @@ -7,7 +7,7 @@ block modal-header-content block modal-body-content #choose-hero-view - #inventory-view + #inventory-modal block modal-footer-content button#choose-inventory-button.btn.btn-lg.btn-success.choose-hero-active.secret(data-i18n="play.next") Next diff --git a/app/views/game-menu/GameMenuModal.coffee b/app/views/game-menu/GameMenuModal.coffee index ad25f1a37..a7d517ce7 100644 --- a/app/views/game-menu/GameMenuModal.coffee +++ b/app/views/game-menu/GameMenuModal.coffee @@ -1,8 +1,6 @@ ModalView = require 'views/kinds/ModalView' template = require 'templates/game-menu/game-menu-modal' submenuViews = [ - require 'views/game-menu/InventoryView' - require 'views/game-menu/ChooseHeroView' require 'views/game-menu/SaveLoadView' require 'views/game-menu/OptionsView' require 'views/game-menu/GuideView' @@ -21,7 +19,6 @@ module.exports = class GameMenuModal extends ModalView constructor: (options) -> super options @options.showDevBits = me.isAdmin() or /https?:\/\/localhost/.test(window.location.href) - @options.showInventory = @options.level.get('type', true) in ['hero', 'hero-ladder', 'hero-coop'] @options.showTab = options.showTab @options.levelID = @options.level.get('slug') @options.startingSessionHeroConfig = $.extend {}, true, (@options.session.get('heroConfig') ? {}) @@ -30,7 +27,6 @@ module.exports = class GameMenuModal extends ModalView getRenderData: (context={}) -> context = super(context) context.showDevBits = @options.showDevBits - context.showInventory = @options.showInventory context.showTab = @options.showTab docs = @options.level.get('documentation') ? {} context.showsGuide = docs.specificArticles?.length or docs.generalArticles?.length @@ -43,56 +39,17 @@ module.exports = class GameMenuModal extends ModalView firstView = switch @options.showTab when 'multiplayer' then @subviews.multiplayer_view unless firstView? - firstView = (if @options.showInventory then @subviews.inventory_view else @subviews.choose_hero_view) + firstView = (@subviews.options_view) firstView.$el.addClass 'active' firstView.onShown?() Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'game-menu-open', volume: 1 onTabShown: (e) -> Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'game-menu-tab-switch', volume: 1 - @subviews.inventory_view.selectedHero = @subviews.choose_hero_view.selectedHero @subviews[e.target.hash.substring(1).replace(/-/g, '_')].onShown?() onHidden: -> super() subview.onHidden?() for subviewKey, subview of @subviews - patchingMe = @updateConfig() - me.patch() unless patchingMe # Might need to patch for options menu, too Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'game-menu-close', volume: 1 Backbone.Mediator.publish 'music-player:exit-menu', {} - - updateConfig: -> - sessionHeroConfig = @options.startingSessionHeroConfig - lastHeroConfig = me.get('heroConfig') ? {} - thangType = @subviews.choose_hero_view.selectedHero?.get 'original' - inventory = @subviews.inventory_view.getCurrentEquipmentConfig() - patchSession = patchMe = false - props = {} - if thangType or not sessionHeroConfig.thangType - props.thangType = thangType ? '529ffbf1cf1818f2be000001' # Default to Tharin if it somehow doesn't get set. - if _.size(inventory) or not sessionHeroConfig.inventory - props.inventory = inventory - for key, val of props when val - patchSession ||= not _.isEqual val, sessionHeroConfig[key] - patchMe ||= not _.isEqual val, lastHeroConfig[key] - sessionHeroConfig[key] = val - lastHeroConfig[key] = val - if (codeLanguage = @subviews.choose_hero_view.codeLanguage) and @subviews.choose_hero_view.codeLanguageChanged - patchSession ||= codeLanguage isnt @options.session.get('codeLanguage') - patchMe ||= codeLanguage isnt me.get('aceConfig')?.language - @options.session.set 'codeLanguage', codeLanguage - aceConfig = me.get('aceConfig', true) ? {} - aceConfig.language = codeLanguage - me.set 'aceConfig', aceConfig - console.log 'update config from game menu modal; props:', props, 'patch session?', patchSession, 'patch me?', patchMe - if patchSession - @options.session.set 'heroConfig', sessionHeroConfig - success = -> - _.defer -> Backbone.Mediator.publish 'level:hero-config-changed', {} - error = (model, res) -> - console.error 'error patching session', model, res, res.responseJSON, res.status, res.statusText - @options.session.patch success: success, error: error - if patchMe - me.set 'heroConfig', lastHeroConfig - me.patch() - patchMe diff --git a/app/views/game-menu/InventoryView.coffee b/app/views/game-menu/InventoryModal.coffee similarity index 92% rename from app/views/game-menu/InventoryView.coffee rename to app/views/game-menu/InventoryModal.coffee index 29ab27ccb..11637ce1d 100644 --- a/app/views/game-menu/InventoryView.coffee +++ b/app/views/game-menu/InventoryModal.coffee @@ -1,14 +1,16 @@ -CocoView = require 'views/kinds/CocoView' -template = require 'templates/game-menu/inventory-view' +ModalView = require 'views/kinds/ModalView' +template = require 'templates/game-menu/inventory-modal' {me} = require 'lib/auth' ThangType = require 'models/ThangType' CocoCollection = require 'collections/CocoCollection' ItemView = require './ItemView' SpriteBuilder = require 'lib/sprites/SpriteBuilder' -module.exports = class InventoryView extends CocoView - id: 'inventory-view' - className: 'tab-pane' +hasGoneFullScreenOnce = false + +module.exports = class InventoryModal extends ModalView + id: 'inventory-modal' + className: 'modal fade play-modal' template: template slots: ['head', 'eyes', 'neck', 'torso', 'wrists', 'gloves', 'left-ring', 'right-ring', 'right-hand', 'left-hand', 'waist', 'feet', 'programming-book', 'pet', 'minion', 'flag'] #, 'misc-0', 'misc-1'] # TODO: bring in misc slot(s) again when we have space @@ -19,12 +21,13 @@ module.exports = class InventoryView extends CocoView 'doubletap #available-equipment .list-group-item:not(.equipped)': 'onAvailableItemDoubleClick' 'dblclick .item-slot .item-view': 'onEquippedItemDoubleClick' 'doubletap .item-slot .item-view': 'onEquippedItemDoubleClick' - - subscriptions: - 'level:hero-selection-updated': 'onHeroSelectionUpdated' + 'shown.bs.modal': 'onShown' + 'click #choose-hero-button': 'onClickChooseHero' + 'click #play-level-button': 'onClickPlayLevel' shortcuts: 'esc': 'clearSelection' + 'enter': 'onClickPlayLevel' initialize: (options) -> super(arguments...) @@ -378,8 +381,7 @@ module.exports = class InventoryView extends CocoView for item in me.items() when not (item in @allowedItems) @allowedItems.push item - onHeroSelectionUpdated: (e) -> - @selectedHero = e.hero + setHero: (@selectedHero) -> @loadHero() @$el.removeClass('Warrior Ranger Wizard').addClass(@selectedHero.get('heroClass')) @@ -433,6 +435,40 @@ module.exports = class InventoryView extends CocoView # Called when the modal itself is dismissed @endHighlight() + onClickChooseHero: -> + @hide() + @trigger 'choose-hero-click' + + onClickPlayLevel: (e) -> + return if @$el.find('#play-level-button').prop 'disabled' + @showLoading() + ua = navigator.userAgent.toLowerCase() + unless hasGoneFullScreenOnce or (/safari/.test(ua) and not /chrome/.test(ua)) or $(window).height() >= 658 # Min vertical resolution needed at 1366px wide + @toggleFullscreen() + hasGoneFullScreenOnce = true + @updateConfig => + @trigger 'play-click' + window.tracker?.trackEvent 'Play Level Modal', Action: 'Play' + + updateConfig: (callback, skipSessionSave) -> + sessionHeroConfig = @options.session.get('heroConfig') ? {} + lastHeroConfig = me.get('heroConfig') ? {} + inventory = @getCurrentEquipmentConfig() + patchSession = patchMe = false + patchSession ||= not _.isEqual inventory, sessionHeroConfig.inventory + patchMe ||= not _.isEqual inventory, lastHeroConfig.inventory + sessionHeroConfig.inventory = inventory + lastHeroConfig.inventory = inventory + if patchMe + console.log 'setting me.heroConfig to', JSON.stringify(lastHeroConfig) + me.set 'heroConfig', lastHeroConfig + me.patch() + if patchSession + console.log 'setting session.heroConfig to', JSON.stringify(sessionHeroConfig) + @options.session.set 'heroConfig', sessionHeroConfig + @options.session.patch success: callback unless skipSessionSave + else + callback?() gear = 'simple-boots': '53e237bf53457600003e3f05' diff --git a/app/views/play/WorldMapView.coffee b/app/views/play/WorldMapView.coffee index c26fd611f..57db8a6e3 100644 --- a/app/views/play/WorldMapView.coffee +++ b/app/views/play/WorldMapView.coffee @@ -3,7 +3,7 @@ template = require 'templates/play/world-map-view' LevelSession = require 'models/LevelSession' CocoCollection = require 'collections/CocoCollection' AudioPlayer = require 'lib/AudioPlayer' -PlayLevelModal = require 'views/play/modal/PlayLevelModal' +LevelSetupManager = require 'lib/LevelSetupManager' ThangType = require 'models/ThangType' MusicPlayer = require 'lib/surface/MusicPlayer' storage = require 'lib/storage' @@ -149,8 +149,8 @@ module.exports = class WorldMapView extends RootView @startLevel $(e.target).parents('.level-info-container') startLevel: (levelElement) -> - playLevelModal = new PlayLevelModal supermodel: @supermodel, levelID: levelElement.data('level-id'), levelPath: levelElement.data('level-path'), levelName: levelElement.data('level-name'), hadEverChosenHero: @hadEverChosenHero - @openModalView playLevelModal + setupManager = new LevelSetupManager supermodel: @supermodel, levelID: levelElement.data('level-id'), levelPath: levelElement.data('level-path'), levelName: levelElement.data('level-name'), hadEverChosenHero: @hadEverChosenHero, parent: @ + setupManager.open() @$levelInfo?.hide() onMouseEnterLevel: (e) -> diff --git a/app/views/play/level/PlayLevelView.coffee b/app/views/play/level/PlayLevelView.coffee index 9bae05489..a47fc8efe 100644 --- a/app/views/play/level/PlayLevelView.coffee +++ b/app/views/play/level/PlayLevelView.coffee @@ -36,6 +36,7 @@ HeroVictoryModal = require './modal/HeroVictoryModal' InfiniteLoopModal = require './modal/InfiniteLoopModal' GameMenuModal = require 'views/game-menu/GameMenuModal' MultiplayerStatusView = require './MultiplayerStatusView' +LevelSetupManager = require 'lib/LevelSetupManager' PROFILE_ME = false @@ -276,7 +277,9 @@ module.exports = class PlayLevelView extends RootView onSessionLoaded: (e) -> # Just the level and session have been loaded by the level loader if e.level.get('type', true) in ['hero', 'hero-ladder', 'hero-coop'] and not _.size e.session.get('heroConfig')?.inventory ? {} - @openModalView new GameMenuModal level: e.level, session: e.session, supermodel: @supermodel + setupManager = new LevelSetupManager({supermodel: @supermodel, levelID: @levelID, parent: @}) + setupManager.open() + @onRealTimeMultiplayerLevelLoaded e.session if e.level.get('type') in ['ladder', 'hero-ladder'] onLoaded: -> diff --git a/app/views/play/modal/PlayHeroesModal.coffee b/app/views/play/modal/PlayHeroesModal.coffee index 58dae0fd1..1ac095e09 100644 --- a/app/views/play/modal/PlayHeroesModal.coffee +++ b/app/views/play/modal/PlayHeroesModal.coffee @@ -20,6 +20,7 @@ module.exports = class PlayHeroesModal extends ModalView shortcuts: 'left': -> @$el.find('#hero-carousel').carousel('prev') if @heroes.models.length and not @$el.hasClass 'secret' 'right': -> @$el.find('#hero-carousel').carousel('next') if @heroes.models.length and not @$el.hasClass 'secret' + 'enter': 'saveAndHide' constructor: (options) -> super options @@ -87,8 +88,8 @@ module.exports = class PlayHeroesModal extends ModalView @preloadHero heroIndex + 1 @preloadHero heroIndex - 1 @selectedHero = hero unless hero.locked - Backbone.Mediator.publish 'level:hero-selection-updated', hero: @selectedHero $('#choose-inventory-button').prop 'disabled', hero.locked + @trigger 'hero-loaded', {hero: hero} getFullHero: (original) -> url = "/db/thang.type/#{original}/version" @@ -178,7 +179,7 @@ module.exports = class PlayHeroesModal extends ModalView @session.patch() if changed changed = @updateHeroConfig(me, hero) - aceConfig = _.clone(me.get('aceConfig')) + aceConfig = _.clone(me.get('aceConfig')) or {} if @codeLanguage isnt aceConfig.language aceConfig.language = @codeLanguage me.set 'aceConfig', aceConfig @@ -187,6 +188,7 @@ module.exports = class PlayHeroesModal extends ModalView me.patch() if changed @hide() + @trigger 'confirm-click', hero: @selectedHero updateHeroConfig: (model, hero) -> heroConfig = _.clone(model.get('heroConfig')) or {} diff --git a/app/views/play/modal/PlayLevelModal.coffee b/app/views/play/modal/PlayLevelModal.coffee deleted file mode 100644 index ee1fd0f4b..000000000 --- a/app/views/play/modal/PlayLevelModal.coffee +++ /dev/null @@ -1,128 +0,0 @@ -ModalView = require 'views/kinds/ModalView' -template = require 'templates/play/modal/play-level-modal' -ChooseHeroView = require 'views/game-menu/ChooseHeroView' -InventoryView = require 'views/game-menu/InventoryView' -PlayLevelView = require 'views/play/level/PlayLevelView' -LadderView = require 'views/play/ladder/LadderView' -LevelSession = require 'models/LevelSession' - -hasGoneFullScreenOnce = false - -module.exports = class PlayLevelModal extends ModalView - className: 'modal fade play-modal' - template: template - id: 'play-level-modal' - - events: - 'click #choose-inventory-button': 'onClickChooseInventory' - 'click #choose-hero-button': 'onClickChooseHero' - 'click #play-level-button': 'onClickPlayLevel' - - shortcuts: - 'enter': 'onEnterPressed' - - constructor: (options) -> - super options - @options.showDevBits = true - @loadSession() - - loadSession: -> - url = "/db/level/#{@options.levelID}/session" - #url += "?team=#{@team}" if @options.team # TODO: figure out how to get the teams for multiplayer PVP hero style - session = new LevelSession().setURL url - @session = @supermodel.loadModel(session, 'level_session').model - @options.session = @session - - getRenderData: (context={}) -> - context = super(context) - context.levelID = @options.levelID - context.levelPath = @options.levelPath - context.levelName = @options.levelName - context - - afterRender: -> - super() - return unless @supermodel.finished() - @session.url = -> '/db/level.session/' + @id - Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'game-menu-open', volume: 1 - @insertSubView @chooseHeroView = new ChooseHeroView @options - @insertSubView @inventoryView = new InventoryView @options - if @options.hadEverChosenHero - @$el.find('.choose-hero-active').add(@chooseHeroView.$el).addClass 'secret' - @$el.find('.choose-inventory-active').removeClass 'secret' - @inventoryView.onShown() - else - @$el.find('.choose-inventory-active').add(@inventoryView.$el).addClass 'secret' - @$el.find('.choose-hero-active').removeClass 'secret' - @chooseHeroView.onShown() - - onHidden: -> - unless @navigatingToPlay - skipSessionSave = not @options.session.get('levelName')? # Has to have been already started. - @updateConfig null, skipSessionSave - Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'game-menu-close', volume: 1 - super() - - updateConfig: (callback, skipSessionSave) -> - sessionHeroConfig = @options.session.get('heroConfig') ? {} - lastHeroConfig = me.get('heroConfig') ? {} - thangType = @subviews.choose_hero_view.selectedHero?.get('original') ? sessionHeroConfig.thangType ? lastHeroConfig.thangType - inventory = @subviews.inventory_view.getCurrentEquipmentConfig() - patchSession = patchMe = false - props = thangType: thangType, inventory: inventory - for key, val of props when val - patchSession ||= not _.isEqual val, sessionHeroConfig[key] - patchMe ||= not _.isEqual val, lastHeroConfig[key] - sessionHeroConfig[key] = val - lastHeroConfig[key] = val - if (codeLanguage = @subviews.choose_hero_view.codeLanguage) and (@subviews.choose_hero_view.codeLanguageChanged or not me.get('aceConfig')) - patchSession ||= codeLanguage isnt @options.session.get('codeLanguage') - patchMe ||= codeLanguage isnt me.get('aceConfig')?.language - @options.session.set 'codeLanguage', codeLanguage - aceConfig = me.get('aceConfig', true) ? {} - aceConfig.language = codeLanguage - me.set 'aceConfig', aceConfig - if patchMe - console.log 'setting me.heroConfig to', lastHeroConfig - me.set 'heroConfig', lastHeroConfig - me.patch() - if patchSession - console.log 'setting session.heroConfig to', sessionHeroConfig - @options.session.set 'heroConfig', sessionHeroConfig - @options.session.patch success: callback unless skipSessionSave - else - callback?() - - onClickChooseInventory: (e) -> - @chooseHeroView.$el.add('#choose-inventory-button, #choose-hero-header').addClass 'secret' - @inventoryView.$el.add('#choose-hero-button, #play-level-button, #choose-inventory-header').removeClass 'secret' - @inventoryView.selectedHero = @chooseHeroView.selectedHero - @inventoryView.onShown() - window.tracker?.trackEvent 'Play Level Modal', Action: 'Choose Inventory' - - onClickChooseHero: (e) -> - @chooseHeroView.$el.add('#choose-inventory-button, #choose-hero-header').removeClass 'secret' - @inventoryView.$el.add('#choose-hero-button, #play-level-button, #choose-inventory-header').addClass 'secret' - @chooseHeroView.onShown() - @inventoryView.endHighlight() - window.tracker?.trackEvent 'Play Level Modal', Action: 'Choose Hero' - - onClickPlayLevel: (e) -> - return if @$el.find('#play-level-button').prop 'disabled' - @showLoading() - ua = navigator.userAgent.toLowerCase() - unless hasGoneFullScreenOnce or (/safari/.test(ua) and not /chrome/.test(ua)) or $(window).height() >= 658 # Min vertical resolution needed at 1366px wide - @toggleFullscreen() - hasGoneFullScreenOnce = true - @updateConfig => - @navigatingToPlay = true - viewClass = if @options.levelPath is 'ladder' then LadderView else PlayLevelView - Backbone.Mediator.publish 'router:navigate', { - route: "/play/#{@options.levelPath || 'level'}/#{@options.levelID}" - viewClass: viewClass - viewArgs: [{supermodel: @supermodel}, @options.levelID] - } - window.tracker?.trackEvent 'Play Level Modal', Action: 'Play' - - onEnterPressed: (e) -> - (if @chooseHeroView.$el.hasClass('secret') then @onClickPlayLevel else @onClickChooseInventory).apply @ From 03852fb44ff81d10afada7f6957782a2d7cf3ac0 Mon Sep 17 00:00:00 2001 From: Nick Winter Date: Thu, 6 Nov 2014 18:18:57 -0800 Subject: [PATCH 08/47] Plannable pickUpFlags support and fixes for playing Coinucopia. --- app/lib/surface/Lank.coffee | 4 ++-- app/lib/surface/LankBoss.coffee | 2 +- app/lib/world/world.coffee | 2 +- app/models/Level.coffee | 2 ++ app/styles/play/level/gold.sass | 5 +++-- app/views/game-menu/InventoryModal.coffee | 1 + app/views/play/WorldMapView.coffee | 20 +++++++++++--------- app/views/play/level/PlayLevelView.coffee | 4 ++-- 8 files changed, 23 insertions(+), 17 deletions(-) diff --git a/app/lib/surface/Lank.coffee b/app/lib/surface/Lank.coffee index 24a61bebd..5adbbb4d5 100644 --- a/app/lib/surface/Lank.coffee +++ b/app/lib/surface/Lank.coffee @@ -672,12 +672,12 @@ module.exports = Lank = class Lank extends CocoClass # rather than an each-thang-that-shows-gold-per-team thing. return unless @thang return if @thang.gold is @lastGold - gold = Math.floor @thang.gold + gold = Math.floor @thang.gold ? 0 if @thang.world.age is 0 gold = @thang.world.initialTeamGold[@thang.team].gold return if gold is @lastGold @lastGold = gold - Backbone.Mediator.publish 'surface:gold-changed', {team: @thang.team, gold: gold, goldEarned: Math.floor(@thang.goldEarned)} + Backbone.Mediator.publish 'surface:gold-changed', {team: @thang.team, gold: gold, goldEarned: Math.floor(@thang.goldEarned ? 0)} playSounds: (withDelay=true, volume=1.0) -> for event in @thang.currentEvents ? [] diff --git a/app/lib/surface/LankBoss.coffee b/app/lib/surface/LankBoss.coffee index ea7ef609d..cd68e6b9f 100644 --- a/app/lib/surface/LankBoss.coffee +++ b/app/lib/surface/LankBoss.coffee @@ -353,7 +353,7 @@ module.exports = class LankBoss extends CocoClass foundExactMatch = true @pendingFlags.splice(i, 1) @removeLank pendingFlag - e.sprite.sprite.cursor = if @flagCursorLank then 'crosshair' else 'pointer' + e.sprite.sprite?.cursor = if @flagCursorLank then 'crosshair' else 'pointer' null onRemoveSelectedFlag: (e) -> diff --git a/app/lib/world/world.coffee b/app/lib/world/world.coffee index 1e47e5414..a904d287c 100644 --- a/app/lib/world/world.coffee +++ b/app/lib/world/world.coffee @@ -101,7 +101,7 @@ module.exports = class World if @realTime and not @countdownFinished if @levelID in ['the-first-kithmaze', 'haunted-kithmaze', 'the-second-kithmaze', 'the-final-kithmaze', 'the-gauntlet', 'winding-trail', 'thornbush-farm'] @realTimeSpeedFactor = 5 - else if @levelID in ['forgotten-gemsmith', 'descending-further', 'tactical-strike', 'kithgard-gates'] + else if @levelID in ['forgetful-gemsmith', 'descending-further', 'tactical-strike', 'kithgard-gates'] @realTimeSpeedFactor = 3 else @realTimeSpeedFactor = 1 diff --git a/app/models/Level.coffee b/app/models/Level.coffee index 4018fa923..00e746693 100644 --- a/app/models/Level.coffee +++ b/app/models/Level.coffee @@ -108,6 +108,8 @@ module.exports = class Level extends CocoModel # Take the ThangType default Programmable and merge level-specific Component config into it copy = $.extend true, {}, placeholderConfig levelThangComponent.config = _.merge copy, levelThangComponent.config + else if placeholderConfig.extraHUDProperties + levelThangComponent.config.extraHUDProperties = _.union(levelThangComponent.config.extraHUDProperties ? [], placeholderConfig.extraHUDProperties) if isHero if equips = _.find levelThang.components, {original: LevelComponent.EquipsID} diff --git a/app/styles/play/level/gold.sass b/app/styles/play/level/gold.sass index d7eeb2af0..370d9ec21 100644 --- a/app/styles/play/level/gold.sass +++ b/app/styles/play/level/gold.sass @@ -5,7 +5,8 @@ display: none position: absolute right: 46% - top: 42px + top: 62px + z-index: 6 @include transition(box-shadow .2s linear) @include user-select(none) padding: 4px @@ -17,7 +18,7 @@ box-shadow: 2px 2px 2px black .team-gold - font-size: 16px + font-size: 18px margin: 0 line-height: 20px color: hsla(205,0%,51%,1) diff --git a/app/views/game-menu/InventoryModal.coffee b/app/views/game-menu/InventoryModal.coffee index 11637ce1d..4b0223082 100644 --- a/app/views/game-menu/InventoryModal.coffee +++ b/app/views/game-menu/InventoryModal.coffee @@ -507,6 +507,7 @@ requiredGearByLevel = 'winding-trail': {feet: 'leather-boots', 'right-hand': 'builders-hammer'} 'thornbush-farm': {feet: 'leather-boots', 'right-hand': 'builders-hammer', eyes: 'crude-glasses'} 'a-fiery-trap': {feet: 'leather-boots', 'right-hand': 'builders-hammer', eyes: 'crude-glasses'} + 'coinucopia': {feet: 'leather-boots', flag: 'basic-flags'} restrictedGearByLevel = 'dungeons-of-kithgard': {feet: 'leather-boots'} diff --git a/app/views/play/WorldMapView.coffee b/app/views/play/WorldMapView.coffee index 57db8a6e3..0483e5271 100644 --- a/app/views/play/WorldMapView.coffee +++ b/app/views/play/WorldMapView.coffee @@ -87,6 +87,7 @@ module.exports = class WorldMapView extends RootView window.levelUnlocksNotWorking = true if level.locked and level.id is @nextLevel # Temporary level.locked = false if window.levelUnlocksNotWorking # Temporary; also possible in HeroVictoryModal level.locked = false if @levelStatusMap[level.id] in ['started', 'complete'] + level.disabled = false if @levelStatusMap[level.id] in ['started', 'complete'] level.color = 'rgb(255, 80, 60)' if level.practice level.color = 'rgb(80, 130, 200)' unless me.getBranchingGroup() is 'all-practice' @@ -988,15 +989,16 @@ forest = [ # x: 77.54 # y: 65.94 #} - #{ - # name: '' - # type: 'hero' - # difficulty: 1 - # id: '' - # description: '' - # x: 84.29 - # y: 61.23 - #} + { + name: 'Coinucopia' + type: 'hero' + difficulty: 1 + id: 'coinucopia' + description: 'Start playing in real-time with input flags as you collect gold coins!' + x: 58.54 + y: 66.73 + disabled: true + } { name: 'Dueling Grounds' type: 'hero-ladder' diff --git a/app/views/play/level/PlayLevelView.coffee b/app/views/play/level/PlayLevelView.coffee index a47fc8efe..1c31dfc64 100644 --- a/app/views/play/level/PlayLevelView.coffee +++ b/app/views/play/level/PlayLevelView.coffee @@ -189,7 +189,7 @@ module.exports = class PlayLevelView extends RootView @world = @levelLoader.world @level = @levelLoader.level @$el.addClass 'hero' if @level.get('type', true) in ['hero', 'hero-ladder', 'hero-coop'] - @$el.addClass 'flags' if @level.get('slug') is 'sky-span' or (@level.get('type', true) in ['hero-ladder', 'hero-coop']) # TODO: figure out when the player has flags. + @$el.addClass 'flags' if (@level.get('slug') in ['sky-span', 'coinucopia']) or (@level.get('type', true) in ['hero-ladder', 'hero-coop']) # TODO: figure out when the player has flags. @otherSession = @levelLoader.opponentSession @worldLoadFakeResources = [] # first element (0) is 1%, last (100) is 100% for percent in [1 .. 100] @@ -243,7 +243,7 @@ module.exports = class PlayLevelView extends RootView @insertSubView @tome = new TomeView levelID: @levelID, session: @session, otherSession: @otherSession, thangs: @world.thangs, supermodel: @supermodel, level: @level @insertSubView new LevelPlaybackView session: @session, levelID: @levelID, level: @level @insertSubView new GoalsView {} - @insertSubView new LevelFlagsView world: @world if @levelID is 'sky-span' or @level.get('type', true) in ['hero-ladder', 'hero-coop'] # TODO: figure out when flags are available + @insertSubView new LevelFlagsView world: @world if (@levelID in ['sky-span', 'coinucopia']) or @level.get('type', true) in ['hero-ladder', 'hero-coop'] # TODO: figure out when flags are available @insertSubView new GoldView {} @insertSubView new HUDView {level: @level} @insertSubView new ChatView levelID: @levelID, sessionID: @session.id, session: @session From b4dde5705b3005a76437d5a855926dd045a1992f Mon Sep 17 00:00:00 2001 From: Matt Lott Date: Thu, 6 Nov 2014 21:43:39 -0800 Subject: [PATCH 09/47] Place error message over Surface next to line --- app/schemas/subscriptions/tome.coffee | 4 ++ app/styles/play/level/tome/problem_alert.sass | 9 +-- app/templates/play/level.jade | 2 + .../play/level/tome/problem_alert.jade | 2 +- app/views/play/level/PlayLevelView.coffee | 2 + app/views/play/level/tome/Problem.coffee | 13 +---- .../play/level/tome/ProblemAlertView.coffee | 58 +++++++++++++++---- app/views/play/level/tome/SpellView.coffee | 8 ++- 8 files changed, 69 insertions(+), 29 deletions(-) diff --git a/app/schemas/subscriptions/tome.coffee b/app/schemas/subscriptions/tome.coffee index d5e061eb5..035961159 100644 --- a/app/schemas/subscriptions/tome.coffee +++ b/app/schemas/subscriptions/tome.coffee @@ -126,3 +126,7 @@ module.exports = 'tome:winnability-updated': c.object {title: 'Winnability Updated', description: 'When we think we can now win (or can no longer win), we may want to emphasize the submit button versus the run button (or vice versa), so this fires when we get new goal states (even preloaded goal states) suggesting success or failure change.', required: ['winnable']}, winnable: {type: 'boolean'} + + 'tome:show-problem-alert': c.object {title: 'Show Problem Alert', description: 'A problem alert needs to be shown.', required: ['problem']}, + problem: {type: 'object'} + lineOffsetPx: {type: ['number', 'undefined']} diff --git a/app/styles/play/level/tome/problem_alert.sass b/app/styles/play/level/tome/problem_alert.sass index 2ffb62181..42c7be399 100644 --- a/app/styles/play/level/tome/problem_alert.sass +++ b/app/styles/play/level/tome/problem_alert.sass @@ -1,16 +1,17 @@ @import "app/styles/mixins" @import "app/styles/bootstrap/variables" -.problem-alert + +#problem-alert-view.problem-alert z-index: 10 position: absolute // Position these at the end of the spell editor, right above the spell toolbar. - bottom: -20px - left: 10px - right: 10px + top: 45px + right: 500px background: transparent border: 1px solid transparent padding: 0 + font-size: 18px text-shadow: none color: white word-wrap: break-word diff --git a/app/templates/play/level.jade b/app/templates/play/level.jade index 6396233dc..b012ac1a8 100644 --- a/app/templates/play/level.jade +++ b/app/templates/play/level.jade @@ -20,6 +20,8 @@ #gold-view + #problem-alert-view + #level-chat-view #multiplayer-status-view diff --git a/app/templates/play/level/tome/problem_alert.jade b/app/templates/play/level/tome/problem_alert.jade index 25df2198a..0ca57fe69 100644 --- a/app/templates/play/level/tome/problem_alert.jade +++ b/app/templates/play/level/tome/problem_alert.jade @@ -1,4 +1,4 @@ -button.close(type="button", data-dismiss="alert") × +button.close(type="button") × if hint span.problem-title!= hint br diff --git a/app/views/play/level/PlayLevelView.coffee b/app/views/play/level/PlayLevelView.coffee index 1c31dfc64..84385a055 100644 --- a/app/views/play/level/PlayLevelView.coffee +++ b/app/views/play/level/PlayLevelView.coffee @@ -23,6 +23,7 @@ RealTimeCollection = require 'collections/RealTimeCollection' # subviews LevelLoadingView = require './LevelLoadingView' +ProblemAlertView = require './tome/ProblemAlertView' TomeView = require './tome/TomeView' ChatView = require './LevelChatView' HUDView = require './LevelHUDView' @@ -249,6 +250,7 @@ module.exports = class PlayLevelView extends RootView @insertSubView new ChatView levelID: @levelID, sessionID: @session.id, session: @session if @level.get('type') in ['ladder', 'hero-ladder'] @insertSubView new MultiplayerStatusView levelID: @levelID, session: @session, level: @level + @insertSubView new ProblemAlertView {} worldName = utils.i18n @level.attributes, 'name' @controlBar = @insertSubView new ControlBarView {worldName: worldName, session: @session, level: @level, supermodel: @supermodel} #_.delay (=> Backbone.Mediator.publish('level:set-debug', debug: true)), 5000 if @isIPadApp() # if me.displayName() is 'Nick' diff --git a/app/views/play/level/tome/Problem.coffee b/app/views/play/level/tome/Problem.coffee index 5c8e3d2e1..027cad84b 100644 --- a/app/views/play/level/tome/Problem.coffee +++ b/app/views/play/level/tome/Problem.coffee @@ -1,20 +1,14 @@ -ProblemAlertView = require './ProblemAlertView' Range = ace.require('ace/range').Range module.exports = class Problem annotation: null - alertView: null markerRange: null - constructor: (@aether, @aetherProblem, @ace, withAlert=false, isCast=false, @levelID) -> + constructor: (@aether, @aetherProblem, @ace, isCast=false, @levelID) -> @buildAnnotation() - @buildAlertView() if withAlert @buildMarkerRange() if isCast Backbone.Mediator.publish("problem:problem-created", line:@annotation.row, text: @annotation.text) if application.isIPadApp destroy: -> - unless @alertView?.destroyed - @alertView?.$el?.remove() - @alertView?.destroy() @removeMarkerRange() @userCodeProblem.off() if @userCodeProblem @@ -29,11 +23,6 @@ module.exports = class Problem text: text, type: @aetherProblem.level ? 'error' - buildAlertView: -> - @alertView = new ProblemAlertView problem: @ - @alertView.render() - $(@ace.container).append @alertView.el - buildMarkerRange: -> return unless @aetherProblem.range [start, end] = @aetherProblem.range diff --git a/app/views/play/level/tome/ProblemAlertView.coffee b/app/views/play/level/tome/ProblemAlertView.coffee index 7f43af83e..e19163df9 100644 --- a/app/views/play/level/tome/ProblemAlertView.coffee +++ b/app/views/play/level/tome/ProblemAlertView.coffee @@ -3,32 +3,68 @@ template = require 'templates/play/level/tome/problem_alert' {me} = require 'lib/auth' module.exports = class ProblemAlertView extends CocoView + id: 'problem-alert-view' className: 'problem-alert' template: template - subscriptions: {} + subscriptions: + 'tome:show-problem-alert': 'onShowProblemAlert' + 'tome:manual-cast': 'onHideProblemAlert' + 'real-time-multiplayer:manual-cast': 'onHideProblemAlert' events: 'click .close': 'onRemoveClicked' constructor: (options) -> super options - @problem = options.problem + if options.problem? + @problem = options.problem + @onWindowResize() + else + @$el.hide() + $(window).on 'resize', @onWindowResize + + destroy: -> + $(window).off 'resize', @onWindowResize + super() getRenderData: (context={}) -> context = super context - format = (s) -> s?.replace(//g, '>').replace(/\n/g, '
') - context.message = format @problem.aetherProblem.message - context.hint = format @problem.aetherProblem.hint + if @problem? + format = (s) -> s?.replace(//g, '>').replace(/\n/g, '
') + context.message = format @problem.aetherProblem.message + context.hint = format @problem.aetherProblem.hint context afterRender: -> super() - @$el.addClass('alert').addClass("alert-#{@problem.aetherProblem.level}").hide().fadeIn('slow') - @$el.addClass('no-hint') unless @problem.aetherProblem.hint - Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'error_appear', volume: 1.0 + if @problem? + @$el.addClass('alert').addClass("alert-#{@problem.aetherProblem.level}").hide().fadeIn('slow') + @$el.addClass('no-hint') unless @problem.aetherProblem.hint + Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'error_appear', volume: 1.0 + + onShowProblemAlert: (data) -> + return if @problem? and data.problem.aetherProblem.message is @problem.aetherProblem.message and data.problem.aetherProblem.hint is @problem.aetherProblem.hint + return unless $('#code-area').is(":visible") + @problem = data.problem + @lineOffsetPx = data.lineOffsetPx or 0 + @$el.show() + @onWindowResize() + @render() + + onHideProblemAlert: -> + @onRemoveClicked() onRemoveClicked: -> - @$el.remove() - @destroy() - #@problem.destroy() # let's try leaving the annotations / marker ranges alone + @$el.hide() + @problem = null + + onWindowResize: (e) => + # TODO: This all seems a little hacky + if @problem? + @$el.css('left', $('#goals-view').outerWidth(true) + 'px') + @$el.css('right', $('#code-area').outerWidth(true) + 'px') + + # 45px from top roughly aligns top of alert with top of first code line + # TODO: calculate this in a more dynamic, less sketchy way + @$el.css('top', (45 + @lineOffsetPx) + 'px') diff --git a/app/views/play/level/tome/SpellView.coffee b/app/views/play/level/tome/SpellView.coffee index 17477be54..bd9ce0eb4 100644 --- a/app/views/play/level/tome/SpellView.coffee +++ b/app/views/play/level/tome/SpellView.coffee @@ -515,7 +515,13 @@ module.exports = class SpellView extends CocoView for aetherProblem, problemIndex in aether.getAllProblems() continue if key = aetherProblem.userInfo?.key and key of seenProblemKeys seenProblemKeys[key] = true if key - @problems.push problem = new Problem aether, aetherProblem, @ace, isCast and problemIndex is 0, isCast, @spell.levelID + @problems.push problem = new Problem aether, aetherProblem, @ace, isCast, @spell.levelID + if isCast and problemIndex is 0 + if problem.aetherProblem.range? + # Line height is 20px + # TODO: Can we get line height dynamically from ace? + lineOffsetPx = problem.aetherProblem.range[0].row * 20 - @ace.session.getScrollTop() + Backbone.Mediator.publish 'tome:show-problem-alert', problem: problem, lineOffsetPx: lineOffsetPx @saveUserCodeProblem(aether, aetherProblem) if isCast annotations.push problem.annotation if problem.annotation @aceSession.setAnnotations annotations From e23e6f4ad2b5a0090a39a92a4d813945ffa36cb0 Mon Sep 17 00:00:00 2001 From: Scott Erickson Date: Fri, 7 Nov 2014 07:04:10 -0800 Subject: [PATCH 10/47] Refactored the names of the play modal files. --- ...picker_active.png => hero-portrait-selected.png} | Bin ...rtrait_picker_inactive.png => hero-portrait.png} | Bin ...-heroes-background.png => heroes-background.png} | Bin ...kground.png => item-box-background-selected.png} | Bin ...-item-background.png => item-box-background.png} | Bin ...{play-items-modal-hr.png => item-details-hr.png} | Bin ...on-accessories.png => item-icon-accessories.png} | Bin ...modal-tab-icon-armor.png => item-icon-armor.png} | Bin ...modal-tab-icon-books.png => item-icon-books.png} | Bin ...s-modal-tab-icon-misc.png => item-icon-misc.png} | Bin ...l-tab-icon-primary.png => item-icon-primary.png} | Bin ...b-icon-secondary.png => item-icon-secondary.png} | Bin ...round-narrow.png => items-background-narrow.png} | Bin ...ms-modal-background.png => items-background.png} | Bin ...modal-selected-tab.png => menu-tab-selected.png} | Bin .../{play-items-modal-tab.png => menu-tab.png} | Bin app/styles/play/modal/play-heroes-modal.sass | 4 ++-- app/styles/play/modal/play-items-modal.sass | 8 ++++---- app/templates/play/modal/play-heroes-modal.jade | 2 +- app/templates/play/modal/play-items-modal.jade | 6 +++--- 20 files changed, 10 insertions(+), 10 deletions(-) rename app/assets/images/pages/play/modal/{hero_portrait_picker_active.png => hero-portrait-selected.png} (100%) rename app/assets/images/pages/play/modal/{hero_portrait_picker_inactive.png => hero-portrait.png} (100%) rename app/assets/images/pages/play/modal/{play-heroes-background.png => heroes-background.png} (100%) rename app/assets/images/pages/play/modal/{play-items-modal-selected-item-background.png => item-box-background-selected.png} (100%) rename app/assets/images/pages/play/modal/{play-items-modal-item-background.png => item-box-background.png} (100%) rename app/assets/images/pages/play/modal/{play-items-modal-hr.png => item-details-hr.png} (100%) rename app/assets/images/pages/play/modal/{play-items-modal-tab-icon-accessories.png => item-icon-accessories.png} (100%) rename app/assets/images/pages/play/modal/{play-items-modal-tab-icon-armor.png => item-icon-armor.png} (100%) rename app/assets/images/pages/play/modal/{play-items-modal-tab-icon-books.png => item-icon-books.png} (100%) rename app/assets/images/pages/play/modal/{play-items-modal-tab-icon-misc.png => item-icon-misc.png} (100%) rename app/assets/images/pages/play/modal/{play-items-modal-tab-icon-primary.png => item-icon-primary.png} (100%) rename app/assets/images/pages/play/modal/{play-items-modal-tab-icon-secondary.png => item-icon-secondary.png} (100%) rename app/assets/images/pages/play/modal/{play-items-modal-background-narrow.png => items-background-narrow.png} (100%) rename app/assets/images/pages/play/modal/{play-items-modal-background.png => items-background.png} (100%) rename app/assets/images/pages/play/modal/{play-items-modal-selected-tab.png => menu-tab-selected.png} (100%) rename app/assets/images/pages/play/modal/{play-items-modal-tab.png => menu-tab.png} (100%) diff --git a/app/assets/images/pages/play/modal/hero_portrait_picker_active.png b/app/assets/images/pages/play/modal/hero-portrait-selected.png similarity index 100% rename from app/assets/images/pages/play/modal/hero_portrait_picker_active.png rename to app/assets/images/pages/play/modal/hero-portrait-selected.png diff --git a/app/assets/images/pages/play/modal/hero_portrait_picker_inactive.png b/app/assets/images/pages/play/modal/hero-portrait.png similarity index 100% rename from app/assets/images/pages/play/modal/hero_portrait_picker_inactive.png rename to app/assets/images/pages/play/modal/hero-portrait.png diff --git a/app/assets/images/pages/play/modal/play-heroes-background.png b/app/assets/images/pages/play/modal/heroes-background.png similarity index 100% rename from app/assets/images/pages/play/modal/play-heroes-background.png rename to app/assets/images/pages/play/modal/heroes-background.png diff --git a/app/assets/images/pages/play/modal/play-items-modal-selected-item-background.png b/app/assets/images/pages/play/modal/item-box-background-selected.png similarity index 100% rename from app/assets/images/pages/play/modal/play-items-modal-selected-item-background.png rename to app/assets/images/pages/play/modal/item-box-background-selected.png diff --git a/app/assets/images/pages/play/modal/play-items-modal-item-background.png b/app/assets/images/pages/play/modal/item-box-background.png similarity index 100% rename from app/assets/images/pages/play/modal/play-items-modal-item-background.png rename to app/assets/images/pages/play/modal/item-box-background.png diff --git a/app/assets/images/pages/play/modal/play-items-modal-hr.png b/app/assets/images/pages/play/modal/item-details-hr.png similarity index 100% rename from app/assets/images/pages/play/modal/play-items-modal-hr.png rename to app/assets/images/pages/play/modal/item-details-hr.png diff --git a/app/assets/images/pages/play/modal/play-items-modal-tab-icon-accessories.png b/app/assets/images/pages/play/modal/item-icon-accessories.png similarity index 100% rename from app/assets/images/pages/play/modal/play-items-modal-tab-icon-accessories.png rename to app/assets/images/pages/play/modal/item-icon-accessories.png diff --git a/app/assets/images/pages/play/modal/play-items-modal-tab-icon-armor.png b/app/assets/images/pages/play/modal/item-icon-armor.png similarity index 100% rename from app/assets/images/pages/play/modal/play-items-modal-tab-icon-armor.png rename to app/assets/images/pages/play/modal/item-icon-armor.png diff --git a/app/assets/images/pages/play/modal/play-items-modal-tab-icon-books.png b/app/assets/images/pages/play/modal/item-icon-books.png similarity index 100% rename from app/assets/images/pages/play/modal/play-items-modal-tab-icon-books.png rename to app/assets/images/pages/play/modal/item-icon-books.png diff --git a/app/assets/images/pages/play/modal/play-items-modal-tab-icon-misc.png b/app/assets/images/pages/play/modal/item-icon-misc.png similarity index 100% rename from app/assets/images/pages/play/modal/play-items-modal-tab-icon-misc.png rename to app/assets/images/pages/play/modal/item-icon-misc.png diff --git a/app/assets/images/pages/play/modal/play-items-modal-tab-icon-primary.png b/app/assets/images/pages/play/modal/item-icon-primary.png similarity index 100% rename from app/assets/images/pages/play/modal/play-items-modal-tab-icon-primary.png rename to app/assets/images/pages/play/modal/item-icon-primary.png diff --git a/app/assets/images/pages/play/modal/play-items-modal-tab-icon-secondary.png b/app/assets/images/pages/play/modal/item-icon-secondary.png similarity index 100% rename from app/assets/images/pages/play/modal/play-items-modal-tab-icon-secondary.png rename to app/assets/images/pages/play/modal/item-icon-secondary.png diff --git a/app/assets/images/pages/play/modal/play-items-modal-background-narrow.png b/app/assets/images/pages/play/modal/items-background-narrow.png similarity index 100% rename from app/assets/images/pages/play/modal/play-items-modal-background-narrow.png rename to app/assets/images/pages/play/modal/items-background-narrow.png diff --git a/app/assets/images/pages/play/modal/play-items-modal-background.png b/app/assets/images/pages/play/modal/items-background.png similarity index 100% rename from app/assets/images/pages/play/modal/play-items-modal-background.png rename to app/assets/images/pages/play/modal/items-background.png diff --git a/app/assets/images/pages/play/modal/play-items-modal-selected-tab.png b/app/assets/images/pages/play/modal/menu-tab-selected.png similarity index 100% rename from app/assets/images/pages/play/modal/play-items-modal-selected-tab.png rename to app/assets/images/pages/play/modal/menu-tab-selected.png diff --git a/app/assets/images/pages/play/modal/play-items-modal-tab.png b/app/assets/images/pages/play/modal/menu-tab.png similarity index 100% rename from app/assets/images/pages/play/modal/play-items-modal-tab.png rename to app/assets/images/pages/play/modal/menu-tab.png diff --git a/app/styles/play/modal/play-heroes-modal.sass b/app/styles/play/modal/play-heroes-modal.sass index 07e4ac87e..f9c669f23 100644 --- a/app/styles/play/modal/play-heroes-modal.sass +++ b/app/styles/play/modal/play-heroes-modal.sass @@ -77,10 +77,10 @@ $heroCanvasHeight: 265px height: 98px margin: 0 -11px position: relative - background: url(/images/pages/play/modal/hero_portrait_picker_inactive.png) + background: url(/images/pages/play/modal/hero-portrait.png) border: none &.active - background: url(/images/pages/play/modal/hero_portrait_picker_active.png) + background: url(/images/pages/play/modal/hero-portrait-selected.png) z-index: 5 .hero-avatar diff --git a/app/styles/play/modal/play-items-modal.sass b/app/styles/play/modal/play-items-modal.sass index 5dd58c300..d75098290 100644 --- a/app/styles/play/modal/play-items-modal.sass +++ b/app/styles/play/modal/play-items-modal.sass @@ -86,7 +86,7 @@ width: 178px li - background: url(/images/pages/play/modal/play-items-modal-tab.png) + background: url(/images/pages/play/modal/menu-tab.png) padding: 5px margin: -5px 0 height: 80px @@ -104,7 +104,7 @@ li.active - background: url(/images/pages/play/modal/play-items-modal-selected-tab.png) + background: url(/images/pages/play/modal/menu-tab-selected.png) width: 197px a @@ -136,7 +136,7 @@ padding: 10px height: 195px float: left - background: url(/images/pages/play/modal/play-items-modal-item-background.png) + background: url(/images/pages/play/modal/item-box-background.png) margin: 4px text-align: center position: relative @@ -220,7 +220,7 @@ font-size: 16px &.selected - background: url(/images/pages/play/modal/play-items-modal-selected-item-background.png) + background: url(/images/pages/play/modal/item-box-background-selected.png) //- Item list scrollbar diff --git a/app/templates/play/modal/play-heroes-modal.jade b/app/templates/play/modal/play-heroes-modal.jade index 68582c2a2..6b8e8dee6 100644 --- a/app/templates/play/modal/play-heroes-modal.jade +++ b/app/templates/play/modal/play-heroes-modal.jade @@ -1,7 +1,7 @@ .modal-dialog .modal-content - img(src="/images/pages/play/modal/play-heroes-background.png")#play-heroes-background + img(src="/images/pages/play/modal/heroes-background.png")#play-heroes-background h1(data-i18n="choose_hero.choose_hero") diff --git a/app/templates/play/modal/play-items-modal.jade b/app/templates/play/modal/play-items-modal.jade index b9ebed2f0..38e4be7d9 100644 --- a/app/templates/play/modal/play-items-modal.jade +++ b/app/templates/play/modal/play-items-modal.jade @@ -1,7 +1,7 @@ .modal-dialog .modal-content - img(src="/images/pages/play/modal/play-items-modal-background.png")#play-items-modal-bg - img(src="/images/pages/play/modal/play-items-modal-background-narrow.png")#play-items-modal-narrow-bg + img(src="/images/pages/play/modal/items-background.png")#play-items-modal-bg + img(src="/images/pages/play/modal/items-background-narrow.png")#play-items-modal-narrow-bg h1.big-font(data-i18n="play.items") @@ -15,7 +15,7 @@ for category, index in itemCategories li(class=index ? "" : "active") a.one-line(href="#item-category-" + category, data-toggle="tab") - img.tab-icon(src="/images/pages/play/modal/play-items-modal-tab-icon-"+category+".png") + img.tab-icon(src="/images/pages/play/modal/item-icon-"+category+".png") span.big-font= itemCategoryNames[index] From fbc2799211988be1536c62fa5fafcb6f4b280f9e Mon Sep 17 00:00:00 2001 From: Nick Winter Date: Fri, 7 Nov 2014 09:08:30 -0800 Subject: [PATCH 11/47] Startd to implement new code editor design. Fixed #1732. --- .../images/level/code_editor_background.png | Bin 7524 -> 45320 bytes app/assets/images/level/wood_texture.png | Bin 87733 -> 70161 bytes app/lib/LevelSetupManager.coffee | 18 ++-- app/locale/en.coffee | 1 + app/styles/play/level.sass | 2 +- app/styles/play/level/thang_avatar.sass | 13 ++- app/styles/play/level/tome/spell.sass | 3 +- .../play/level/tome/spell_list_entry.sass | 78 ++++++++++++------ app/templates/play/level/thang_avatar.jade | 3 +- .../play/level/tome/spell_list_tab_entry.jade | 9 +- app/views/contribute/DiplomatView.coffee | 1 + .../level/tome/SpellListTabEntryView.coffee | 6 +- 12 files changed, 91 insertions(+), 43 deletions(-) diff --git a/app/assets/images/level/code_editor_background.png b/app/assets/images/level/code_editor_background.png index 3dfc257af0c4dd2109e94482229fef05749170dc..daa5d76009369092ddb46e38d3dc55b72b9993d7 100644 GIT binary patch literal 45320 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 Szk&ZA;3ESQ{o4D^asLO4Gt6lK literal 7524 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 diff --git a/app/assets/images/level/wood_texture.png b/app/assets/images/level/wood_texture.png index dc824d8027a281eaf684668652cd5fa9af3bbeab..3c33773cb5b1ad7b10762e34338c9aa87e20b34b 100644 GIT binary patch literal 70161 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 url = "/db/level/#{@options.levelID}/session" #url += "?team=#{@team}" if @options.team # TODO: figure out how to get the teams for multiplayer PVP hero style @@ -41,19 +41,19 @@ module.exports = class LevelSetupManager extends CocoClass fillSessionWithDefaults: -> heroConfig = _.merge {}, me.get('heroConfig'), @session.get('heroConfig') @session.set('heroConfig', heroConfig) - + open: -> - firstModal = if @options.hadEverChosenHero then @inventoryModal else @heroesModal + firstModal = if @options.hadEverChosenHero then @inventoryModal else @heroesModal @options.parent.openModalView(firstModal) # @inventoryModal.onShown() # replace? Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'game-menu-open', volume: 1 - - + + #- Modal events onceHeroLoaded: (e) -> @inventoryModal.setHero(e.hero) - + onHeroesModalConfirmClicked: (e) -> @options.parent.openModalView(@inventoryModal) @inventoryModal.render() @@ -68,7 +68,7 @@ module.exports = class LevelSetupManager extends CocoClass @heroesModal.didReappear() @inventoryModal.endHighlight() window.tracker?.trackEvent 'Play Level Modal', Action: 'Choose Hero' - + onInventoryModalPlayClicked: -> @navigatingToPlay = true viewClass = if @options.levelPath is 'ladder' then LadderView else PlayLevelView @@ -76,4 +76,4 @@ module.exports = class LevelSetupManager extends CocoClass route: "/play/#{@options.levelPath || 'level'}/#{@options.levelID}" viewClass: viewClass viewArgs: [{supermodel: @supermodel}, @options.levelID] - } \ No newline at end of file + } diff --git a/app/locale/en.coffee b/app/locale/en.coffee index ca45b9020..db13244b3 100644 --- a/app/locale/en.coffee +++ b/app/locale/en.coffee @@ -233,6 +233,7 @@ tome_select_a_thang: "Select Someone for " tome_available_spells: "Available Spells" tome_your_skills: "Your Skills" + tome_current_method: "Current Method" hud_continue: "Continue (shift+space)" hud_continue_short: "Continue" code_saved: "Code Saved" diff --git a/app/styles/play/level.sass b/app/styles/play/level.sass index 3ba3274b6..7fb4e4726 100644 --- a/app/styles/play/level.sass +++ b/app/styles/play/level.sass @@ -88,7 +88,7 @@ $level-resize-transition-time: 0.5s #code-area @include box-sizing(border-box) - padding: 10px 1% + padding: 0px 0.9% 10px 1.4% width: 45% background: transparent url(/images/level/wood_texture.png) background-size: 100% 100% diff --git a/app/styles/play/level/thang_avatar.sass b/app/styles/play/level/thang_avatar.sass index fcb144953..0873eeee3 100644 --- a/app/styles/play/level/thang_avatar.sass +++ b/app/styles/play/level/thang_avatar.sass @@ -7,10 +7,8 @@ @include box-shadow(0px 0px 10px rgba(79, 79, 213, 1.0)) .thang-avatar-wrapper + width: 100% position: relative - margin: 5px 5px 1px - border: 1px solid #888 - border-radius: 4px @include gradient-radial-custom-stops(hsla(205,0%,74%,1), 20%, hsla(205,0%,31%,1), 70%) &.team-humans @@ -25,6 +23,15 @@ border-color: darkgreen @include gradient-radial-custom-stops(hsla(116,80%,74%,1), 20%, hsla(116,80%,31%,1), 70%) + .avatar + width: 100% + + .avatar-frame + position: absolute + left: -13% + top: -14% + width: 132% + .badge $radius: 8px $diameter: 2 * $radius diff --git a/app/styles/play/level/tome/spell.sass b/app/styles/play/level/tome/spell.sass index 6b37b5c8e..348633044 100644 --- a/app/styles/play/level/tome/spell.sass +++ b/app/styles/play/level/tome/spell.sass @@ -11,7 +11,8 @@ #spell-view position: absolute left: 10px - top: 48px + top: 140px + //top: 48px right: 10px padding-bottom: 10px z-index: 1 diff --git a/app/styles/play/level/tome/spell_list_entry.sass b/app/styles/play/level/tome/spell_list_entry.sass index bda937d27..9ba38f450 100644 --- a/app/styles/play/level/tome/spell_list_entry.sass +++ b/app/styles/play/level/tome/spell_list_entry.sass @@ -2,7 +2,7 @@ @import "app/styles/bootstrap/variables" .spell-list-entry-view - code + .method-signature background-color: transparent border: 0 font-size: 1.1em @@ -10,30 +10,48 @@ padding: 4px .spell-list-entry-view.spell-tab - $height: 38px + $height: 87px + $paddingTop: 10px + $paddingBottom: 25px $childMargin: 2px - $childSize: $height - 2 * $childMargin + $childSize: $height - $paddingTop - $paddingBottom + width: 100% height: $height - width: 90% - width: -webkit-calc(100% - 50px) - width: calc(100% - 50px) - padding: 0px 8px - border-width: 3px - border-image: url(/images/level/code_editor_tab_background.png) 4 fill repeat + padding: $paddingTop 25px $paddingBottom 25px white-space: nowrap position: relative + background: transparent url(/images/level/code_editor_top_bar_wood_background.png) + background-size: 100% 100% + + .hinge + position: absolute + top: 0 + background: transparent url(/images/level/code_editor_top_bar_hinge.png) + width: 24px + height: 20px + background-size: contain + z-index: 100 + + .hinge-0 + left: 20% + .hinge-1 + left: 40% + .hinge-2 + left: 60% + .hinge-3 + left: 80% &.read-only - background: linear-gradient(to bottom, rgba(0,0,0,0.2) 0%,rgba(0,0,0,0.2) 100%), url(/images/level/code_editor_tab_background.png) + background: linear-gradient(to bottom, rgba(0,0,0,0.5) 0%,rgba(0,0,0,0.5) 100%), url(/images/level/code_editor_top_bar_wood_background.png) background-size: 100% 100% - .spell-list-button, .thang-avatar-wrapper, .reload-code, .beautify-code, .fullscreen-code + .spell-list-button, .thang-avatar-view, .reload-code, .beautify-code, .fullscreen-code width: $childSize height: $childSize - margin: $childMargin - box-sizing: border-box + margin: 0 $childMargin + display: inline-block - .spell-list-button, .thang-avatar-wrapper + .spell-list-button, .thang-avatar-view float: left .spell-tool-buttons @@ -71,9 +89,23 @@ .thang-avatar-wrapper border-width: 0 - code - margin-top: 7px + .method-label + margin-left: 10px + line-height: $childSize font-size: 1vw + display: inline-block + font-weight: bold + color: white + text-transform: uppercase + + .method-signature + margin-left: 10px + line-height: $childSize + font-size: 1vw + display: inline-block + font-weight: bold + color: white + text-transform: uppercase .spell-list-entry-view:not(.spell-tab) cursor: pointer @@ -89,7 +121,7 @@ &.shows-top-divider:not(:first-child) border-top: 1px dashed #ccc - code + .method-signature margin-top: 5px .thang-names @@ -113,9 +145,9 @@ //margin: 2px 10px 2px 5px -html.no-borderimage - .spell-list-entry-view.spell-tab - border-width: 0 - border-image: none - background: transparent url(/images/level/code_editor_tab_background.png) no-repeat - background-size: 100% 100% +//html.no-borderimage +// .spell-list-entry-view.spell-tab +// border-width: 0 +// border-image: none +// background: transparent url(/images/level/code_editor_tab_background.png) no-repeat +// background-size: 100% 100% diff --git a/app/templates/play/level/thang_avatar.jade b/app/templates/play/level/thang_avatar.jade index 15af1333a..e92cbb7fd 100644 --- a/app/templates/play/level/thang_avatar.jade +++ b/app/templates/play/level/thang_avatar.jade @@ -1,7 +1,8 @@ .thang-avatar-wrapper(class="team-" + (thang.team || "neutral")) //canvas(width=100, height=100, title=thang.id + " - " + thang.team) //- var title = thang.id + " - " + thang.team + (thang.type ? ' - type: "' + thang.type + '"' : '') - img.img-responsive(src=avatarURL) + img.avatar(src=avatarURL) + img.avatar-frame(src="/images/level/thang_avatar_frame.png") .badge.problems .badge.shared-thangs if includeName diff --git a/app/templates/play/level/tome/spell_list_tab_entry.jade b/app/templates/play/level/tome/spell_list_tab_entry.jade index a2ec05b06..f3ff09860 100644 --- a/app/templates/play/level/tome/spell_list_tab_entry.jade +++ b/app/templates/play/level/tome/spell_list_tab_entry.jade @@ -1,11 +1,16 @@ -img(src="/images/level/code_editor_tab_background.png").spell-tab-image-hidden.hidden +.hinge.hinge-0 +.hinge.hinge-1 +.hinge.hinge-2 +.hinge.hinge-3 if includeSpellList .btn.btn-small.spell-list-button(data-i18n="[title]play_level.tome_see_all_methods", title="See all methods you can edit") i.icon-chevron-down + .thang-avatar-placeholder -code #{methodSignature} +.method-label(data-i18n="play_level.tome_current_method") Current Method +.method-signature #{methodSignature} .spell-tool-buttons if levelType !== 'hero' diff --git a/app/views/contribute/DiplomatView.coffee b/app/views/contribute/DiplomatView.coffee index 90bc1411e..2e369c515 100644 --- a/app/views/contribute/DiplomatView.coffee +++ b/app/views/contribute/DiplomatView.coffee @@ -85,3 +85,4 @@ module.exports = class DiplomatView extends ContributeClassView ur: [] # اُردُو, Urdu ms: [] # Bahasa Melayu, Bahasa Malaysia ca: ['ArniMcFrag'] # Català, Catalan + gl: ['mcaeiror'] # Galego, Galician diff --git a/app/views/play/level/tome/SpellListTabEntryView.coffee b/app/views/play/level/tome/SpellListTabEntryView.coffee index b27ed0792..6db1ea9f8 100644 --- a/app/views/play/level/tome/SpellListTabEntryView.coffee +++ b/app/views/play/level/tome/SpellListTabEntryView.coffee @@ -75,7 +75,7 @@ module.exports = class SpellListTabEntryView extends SpellListEntryView break return unless found docFormatter = new DocFormatter doc: doc, thang: @thang, language: @options.codeLanguage, selectedMethod: true - @$el.find('code').popover( + @$el.find('.method-signature').popover( animation: true html: true placement: 'bottom' @@ -126,7 +126,7 @@ module.exports = class SpellListTabEntryView extends SpellListEntryView onSpellChangedLanguage: (e) -> return unless e.spell is @spell @options.codeLanguage = e.language - @$el.find('code').popover 'destroy' + @$el.find('.method-signature').popover 'destroy' @render() @docsBuilt = false @buildDocs() if @thang @@ -168,5 +168,5 @@ module.exports = class SpellListTabEntryView extends SpellListEntryView destroy: -> @avatar?.destroy() - @$el.find('code').popover 'destroy' + @$el.find('.method-signature').popover 'destroy' super() From a0876634588c27d6e6a958230258a9c947d0d329 Mon Sep 17 00:00:00 2001 From: Scott Erickson Date: Fri, 7 Nov 2014 08:54:22 -0800 Subject: [PATCH 12/47] Implemented Heald's design of the GameMenuModal. --- app/Router.coffee | 2 + .../pages/play/modal/game-menu-background.png | Bin 0 -> 66853 bytes .../modal/{item-details-hr.png => hr.png} | Bin app/lib/LevelSetupManager.coffee | 5 +- app/styles/game-menu/game-menu-modal.sass | 134 +++++++--------- app/styles/game-menu/options-view.sass | 146 ++++++++++++++---- app/styles/play/modal/play-items-modal.sass | 3 +- app/templates/game-menu/game-menu-modal.jade | 42 +++-- app/templates/game-menu/options-view.jade | 44 ++++-- .../play/modal/item-details-view.jade | 4 +- app/views/HomeView.coffee | 12 ++ app/views/game-menu/GameMenuModal.coffee | 16 +- app/views/game-menu/OptionsView.coffee | 1 + app/views/play/level/ControlBarView.coffee | 7 +- app/views/play/level/PlayLevelView.coffee | 1 - 15 files changed, 260 insertions(+), 157 deletions(-) create mode 100644 app/assets/images/pages/play/modal/game-menu-background.png rename app/assets/images/pages/play/modal/{item-details-hr.png => hr.png} (100%) diff --git a/app/Router.coffee b/app/Router.coffee index c266a23ae..47dadc52b 100644 --- a/app/Router.coffee +++ b/app/Router.coffee @@ -193,6 +193,8 @@ module.exports = class CocoRouter extends Backbone.Router onNavigate: (e) -> manualView = e.view or e.viewClass + if (e.route is document.location.pathname) and not manualView + return document.location.reload() @navigate e.route, {trigger: not manualView} return unless manualView if e.viewClass diff --git a/app/assets/images/pages/play/modal/game-menu-background.png b/app/assets/images/pages/play/modal/game-menu-background.png new file mode 100644 index 0000000000000000000000000000000000000000..5296ff0608e14ab5431b54b67456009ab1c4866d GIT binary patch literal 66853 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 OpVzNc super() - @options.showDevBits = true #? @supermodel = new SuperModel() @session = @options.session if @session @@ -71,6 +68,8 @@ module.exports = class LevelSetupManager extends CocoClass onInventoryModalPlayClicked: -> @navigatingToPlay = true + PlayLevelView = require 'views/play/level/PlayLevelView' + LadderView = require 'views/play/ladder/LadderView' viewClass = if @options.levelPath is 'ladder' then LadderView else PlayLevelView Backbone.Mediator.publish 'router:navigate', { route: "/play/#{@options.levelPath || 'level'}/#{@options.levelID}" diff --git a/app/styles/game-menu/game-menu-modal.sass b/app/styles/game-menu/game-menu-modal.sass index e0167d9f5..f6720f8e3 100644 --- a/app/styles/game-menu/game-menu-modal.sass +++ b/app/styles/game-menu/game-menu-modal.sass @@ -1,88 +1,66 @@ @import "app/styles/mixins" #game-menu-modal + + //- Clear modal defaults - .close - // We have to style this indendently because it's not in the header (we don't have a header). - position: absolute - top: -5px - right: 0 - padding: 15px - font-size: 28px - background-color: transparent - z-index: 1 - - @include opacity(0.60) - - &:hover - @include opacity(1) - - // Make room for an overlaid close button in the lower right (we don't have a footer). - .overlaid-close-button - position: absolute - right: 35px - bottom: 20px - - #inventory-modal #available-equipment - bottom: 60px - .modal-dialog - margin-top: 0 - width: 963px + width: 820px + height: 570px + padding: 0 + background: none + position: relative + top: 40px - .nav-tabs - h2 - margin: 0 + + //- Background + + #game-menu-background + position: absolute + top: -146px + left: -3px + + + //- Nav bar + + #game-menu-nav + position: absolute + top: 53px + left: 42px + width: 178px + + li + background: url(/images/pages/play/modal/menu-tab.png) + padding: 5px + margin: -5px 0 + height: 80px + padding: 0 + + &.active + background: url(/images/pages/play/modal/menu-tab-selected.png) + width: 197px - .auth-tab a - h2, em - pointer-events: none - - .tab-pane - h3:first-child - margin-top: 0 - - // http://stackoverflow.com/questions/18432577/stacked-tabs-in-bootstrap-3 - .tabs-left - > .nav-tabs - float: left - width: 185px - border-bottom: 0 + font-size: 18px + line-height: 50px + background: none + color: rgb(195,153,124) + font-weight: bold + padding: 14px 20px + font-family: Open Sans Condensed + text-transform: uppercase + + .glyphicon + margin-right: 6px - > .tab-content - padding: 0px 15px - margin-left: 185px - - .tab-content > .tab-pane, .pill-content > .pill-pane - display: none - - .tab-content > .active, .pill-content > .active - display: block - - .tabs-left - > .nav-tabs > li - float: none - - > a - min-width: 74px - margin-right: 0 - margin-bottom: 0 - - .tabs-left > .nav-tabs - border-right: 1px solid #ddd - - > li > a - margin-right: -1px - -webkit-border-radius: 4px 0 0 4px - -moz-border-radius: 4px 0 0 4px - border-radius: 4px 0 0 4px - - &:hover, &:focus - border-color: #eee #ddd #eee #eee - - > .active a - &, &:hover, &:focus - border-color: #ddd transparent #ddd #ddd - *border-right-color: #fff + //- Tab panels + + .game-menu-tab-content + position: absolute + left: 219px + top: 21px + width: 571px + height: 518px + padding: 50px + overflow: scroll \ No newline at end of file diff --git a/app/styles/game-menu/options-view.sass b/app/styles/game-menu/options-view.sass index b796029e6..9309d3673 100644 --- a/app/styles/game-menu/options-view.sass +++ b/app/styles/game-menu/options-view.sass @@ -1,45 +1,137 @@ @import "app/styles/bootstrap/variables" #options-view - .select-group, .slider-group - display: block - min-height: 20px - margin-top: 10px - margin-bottom: 10px - padding-left: 20px - vertical-align: middle + + //- Volume slider + + #volume-group + position: relative + width: 100% + height: 25px + margin: 15px 0 + + & > * + position: absolute + + .ui-slider + left: 40px + right: 40px + top: 4px + background-color: rgb(248,169,67) + border: 4px solid rgb(26,21,18) + height: 18px + border-radius: 18px + + .ui-slider-handle + background-color: rgb(26,21,18) + width: 28px + height: 28px + border-radius: 28px + top: -9px + outline: 0 + + .glyphicon + font-size: 30px + top: -2px + color: rgb(26,21,18) + + .glyphicon-volume-down + position: absolute + left: 0 + + .glyphicon-volume-up + position: absolute + right: 0 + + + //- header, horizontal rule + + .hr + width: 100% + height: 10px + + h3 + margin-top: 5px + color: rgb(26,21,18) + + //- All form groups + + .form-group + font-size: 16px + color: rgb(51,51,51) + padding-top: 4px + padding-left: 40px + + label + font-weight: normal + + //- Check boxes + + .form-group.checkbox + label - font-weight: normal - margin-right: 20px - margin-bottom: 0 - - .slider - width: 200px - - .form-group.radio-inline + position: relative + input - margin-left: 0px - margin-right: 5px - - .radio-inline-parent-label - padding-left: 0 + display: none + + & + .custom-checkbox + .glyphicon + display: none + + &:checked + .custom-checkbox .glyphicon + display: inline + color: rgb(248,169,67) + text-align: center + text-shadow: 0 0 3px black, 0 0 3px black, 0 0 3px black + font-size: 14px + position: relative + top: -1px + + .custom-checkbox + border-radius: 2px + height: 27px + width: 27px + border: 4px solid rgb(26,21,18) + position: absolute + background: rgb(228,217,196) + text-align: center + // this undoes the padding of the form groups + left: -40px + top: -4px + + //- Select boxes + + select + border: 3px solid black + text-transform: uppercase + + //.form-group.radio-inline + // input + // margin-left: 0px + // margin-right: 5px + // + // .radio-inline-parent-label + // padding-left: 0 + // + // #player-avatar-container position: relative - margin: 0px 0px 15px 15px + margin: 0 auto 40px width: 230px max-height: 230px border-radius: 6px - + img.profile-photo width: 100% border-radius: 6px - + &.saving opacity: 0.5 - + .profile-caption background-color: rgba(0, 0, 0, 0.5) color: white @@ -52,7 +144,7 @@ text-align: center border: 0 font-size: 18px - + .editable-icon display: block position: absolute @@ -61,11 +153,11 @@ font-size: 20px color: $blue opacity: 0.5 - + &:hover cursor: pointer box-shadow: 0px 0px 2px 1px $blue - + .editable-icon opacity: 1.0 cursor: pointer diff --git a/app/styles/play/modal/play-items-modal.sass b/app/styles/play/modal/play-items-modal.sass index d75098290..5a1d81d3b 100644 --- a/app/styles/play/modal/play-items-modal.sass +++ b/app/styles/play/modal/play-items-modal.sass @@ -12,6 +12,7 @@ overflow: hidden text-overflow: ellipsis + //- Clear modal defaults .modal-dialog padding: 0 @@ -100,8 +101,6 @@ font-weight: bold padding: 10px 7px - //img - li.active background: url(/images/pages/play/modal/menu-tab-selected.png) diff --git a/app/templates/game-menu/game-menu-modal.jade b/app/templates/game-menu/game-menu-modal.jade index 5939a109c..57a2b6ead 100644 --- a/app/templates/game-menu/game-menu-modal.jade +++ b/app/templates/game-menu/game-menu-modal.jade @@ -1,32 +1,28 @@ -extends /templates/modal/modal_base +.modal-dialog + .modal-content + img(src="/images/pages/play/modal/game-menu-background.png")#game-menu-background -block modal-header + ul#game-menu-nav.nav.nav-pills.nav-stacked + li + a#change-hero-tab + span.glyphicon.glyphicon-user + span(data-i18n='play.change_hero') -block modal-body-content - .button.close(type="button", data-dismiss="modal", aria-hidden="true") × - .tabbable.tabs-left - - var submenus = ["save-load", "options", "guide", "multiplayer"] - - if (!showsGuide) { - - submenus.splice(2, 1); - - } - - if (!showDevBits) { // Not done yet. - - submenus.splice(0, 1); - - } - ul.nav.nav-tabs#game-menu-nav for submenu, index in submenus - li(class=submenu === showTab || index === 0 && !showTab ? "active" : "") + li(class=submenu === showTab ? "active" : "") a(href='#' + submenu + '-view', data-toggle='tab') - h2(data-i18n='game_menu.' + submenu.replace('-', '_') + '_tab') - em(data-i18n='game_menu.' + submenu.replace('-', '_') + '_caption') + span.glyphicon(class="glyphicon-"+iconMap[submenu]) + span(data-i18n='game_menu.' + submenu.replace('-', '_') + '_tab') if me.get('anonymous') li.auth-tab(data-toggle='coco-modal', data-target="modal/AuthModal") a(data-toggle='coco-modal', data-target="modal/AuthModal") - h2(data-i18n='game_menu.auth_tab') - em(data-i18n='game_menu.auth_caption') - .tab-content + span.glyphicon.glyphicon-pencil + span(data-i18n='game_menu.auth_tab') + + .tab-content.game-menu-tab-content for submenu, index in submenus .tab-pane(id=submenu + '-view') - .clearfix - -block modal-footer - button.btn.btn-primary.btn-lg.overlaid-close-button(type="button", data-dismiss="modal", aria-hidden="true", data-i18n="modal.close") Close +// .clearfix +// +//block modal-footer +// button.btn.btn-primary.btn-lg.overlaid-close-button(type="button", data-dismiss="modal", aria-hidden="true", data-i18n="modal.close") Close diff --git a/app/templates/game-menu/options-view.jade b/app/templates/game-menu/options-view.jade index f21090004..1fb39cfe2 100644 --- a/app/templates/game-menu/options-view.jade +++ b/app/templates/game-menu/options-view.jade @@ -1,4 +1,4 @@ -#player-avatar-container(title="Click to change your avatar").pull-right +#player-avatar-container(title="Click to change your avatar") if !me.get('photoURL') .editable-icon.glyphicon.glyphicon-pencil img.profile-photo(src=me.getPhotoURL(230)) @@ -6,60 +6,72 @@ input#player-name.profile-caption(name="playerName", type="text", value=me.get('name', true)) .form - h3(data-i18n="options.general_options") General Options - .form-group.slider-group - label(for="option-volume") - span(data-i18n="options.volume_label") Volume - span.spr : - span#option-volume-value= (me.get('volume') * 100).toFixed(0) + '%' - #option-volume.slider + h3(data-i18n="options.general_options") General Options + + .form-group.slider-group#volume-group + span.glyphicon.glyphicon-volume-down + #option-volume.slider.spr.spl + span.glyphicon.glyphicon-volume-up .form-group.checkbox - label(for="option-music") + label(for="option-music").control-label input#option-music(name="option-music", type="checkbox", checked=music) + span.custom-checkbox + .glyphicon.glyphicon-ok span(data-i18n="options.music_label") Music span.help-block(data-i18n="options.music_description") Turn background music on/off. .form-group.select-group label.control-label(for="option-autorun-delay", data-i18n="options.autorun_label") Autorun - select#option-autorun-delay(name="autorunDelay") + select#option-autorun-delay.form-control(name="autorunDelay") option(value=1000, selected=(autorunDelay === 1000), data-i18n="common.delay_1_sec") 1 second option(value=3000, selected=(autorunDelay === 3000), data-i18n="common.delay_3_sec") 3 seconds option(value=5000, selected=(autorunDelay === 5000), data-i18n="common.delay_5_sec") 5 seconds option(value=90019001, selected=(autorunDelay === 90019001), data-i18n="common.manual") Manual span.help-block(data-i18n="options.autorun_description") Control automatic code execution. + + + img.hr(src="/images/pages/play/modal/hr.png") h3(data-i18n="options.editor_config_title") Editor Configuration - + .form-group.select-group label.control-label(for="option-key-bindings", data-i18n="options.editor_config_keybindings_label") Key Bindings - select#option-key-bindings(name="keyBindings") + select#option-key-bindings.form-control(name="keyBindings") option(value="default", selected=(aceConfig.keyBindings === "default"), data-i18n="options.editor_config_keybindings_default") Default (Ace) option(value="vim", selected=(aceConfig.keyBindings === "vim")) Vim option(value="emacs", selected=(aceConfig.keyBindings === "emacs")) Emacs span.help-block(data-i18n="options.editor_config_keybindings_description") Adds additional shortcuts known from the common editors. - + .form-group.checkbox label(for="option-live-completion") input#option-live-completion(name="liveCompletion", type="checkbox", checked=aceConfig.liveCompletion) + span.custom-checkbox + .glyphicon.glyphicon-ok span(data-i18n="options.editor_config_livecompletion_label") Live Autocompletion span.help-block(data-i18n="options.editor_config_livecompletion_description") Displays autocomplete suggestions while typing. - + .form-group.checkbox label(for="option-invisibles") input#option-invisibles(name="invisibles", type="checkbox", checked=aceConfig.invisibles) + span.custom-checkbox + .glyphicon.glyphicon-ok span(data-i18n="options.editor_config_invisibles_label") Show Invisibles span.help-block(data-i18n="options.editor_config_invisibles_description") Displays invisibles such as spaces or tabs. - + .form-group.checkbox label(for="option-indent-guides") input#option-indent-guides(name="indentGuides", type="checkbox", checked=aceConfig.indentGuides) + span.custom-checkbox + .glyphicon.glyphicon-ok span(data-i18n="options.editor_config_indentguides_label") Show Indent Guides span.help-block(data-i18n="options.editor_config_indentguides_description") Displays vertical lines to see indentation better. - + .form-group.checkbox label(for="option-behaviors") input#option-behaviors(name="behaviors", type="checkbox", checked=aceConfig.behaviors) + span.custom-checkbox + .glyphicon.glyphicon-ok span(data-i18n="options.editor_config_behaviors_label") Smart Behaviors span.help-block(data-i18n="options.editor_config_behaviors_description") Autocompletes brackets, braces, and quotes. diff --git a/app/templates/play/modal/item-details-view.jade b/app/templates/play/modal/item-details-view.jade index c45b55134..df048ebca 100644 --- a/app/templates/play/modal/item-details-view.jade +++ b/app/templates/play/modal/item-details-view.jade @@ -8,13 +8,13 @@ img.item-img(src=item.getPortraitURL()) img.item-shadow(src=item.getPortraitURL()) - img.hr(src="/images/pages/play/modal/play-items-modal-hr.png") + img.hr(src="/images/pages/play/modal/hr.png") for stat in stats div.stat-row.big-font div.stat-label= stat.name div.stat= stat.display - img.hr(src="/images/pages/play/modal/play-items-modal-hr.png" class=stat.isLast ? "" : "faded") + img.hr(src="/images/pages/play/modal/hr.png" class=stat.isLast ? "" : "faded") if props.length #skills diff --git a/app/views/HomeView.coffee b/app/views/HomeView.coffee index d3e636cc7..2c68cba89 100644 --- a/app/views/HomeView.coffee +++ b/app/views/HomeView.coffee @@ -3,6 +3,10 @@ template = require 'templates/home' WizardLank = require 'lib/surface/WizardLank' ThangType = require 'models/ThangType' Simulator = require 'lib/simulator/Simulator' +Level = require 'models/Level' +LevelSession = require 'models/LevelSession' + +GameMenuModal = require 'views/game-menu/GameMenuModal' {me} = require '/lib/auth' @@ -35,3 +39,11 @@ module.exports = class HomeView extends RootView e.stopImmediatePropagation() window.tracker?.trackEvent 'Homepage', Action: 'Play' window.open '/play', '_blank' + + afterInsert: -> + super(arguments...) + level = new Level({_id: 'kounter-kithwise'}) + level.fetch() + @listenToOnce level, 'sync', -> + console.log 'opened level...' + @openModalView(new GameMenuModal({level: level, session: new LevelSession(), supermodel: @supermodel})) \ No newline at end of file diff --git a/app/views/game-menu/GameMenuModal.coffee b/app/views/game-menu/GameMenuModal.coffee index a7d517ce7..3ae24628a 100644 --- a/app/views/game-menu/GameMenuModal.coffee +++ b/app/views/game-menu/GameMenuModal.coffee @@ -8,6 +8,7 @@ submenuViews = [ ] module.exports = class GameMenuModal extends ModalView + className: 'modal fade play-modal' template: template id: 'game-menu-modal' instant: true @@ -15,10 +16,10 @@ module.exports = class GameMenuModal extends ModalView events: 'change input.select': 'onSelectionChanged' 'shown.bs.tab #game-menu-nav a': 'onTabShown' + 'click #change-hero-tab': -> @trigger 'change-hero' constructor: (options) -> super options - @options.showDevBits = me.isAdmin() or /https?:\/\/localhost/.test(window.location.href) @options.showTab = options.showTab @options.levelID = @options.level.get('slug') @options.startingSessionHeroConfig = $.extend {}, true, (@options.session.get('heroConfig') ? {}) @@ -26,10 +27,17 @@ module.exports = class GameMenuModal extends ModalView getRenderData: (context={}) -> context = super(context) - context.showDevBits = @options.showDevBits - context.showTab = @options.showTab docs = @options.level.get('documentation') ? {} - context.showsGuide = docs.specificArticles?.length or docs.generalArticles?.length + submenus = ["options", "save-load", "guide", "multiplayer"] + submenus = _.without submenus, 'guide' unless docs.specificArticles?.length or docs.generalArticles?.length + submenus = _.without submenus, 'save-load' unless me.isAdmin() or /https?:\/\/localhost/.test(window.location.href) + context.showTab = @options.showTab ? submenus[0] + context.submenus = submenus + context.iconMap = + 'options': 'cog' + 'guide': 'list' + 'save-load': 'floppy-disk' + 'multiplayer': 'globe' context afterRender: -> diff --git a/app/views/game-menu/OptionsView.coffee b/app/views/game-menu/OptionsView.coffee index 50cf43b76..8843645c4 100644 --- a/app/views/game-menu/OptionsView.coffee +++ b/app/views/game-menu/OptionsView.coffee @@ -72,6 +72,7 @@ module.exports = class OptionsView extends CocoView @aceConfig.behaviors = @$el.find('#option-behaviors').prop('checked') @aceConfig.liveCompletion = @$el.find('#option-live-completion').prop('checked') me.set 'aceConfig', @aceConfig + me.patch() Backbone.Mediator.publish 'tome:change-config', {} updateMusic: -> diff --git a/app/views/play/level/ControlBarView.coffee b/app/views/play/level/ControlBarView.coffee index b89c8b47a..6ce04ccde 100644 --- a/app/views/play/level/ControlBarView.coffee +++ b/app/views/play/level/ControlBarView.coffee @@ -4,6 +4,7 @@ template = require 'templates/play/level/control_bar' GameMenuModal = require 'views/game-menu/GameMenuModal' RealTimeCollection = require 'collections/RealTimeCollection' +LevelSetupManager = require 'lib/LevelSetupManager' module.exports = class ControlBarView extends CocoView id: 'control-bar-view' @@ -63,7 +64,11 @@ module.exports = class ControlBarView extends CocoView c showGameMenuModal: -> - @openModalView new GameMenuModal level: @level, session: @session, supermodel: @supermodel + gameMenuModal = new GameMenuModal level: @level, session: @session, supermodel: @supermodel + @openModalView gameMenuModal + @listenToOnce gameMenuModal, 'change-hero', -> + setupManager = new LevelSetupManager({supermodel: @supermodel, levelID: @level.get('slug'), parent: @}) + setupManager.open() onClickHome: (e) -> e.preventDefault() diff --git a/app/views/play/level/PlayLevelView.coffee b/app/views/play/level/PlayLevelView.coffee index 84385a055..24fa86d1d 100644 --- a/app/views/play/level/PlayLevelView.coffee +++ b/app/views/play/level/PlayLevelView.coffee @@ -35,7 +35,6 @@ GoldView = require './LevelGoldView' VictoryModal = require './modal/VictoryModal' HeroVictoryModal = require './modal/HeroVictoryModal' InfiniteLoopModal = require './modal/InfiniteLoopModal' -GameMenuModal = require 'views/game-menu/GameMenuModal' MultiplayerStatusView = require './MultiplayerStatusView' LevelSetupManager = require 'lib/LevelSetupManager' From eecdbdbe172fa5e0e7a6b75487674f920c09e9cc Mon Sep 17 00:00:00 2001 From: Scott Erickson Date: Fri, 7 Nov 2014 10:47:57 -0800 Subject: [PATCH 13/47] Minor fix for when changing hero from the world map. --- app/views/play/modal/PlayHeroesModal.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/play/modal/PlayHeroesModal.coffee b/app/views/play/modal/PlayHeroesModal.coffee index 1ac095e09..ff5f841ff 100644 --- a/app/views/play/modal/PlayHeroesModal.coffee +++ b/app/views/play/modal/PlayHeroesModal.coffee @@ -188,7 +188,7 @@ module.exports = class PlayHeroesModal extends ModalView me.patch() if changed @hide() - @trigger 'confirm-click', hero: @selectedHero + @trigger?('confirm-click', hero: @selectedHero) updateHeroConfig: (model, hero) -> heroConfig = _.clone(model.get('heroConfig')) or {} From 636a46ff0081bd4acee525cd7b613301850484f7 Mon Sep 17 00:00:00 2001 From: Scott Erickson Date: Fri, 7 Nov 2014 13:05:31 -0800 Subject: [PATCH 14/47] Removed my testing code for the GameMenuModal. --- app/views/HomeView.coffee | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/app/views/HomeView.coffee b/app/views/HomeView.coffee index 2c68cba89..725905bed 100644 --- a/app/views/HomeView.coffee +++ b/app/views/HomeView.coffee @@ -3,10 +3,6 @@ template = require 'templates/home' WizardLank = require 'lib/surface/WizardLank' ThangType = require 'models/ThangType' Simulator = require 'lib/simulator/Simulator' -Level = require 'models/Level' -LevelSession = require 'models/LevelSession' - -GameMenuModal = require 'views/game-menu/GameMenuModal' {me} = require '/lib/auth' @@ -38,12 +34,4 @@ module.exports = class HomeView extends RootView e.preventDefault() e.stopImmediatePropagation() window.tracker?.trackEvent 'Homepage', Action: 'Play' - window.open '/play', '_blank' - - afterInsert: -> - super(arguments...) - level = new Level({_id: 'kounter-kithwise'}) - level.fetch() - @listenToOnce level, 'sync', -> - console.log 'opened level...' - @openModalView(new GameMenuModal({level: level, session: new LevelSession(), supermodel: @supermodel})) \ No newline at end of file + window.open '/play', '_blank' \ No newline at end of file From 75226be77891fa35407e10b6cf965a47c9b4a4d8 Mon Sep 17 00:00:00 2001 From: Scott Erickson Date: Fri, 7 Nov 2014 13:58:02 -0800 Subject: [PATCH 15/47] Experimenting with a larger currently-executing-line pointer. --- app/styles/play/level/tome/spell.sass | 35 ++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/app/styles/play/level/tome/spell.sass b/app/styles/play/level/tome/spell.sass index 6b37b5c8e..9b00c5871 100644 --- a/app/styles/play/level/tome/spell.sass +++ b/app/styles/play/level/tome/spell.sass @@ -73,6 +73,14 @@ width: 47px margin-left: 4px border-bottom: 1px dotted #2f261d + + // override ace visible to get the experimental large current line executing arrow visible + .ace_gutter + overflow: visible + + .ace_layer + overflow: visible + // End experiment.... .ace_scroller background-color: transparent @@ -105,10 +113,29 @@ background-size: 40px 40px @include animation(progress-bar-stripes 0.5s linear infinite) - .ace_gutter-cell.executing:not(.ace_error):not(.ace_warning):not(.ace_info) - margin-left: 1px - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMjgwMTE3NDA3MjA2ODExOEE2REU4Q0M1MTM1MkIxRiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpBQjVEQUNDMzQ4RUIxMUUxOEVGRUUyNzFENDM3RDVFMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpBQjVEQUNDMjQ4RUIxMUUxOEVGRUUyNzFENDM3RDVFMCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgTWFjaW50b3NoIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTU1MjE3RDIzMTIwNjgxMThEQkI4NTlBMjQ1QTEwOTUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDI4MDExNzQwNzIwNjgxMThBNkRFOENDNTEzNTJCMUYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7SazaGAAAAiElEQVR42mL8//8/AzUBEwOVweA3kAWboI2jCyhgDwBx4ZH9ey5Qy4UOQHweaHg/EAtQ08sFUIMDqBmGCkC8HmgoCCtQM1ICoK5toGYsg8KzHmjo+UGbDj8AcSMwORkSnQ7xgA3QtPmApISNBTyAGrSBGl6eAMSGxBhGyIVkZT3G0fKQYgAQYACL+C2ZM6PC7AAAAABJRU5ErkJggg==) - background-position: 0px center + .ace_gutter-cell.executing:not(.ace_error):not(.ace_warning):not(.ace_info):after + + // Experimenting with a larger executing-line-pointer + content: "\e072" + position: relative + top: -31px + left: -39px + display: inline-block + font-family: 'Glyphicons Halflings' + font-style: normal + font-weight: normal + line-height: 1 + color: white + text-shadow: 0 0 5px black, 0 0 5px black, 0 0 5px black + font-size: 39px + -webkit-font-smoothing: antialiased + -moz-osx-font-smoothing: grayscale + + + //display: block + //margin-left: 1px + //background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMjgwMTE3NDA3MjA2ODExOEE2REU4Q0M1MTM1MkIxRiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpBQjVEQUNDMzQ4RUIxMUUxOEVGRUUyNzFENDM3RDVFMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpBQjVEQUNDMjQ4RUIxMUUxOEVGRUUyNzFENDM3RDVFMCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgTWFjaW50b3NoIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTU1MjE3RDIzMTIwNjgxMThEQkI4NTlBMjQ1QTEwOTUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDI4MDExNzQwNzIwNjgxMThBNkRFOENDNTEzNTJCMUYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7SazaGAAAAiElEQVR42mL8//8/AzUBEwOVweA3kAWboI2jCyhgDwBx4ZH9ey5Qy4UOQHweaHg/EAtQ08sFUIMDqBmGCkC8HmgoCCtQM1ICoK5toGYsg8KzHmjo+UGbDj8AcSMwORkSnQ7xgA3QtPmApISNBTyAGrSBGl6eAMSGxBhGyIVkZT3G0fKQYgAQYACL+C2ZM6PC7AAAAABJRU5ErkJggg==) + //background-position: 0px center .ace_gutter-cell.executed:not(.ace_error):not(.ace_warning):not(.ace_info) margin-left: 1px From b0533850db7b3473271a73d4d9e2441837178431 Mon Sep 17 00:00:00 2001 From: George Saines Date: Fri, 7 Nov 2014 15:29:18 -0800 Subject: [PATCH 16/47] adding matt's avatar --- app/templates/about.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/templates/about.jade b/app/templates/about.jade index 147969ecd..a300bcd70 100644 --- a/app/templates/about.jade +++ b/app/templates/about.jade @@ -111,7 +111,7 @@ block content li.row - img(src="/images/pages/about/placeholder.png").img-thumbnail + img(src="/images/pages/about/matt_small.png").img-thumbnail .team_bio From 5090a47afca8688c84cb4af1c616394dab643f9a Mon Sep 17 00:00:00 2001 From: Nick Winter Date: Fri, 7 Nov 2014 16:04:35 -0800 Subject: [PATCH 17/47] Implementing more of new code editor design. Removed ThangList, EditorConfigModal, and a few other obsolete things. --- .../button-background-active-border.png | Bin 0 -> 4308 bytes .../common/button-background-active.png | Bin 0 -> 3539 bytes .../button-background-disabled-border.png | Bin 0 -> 3828 bytes .../common/button-background-disabled.png | Bin 0 -> 3194 bytes .../button-background-pressed-border.png | Bin 0 -> 4217 bytes .../common/button-background-pressed.png | Bin 0 -> 3739 bytes .../level/code_editor_background_border.png | Bin 0 -> 34338 bytes .../level/code_editor_top_bar_hinge.png | Bin 0 -> 1783 bytes .../code_editor_top_bar_wood_background.png | Bin 0 -> 26055 bytes .../level/code_palette_wood_background.png | Bin 0 -> 66395 bytes .../images/level/code_toolbar_background.png | Bin 0 -> 7799 bytes .../level/code_toolbar_run_button_active.png | Bin 0 -> 4953 bytes ...code_toolbar_run_button_active_pressed.png | Bin 0 -> 4858 bytes .../level/code_toolbar_run_button_zazz.png | Bin 0 -> 5398 bytes .../code_toolbar_run_button_zazz_pressed.png | Bin 0 -> 5304 bytes .../code_toolbar_submit_button_active.png | Bin 0 -> 5333 bytes ...e_toolbar_submit_button_active_pressed.png | Bin 0 -> 5311 bytes .../level/code_toolbar_submit_button_zazz.png | Bin 0 -> 5588 bytes ...ode_toolbar_submit_button_zazz_pressed.png | Bin 0 -> 5595 bytes app/assets/images/level/hud_hinge.png | Bin 0 -> 2197 bytes .../images/level/thang_avatar_frame.png | Bin 0 -> 4778 bytes app/locale/en.coffee | 3 +- app/schemas/subscriptions/tome.coffee | 3 - app/styles/base.sass | 47 +++++ app/styles/play/level.sass | 1 + .../play/level/modal/editor_config.sass | 12 -- app/styles/play/level/thang_avatar.sass | 6 +- app/styles/play/level/tome/cast_button.sass | 123 +++++++++--- app/styles/play/level/tome/spell.sass | 45 ++--- .../play/level/tome/spell_list_entry.sass | 67 ++++--- app/styles/play/level/tome/spell_palette.sass | 86 ++------- .../play/level/tome/spell_palette_entry.sass | 29 +-- app/styles/play/level/tome/thang_list.sass | 22 --- .../play/level/tome/thang_list_entry.sass | 38 ---- .../level/tome/thang_list_entry_spells.sass | 16 -- .../play/level/modal/editor_config.jade | 55 ------ .../play/level/modal/keyboard_shortcuts.jade | 2 +- .../play/level/tome/cast_button.jade | 12 +- .../play/level/tome/spell_list_tab_entry.jade | 30 +-- .../play/level/tome/spell_palette.jade | 3 +- app/templates/play/level/tome/thang_list.jade | 14 -- .../play/level/tome/thang_list_entry.jade | 0 .../level/tome/thang_list_entry_spells.jade | 5 - app/templates/play/level/tome/tome.jade | 2 - app/views/play/level/LevelPlaybackView.coffee | 3 - .../play/level/modal/EditorConfigModal.coffee | 92 --------- .../play/level/tome/CastButtonView.coffee | 6 +- .../play/level/tome/SpellListEntryView.coffee | 1 + .../play/level/tome/SpellListView.coffee | 2 +- .../play/level/tome/SpellPaletteView.coffee | 10 +- app/views/play/level/tome/SpellView.coffee | 6 +- .../play/level/tome/ThangListEntryView.coffee | 178 ------------------ .../play/level/tome/ThangListView.coffee | 95 ---------- app/views/play/level/tome/TomeView.coffee | 18 +- 54 files changed, 278 insertions(+), 754 deletions(-) create mode 100644 app/assets/images/common/button-background-active-border.png create mode 100644 app/assets/images/common/button-background-active.png create mode 100644 app/assets/images/common/button-background-disabled-border.png create mode 100644 app/assets/images/common/button-background-disabled.png create mode 100644 app/assets/images/common/button-background-pressed-border.png create mode 100644 app/assets/images/common/button-background-pressed.png create mode 100644 app/assets/images/level/code_editor_background_border.png create mode 100644 app/assets/images/level/code_editor_top_bar_hinge.png create mode 100644 app/assets/images/level/code_editor_top_bar_wood_background.png create mode 100644 app/assets/images/level/code_palette_wood_background.png create mode 100644 app/assets/images/level/code_toolbar_background.png create mode 100644 app/assets/images/level/code_toolbar_run_button_active.png create mode 100644 app/assets/images/level/code_toolbar_run_button_active_pressed.png create mode 100644 app/assets/images/level/code_toolbar_run_button_zazz.png create mode 100644 app/assets/images/level/code_toolbar_run_button_zazz_pressed.png create mode 100644 app/assets/images/level/code_toolbar_submit_button_active.png create mode 100644 app/assets/images/level/code_toolbar_submit_button_active_pressed.png create mode 100644 app/assets/images/level/code_toolbar_submit_button_zazz.png create mode 100644 app/assets/images/level/code_toolbar_submit_button_zazz_pressed.png create mode 100644 app/assets/images/level/hud_hinge.png create mode 100644 app/assets/images/level/thang_avatar_frame.png delete mode 100644 app/styles/play/level/modal/editor_config.sass delete mode 100644 app/styles/play/level/tome/thang_list.sass delete mode 100644 app/styles/play/level/tome/thang_list_entry.sass delete mode 100644 app/styles/play/level/tome/thang_list_entry_spells.sass delete mode 100644 app/templates/play/level/modal/editor_config.jade delete mode 100644 app/templates/play/level/tome/thang_list.jade delete mode 100644 app/templates/play/level/tome/thang_list_entry.jade delete mode 100644 app/templates/play/level/tome/thang_list_entry_spells.jade delete mode 100644 app/views/play/level/modal/EditorConfigModal.coffee delete mode 100644 app/views/play/level/tome/ThangListEntryView.coffee delete mode 100644 app/views/play/level/tome/ThangListView.coffee diff --git a/app/assets/images/common/button-background-active-border.png b/app/assets/images/common/button-background-active-border.png new file mode 100644 index 0000000000000000000000000000000000000000..42dec5b5ad7124927c7ac6b353c70e37fe2c972d GIT binary patch literal 4308 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 BYr6md literal 0 HcmV?d00001 diff --git a/app/assets/images/common/button-background-active.png b/app/assets/images/common/button-background-active.png new file mode 100644 index 0000000000000000000000000000000000000000..aae72bb00530d9c6bcde8a2f4b09cafe3df5e6ff GIT binary patch literal 3539 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 D#IYcI literal 0 HcmV?d00001 diff --git a/app/assets/images/common/button-background-disabled-border.png b/app/assets/images/common/button-background-disabled-border.png new file mode 100644 index 0000000000000000000000000000000000000000..dbbe537cc1783c1f53836759470496fcf4aa85dd GIT binary patch literal 3828 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 J-Cz}v{2zlGkE8$q literal 0 HcmV?d00001 diff --git a/app/assets/images/common/button-background-disabled.png b/app/assets/images/common/button-background-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..78fae85390df07a844e93b37955ec2e72dd194f6 GIT binary patch literal 3194 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 O28{L1(06s6LjMCh=Xw4B literal 0 HcmV?d00001 diff --git a/app/assets/images/common/button-background-pressed-border.png b/app/assets/images/common/button-background-pressed-border.png new file mode 100644 index 0000000000000000000000000000000000000000..d9c173d649cfad6c074b4c7df2fa4f94dda2f0f2 GIT binary patch literal 4217 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/level/code_editor_background_border.png b/app/assets/images/level/code_editor_background_border.png new file mode 100644 index 0000000000000000000000000000000000000000..9c860168f6de0703879dfd4a644133d691317c3e GIT binary patch literal 34338 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 Kp$Y+A-~Rz4aN4&3 literal 0 HcmV?d00001 diff --git a/app/assets/images/level/code_editor_top_bar_hinge.png b/app/assets/images/level/code_editor_top_bar_hinge.png new file mode 100644 index 0000000000000000000000000000000000000000..852df87fc632cbd95b3751de9e63a222eb2beeba GIT binary patch literal 1783 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoV!3HEZYr9GSDaPU;cPEB*=VV?oFtCVchD4M^ z`1)8S=jZArrsOB3>Q&?x097$C*i={nnYpPYi3%0DIeEoa6}C!X6;?ntNLXJ<0j#7X z+g2&UH$cHTzbI9~RL?}uK*^3vK|#T$C?(A*$i)q+9mum)$|xx*u+rBrFE7_CH`dE9 zO4m2Ew6xSWFw!?N(gmu}Ew0QfNvzP#D^`XW0yD=YwK%ybv!En1KTiQATTy;4IA97A zi;7c0jFq<+|;}hsL3e^lbs2fjHDG|vW-55SHTGk z67R5Zz-g%~ZcCx&BD5k|3X$`~8A>jMj78FlYOIxWQEFmIeo;t%evX|ZDAOqfWaO9R z7iZ)bC^$PS7#SFvC}{X5CTHe>1U13_N70029w=>C`4?pZ!#fd_JM0W?^fAPs>TUEv zSqCXALGmeB6qr%%xPUgnGQAzwt@&&-85o%QJY5_^Jb0IeIOYpEiqvgTaC&iVOU$m9 zW|Ip%Vjrr5)2t61 zTIBcX+uq90d*7ekQ)@gi!{k?&nzC5;-l^L*rcOwdDB87Y-JFmU+j1M_`;T9}nDIqz zSJ9VxhU9wT+gaOByxpzja@pimiqR3PoHbKYEM$bHFTDQR_hYPyzQ%t8|CJ$Gr}Wh) zdMr8h?NE_wuxIDe&7U{#WZBbEbvg6xmE)|EKc1g$^-Q|;R`K@RZ5`*I7KLbtWc>eX z_i~qB&AQh?+i&wen!fMjAr+y8LNjiwiSl=se0ke(?Q1C~r?=Dg+h3iR@ov4hG^o>R zZlA{7%f&SdqN47vlvwDwqx#azEiY<+Z}&a^H2KmZsjqkUEpR;R8NXX|?jh^cwrSlL zZ{|#!(bN9CvW{uq=cov2eVb16FEg6gt6Ze;@DMo0b~5HcmL!e7EG0I+pX(IqcMg z_D)%{#_SC<FVdQ&MBb@058Cpr~m)} literal 0 HcmV?d00001 diff --git a/app/assets/images/level/code_editor_top_bar_wood_background.png b/app/assets/images/level/code_editor_top_bar_wood_background.png new file mode 100644 index 0000000000000000000000000000000000000000..15d625b08c6b117b9f220f25fdd875b2215a7acc GIT binary patch literal 26055 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 v`2hTD_IT(3-U54Pe;~ literal 0 HcmV?d00001 diff --git a/app/assets/images/level/code_palette_wood_background.png b/app/assets/images/level/code_palette_wood_background.png new file mode 100644 index 0000000000000000000000000000000000000000..dbdda5af6bc7c2c09ef3a730af08e2598cbeb99b GIT binary patch literal 66395 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/level/code_toolbar_background.png b/app/assets/images/level/code_toolbar_background.png new file mode 100644 index 0000000000000000000000000000000000000000..f05972b5c2a14cc8283ad12927e8b5e51b644d5f GIT binary patch literal 7799 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 XfT>6aVf9%<|AkLYNehy%VCwgOV%0o= literal 0 HcmV?d00001 diff --git a/app/assets/images/level/code_toolbar_run_button_active.png b/app/assets/images/level/code_toolbar_run_button_active.png new file mode 100644 index 0000000000000000000000000000000000000000..ff3748d39ffe6b1c8fc2144d89dc343ca3a561f9 GIT binary patch literal 4953 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/level/code_toolbar_run_button_zazz.png b/app/assets/images/level/code_toolbar_run_button_zazz.png new file mode 100644 index 0000000000000000000000000000000000000000..8b0e94225560ac212982f62ea7923d2761b13b7b GIT binary patch literal 5398 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%0ADUT+)`3=B+C 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 c_K#CRLQKD7}Ovbds0^2~9*PQUno1dQ%Y)A#^DT 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/level/code_toolbar_submit_button_active_pressed.png b/app/assets/images/level/code_toolbar_submit_button_active_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..100f085f48733d63d15d85d05299c33fd3e833f9 GIT binary patch literal 5311 zcmbVQc{r49+b2uPmaQydjI}4s*v%Lz#xi9KPuap4Lt~k-%rJ@;TSc1eWJ`rYBpG`` z$yj0xS+h%a*>~^gd3wI(c#rq^j_>~CzOQrpoxk%uuj{^#<9=XnYRGw9_&5Ut11G`= zZo$C77)W1hv9Z$c857$J^oI~$-x_a;bHxWBebEdTTyV~40KyCDhPFT>T>^b5Xcz+n z6A@!&jkh*2hN5s@ipWDBMWUBCJ(__5rbF~bqCC)efHT?+gVhEuR@DLl7#D5eRW%c^ ziMJm5I>zXRFWT~ksTJym2MXc>)Hw%$5utPdFEkzrAbNRX{h&l`;4fS#eSN3~0Rg{U z@E+R0zerh|m;>~1zG#4&qM8B52?BwDz{((HWd*v2f?psO zk0dH!{Um=Qz|npvUyL^%gTn$25s}U~0$v+PXZlwOUfw1q{{UnC{%#b#WgsHb8>FNN z26=fM*7eKV4{w3~FB<>W+s`V{8x68R`{4+_DEd5HC4UFgd-tCc9Xit4K+SwH^r0X< z;W!k*3ysAi;MzdCMbQQ00!1q+ySi#XAPUY(Y7hlg4RvJ&h>D7)f`+=fiYr7}MNLIn z<2TN~i&utg(z~v!siq57Q&Q5WuT<3_>KYgHR8&=T_4GA=$0D$PcqA5u{+$~`&;56- z#(#{3>iMFPc$}{l4(IuM7noni;c#rUIL z41953fM1=4V*U+_|62$Cig)?{b`V4-1v=a=|84vHR?+w5;qsruKo|ZwPG~Is4EfRz z%b9-37Yqz1z9HZjtcd+{*KA0qdkE)B32W-w>=dB|ev^wAN!VpB3n}%`JK0!X=N_jV$L^?T8hwQa=f8`iTik_#I%Ni^wvt}>^}P| zRm14>#|6f{sZHP`1QWTT7JzYfYnag1D-r!`S(iG0a=bLa-Q3qs_K|$M)m2EQ6WfSV4pwC7LBUF@O!S<94#{`-|XZVJO~oKHD$MQ zVv}dnfem>=_fFz{rSQ|mM_ay`d8`cJ3n1S5fypG4u$ ztkR%kffsJ8!_%WG4Ym`)I!fUF{8?Q7w5f=(K{+4AkqXSCNCNb^=Qn&GusU}!H&eFx z1ZRdZsXgzgj{*Ne3TR08*+J<@;m5loh>)T$<>1>}BMkxYA0%wg=va%2xty){R^#ac zP$}H7E0fIPb8?VqJ>)AdWzE2c`1;la@z$t1LSkk6W0Z}PZ8GlD6l6vW*nXm?qZG)! zsNX|lE1I{C?HKoC&eHn+i175>)+e34lMXjGj>PA26)38YHb?Ib=%XQhOG)A8dJW z;}JKu1=jLljnbsq{$lpBtj@t?thYaZ;b3w&=vHZ3BU%UWjWmLv~+R` zNiu6%#puumRV2oy}6My(e^aZYce5%+w4YyA*B}VRd!W zn)-SOU!&I}q&%$7g1El}V3b3N8X7O(k;r84UpuBNEKsIn%d=(`;TZg#5x!r$zr{o( z^Cx9)gIaFNn?aVw7TcoyyF~@4;+=t)_oVyV1?L(hi;gC4m28Mdd37%OH8Dadaa=Fo z!WN4_ySNF zavOil;g*M(j1WJ1y3tdXmrBtSRLdWB^|>u*Tf0UQ>cSbC`^QH09Q*+8&I~WsNk6=0 zmR|JX^P+<8&HUQAo9 z*@px5?3NW$Jb&)fD?w=L@+0@^HVW%yYpwZ*v>_t6T}pO_Mp^fClRvCn&o7w(sNPqg-53%f|zeNGrT zT0Qdp>-i>C_fQ>fIsJw0pS^|mm`}t7@f-mu`tdzjq->Wwunb9PGm&sSRcN-cz7kfH zso2oH#Ukgy7YpB3MQn{k5tPcZ8|%2of<&cX+QU~>`?fnpR=l^Xfq|#UcJIOFpCXwa zKG%<(uylOY_GDf=e#w;gIdIcQpevm@S$?vdclXV8IMM8-b$4GcgQ`|sMLdD&xdJe7 za=P%LT_0bZsk*gknr^e1 zj5ud>kHzp(ylUDBgDrbg!O1s+0ZB<8%`FM)8LC*k%!U9|%8_MYL0>sA?A%BA+N*>X z=cdQN=C&&yb1jaz#>PJrQrH~t%0yH0PYt2(IZop3rEbqPovoV^Xa+~`nA4CF?aY}h zz;)Q;o3TFx`e?c5FvN>oqg|ZCGlb%hM7!+t5l zCsb~=+9_tK_WnF9s5vu^EclOgQUrl~g*B>!LyEe@5X)14+|<=Xp1jg?eT!{_~X zWg{3}uEile7V)~L0N8@Hp(6&N6O7o}fnabFSGHM+6i-5(6uk0C_859LbrRm^8 zdX6mctafK}O~{fnlfjo5I}>?mc!um^;<$S`MCzpeT(p~L@{_am2`VezwR_BMmu?@r%st!IuJqyTw^5xBOi|ZWN;*kmRxr?k#N!Hahj7bg|cWIVt zQri}J2Z(dskGUudJ{$}0sAtMoejX26Nnfc?=JKm<60+dpsZq4wh&-B}%?4{rdA6e4 z7Sk#E`UHsud60Z+PRCYDOJzVMV-@k#|5jxMj}AL$%7ci9GaAR>MH_tG0X)$wJ|}`t zQff)l_ii+%ldg;mxp@TpzBQq4R$BCa0SM9FXYrhkDL`}QF@&!(y>R1>RhoWu?M>%K zH&#!NdGgi!r)@nse%(J;9iDyy&5jV5mZ~Ja_O#CT2Hm91)(kf#d@KUW>qqKxsWy1g z$UwwyiGtrtYIk&wX<=m@%$WW;b6TS&0s`~&2prGkBjvGsQSHd!Kvw(j?!BO=uFDtM#G-BEjC zp9eTqCUxyW+Nesi#qE~|&gX^8tdyUPk8hm(v};J}qW*mA<@Z6tq80EkALRdfeKeLbi{dLxgRI!YwvHz6Gt!19vPWN1_jiWhf2m;z+HaBezVzHgEY4yf zpwv=XxSv+a;_;&tzI^e5rNL!hp_tU77)P+Tyf7?>=eiUEnS5bgjrWCk1vR?T^i6!x zE#_Rq@+V2zMu{Dm?T|YMQ&ZfH77mGv8jX1{{%>}bF=tlq6&WvElp1BYys;rA>EH_9 zg>zZ%6v28!Xi0x`)W3Xlm#gEOUH%(yv^$V3BkUmGtmmnf&yCAA7N@$5tmD0Toj(Jc z@qm}<7F-^J`#EmA?U^Z}2K$-L+t-}H>kPurB+)(LkL#RHgT9KiiOidBup^!B>02aY zFOv2(23;P;q$h+W(O++mw4ClQ0P8gHBvF6Bc5T9ds<##GQG#9i!Wx+4PeG@YoXbK> zKRBMd+@aRiGID+AY~4tXxO@plQ{#}kzVm}mI5f12wd1`2PFO8yL1ggtL%uMEgiW5A zPBiwo!O6#|2M)vHYXf>`mDkL1s+b(V{lKf&3$FzCklRwPqp|KMbC`Ja&%}TQdCs3Y zn0@5LG;q0bgSj*J0XnB{Ay?n-=XgLzFJQO1`1NA4&sM(tGt`tou$cZGUmh=a(MwSk zdVQZ&0sYbK0+|EL&?idQ-FZwG2@*(twQlxmpDL5Hf|F!Y51~uFIl}g;2toU{6T^^# zrpl!As7!O4@$dno2&J}Q{_2vB!0Uk@{0VQb-zg z?`W>me0tQ3xwg1_+w%iROj)M(tXNTjV*{xKWjjm)Q$5?F0%u;hR}kCC#>K9!G-^a z!Ktlx2M*Hd_88gDp^C8j_o9fmCcN?){n_K%_0gnoM65KPT$6i2&{b#;ZOo36IcJr7 zwB7RiW&dmOjAgaBKRGZi=HE|SMolOkDe|uz()JuLwJlxEn__91e73VgRm6Z2iw>0RIBqyoxbGW@GdN4Fy6PPbAmhtJ1@WCHE-+78jqSDkG6gCd~=#SHSDfB lP}?mQAWj2%?bb3dG5i@~2dJtfB^~}!MChBs3w51B{sohS-XTvs0fpR$jd7#LZt5p+JfUkl^o0 zMEU_e3Bvy{XkiE_Jl2bd#d!*zFd}c^e2A(5iqgN1;NfLp@NZ&I!rzIaqzvST^a4R- zz#tEglXLy?CJ;?A|0Cl+dK1k2y)YnC3<2kZM^WnGB>WGUlDq#N=){qtM%f6Dr4$9} zu7yMScwjt~9LibV#EMJr<0>D=!OG z{Dk-ArNgj4JA2wn1Z6ZrmUQ-hNiaCKUiH)0ukwn!u%5(ONsqA zR^z{7l{N7gBoT)lUH91%xw!FdU4YW}IZpo9Suh4nnylsqZaU+31s;IX$c zXdOJxL-0?gm9hUp#s4h>f8o*p-wc8%qCh9@^1s^WpDjvHo=pFJ87PZ?Unh(wxN+_3uftYtnsV2)EOnx}1oh$3OqsZdukhT2?V) z_vUNA+U()nXV{Nw=N014QvB`8_XFj#MYUH{57SoydiF92xbaMrn?BVfK^e$n;ax6|X48w54u+FJv{hglyQde(u zz_P3n+?iltX&5{G{=PsG^VaZo`9bUFhpU=TLRUdobW08LMLr`V)ueDX1?L24AG>wF zd+j@_=rB2w|FQB*fPjDXCqCXw8I{eCl(mj-_t9-k!}*n&X(rVhfOQlq!Mod0@4&ZgY{m~MP9YS z2AI0ed3UsneN={d>3{wy*sWz&0gBo#A2CcCxg9A2NH4q?`=HwdQy>+y!-+L1;AGRF z`p!47lE|hosykQ%T2?HJqK~tU^gNoK5wDD|{F=mkq#;5G5gvJN@qMV%Qmqw&`#hJd zYU6Xj9&<#j2Yk>&{}5m?Ebo1I-vnau82eZdEX4CMn5(Jc=@S>W61?%lOUi)IVjtUH z&cx-;^_uBMzQjBF>&`Wo$PPNozIqh{o-dg&o)1GUpPkRCqIoxVKVpq@YMl9bFZqeV zlsIn4a9op+(C>s8k)_~b*4A*N4h^!{dJn3`S*XOZbIU|&ZBb6~45=$lNV=$o zH_e(yH6{=(mh|C49x6vom2;=bH~T%U+WvllqwDi;iSq2xuYPVwUZ9h>5R)c+rZkP2 zXcsA4P}Zs%_)~a!wVCjEV!*+Ye(x#m{6pICQw{m@?HF%Zi6*}G{vvTw^$lpM`|!c? znM{KutJ|-w+3rs?EjUMo?Cb>fzAyU?;o7^VPy~xN62I|m*tWpzi%^R9N``uNt_PHt zUtev`SX(i>rMd&%QHoP5xTuB`58q#?LRcP=-!a!kBrog8)!po;Z>yZB=ZLj<%{6K= zcbvevG?`(ueCk6Lh=yDz3?a8>@`0Lrj)M4Zuee5jRe&$mmay3$n|~_2i^9ENnsCR; zM^5Kzpbvx3G^e)zx~)x3M`PkgnyFPP&K0Lsx8`D9wC*C%tObEzaJTiA(qzVd)}77o z0e{t&S_GK*vQfgrr9dp*QeX}WUg+U$>_XyDJSWG{|$PGq5sqD`6L z3TO8Cx^z5;K1ugb4;E#b`0#Yz((X+``S@6~_}n1#wRdWlfi~2GN}OwECNg-qvt_B!9=c^e(Tm*iFCReTSBfW_H~lx#cXmss0` z;!}Ktm>mtxrp=Bv+BnQQ*_Z6{hSk4}W6?TGRd873$Bo|Muk_z7D(#e)FP^)y6NiG% zl`r3D6SGaO@w!S4QnxnKb+Ie?k$z#~!rp^&H~bc~Ib(c2@Y(p-eB|hOMp|{Fv$lmB z0BetCyGX3QYt;a$0)vT$lHOki}sH$x<$%Lhu*%Vv+T5J=Z~AMg$4PLG`|vj_n@x7U)uf}KNv~aFhN|(byW8hK z2pK+fzhI}z@c}MtN|UeFu5V;Mnk1{K6ok32@Bj14^I=t-xKGYW%m+*4E1$#2sIhkn1*vtc=(b!K>vTSck zO?^YKqORfRKk}2JRfK$*|?=9s6I4ApNH7A1QYq6-hCR=x%;kk5k(n3aMedLY|jk?(P!b zv%Wr8dwp&mxhM`FimhisObvO^k-kkohcFHfUZQeBmd4fzi~0nx2AQ`mXz4i72j=oF z=+o-kVT`UFkjX}>+-Q_fV>%DUfjhb&rHps7%mGsMg#uBVf%6{>rL zCzEg6JsR7(wc4K~{e4&#tL&X#0i z532U3b<1bn>}2U1xV7(c6ot07#5)-(@S03Ka`)NpD+zjOfPq%<(u$rZA=J)b*BkrAkgm*B{`V7)jDR(yQl~V^v7tE-0&i8~Z2y zbYUO~tY02gM_|ZnWwz&uK&ER?QN}bePXAfq#?QUt+d8445AjSe;6r27zd^R4jUN~VZq^U4=CP~05UYLpRe3| zUz>P>wgL2j8A)&3WhpW2+5Ow(^cFKDP{?@tlQq}L`Us#$(K5qw5-dMjdkhj@W|pPV z!O;q4ob*X5*+Y#@2pZ*}xg*wU|FB4($bG=2Jw~zc5Z;M>Mo3U3tAN(y$(dhTjHq6{ zUZXfHe(Z4pm^uKq1_}Lo-Fc-tYE1C!Yez zxiE?KOLj9JuU$5>-dZ*X&zNy4xSuD@!oQswA5mO>8DKets`}XO#cvJn6&pF|9heEb zfk-dN%r%L8mfG3NZLrxsvlsB0OJnL%*vQvvV^8aOhhFy-WyZZ*c_#8-qFxd!jYZ1u z)Hoy2>(1rR3X!N9(ODKit~F_pY%SCZ)WI*B1(u^oS%)3@7jkV%=$k-BGwI5S zZ^5}~6h%iP46)uZVaFs)GKL09WUv%OKv z(kA28=+G1FYA35Z@=KPCwi`ItV;72Olg*O1Ewb=Ig3rbjHke-;JG5U|m!*~4&psYi zTKYaneZ`Z3GGpN zyA)Bqe6c+A<;;PiWFV~XlcN*Rd1$hu#*K7soFg1qblU4yp<^AZ?{?(GM+*ao_Q_eA zKHvGHboIIE+t2q8+a4#!0yaIfcF##?KekZW$Ta!3PrAY3-OLCO?0#a=SC(7FD95UO zE%C_zQ$i?b6=q~D)s>n#cZ23s`BTN4L1RfdDzB{(EZdoi*Hi{qH|wv0)Zpjm&FD=# zSX+Ln^~85OaDUdk9{7O;Bh4A@qRp;LH@!BMCX%*!d8c(ry;}a2UYj|tNIc3x631uQ zlyhvr3osh0#BBBNlodL!wFsXE_YJS;2ZQ*iRteT3U?udUY6-Jmn7 z`Wfji-(%iK(ZUg8wv92}(@s4~E}SN%O8eY`hcg~8;}4T1M!=n(&OK-*Z}BnZ%%zFJ6@x~ICKdIiYkNeihG!x41E1#`RZo5&9j0b_Mlfg z-9tK#ZXsXhO65+&_a;Wct2aMi*!#@Mp;ldv(S`0&OBbTJz)7s*Y3F zHO0$%JAUZ_(jHdz`T5xMnkJq}{W_a>7j*WP6`DRBXr?tWcGzpfgasWRW+Rw)_4S|kB)=UMb8_={HNo`n9_u4a&R z<-!{gwjtY3s&i~;ASA9SB-Hln{dz8s(N}?VJEaXg->$QdcPXnCy}-7;!C=gN1AuGr z&}n7IG^x8~n)utpbUYDOwygyS8`-E-JmOG8^0&rpEEt?xHMQw2=#!8%1awW_i9}nXj!SNDOpQrYwM$P^zF49v0I62Rv;J_GWe-_HF}VZJV~n!9@~ zZwGRK+WLB!#;*N6Su{!i;|mWVm9KZ+J-<0DD(3pmz_4Y;tz2|oInCc`Rb(}#V{_5m z-#ZSnXT=j75GdTRsW5lg5EIUCgWEP0{+K%v7o0tU^n20c%hGA4knLN4*4$*$c!OoG z>)C}CWIVHndHBNMUOU%Nh3T{AvEePx4sC7rzL!3#9-}v3qhBVzWFeXuNsSkY#7foo z<&kYQP(AY+?#riQ-_KwJth~BC((TaE?!{p1e!1#rAuOFSw6X%V1^4nQ{40K37`a-w zKE{R6N>tA{S7>U)AMkU{y}^rfaTgEZugNi%uzL`pSv>&*dr2xH!_MFOA@EhsgQkao zKt#R8z8rYfvzii&^u=~~c6OXjyPcgBpNDSLlaBR!UhzeN_cej5PGjlla6!*l-?ETHaduO z5a~q`(9os5c+Nfdy&reH@y6Rf=3aZvIluX>S;p9V#~SKu(o(Zg0{{S8Z7nrp0N@W_ z;#z@{oG9~Ff9()&tXOpmtO>>m>jU>h0#qC^4oGfoG~5|!jD$P-KI}u@0RTwwC{qip z1x!yKfkBJGf7^)R(H=x^0N{=?-UE(sMPj)fkj^M~Mc{60Cy*QEs0cKdf`MTkP^1e= z%g+;O;-_zl@N-4TIRcfHxbNWQi2!IM7S4@FySaPG;}wB_;mQ-&zqdg^?!Qd1u8P3F zNm;-QxuF? z{(Y{$ti7>ohZFBV&cxjP?}2_B64}Tbc%q0!fxD?; z5Z-8{J62mw5lGaCIieipk>U_1CmA_8Q3r7;IZ;U&X^5ztgoLc9jI^|blN>}sN&+JD z56*w`hp5RCvknDIse+}%#nmNMWhJHLq-9i~5|R?CP<7dVe6`)ZuyA(-@}Jl!V(h00TL!p0Fom&V7N1)t)Z{GS{sK3vxhV(?? zkd7Lj7&P}^nU+WW2NwUg4E*iy`2Woyh)4?byIuZA`~0&-?8)EDe-8uk;oswgbSKV` zCvjL9Hd`tI0QwVcH5F6*?Dt%%B#sH+p3XckXB-Y^-db_J;!`XWRUd;uy~91jLHLjN zHx-8A8EB6F>-=Jj)C#!TTUVZS;Z#n#ka6|#Hr1&@aeS!`6y|V5TnJ;oMSY1>J>U;j zho;v1+Wv#{V`I6yTS1t0n8C=7%gEQ!qY6I-#X#7R|H9E_$I-8$O6iYNw2$5ih|nQs z;`tw!#H^8t_}8{w8B%A^rPL+WZMB$+egBT2AQBARSs_hVe*5GtB(j9t*2}@yy3MKf zS=zRxh_8L-ULvhULfl$K1XnU$mDjf5`G=v@AJDX-A0Qc29jt_JcqvLr*Qcr>f-bzL zY36di0R(hH`Q z3uD{>x=gxymBo*yY8zW7L-7j&316AEmX~u>kT$BMxk&`evBIgA#2N4l7B8I~e`6Ly z+nGEwHa~0edhI%WT8@-4S*_djH@2@9ojcBFG_z?-CH>8 z&nt^-neNd!9y9u--GQjiWOY54aru3MGD!J_Po=e{(s7&CdIxaUA@Ws?9sC5`(`Jdd zbttlR3}-qwEe0xc*Y9jajEP9{!%YXzo)9RnFvc0(S>eh2loc!Xvz%Ogq7VVx>|X&^ zhkUm+8>u2+ulBdEXuMczpE)BQf#f$Q zF##28CMUuK3C^`5R?iJE2BeEiT-UmsF>+KUDNZJnh9b-%+&C;0PFsW?cDd*84-mP! zI5g!QvqG5Q(&{oeDp_0~!G_z`azB+Sv}ojxt|1G+EPBevZ(#?5@&_!34<9$=rn9aG ztb~RBNs}*GJ~_YF6trn)q)4rKp%Sz#5PpGZaV$3VJgd<7>M7t}Ve6dUYwmg^$~4H9 z&lf!M%vCDxaIC$W_Q<m!imb8AXCMhyp7kh0ZZ8Ea%qc~PXWus_?X#+CycDKz`scfVy!CH~?kU4F>O z!syk3QK6&G)NohK_e}5HB%|pMIfA?;$Pf{>x`fbBYSFR7fZ=-D<``PhL>}G&M{p(! zuy!@K%Sg$&uqj-N6wS?m`yMizIGb!Z=f9~&FO5Nmj|8_&F_V`Y#8x7x$WRTdqHKHs zjnTD1hXy0h+0r&lhkQr{5Y94j&0zb1*2en`Z0WB%j4LJTy2Kt7InD2p_g7v@se3gI z(mJJDh))5@U8te=d!f!ex#gdynq&l){1+6h#u_s6-%3W^42fvJbAd_uk#bp?1y&nD zeTxgYUSSr!#2BogJSO5}#~Gbgk+b0*eDcsQZ<5MDIW4NVhH23%(Hamq@bol`jVx8+ z(p%2$3q#ZGtjAu}?b(qL5s%(!ABt%O^e*M$-57#`!MnFIS1VOUX{Z=UWlxT;Y7bmx|%9ET)3G&sz8JRYvJ!-V!LUbjb}GWz(lkwXNPn{ zeYIlz(zPSFxPNwT>6R@bUkB+~e=k_2e{~9??Cw#TK~6ogNklg}u$z#|hHP;d*>V__ zjNw@z1XFzF;H4V$p3cV@Pp!uw*zF;uWnt* zZ!2NHpXG|tnFWHf^wms%QaX5h-~J=?Fh#|%*=i<5ZN#IaP~_JmpTjpdFgHVw?8g3> z1EIoCcR9oBM*9tWvc2KQ8Kh9JB`p^S*AQ;l-ajk^i%vS_^g`|upT^q0}%SQ$mKD=OYEK4n< zW=*A{ZsTJa{+WI=iG8Vi?)CS@!?M$gW9hgHLZLpGZ|Nd2ts)QrxWB zn=sIQ+LX|3|LRXh_^-%$<`eI&w`*ef2I{tckX^sIcNSaKkCMCcgv~7DlXhOh5)t83wSzg@xS8BpnFUo=ZpZJDMv1C_wZ zfVYhIpzf}p_;Jl;U-!XoY&R{JcKXzIOH+@2l14Nw{_qCMY)PH@gsl%!75TJ8gYVuWI$1ne|wYrNYwW366@%FdkBkzB>M2Y3VoM8rR| z-I|t6IZ*3Zr{V~tk3h{o&V#2zW(vMOU$b-?3^2~yV_$r2&*JpLKGY6xvC0|+ALdQA zYrK_8^A=Ys)yLvU+(nh6i-tBuK_M6*9qJ(#M^Mg(La;)pf&VlIQsz(&e#$pX1({#Ku(~f_IsryCs+HN4Jy?>^&hfwx$R+@x1a2 zcQavxsRmP$=Qbn&8~maL**qK87(4M6r~?@A(ZnXMgj|au9Y4zfNqkQYH!9Q z^o^N*An2tF#Xi-#HCHddwBPUVZ6%E{Lr#?m4q7hslvTS%quJkp@r^E>3{#zgJ6^;AoAA7cEaiMQhchtl9W3|&f>dzt}eK@ib^5;kH zonJOjEkq2ZO2i^&49EE!V-p@E#%PdK?-ku`{lJM3$MUJ$Yeqlv=)SuqeX(5rs)kJ| zzhQAhSr^Kjn?OBZW7o5;8ATftBb~moujZrqo>_}>;-}*;MZS|t!HDhIlIaMA&GI?Z zhxbU<13d9yy3YCh2K79@*g0vDK+q#UX1dS8Z2Ivm57YjTi0Y ztV3W{MM$ooUoRxBy`a&#vWAHz*9*E1wk`+W>)S-F2R1npBd;1?QQw-95|JXzw3)IX``kJKq40rFCwY z-hFy2&L{`yG!Plq5DIabHE4?Tl+J1DzciLew5;Qa63Si4MViQc@w^E-`8JO@+@qu7 z*LncFo=EYXbdWhdDFyG#uZx3RuW@sI>lG0(oz&HQJ4_X-2Iv1Funtz!(H=r%-n9+7 zcLnk)U^l~{+lT9BNJo%n`Zdnp?nriCkI~8J^9U5#A-rA>I><*D$RJzF$LNb`3j}iv z9MyeZ&WKa^X-4mU84X`x@8YG)jod-Tvq~V(8qV8g<;|Y1)osWA>bX|fdn88ZORg^G zW}hy?1RC&Xr?xX=H8u>dM&84iyiaRR)=CYRr!J|ck$HXvMG-J1%^GtrnSc0k+K)Za zS6jNpFcb)MAv|X~1%=+G=LaNJg_M#OxOfBnPSxl?jHEA4@V*ueFum*y5~onWeXu`v zq)*_wJv&m4vtf%i3;BMk%$Xmdw8V=8CVBDGmGu9~c0iawe=^Wnh4weU{89|Xk+gn0EUSvUhWdbe6yNmJCH5f3=gp-4Yv=MgzfQ>n@xukWplEbZU+&iLj z$@af1Tn2pS)2>;z2fTNxmfbQB`{-d!&=v{%r`+SZBa3s-Mv8o0)iY5wiFEL1Lzd96Ug zAgcL0s z$^7o&{`M2XIMqO7zw!--`({y-F>4%o&xF!x?}&jiMx{Lo9_=osu&6|hH#R?;dvT3V zt933&c$h9<5jt*O_I~lBOexAVujhO60*7Re&l})krZb)47kKar279;upn>0|^o5er z$fEd35P&SGRv6?CPN`X1oj#5{t}oKwJpwRido_(3#HYr*v|*tpPoLprrActe>fd_3 zp-9?z_ey_a(=aVl80jFP+x2d-Usd3KoU8mTL-?*+MGt%?PN>Ml%51V}=(*#IqzXo? zk-_cGif3`R+v`#ntW^S;ndA(cj5f(kpPhzJP;@*F9X%l^YbtE)Yx0Qu` zA63Vo(D3L1YxUpMRIIL7e z#~q+>30$Q!7$kL#gu#80?q0%3nUE^N?P6dZ)ijhq4k7}qS{|ZM(bRO@A}|zKaqvPI+^5%MCogo;+Qt%WTA%R51+EejF3dP=@WQ`>eh-8331crlH*Cw=KfLfpgh zd9iC)ORhjDRV-ZYSVVETG>$@r2oyq)!=mF*9=ud4qEYO~R0n&i9fi4vL?p7wyB)|B zs+~R4*_Ld(+nMdKgk?d(P&ueTmarleYiGB|j?E;KP^`lTu?vQfE78m>5SE64qCGGq z$1WC5lYU$a`QuvNVnrX&@~#fbN3j4Z23Q#H|BQR-3iZ&!_Pu%0!+ZOK3e@v3YVK;e z>~9#1wibuQ^ip?Kdhhi($u7c z)?D!{lWM@D%!3;3s$~|xiuUD|_w;vcDAG1))A^~*Tqoo(Az(H(9l9}a8hAX^Rp%ck5;?j<0C^ zF>%>&{otS5l09BiWFjlhBiBwIaSi88&Cl{d^6eS$W_@!3uwl)45CSU}cFY!>yHhZu408 zIumAKZ&X)b-^Rn1MwS^(NrvUuuCW;z$=!5?Th6}y;z9H3%w1ZWpGJQD$68frczBYe z7ZH^9^!O52?Krse`V*VD=cA(=#FEsT>3(5fC-5l2J`e7F7u@^aJN zetqwMO}D6Ct$AUa_Vw?x7cN{FKPG4uSfwJ<#h~G*BXbis8ZAs@7aX_8IBC7nxf!BE#Wn1b zf`c_i#+VdC(={#@30ECD5(r0Mj|vPSJzcPfVqeHu zDH6qrC6d9NZrqHCW{=c9ukslt!~d0^A*F~H>rxNb{8;N z*&2OrG@hW|T%Y(nZmP7rmurb5)lp&Vkx;h5XbT zW@Bu@-eT5m=XhR0XlsB>Ci5Brc#dYdhsOHy%U4Qjv%9`*r(}oS$&WHls%05ceC}G_ zvYx95GETPZVg8l}&KXOh&pNhTe2_JLZ+9)9=LN?I8#cN>U41g?O#6ne-d=`T_ zC0jQvxBfwtr6}{saL~#?>t|cV6XqWK8tjw*+UGeGw%_QA7lm3Sr%z)HTb~;wr^zf@oa)7l*#j}lFx2>v U#DSSH)xwVghwaX~vO6I5FXHr;ng9R* literal 0 HcmV?d00001 diff --git a/app/assets/images/level/thang_avatar_frame.png b/app/assets/images/level/thang_avatar_frame.png new file mode 100644 index 0000000000000000000000000000000000000000..1b4fcc3d5fd0b1892e46829d34f2569a5dd8afc9 GIT binary patch literal 4778 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 * + @include opacity(0.5) + + > * + @include opacity(0.75) + + &:hover > * + @include opacity(1) + + html.no-borderimage .popover border: 0 background: transparent url(/images/level/popover_background.png) background-size: 100% 100% padding: 10px 20px + + .btn.btn-illustrated + border: 0 + background-image: url(/images/common/button-background-active.png) + background-size: 100% 100% + padding: 7px 10px 10px 10px + + &:active + background-image: url(/images/common/button-background-pressed.png) + padding: 9px 8px 8px 12px + border: 0 + + &.disabled, &:disabled + background-image: url(/images/common/button-background-disabled.png) + diff --git a/app/styles/play/level.sass b/app/styles/play/level.sass index 7fb4e4726..2f878b51b 100644 --- a/app/styles/play/level.sass +++ b/app/styles/play/level.sass @@ -97,6 +97,7 @@ $level-resize-transition-time: 0.5s top: 0px bottom: 0 @include transition(width $level-resize-transition-time ease-in-out, right $level-resize-transition-time ease-in-out) + overflow: hidden // Level Docs .ui-effects-transfer diff --git a/app/styles/play/level/modal/editor_config.sass b/app/styles/play/level/modal/editor_config.sass deleted file mode 100644 index 1d97d3965..000000000 --- a/app/styles/play/level/modal/editor_config.sass +++ /dev/null @@ -1,12 +0,0 @@ -#level-editor-config-modal - .select-group - display: block - min-height: 20px - margin-top: 10px - margin-bottom: 10px - padding-left: 20px - vertical-align: middle - - label - font-weight: normal - margin-right: 20px \ No newline at end of file diff --git a/app/styles/play/level/thang_avatar.sass b/app/styles/play/level/thang_avatar.sass index 0873eeee3..c81beb41f 100644 --- a/app/styles/play/level/thang_avatar.sass +++ b/app/styles/play/level/thang_avatar.sass @@ -28,9 +28,9 @@ .avatar-frame position: absolute - left: -13% - top: -14% - width: 132% + left: -18% + top: -19% + width: 145% .badge $radius: 8px diff --git a/app/styles/play/level/tome/cast_button.sass b/app/styles/play/level/tome/cast_button.sass index edad12068..b00d99ca1 100644 --- a/app/styles/play/level/tome/cast_button.sass +++ b/app/styles/play/level/tome/cast_button.sass @@ -17,8 +17,8 @@ @include box-shadow(0px 0px 8px #333) color: white 50% - @include box-shadow(0px 0px 35px #87FFCE) - color: #87FFFF + @include box-shadow(0px 0px 35px #87CEFF) + color: #87CEFF to @include box-shadow(0px 0px 8px #333) color: white @@ -31,40 +31,113 @@ width: 100% border-radius: 6px - .btn - padding: 3px 10px - height: 40px - font-size: 22px + background: transparent url(/images/level/code_toolbar_background.png) + background-size: 100% 100% + left: -15px + right: 15px + height: 94px + margin-top: -8px + padding: 20px 2.8% - .submit-button - margin-left: 20px - min-width: 150px + .btn.btn-illustrated + height: 46px + font-size: 24px + line-height: 24px + width: 45% + width: -webkit-calc(50% - 10px) + width: calc(50% - 10px) + border-image: url(/images/level/code_toolbar_run_button_active.png) 14 20 20 20 fill round + border-width: 7px 10px 10px 10px + + &:active + border-image: url(/images/level/code_toolbar_run_button_active_pressed.png) 14 20 20 20 fill round + padding: 2px 0 0 2px + + &.submit-button + margin-left: 10px + border-image: url(/images/level/code_toolbar_submit_button_active.png) 14 20 20 20 fill round + + &:active + border-image: url(/images/level/code_toolbar_submit_button_active_pressed.png) 14 20 20 20 fill round .cast-button - margin-left: 10px - min-width: 150px @include opacity(0.77) &:hover, &.castable @include opacity(1) + + .submit-button > * + @include opacity(0.9) + &:hover + @include opacity(1) + &:not(.winnable) - .cast-button.castable - font-weight: bold - -webkit-animation-name: castablePulse - -webkit-animation-duration: 3s - -webkit-animation-iteration-count: infinite + .btn.btn-illustrated - .submit-button - font-size: 16px + &.cast-button.castable + font-weight: bold + @include animation(castablePulse 3s infinite) + border-image: url(/images/level/code_toolbar_run_button_zazz.png) 14 20 20 20 fill round + + &:active + border-image: url(/images/level/code_toolbar_run_button_zazz_pressed.png) 14 20 20 20 fill round + + &.submit-button + font-size: 16px &.winnable - .submit-button - font-weight: bold - -webkit-animation-name: winnablePulse - -webkit-animation-duration: 3s - -webkit-animation-iteration-count: infinite - .cast-button - font-size: 16px + .btn.btn-illustrated + &.submit-button + font-weight: bold + @include animation(winnablePulse 3s infinite) + + border-image: url(/images/level/code_toolbar_submit_button_zazz.png) 14 20 20 20 fill round + + &:active + border-image: url(/images/level/code_toolbar_submit_button_zazz_pressed.png) 14 20 20 20 fill round + + &.cast-button + font-size: 16px + +html.no-borderimage #cast-button-view + .btn.btn-illustrated + border: 0 + background-image: url(/images/level/code_toolbar_run_button_active.png) + background-size: 100% 100% + padding: 7px 10px 10px 10px + + &:active + background-image: url(/images/level/code_toolbar_run_button_active_pressed.png) + padding: 9px 8px 8px 12px + border: 0 + + &.submit-button + background-image: url(/images/level/code_toolbar_submit_button_active_pressed.png) + border: 0 + + &:active + background-image: url(/images/level/code_toolbar_submit_button_active_pressed.png) + border: 0 + + &:not(.winnable) + .btn.btn-illustrated + &.cast-button.castable + border: 0 + background-image: url(/images/level/code_toolbar_run_button_zazz.png) + + &:active + background-image: url(/images/level/code_toolbar_run_button_zazz_pressed.png) + + &.winnable + .btn.btn-illustrated + &.submit-button + border: 0 + background-image: url(/images/level/code_toolbar_submit_button_zazz.png) + + &:active + border: 0 + background-image: url(/images/level/code_toolbar_submit_button_zazz_pressed.png) + diff --git a/app/styles/play/level/tome/spell.sass b/app/styles/play/level/tome/spell.sass index 348633044..d2ab57bfd 100644 --- a/app/styles/play/level/tome/spell.sass +++ b/app/styles/play/level/tome/spell.sass @@ -2,38 +2,37 @@ @import "app/styles/bootstrap/variables" @mixin editor-height($extraHeight) - @include box-sizing(border-box) width: 98% height: 83% - height: unquote("-webkit-calc(100% - 60px -")$extraHeight unquote(")") - height: unquote("calc(100% - 60px -")$extraHeight unquote(")") + height: unquote("-webkit-calc(100% - 100px -")$extraHeight unquote(")") + height: unquote("calc(100% - 100px -")$extraHeight unquote(")") #spell-view - position: absolute - left: 10px - top: 140px - //top: 48px - right: 10px - padding-bottom: 10px - z-index: 1 - // Set z-index above palette + margin-top: 10px + padding-top: 20px + padding-left: 30px + padding-bottom: 95px display: none + position: relative + z-index: 1 &.shown display: block .code-background position: absolute - top: 0 + top: -68px + left: 0px height: 100% - width: 100% + right: -10px span.code-background - border-width: 40px - border-image: url(/images/level/code_editor_background.png) 40 fill round + border-width: 124px 76px 64px 40px + border-image: url(/images/level/code_editor_background_border.png) 124 76 64 40 fill round img.code-background display: none + width: 100% .save-status display: none @@ -44,7 +43,7 @@ .firepad // When Firepad is active, it wraps .ace_editor in .firepad. @include editor-height(0px) - width: 98% + width: 94% .ace_editor width: 100% @@ -56,7 +55,7 @@ .ace_editor // When Firepad isn't active, .ace_editor needs the width/height set itself. @include editor-height(0px) - width: 98% + width: 94% position: relative background-color: transparent line-height: 20px @@ -70,14 +69,18 @@ @include opacity(20) .ace_gutter - background-color: rgba(255, 255, 255, 0.25) + background-color: transparent + border-right: 1px solid rgb(195, 178, 156) + //background-color: rgba(255, 255, 255, 0.25) width: 47px margin-left: 4px - border-bottom: 1px dotted #2f261d .ace_scroller background-color: transparent - border-bottom: 1px dotted #2f261d + //padding-left: 10px // Interrupts gutter and line highlighting + + .ace_active-line, .ace_gutter-active-line + background-color: rgba(255, 255, 255, 0.4) .ace_content .executing, .executed, .problem-marker-info, .problem-marker-warning, .problem-marker-error @@ -147,10 +150,10 @@ .ace_searchbtn, .ace_replacebtn padding: 0px 4px + html.no-borderimage #spell-view span.code-background display: none img.code-background display: block - diff --git a/app/styles/play/level/tome/spell_list_entry.sass b/app/styles/play/level/tome/spell_list_entry.sass index 9ba38f450..888866876 100644 --- a/app/styles/play/level/tome/spell_list_entry.sass +++ b/app/styles/play/level/tome/spell_list_entry.sass @@ -13,7 +13,6 @@ $height: 87px $paddingTop: 10px $paddingBottom: 25px - $childMargin: 2px $childSize: $height - $paddingTop - $paddingBottom width: 100% height: $height @@ -22,6 +21,7 @@ position: relative background: transparent url(/images/level/code_editor_top_bar_wood_background.png) background-size: 100% 100% + z-index: 2 .hinge position: absolute @@ -30,7 +30,6 @@ width: 24px height: 20px background-size: contain - z-index: 100 .hinge-0 left: 20% @@ -45,15 +44,24 @@ background: linear-gradient(to bottom, rgba(0,0,0,0.5) 0%,rgba(0,0,0,0.5) 100%), url(/images/level/code_editor_top_bar_wood_background.png) background-size: 100% 100% - .spell-list-button, .thang-avatar-view, .reload-code, .beautify-code, .fullscreen-code - width: $childSize - height: $childSize - margin: 0 $childMargin + .thang-avatar-view + width: $childSize - 10px + margin: 5px display: inline-block - - .spell-list-button, .thang-avatar-view float: left + .btn.btn-small + margin-top: 15px + margin-right: 15px + font-size: 18px + + .glyphicon + font-size: 16px + + .btn.btn-small.spell-list-button + float: left + margin-top: 5px + .spell-tool-buttons position: absolute right: 0px @@ -69,43 +77,32 @@ .fullscreen-code float: right &:not(.maximized) - .icon-resize-small + .glyphicon-resize-small display: none &.maximized - .icon-fullscreen + .glyphicon-fullscreen display: none - .btn.btn-small - background: transparent - padding: 0 - - &:not(:hover) - border-color: transparent - @include box-shadow(none) - - .icon-chevron-down, .icon-repeat, .icon-magnet, .icon-fullscreen, .icon-resize-small - margin-top: 7px - .thang-avatar-wrapper border-width: 0 - .method-label + .method-name-area margin-left: 10px - line-height: $childSize - font-size: 1vw - display: inline-block - font-weight: bold - color: white + margin-top: 10px text-transform: uppercase + display: inline-block + font-family: Open Sans Condensed + font-weight: bold - .method-signature - margin-left: 10px - line-height: $childSize - font-size: 1vw - display: inline-block - font-weight: bold - color: white - text-transform: uppercase + .method-label + font-size: 12px + color: rgb(243, 211, 59) + margin-bottom: -5px + + .method-signature + color: white + font-size: 18px + padding: 0 .spell-list-entry-view:not(.spell-tab) cursor: pointer diff --git a/app/styles/play/level/tome/spell_palette.sass b/app/styles/play/level/tome/spell_palette.sass index c6f7ff406..d8864eca1 100644 --- a/app/styles/play/level/tome/spell_palette.sass +++ b/app/styles/play/level/tome/spell_palette.sass @@ -3,55 +3,44 @@ #spell-palette-view position: absolute - padding-bottom: 10px left: 10px right: 10px - //height: 140px - // Height relates to .tab-content height - padding-top: 35px - padding-left: 12px - padding-right: 4px - color: #333 - // Get crazy with the backgrounds so that we can lower the opacity on the editor background above it, making a gradient of the disabled background color on the top around where it's usually covered + padding: 0 4px 10px 40px background-color: transparent background-size: 100% 100% - z-index: 0 + z-index: 2 //overflow-y: auto - - .code-palette-background - position: absolute - left: 0 - top: 0 - width: 100% - height: 100% - z-index: -1 - - span.code-palette-background - border-width: 25px - border-image: url(/images/level/code_palette_background.png) 25 fill round - img.code-palette-background - display: none + .code-palette-background + width: 100% + position: absolute + left: 0px + z-index: -1 &.disabled @include opacity(0.80) h4 - color: #333 + color: white font-size: 16px line-height: 16px - margin: 0 4px + margin: 25px 0 5px 2px font-weight: normal + text-transform: uppercase .nav > li > a padding: 2px 20px 0px 20px margin-bottom: 3px ul.nav.nav-pills + margin-top: 15px + + h4 + margin-top: 2px li.active a background-color: transparent &.multiple-tabs li.active a - background-color: lighten(rgb(230, 212, 146), 10%) + background-color: darken(rgb(230, 212, 146), 30%) &.multiple-tabs li:not(.active) a cursor: pointer @@ -82,8 +71,9 @@ @include flexbox() @include flex-wrap() @include flex-center() - outline: 1px dashed #b86 position: relative + background-color: rgb(20, 13, 8) + margin: 1px img.item-image width: 38px @@ -91,49 +81,11 @@ position: absolute &:not(:hover) img.item-image - -webkit-filter: sepia(100%) - filter: sepia(100%) + -webkit-filter: contrast(50%) sepia(100%) saturate(500%) hue-rotate(7deg) + filter: contrast(50%) sepia(100%) saturate(1000%) hue-rotate(7deg) .spell-palette-entry-view margin-left: 38px width: 174px width: -webkit-calc(100% - 38px) width: calc(100% - 38px) - - .code-language-logo - position: absolute - width: 16px - height: 16px - left: 16px - top: 36px - z-index: 10 - background-color: transparent - background-repeat: no-repeat - background-size: contain - cursor: pointer - - &.javascript - background-image: url(/images/common/code_languages/javascript_icon.png) - &.python - background-image: url(/images/common/code_languages/python_icon.png) - &.coffeescript - background-image: url(/images/common/code_languages/coffeescript_icon.png) - &.clojure - background-image: url(/images/common/code_languages/clojure_icon.png) - &.lua - background-image: url(/images/common/code_languages/lua_icon.png) - &.io - background-image: url(/images/common/code_languages/io_icon.png) - - &:hover - outline: 1px outset #ccc - - &:active - outline: 1px inset #ccc - -html.no-borderimage - #spell-palette-view - span.code-palette-background - display: none - img.code-palette-background - display: block diff --git a/app/styles/play/level/tome/spell_palette_entry.sass b/app/styles/play/level/tome/spell_palette_entry.sass index 66d2ce088..cb37378b5 100644 --- a/app/styles/play/level/tome/spell_palette_entry.sass +++ b/app/styles/play/level/tome/spell_palette_entry.sass @@ -25,20 +25,21 @@ background-color: darken(#FFFFFF, 25%) // Originally pulled these colors from the most relevant textmate-theme classes, but then fudged them a lot. - &.function - color: black - &.object - color: rgb(6, 150, 14) - &.string - color: rgb(3, 106, 7) - &.number - color: rgb(0, 0, 205) - &.boolean - color: rgb(88, 92, 246) - &.snippet - color: blue - &.undefined - color: rgb(197, 6, 11) + //&.function + // color: black + //&.object + // color: rgb(6, 150, 14) + //&.string + // color: rgb(3, 106, 7) + //&.number + // color: rgb(0, 0, 205) + //&.boolean + // color: rgb(88, 92, 246) + //&.snippet + // color: blue + //&.undefined + // color: rgb(197, 6, 11) + color: rgb(243, 169, 49) .spell-palette-popover.popover // Only those popovers which are our direct children (spell documentation) diff --git a/app/styles/play/level/tome/thang_list.sass b/app/styles/play/level/tome/thang_list.sass deleted file mode 100644 index a06613bd8..000000000 --- a/app/styles/play/level/tome/thang_list.sass +++ /dev/null @@ -1,22 +0,0 @@ -@import "app/styles/mixins" -@import "app/styles/bootstrap/variables" - -#thang-list-view - margin: 50px 15px 15px 15px - overflow: auto - height: 80% - height: -webkit-calc(100% - 65px) - height: calc(100% - 65px) - - h3 - line-height: 25px - margin: 0 - text-align: center - letter-spacing: 0.1em - - .thang-list-section - margin: 5px - padding: 5px - background-color: rgba(200, 200, 200, 0.25) - border-radius: 5px - overflow: hidden diff --git a/app/styles/play/level/tome/thang_list_entry.sass b/app/styles/play/level/tome/thang_list_entry.sass deleted file mode 100644 index e478d6b13..000000000 --- a/app/styles/play/level/tome/thang_list_entry.sass +++ /dev/null @@ -1,38 +0,0 @@ -@import "app/styles/mixins" -@import "app/styles/bootstrap/variables" - -.thang-list-entry-view - @include opacity(0.90) - cursor: pointer - float: left - box-sizing: border-box - width: 20% - max-width: 100px - position: relative - - &.dead - @include opacity(0.75) - - &:after - content: "×" - font-size: 160px - color: red - @include opacity(0.75) - position: absolute - bottom: 0 - height: 100% - width: 100% - text-align: center - line-height: 100px - font-family: monospace - - .thang-name - text-decoration: line-through - - &.disabled - @include opacity(0.25) - cursor: default - - &:hover:not(.disabled) - @include opacity(1) - diff --git a/app/styles/play/level/tome/thang_list_entry_spells.sass b/app/styles/play/level/tome/thang_list_entry_spells.sass deleted file mode 100644 index 312905d1d..000000000 --- a/app/styles/play/level/tome/thang_list_entry_spells.sass +++ /dev/null @@ -1,16 +0,0 @@ -@import "app/styles/mixins" -@import "app/styles/bootstrap/variables" - -.thang-list-entry-spells - - .thang-list-entry-spell - padding: 4px - cursor: pointer - - &:hover - background-color: hsla(240, 40, 80, 0.25) - - code - background-color: transparent - border: 0 - font-size: 1.1em diff --git a/app/templates/play/level/modal/editor_config.jade b/app/templates/play/level/modal/editor_config.jade deleted file mode 100644 index bac960ed1..000000000 --- a/app/templates/play/level/modal/editor_config.jade +++ /dev/null @@ -1,55 +0,0 @@ -extends /templates/modal/modal_base - -block modal-header-content - h3(data-i18n="play_level.editor_config_title") Editor Configuration - -block modal-body-content - .form - .form-group.select-group - label.control-label(for="tome-session-language" data-i18n="play_level.editor_config_level_language_label") Language for This Level - select#tome-session-language(name="language") - for option in languages - option(value=option.id selected=(sessionLanguage === option.id))= option.name - span.help-block(data-i18n="play_level.editor_config_level_language_description") Define the programming language for this particular level. - - .form-group.select-group - label.control-label(for="tome-language" data-i18n="play_level.editor_config_default_language_label") Default Programming Language - select#tome-language(name="language") - for option in languages - option(value=option.id selected=(language === option.id))= option.name - span.help-block(data-i18n="play_level.editor_config_default_language_description") Define the programming language you want to code in when starting new levels. - - .form-group.select-group - label.control-label(for="tome-key-bindings" data-i18n="play_level.editor_config_keybindings_label") Key Bindings - select#tome-key-bindings(name="keyBindings") - option(value="default" selected=(keyBindings === "default") data-i18n="play_level.editor_config_keybindings_default") Default (Ace) - option(value="vim" selected=(keyBindings === "vim")) Vim - option(value="emacs" selected=(keyBindings === "emacs")) Emacs - span.help-block(data-i18n="play_level.editor_config_keybindings_description") Adds additional shortcuts known from the common editors. - - .form-group.checkbox - label(for="tome-live-completion") - input#tome-live-completion(name="liveCompletion", type="checkbox", checked=liveCompletion) - span(data-i18n="play_level.editor_config_livecompletion_label") Live Autocompletion - span.help-block(data-i18n="play_level.editor_config_livecompletion_description") Displays autocomplete suggestions while typing. - - .form-group.checkbox - label(for="tome-invisibles") - input#tome-invisibles(name="invisibles", type="checkbox", checked=invisibles) - span(data-i18n="play_level.editor_config_invisibles_label") Show Invisibles - span.help-block(data-i18n="play_level.editor_config_invisibles_description") Displays invisibles such as spaces or tabs. - - .form-group.checkbox - label(for="tome-indent-guides") - input#tome-indent-guides(name="indentGuides", type="checkbox", checked=indentGuides) - span(data-i18n="play_level.editor_config_indentguides_label") Show Indent Guides - span.help-block(data-i18n="play_level.editor_config_indentguides_description") Displays vertical lines to see indentation better. - - .form-group.checkbox - label(for="tome-behaviors") - input#tome-behaviors(name="behaviors", type="checkbox", checked=behaviors) - span(data-i18n="play_level.editor_config_behaviors_label") Smart Behaviors - span.help-block(data-i18n="play_level.editor_config_behaviors_description") Autocompletes brackets, braces, and quotes. - -block modal-footer-content - a(href='#', data-dismiss="modal", aria-hidden="true", data-i18n="modal.close").btn.btn-primary Close diff --git a/app/templates/play/level/modal/keyboard_shortcuts.jade b/app/templates/play/level/modal/keyboard_shortcuts.jade index f38fedaa0..961b595d1 100644 --- a/app/templates/play/level/modal/keyboard_shortcuts.jade +++ b/app/templates/play/level/modal/keyboard_shortcuts.jade @@ -19,7 +19,7 @@ block modal-body-content dl.dl-horizontal dt(title=shift + " " + enter) kbd ⇧ #{enter} - dd(data-i18n="keyboard_shortcuts.cast_spell") Cast current spell. + dd(data-i18n="keyboard_shortcuts.run_code") Run current code. dl.dl-horizontal dt(title=ctrlName + " " + shift + " " + enter) kbd #{ctrl} ⇧ #{enter} diff --git a/app/templates/play/level/tome/cast_button.jade b/app/templates/play/level/tome/cast_button.jade index a6290974c..a3a153656 100644 --- a/app/templates/play/level/tome/cast_button.jade +++ b/app/templates/play/level/tome/cast_button.jade @@ -1,6 +1,8 @@ -button.btn.btn-lg.btn-inverse.banner.cast-button(title=castVerbose, data-i18n="play_level.tome_run_button_ran") Ran +button.btn.btn-lg.btn-illustrated.cast-button(title=castVerbose) + span(data-i18n="play_level.tome_run_button_ran") Ran -if testSubmitText != null && testSubmitText.length > 0 - button.btn.btn-lg.btn-success.banner.submit-button(title=castRealTimeVerbose) #{testSubmitText} -else - button.btn.btn-lg.btn-success.banner.submit-button(title=castRealTimeVerbose, data-i18n="play_level.tome_submit_button") Submit +button.btn.btn-lg.btn-illustrated.submit-button(title=castRealTimeVerbose) + if testSubmitText != null && testSubmitText.length > 0 + span= testSubmitText + else + span(data-i18n="play_level.tome_submit_button") Submit diff --git a/app/templates/play/level/tome/spell_list_tab_entry.jade b/app/templates/play/level/tome/spell_list_tab_entry.jade index f3ff09860..e0e4f95b6 100644 --- a/app/templates/play/level/tome/spell_list_tab_entry.jade +++ b/app/templates/play/level/tome/spell_list_tab_entry.jade @@ -4,25 +4,27 @@ .hinge.hinge-3 if includeSpellList - .btn.btn-small.spell-list-button(data-i18n="[title]play_level.tome_see_all_methods", title="See all methods you can edit") - i.icon-chevron-down + .btn.btn-small.btn-illustrated.spell-list-button(data-i18n="[title]play_level.tome_see_all_methods", title="See all methods you can edit") + .glyphicon.glyphicon-chevron-down .thang-avatar-placeholder -.method-label(data-i18n="play_level.tome_current_method") Current Method -.method-signature #{methodSignature} +.method-name-area + .method-label(data-i18n="play_level.tome_current_method") Current Method + .method-signature #{methodSignature} .spell-tool-buttons - if levelType !== 'hero' - .btn.btn-small.fullscreen-code(title=maximizeShortcutVerbose) - i.icon-fullscreen - i.icon-resize-small - - .btn.btn-small.reload-code(data-i18n="[title]play_level.tome_reload_method", title="Reload original code for this method") - i.icon-repeat + .btn.btn-small.btn-illustrated.reload-code(data-i18n="[title]play_level.tome_reload_method", title="Reload original code for this method") + .glyphicon.glyphicon-repeat + span.spl(data-i18n="play_level.reload") Reload - if codeLanguage === 'javascript' - .btn.btn-small.beautify-code(title=beautifyShortcutVerbose) - i.icon-magnet + if levelType !== 'hero' && levelType !== 'hero-ladder' && levelType !== 'hero-coop' + .btn.btn-small.btn-illustrated.fullscreen-code(title=maximizeShortcutVerbose) + .glyphicon.glyphicon-fullscreen + .glyphicon.glyphicon-resize-small + + if codeLanguage === 'javascript' && levelType !== 'hero' && levelType !== 'hero-ladder' && levelType !== 'hero-coop' + .btn.btn-small.btn-illustrated.beautify-code(title=beautifyShortcutVerbose) + .glyphicon.glyphicon-magnet .clearfix \ No newline at end of file diff --git a/app/templates/play/level/tome/spell_palette.jade b/app/templates/play/level/tome/spell_palette.jade index 0b27aa90e..304ef1a64 100644 --- a/app/templates/play/level/tome/spell_palette.jade +++ b/app/templates/play/level/tome/spell_palette.jade @@ -1,8 +1,7 @@ -img(src="/images/level/code_palette_background.png").code-palette-background +img(src="/images/level/code_palette_wood_background.png").code-palette-background span.code-palette-background if entryGroupSlugs // Non-hero; group by entry groups, or maybe nothing. - .code-language-logo ul(class="nav nav-pills" + (tabbed ? ' multiple-tabs' : '')) each slug, group in entryGroupSlugs li(class=group == "this" || slug == "available-spells" ? "active" : "") diff --git a/app/templates/play/level/tome/thang_list.jade b/app/templates/play/level/tome/thang_list.jade deleted file mode 100644 index 2d0140f05..000000000 --- a/app/templates/play/level/tome/thang_list.jade +++ /dev/null @@ -1,14 +0,0 @@ -#readwrite-thangs.thang-list-section - h3(data-i18n="play_level.tome_minion_spells") Your Minions' Spells - .thang-list - .clearfix - -#read-thangs.thang-list-section - h3(data-i18n="play_level.tome_read_only_spells") Read-Only Spells - .thang-list - .clearfix - -#muggle-thangs.thang-list-section - h3(data-i18n="play_level.tome_other_units") Other Units - .thang-list - .clearfix diff --git a/app/templates/play/level/tome/thang_list_entry.jade b/app/templates/play/level/tome/thang_list_entry.jade deleted file mode 100644 index e69de29bb..000000000 diff --git a/app/templates/play/level/tome/thang_list_entry_spells.jade b/app/templates/play/level/tome/thang_list_entry_spells.jade deleted file mode 100644 index b95ca4d2a..000000000 --- a/app/templates/play/level/tome/thang_list_entry_spells.jade +++ /dev/null @@ -1,5 +0,0 @@ -h4.not-code(data-i18n="play_level.tome_select_spell") Select a Spell -.thang-list-entry-spells - for spell in spells - div.thang-list-entry-spell - code(data-spell-name=spell.name) #{spell.name}(#{parameters}) \ No newline at end of file diff --git a/app/templates/play/level/tome/tome.jade b/app/templates/play/level/tome/tome.jade index f1d1d4dfb..c29f9e4f0 100644 --- a/app/templates/play/level/tome/tome.jade +++ b/app/templates/play/level/tome/tome.jade @@ -2,8 +2,6 @@ #spell-list-view -#thang-list-view - #cast-button-view #spell-view diff --git a/app/views/play/level/LevelPlaybackView.coffee b/app/views/play/level/LevelPlaybackView.coffee index f913bec39..16e00516a 100644 --- a/app/views/play/level/LevelPlaybackView.coffee +++ b/app/views/play/level/LevelPlaybackView.coffee @@ -2,9 +2,6 @@ CocoView = require 'views/kinds/CocoView' template = require 'templates/play/level/playback' {me} = require 'lib/auth' -EditorConfigModal = require './modal/EditorConfigModal' -KeyboardShortcutsModal = require './modal/KeyboardShortcutsModal' - module.exports = class LevelPlaybackView extends CocoView id: 'playback-view' template: template diff --git a/app/views/play/level/modal/EditorConfigModal.coffee b/app/views/play/level/modal/EditorConfigModal.coffee deleted file mode 100644 index f7c9ab857..000000000 --- a/app/views/play/level/modal/EditorConfigModal.coffee +++ /dev/null @@ -1,92 +0,0 @@ -ModalView = require 'views/kinds/ModalView' -template = require 'templates/play/level/modal/editor_config' -{me} = require 'lib/auth' - -module.exports = class EditorConfigModal extends ModalView - id: 'level-editor-config-modal' - template: template - aceConfig: {} - - defaultConfig: - language: 'python' - keyBindings: 'default' - invisibles: false - indentGuides: false - behaviors: false - liveCompletion: true - - events: - 'change #tome-invisibles': 'updateInvisibles' - 'change #tome-language': 'updateLanguage' - 'change #tome-key-bindings': 'updateKeyBindings' - 'change #tome-indent-guides': 'updateIndentGuides' - 'change #tome-behaviors': 'updateBehaviors' - 'change #tome-live-completion': 'updateLiveCompletion' - - constructor: (options) -> - super(options) - @session = options.session - - getRenderData: -> - @aceConfig = _.cloneDeep me.get('aceConfig') ? {} - @aceConfig = _.defaults @aceConfig, @defaultConfig - c = super() - c.languages = [ - {id: 'python', name: 'Python'} - {id: 'javascript', name: 'JavaScript'} - {id: 'coffeescript', name: 'CoffeeScript'} - {id: 'clojure', name: 'Clojure (Experimental)'} - {id: 'lua', name: 'Lua (Experimental)'} - {id: 'io', name: 'Io (Experimental)'} - ] - c.sessionLanguage = @session.get('codeLanguage') ? @aceConfig.language - c.language = @aceConfig.language - c.keyBindings = @aceConfig.keyBindings - c.invisibles = @aceConfig.invisibles - c.indentGuides = @aceConfig.indentGuides - c.behaviors = @aceConfig.behaviors - c.liveCompletion = @aceConfig.liveCompletion - c - - updateSessionLanguage: -> - @session.set 'codeLanguage', @$el.find('#tome-session-language').val() - - updateLanguage: -> - @aceConfig.language = @$el.find('#tome-language').val() - - updateInvisibles: -> - @aceConfig.invisibles = @$el.find('#tome-invisibles').prop('checked') - - updateKeyBindings: -> - @aceConfig.keyBindings = @$el.find('#tome-key-bindings').val() - - updateIndentGuides: -> - @aceConfig.indentGuides = @$el.find('#tome-indent-guides').prop('checked') - - updateBehaviors: -> - @aceConfig.behaviors = @$el.find('#tome-behaviors').prop('checked') - - updateLiveCompletion: -> - @aceConfig.liveCompletion = @$el.find('#tome-live-completion').prop('checked') - - afterRender: -> - super() - - onHidden: -> - oldLanguage = @session.get('codeLanguage') ? @aceConfig.language - newLanguage = @$el.find('#tome-session-language').val() - @session.set 'codeLanguage', newLanguage - @aceConfig.language = @$el.find('#tome-language').val() - @aceConfig.invisibles = @$el.find('#tome-invisibles').prop('checked') - @aceConfig.keyBindings = @$el.find('#tome-key-bindings').val() - @aceConfig.indentGuides = @$el.find('#tome-indent-guides').prop('checked') - @aceConfig.behaviors = @$el.find('#tome-behaviors').prop('checked') - @aceConfig.liveCompletion = @$el.find('#tome-live-completion').prop('checked') - me.set 'aceConfig', @aceConfig - Backbone.Mediator.publish 'tome:change-config', {} - Backbone.Mediator.publish 'tome:change-language', language: newLanguage unless newLanguage is oldLanguage - @session.save() unless newLanguage is oldLanguage - me.patch() - - destroy: -> - super() diff --git a/app/views/play/level/tome/CastButtonView.coffee b/app/views/play/level/tome/CastButtonView.coffee index c49482806..d11c9ff4f 100644 --- a/app/views/play/level/tome/CastButtonView.coffee +++ b/app/views/play/level/tome/CastButtonView.coffee @@ -33,7 +33,7 @@ module.exports = class CastButtonView extends CocoView enter = $.i18n.t 'keyboard_shortcuts.enter' castShortcutVerbose = "#{shift}+#{enter}" castRealTimeShortcutVerbose = (if @isMac() then 'Cmd' else 'Ctrl') + '+' + castShortcutVerbose - context.castVerbose = castShortcutVerbose + ': ' + $.i18n.t('keyboard_shortcuts.cast_spell') + context.castVerbose = castShortcutVerbose + ': ' + $.i18n.t('keyboard_shortcuts.run_code') context.castRealTimeVerbose = castRealTimeShortcutVerbose + ': ' + $.i18n.t('keyboard_shortcuts.run_real_time') # A/B test submit button text context.testSubmitText = @testButtonsText.submit if @testGroup? and @testGroup isnt 0 @@ -105,7 +105,7 @@ module.exports = class CastButtonView extends CocoView , (castable) => Backbone.Mediator.publish 'tome:spell-has-changed-significantly-calculation', hasChangedSignificantly: castable @castButton.toggleClass('castable', castable).toggleClass('casting', @casting) - + # A/B testing cast button text for en-US if $.i18n.lng() isnt 'en-US' or not @testGroup? or @testGroup is 0 if @casting @@ -160,5 +160,3 @@ module.exports = class CastButtonView extends CocoView Action: 'Loaded' levelID: @levelID castButtonText: @testButtonsText.run + ' ' + @testButtonsText.submit - - diff --git a/app/views/play/level/tome/SpellListEntryView.coffee b/app/views/play/level/tome/SpellListEntryView.coffee index d2d39edb1..befca0320 100644 --- a/app/views/play/level/tome/SpellListEntryView.coffee +++ b/app/views/play/level/tome/SpellListEntryView.coffee @@ -37,6 +37,7 @@ module.exports = class SpellListEntryView extends CocoView context createMethodSignature: -> + return @spell.name if @options.level.get('type', true) in ['hero', 'hero-ladder', 'hero-coop'] parameters = (@spell.parameters or []).slice() if @spell.language in ['python', 'lua'] parameters.unshift 'self' diff --git a/app/views/play/level/tome/SpellListView.coffee b/app/views/play/level/tome/SpellListView.coffee index 9bf6ece39..a2d9c3a39 100644 --- a/app/views/play/level/tome/SpellListView.coffee +++ b/app/views/play/level/tome/SpellListView.coffee @@ -61,7 +61,7 @@ module.exports = class SpellListView extends CocoView theseThangs = _.keys(spell.thangs) changedThangs = not lastThangs or not _.isEqual theseThangs, lastThangs lastThangs = theseThangs - newEntries.push entry = new SpellListEntryView spell: spell, showTopDivider: changedThangs, supermodel: @supermodel, includeSpellList: @spells.length > 1 + newEntries.push entry = new SpellListEntryView spell: spell, showTopDivider: changedThangs, supermodel: @supermodel, includeSpellList: @spells.length > 1, level: @options.level @entries.push entry for entry in newEntries @$el.append entry.el diff --git a/app/views/play/level/tome/SpellPaletteView.coffee b/app/views/play/level/tome/SpellPaletteView.coffee index 8750c5f35..683beabbf 100644 --- a/app/views/play/level/tome/SpellPaletteView.coffee +++ b/app/views/play/level/tome/SpellPaletteView.coffee @@ -5,7 +5,6 @@ filters = require 'lib/image_filter' SpellPaletteEntryView = require './SpellPaletteEntryView' LevelComponent = require 'models/LevelComponent' ThangType = require 'models/ThangType' -EditorConfigModal = require '../modal/EditorConfigModal' N_ROWS = 4 @@ -20,9 +19,6 @@ module.exports = class SpellPaletteView extends CocoView 'surface:frame-changed': 'onFrameChanged' 'tome:change-language': 'onTomeChangedLanguage' - events: - 'click .code-language-logo': 'onEditEditorConfig' - constructor: (options) -> super options @thang = options.thang @@ -54,7 +50,7 @@ module.exports = class SpellPaletteView extends CocoView @entryGroupElements = {} for group, entries of @entryGroups @entryGroupElements[group] = itemGroup = $('
').appendTo @$el.find('.properties') - itemGroup.append $('').attr('src', entries[0].options.item.getPortraitURL()).css('top', Math.max(0, 19 * (entries.length - 2) / 2)) if entries[0].options.item?.getPortraitURL + itemGroup.append $('').attr('src', entries[0].options.item.getPortraitURL()).css('top', Math.max(0, 19 * (entries.length - 2) / 2) + 2) if entries[0].options.item?.getPortraitURL for entry in entries itemGroup.append entry.el entry.render() # Render after appending so that we can access parent container for popover @@ -67,7 +63,6 @@ module.exports = class SpellPaletteView extends CocoView updateCodeLanguage: (language) -> @options.language = language - @$el.find('.code-language-logo').removeClass().addClass 'code-language-logo ' + language updateMaxHeight: -> return unless @isHero @@ -266,9 +261,6 @@ module.exports = class SpellPaletteView extends CocoView @createPalette() @render() - onEditEditorConfig: (e) -> - @openModalView new EditorConfigModal session: @options.session - destroy: -> entry.destroy() for entry in @entries @toggleBackground = null diff --git a/app/views/play/level/tome/SpellView.coffee b/app/views/play/level/tome/SpellView.coffee index 17477be54..0fc73947b 100644 --- a/app/views/play/level/tome/SpellView.coffee +++ b/app/views/play/level/tome/SpellView.coffee @@ -360,10 +360,10 @@ module.exports = class SpellView extends CocoView spellPaletteHeight = $('#spell-palette-view').outerHeight() maxHeight = tomeHeight - spellListTabEntryHeight - spellToolbarHeight - spellPaletteHeight linesAtMaxHeight = Math.floor(maxHeight / lineHeight) - lines = Math.max 8, Math.min(screenLineCount + 4, linesAtMaxHeight) - # 2 lines buffer is nice, but 4 leaves room to put problem alerts. + lines = Math.max 8, Math.min(screenLineCount + 2, linesAtMaxHeight) + # 2 lines buffer is nice @ace.setOptions minLines: lines, maxLines: lines - $('#spell-palette-view').css('top', 38 + 45 + lineHeight * lines) # Move spell palette up, slightly underlapping us. + $('#spell-palette-view').css('top', 175 + lineHeight * lines) # Move spell palette up, slightly overlapping us. onManualCast: (e) -> cast = @$el.parent().length diff --git a/app/views/play/level/tome/ThangListEntryView.coffee b/app/views/play/level/tome/ThangListEntryView.coffee deleted file mode 100644 index 75d03ac22..000000000 --- a/app/views/play/level/tome/ThangListEntryView.coffee +++ /dev/null @@ -1,178 +0,0 @@ -# TODO: be useful to add error indicator states to the spellsPopoverTemplate -# TODO: reordering based on errors isn't working yet - -CocoView = require 'views/kinds/CocoView' -ThangAvatarView = require 'views/play/level/ThangAvatarView' -template = require 'templates/play/level/tome/thang_list_entry' -spellsPopoverTemplate = require 'templates/play/level/tome/thang_list_entry_spells' -{me} = require 'lib/auth' - -module.exports = class ThangListEntryView extends CocoView - tagName: 'div' #'li' - className: 'thang-list-entry-view' - template: template - controlsEnabled: true - reasonsToBeDisabled: {} - - subscriptions: - 'tome:problems-updated': 'onProblemsUpdated' - 'level:disable-controls': 'onDisableControls' - 'level:enable-controls': 'onEnableControls' - 'surface:frame-changed': 'onFrameChanged' - 'level:set-letterbox': 'onSetLetterbox' - 'tome:thang-list-entry-popover-shown': 'onThangListEntryPopoverShown' - 'surface:coordinates-shown': 'onSurfaceCoordinatesShown' - - events: - 'click': 'onClick' - 'mouseenter': 'onMouseEnter' - 'mouseleave': 'onMouseLeave' - - constructor: (options) -> - super options - @thang = options.thang - @spells = options.spells - @permission = options.permission - @reasonsToBeDisabled = {} - @sortSpells() - - getRenderData: (context={}) -> - context = super context - context.thang = @thang - context.spell = @spells - context - - afterRender: -> - super() - @avatar?.destroy() - @avatar = new ThangAvatarView thang: @thang, includeName: true, supermodel: @supermodel - @$el.append @avatar.el # Before rendering, so render can use parent for popover - @avatar.render() - @avatar.setSharedThangs @spells.length # A bit weird to call it sharedThangs; could refactor if we like this - @$el.toggle Boolean(@thang.exists) - @$el.popover( - animation: false - html: true - placement: 'bottom' - trigger: 'manual' - content: @getSpellListHTML() - container: @$el.parent().parent().parent() - ) - - sortSpells: -> - return if @sorted - # Keep only spells for which we have permissions - spells = _.filter @spells, (s) => @options.permission and me.team in s.permissions[@options.permission] - @spells = _.sortBy spells, @sortScoreForSpell - @sorted = true - - sortScoreForSpell: (s) => - # Sort by errored-out spells first, then spells shared with fewest other Thangs - # Lower comes first - score = 0 - # My errors are highest priority - score -= 9001900190019001 * (s.thangs[@thang.id].aether?.getAllProblems().length or 0) - # Other shared Thangs errors are also high priority - score -= _.reduce s.thangs, (spellThang, num) -> 900190019001 * (spellThang.aether?.getAllProblems().length or 0) - # Read-only spells at the bottom - score += 90019001 unless s.canWrite() - # The more Thangs sharing a spell, the lower - score += 9001 * _.size(s.thangs) - score - - select: -> - @sortSpells() - Backbone.Mediator.publish 'level:select-sprite', thangID: @thang.id, spellName: @spells[0]?.name - - onClick: (e) -> - return unless @controlsEnabled - @select() - - onMouseEnter: (e) -> - return unless @controlsEnabled and @spells.length - @clearTimeouts() - @showSpellsTimeout = _.delay @showSpells, 100 - - onMouseLeave: (e) -> - return unless @controlsEnabled and @spells.length - @clearTimeouts() - @hideSpellsTimeout = _.delay @hideSpells, 100 - - clearTimeouts: -> - clearTimeout @showSpellsTimeout if @showSpellsTimeout - clearTimeout @hideSpellsTimeout if @hideSpellsTimeout - @showSpellsTimeout = @hideSpellsTimeout = null - - onThangListEntryPopoverShown: (e) -> - # I couldn't figure out how to get the mouseenter / mouseleave to always work, so this is a fallback - # to hide our popover if another Thang's popover gets shown. - return if e.entry is @ - @hideSpells() - - onSurfaceCoordinatesShown: (e) -> - # Definitely aren't hovering over this. - @hideSpells() - - showSpells: => - @clearTimeouts() - @sortSpells() - @$el.data('bs.popover').options.content = @getSpellListHTML() - @$el.popover('setContent').popover('show') - @$el.parent().parent().parent().i18n() - @popover = @$el.parent().parent().parent().find('.popover') - @popover.off 'mouseenter mouseleave' - @popover.mouseenter (e) => @showSpells() if @controlsEnabled - @popover.mouseleave (e) => @hideSpells() - thangID = @thang.id - @popover.find('code').click (e) -> - Backbone.Mediator.publish 'level:select-sprite', thangID: thangID, spellName: $(@).data 'spell-name' - Backbone.Mediator.publish 'tome:thang-list-entry-popover-shown', entry: @ - - hideSpells: => - @clearTimeouts() - @$el.popover('hide') - - getSpellListHTML: -> - spellsPopoverTemplate {spells: @spells} - - onProblemsUpdated: (e) -> - return unless e.spell in @spells - @sorted = false - - onSetLetterbox: (e) -> - if e.on then @reasonsToBeDisabled.letterbox = true else delete @reasonsToBeDisabled.letterbox - @updateControls() - - onDisableControls: (e) -> - return if e.controls and not ('surface' in e.controls) # disable selection? - @reasonsToBeDisabled.controls = true - @updateControls() - - onEnableControls: (e) -> - delete @reasonsToBeDisabled.controls - @updateControls() - - updateControls: -> - enabled = _.keys(@reasonsToBeDisabled).length is 0 - return if enabled is @controlsEnabled - @controlsEnabled = enabled - @$el.toggleClass('disabled', not enabled) - - onFrameChanged: (e) -> - # Optimize - return unless currentThang = e.world.thangMap[@thang.id] - exists = Boolean currentThang.exists - if @thangDidExist isnt exists - @$el.toggle exists - @thangDidExist = exists - dead = exists and currentThang.health <= 0 - if @thangWasDead isnt dead - @$el.toggleClass 'dead', dead - @thangWasDead = dead - - destroy: -> - @avatar?.destroy() - @popover?.remove() - @popover?.off 'mouseenter mouseleave' - @popover?.find('code').off 'click' - super() diff --git a/app/views/play/level/tome/ThangListView.coffee b/app/views/play/level/tome/ThangListView.coffee deleted file mode 100644 index f8b0cc9d0..000000000 --- a/app/views/play/level/tome/ThangListView.coffee +++ /dev/null @@ -1,95 +0,0 @@ -# The ThangListView lives in the code area behind the SpellView, so that when you don't have a spell, you can select any Thang. -# It just ha a bunch of ThangListEntryViews (which are mostly ThangAvatarViews) in a few sections. - -CocoView = require 'views/kinds/CocoView' -template = require 'templates/play/level/tome/thang_list' -{me} = require 'lib/auth' -ThangListEntryView = require './ThangListEntryView' - -module.exports = class ThangListView extends CocoView - className: 'thang-list-view' - id: 'thang-list-view' - template: template - - constructor: (options) -> - super options - @spells = options.spells - @thangs = _.filter options.thangs, 'isSelectable' - @sortThangs() - - sortThangs: -> - @readwriteThangs = _.sortBy _.filter(@thangs, (thang) => - return true for spellKey, spell of @spells when thang.id of spell.thangs and spell.canWrite() - false - ), @sortScoreForThang - @readThangs = _.sortBy _.filter(@thangs, (thang) => - return true for spellKey, spell of @spells when thang.id of spell.thangs and spell.canRead() and not spell.canWrite() - false - ), @sortScoreForThang - @muggleThangs = _.sortBy _.without(@thangs, @readwriteThangs..., @readThangs...), @sortScoreForThang - if @muggleThangs.length > 15 - @muggleThangs = [] # Don't render a zillion of these. Slow, too long, maybe not useful. - - sortScoreForThang: (t) => - # Sort by my team, then most spells and fewest shared Thangs per spell, - # then by thang.spriteName alpha, then by thang.id alpha. - # Lower comes first - score = 0 - # Thangs on my team are highest priority - score -= 9001900190019001 if t.team is me.team - # The more spells per Thang, the lower - score -= 900190019001 for spellKey, spell of @spells when t.id of spell.thangs and spell.canRead() - # The more Thangs per spell, the higher - score += 90019001 for t2 of spell.thangs for spellKey, spell of @spells when t.id of spell.thangs - alpha = (s) -> _.reduce [0 ... s.length], ((acc, i) -> acc + s.charCodeAt(i) / Math.pow(100, i)), 0 - # Alpha by spriteName - score += 9001 * alpha t.spriteName - # Alpha by id - score += alpha t.id - score - - afterRender: -> - super() - @addThangListEntries() - - addThangListEntries: -> - @entries = [] - for [thangs, section, permission] in [ - [@readwriteThangs, '#readwrite-thangs', 'readwrite'] # Your Minions - [@readThangs, '#read-thangs', 'read'] # Read-Only - [@muggleThangs, '#muggle-thangs', null] # Non-Castable - ] - section = @$el.find(section).toggle thangs.length > 0 - for thang in thangs - spells = _.filter @spells, (s) -> thang.id of s.thangs - entry = new ThangListEntryView thang: thang, spells: spells, permission: permission, supermodel: @supermodel - section.find('.thang-list').append entry.el # Render after appending so that we can access parent container for popover - entry.render() - @entries.push entry - - topSpellForThang: (thang) -> - for entry in @entries when entry.thang.id is thang.id - return entry.spells[0] - null - - selectPrimarySprite: -> - @entries[0]?.select() - - adjustThangs: (spells, thangs) -> - # TODO: it would be nice to not have to do this any more, like if we migrate to the hero levels. - # Recreating all the ThangListEntryViews and their ThangAvatarViews is pretty slow. - # So they aren't even kept up-to-date during world streaming. - # Updating the existing subviews? Would be kind of complicated to get all the new thangs and spells propagated. - # I would do it, if I didn't think we were perhaps soon to not do the ThangList any more. - # Will temporary reduce the number of muggle thangs we're willing to draw. - @spells = @options.spells = spells - for entry in @entries - entry.$el.remove() - entry.destroy() - @thangs = @options.thangs = thangs - @sortThangs() - @addThangListEntries() - - destroy: -> - entry.destroy() for entry in @entries - super() diff --git a/app/views/play/level/tome/TomeView.coffee b/app/views/play/level/tome/TomeView.coffee index d8335993b..453acd1bf 100644 --- a/app/views/play/level/tome/TomeView.coffee +++ b/app/views/play/level/tome/TomeView.coffee @@ -32,7 +32,6 @@ template = require 'templates/play/level/tome/tome' {me} = require 'lib/auth' Spell = require './Spell' SpellListView = require './SpellListView' -ThangListView = require './ThangListView' SpellPaletteView = require './SpellPaletteView' CastButtonView = require './CastButtonView' @@ -62,8 +61,7 @@ module.exports = class TomeView extends CocoView #programmableThangs = _.filter @options.thangs, (t) -> t.isProgrammable and t.spriteName isnt 'Hero Placeholder' programmableThangs = _.filter @options.thangs, 'isProgrammable' @createSpells programmableThangs, programmableThangs[0]?.world # Do before spellList, thangList, and castButton - @spellList = @insertSubView new SpellListView spells: @spells, supermodel: @supermodel - @thangList = @insertSubView new ThangListView spells: @spells, thangs: @options.thangs, supermodel: @supermodel unless @options.level.get('type', true) is 'hero' + @spellList = @insertSubView new SpellListView spells: @spells, supermodel: @supermodel, level: @options.level @castButton = @insertSubView new CastButtonView spells: @spells, levelID: @options.levelID @teamSpellMap = @generateTeamSpellMap(@spells) unless programmableThangs.length @@ -77,7 +75,6 @@ module.exports = class TomeView extends CocoView thangs = _.filter e.world.thangs, 'inThangList' programmableThangs = _.filter thangs, 'isProgrammable' @createSpells programmableThangs, e.world - @thangList?.adjustThangs @spells, thangs @spellList.adjustSpells @spells onCommentMyCode: (e) -> @@ -187,7 +184,6 @@ module.exports = class TomeView extends CocoView @spellPaletteView = null @$el.find('#spell-palette-view').hide() @castButton?.$el.hide() - @thangList?.$el.show() onSpriteSelected: (e) -> return if @spellView and @options.level.get('type', true) in ['hero', 'hero-ladder', 'hero-coop'] # Never deselect the hero in the Tome. @@ -207,7 +203,6 @@ module.exports = class TomeView extends CocoView @$el.find('#' + @spellView.id).after(@spellView.el).remove() @$el.find('#' + @spellTabView.id).after(@spellTabView.el).remove() @castButton.attachTo @spellView - @thangList?.$el.hide() Backbone.Mediator.publish 'tome:spell-shown', thang: thang, spell: spell @updateSpellPalette thang, spell @spellList.setThangAndSpell thang, spell @@ -217,7 +212,7 @@ module.exports = class TomeView extends CocoView updateSpellPalette: (thang, spell) -> return unless thang and @spellPaletteView?.thang isnt thang and thang.programmableProperties or thang.apiProperties @spellPaletteView = @insertSubView new SpellPaletteView thang: thang, supermodel: @supermodel, programmable: spell?.canRead(), language: spell?.language ? @options.session.get('codeLanguage'), session: @options.session, level: @options.level - @spellPaletteView.toggleControls {}, spell.view.controlsEnabled if spell # TODO: know when palette should have been disabled but didn't exist + @spellPaletteView.toggleControls {}, spell.view.controlsEnabled if spell?.view # TODO: know when palette should have been disabled but didn't exist spellFor: (thang, spellName) -> return null unless thang?.isProgrammable @@ -225,9 +220,6 @@ module.exports = class TomeView extends CocoView selectedThangSpells = (@spells[spellKey] for spellKey in @thangSpells[thang.id]) if spellName spell = _.find selectedThangSpells, {name: spellName} - else if @thangList - spell = @thangList.topSpellForThang thang - #spell = selectedThangSpells[0] # TODO: remember last selected spell for this thang else spell = _.find selectedThangSpells, (spell) -> true # Just grab one spell @@ -241,10 +233,8 @@ module.exports = class TomeView extends CocoView @cast() onSelectPrimarySprite: (e) -> - if @thangList - @thangList.selectPrimarySprite() - else - Backbone.Mediator.publish 'level:select-sprite', thangID: 'Hero Placeholder' + # TODO: this may not be correct + Backbone.Mediator.publish 'level:select-sprite', thangID: 'Hero Placeholder' destroy: -> spell.destroy() for spellKey, spell of @spells From f3dfcdc81dacfafa8fd56881ab96d7cdead7d5a8 Mon Sep 17 00:00:00 2001 From: Nick Winter Date: Fri, 7 Nov 2014 19:15:55 -0800 Subject: [PATCH 18/47] Implemented new HUD design. Removed more unneeded stuff. Changed reload button to restart level. Still need restart confirmation and to redo the sprite dialogue area. --- .../level/action_timeline_indicator.png | Bin 290 -> 0 bytes .../level/code_editor_tab_background.png | Bin 332 -> 0 bytes .../code_editor_tab_error_background.png | Bin 505 -> 0 bytes .../images/level/code_palette_background.png | Bin 3098 -> 0 bytes .../images/level/current_action_indicator.png | Bin 312 -> 0 bytes app/assets/images/level/hud_center.png | Bin 1669 -> 0 bytes app/assets/images/level/hud_left_wing.png | Bin 3760 -> 0 bytes app/assets/images/level/hud_right_wing.png | Bin 3770 -> 0 bytes .../images/level/no_selection_pointer.png | Bin 12491 -> 0 bytes app/assets/images/level/playback_thumb.png | Bin 2223 -> 0 bytes app/styles/play/level.sass | 1 + app/styles/play/level/hud.sass | 432 +++++++----------- app/templates/play/level/hud.jade | 35 +- app/templates/play/level/hud_action.jade | 5 - app/views/play/level/LevelHUDView.coffee | 246 +--------- app/views/play/level/LevelLoadingView.coffee | 3 +- .../level/tome/SpellListTabEntryView.coffee | 14 +- 17 files changed, 190 insertions(+), 546 deletions(-) delete mode 100644 app/assets/images/level/action_timeline_indicator.png delete mode 100644 app/assets/images/level/code_editor_tab_background.png delete mode 100644 app/assets/images/level/code_editor_tab_error_background.png delete mode 100644 app/assets/images/level/code_palette_background.png delete mode 100644 app/assets/images/level/current_action_indicator.png delete mode 100644 app/assets/images/level/hud_center.png delete mode 100644 app/assets/images/level/hud_left_wing.png delete mode 100644 app/assets/images/level/hud_right_wing.png delete mode 100644 app/assets/images/level/no_selection_pointer.png delete mode 100644 app/assets/images/level/playback_thumb.png delete mode 100644 app/templates/play/level/hud_action.jade diff --git a/app/assets/images/level/action_timeline_indicator.png b/app/assets/images/level/action_timeline_indicator.png deleted file mode 100644 index 2b6cff5bdcc1b59fb0afdf3f19eaffd062875b7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CG!2~2LdR|-uQZGGS978yw8SgPD{%45rwqLh! z@{F#=6>}%goY1j+?$kLG+gHq*uxfVywAOMjD+6a^Ee3x_lV#I8{{Q>->Fulk|Nnpa z`u!h}`u+Xi*SA##=}ty!_WCLeM(VP*#+vI^EcyTc&&O}Se*FIrM4!HVD=W-3(^Iq4 zSF_VoWw0~VwlmkWH_=+NXckc2*I)mB{r*=~R%~ygYpbVhXP{-RufbrZuV!hY?QE#* zWTLfo_2U2kew7sDn(M2(7^}PK%i9`gSppT=8|zpaYPp!`*yyUdndwEi+qs(R+Ucv? i>Zv&yYXMENGf+OrmfR_S(RwD((+r-jelF{r5}E)l3v?O) diff --git a/app/assets/images/level/code_editor_tab_background.png b/app/assets/images/level/code_editor_tab_background.png deleted file mode 100644 index a75431a78e7507409d5d755a821dc976b6bc79b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 332 zcmeAS@N?(olHy`uVBq!ia0vp^ML=xB!3-pO1LcB&lyQJhi0kdcbwDPNBpwy=KDPtv z5hw}r3vOU=*l%!Np&((tK*0U}_3u-Iu0IFL?eKJQ45^5Fd+jDyvw=YC!;?N@!qcDq zoxg3Fhhpx;pbs41{*)hUb$+R!^Eprx=whT+zzGG5wYnopTtGMdIlPXPW#`Cr;_L#)!uQlsTMUcuP z&vG7zOOHMG@^~6O^mLreJTGL@@h2abDDRZ_oYX3QFSRc2llqe;_1-7%C(hZq_Wcpt nY26+NCYPNG&tffSihMVJ(wu)UtNm{P{lMVq>gTe~DWM4f`JWLt?Bepg-)|Fgal7GHB`eJLs&7GBV423rXZ4xR8 z@(X5gNN6ZfU=T0}=-(xPJfcH;4HewwW5{*^9oikM411l3)@j|9|z$k{jVigbsJg zJN}s6cBjYt_KtI3*kunhA3pWP)9x3uY@?a2*q7s}mii9&?IM)*|3qEMFwcwSV+&m* zyURsG*hOoq$5Wx_zn-)kHOhqEn#k?PwY4R3VRhfC)L`A(?vz#2%C8EY`+D-})8pzP zQLiU=gyh!$d~19~J>28!v5>V(i#oGwi|XQ8-#-bDe4V|jq%9=#;LE4=YqWz_N?NX* z_VJ$G`zO<-=0`65YArL>c3Md0;VG+RS6=G-_5H@0y8fpR&FAw6^(8VLn+6P722WQ% Jmvv4FO#tM0-9!KY diff --git a/app/assets/images/level/code_palette_background.png b/app/assets/images/level/code_palette_background.png deleted file mode 100644 index e4756b4df8f0d26f531f21001e50686678e5205d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3098 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 KMNUMnLSTYO1%+_{ diff --git a/app/assets/images/level/hud_center.png b/app/assets/images/level/hud_center.png deleted file mode 100644 index 958d8d6d809de1e0a5aa5514565f88de609fdfae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1669 zcmV;027394P)}_;G$xIWjMGZe@FOYHny@HYy%8Cmgn_n5CMElZkvaC>=E^ z9XBfUGbS5>d2Tl>Aj?;(XaE2Ozez+vRCodH-HUdkt`^5}yTd+H725IA zq}Tb+eJt<)fF~MSOo|c{(?tAzUm>3bECLw)4-E)KuLun&8WciT141ZTEN)-7`f_!x z5n6YB^<~?}?P9S5<{4nN1DNLzV1B>a5`ftbV3Jqc?*`1xtL;C4L2WQK3ERyFF!AAF z*d)o63tL7eHfb~wF!4Yz9t^5FE+sbQv`IqL^uXMEFeuSqHD;niRH4zuj4)&TAa+E` z4Zacew5Pd?v4bgT{J4(lGSMohcHB;1bO4iXgFyh3_Jc{n2h+@yWouT$NY(=;nJ1W{ znF&1$a@7cub6pbw3>zh?8k!O$HJTL|N$=$c?HHBXAHX~sFoCaMDu1LeD7H!3EfWV- zk}Gc4fO+f%6B#hU$CRn6GeyN&Oc)KN*i@alyBbUcFmDy)G$V+$={#U^%LQOAEZSb` zW+Yi(Si4h^Fe!jJNA~|IJE4~ExC zoL!m;n79|rsvAtfM43>P$-Q}j0tB<_0Ta8xup|SeFC}uo2@*^^0F3#^#UJ1R4CkWq z<$(h?L4x_~1k;Y0rCGuBwK?*LJ0RhL`P+b5xWTw%%7yEE+8m4k%wiWz>IGxe2=`e4 z6d;)NNH8Y3Hd9LN4FQaaS%(wXk!k382Y?AXyH}kF|IHJT&FStEz}TTH?(wTtqF~Ti<111F+1TfPa%bI0SF=a3bz?@hJ<&O1|5@Iv|T_~6YU_MERG<$=C z9u>`-fd^o`Zz{AlUEdzQW1grL+Otx1)5#cM9Irx^o_!IOQK3VQsjRjWIki?c0K?qO zbZV3s{#YE2Qq zz)>5_nnVgPa0D+jFA%Nl5!w@5XjS^s%(YjSYVA%0FTmdpe zz^tNm%MLJ6T^!!G2Aa1{sg4I~0hl6I#>S=CqZax-F3@}rPTZ=1``2H zM}^E)`>c{==H3h4%Ir~3@=-MdCUSxK2{67`X3BF|iPu>veSeGdRKff-U~T}WH(6Gr zCqzla69aPtFoR+fnM$$AN27^0@g{AWGME@(jx4x~o)%0DFbH5iA%OWm?si3@n2`xq P00000NkvXXu0mjfGAYg7 diff --git a/app/assets/images/level/hud_left_wing.png b/app/assets/images/level/hud_left_wing.png deleted file mode 100644 index a52a46b61bc2c53bb8460286d137016e3f5bef2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3760 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 diff --git a/app/assets/images/level/no_selection_pointer.png b/app/assets/images/level/no_selection_pointer.png deleted file mode 100644 index 80a2419eafd7215f8824b6e8ca552760ac0441af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12491 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 diff --git a/app/styles/play/level.sass b/app/styles/play/level.sass index 2f878b51b..35462f286 100644 --- a/app/styles/play/level.sass +++ b/app/styles/play/level.sass @@ -56,6 +56,7 @@ $level-resize-transition-time: 0.5s .level-content position: relative + overflow: hidden #canvas-wrapper top: 50px diff --git a/app/styles/play/level/hud.sass b/app/styles/play/level/hud.sass index ffd07d75b..6e666f982 100644 --- a/app/styles/play/level/hud.sass +++ b/app/styles/play/level/hud.sass @@ -1,315 +1,199 @@ @import "app/styles/mixins" @import "app/styles/bootstrap/variables" -#thang-hud.no-selection - .center - > * - display: none - - .no-selection-message - //display: block // we fade this in - margin: auto - width: 100% - height: 100% - text-align: center - background: transparent url(/images/level/no_selection_pointer.png) no-repeat 50% 40% - background-size: 40px 37px - @include opacity(75) - - &:hover - @include opacity(100) - - div - padding-top: 70px - font-size: 14px - #thang-hud width: 55% - height: 120px + height: 80px position: relative + overflow: visible - .left-wing + .wood-background position: absolute - width: 50% - height: 100% left: 0 - top: 0 - z-index: 0 - background-image: url(/images/level/hud_left_wing.png) - background-position: right + top: -2px + background: transparent url(/images/level/hud_wood_background.png) + background-size: auto 100% + width: 100% + height: 100px + z-index: 2 - .right-wing + .hinge position: absolute - width: 50% - height: 100% - right: 0 + top: -16px + background: transparent url(/images/level/hud_hinge.png) + width: 27px + height: 44px + background-size: contain + z-index: 2 + pointer-events: none + + .hinge-0 + left: 3% + .hinge-1 + left: 12% + .hinge-2 + left: 86% + @include scaleX(-1) + .hinge-3 + left: 95% + @include scaleX(-1) + + .avatar-wrapper-container + position: absolute + width: 100px + height: 100px top: 0 - z-index: 0 - background-image: url(/images/level/hud_right_wing.png) - background-position: left + left: 18% + left: -webkit-calc(50% - (560px - 100px) / 2 - 10px) + left: calc(50% - (560px - 100px) / 2 - 10px) + z-index: 3 - &.hide-hud-properties .center - .thang-props, .thang-actions - visibility: hidden - position: absolute - - .center - width: 560px - height: 120px - padding: 4px 20px 0 20px - margin: auto - background-image: url(/images/level/hud_center.png) - color: #BEBEBE - font-size: 12px - overflow: hidden - z-index: 1 - position: relative - - .no-selection-message - display: none - - .thang-canvas-wrapper, .speaker-image-wrapper - width: 100px - height: 100px - margin: 7px 7px 7px 22px - float: left - overflow: hidden - border: 1px solid #888 + .thang-canvas-wrapper + width: 80px + height: 80px + position: relative border-radius: 4px @include gradient-radial-custom-stops(hsla(205,0%,74%,1), 20%, hsla(205,0%,31%,1), 70%) - + &.team-humans border-color: darkred @include gradient-radial-custom-stops(hsla(4,80%,74%,1), 20%, hsla(4,80%,51%,1), 70%) - + &.team-ogres border-color: darkblue @include gradient-radial-custom-stops(hsla(205,100%,74%,1), 20%, hsla(205,100%,31%,1), 70%) - + &.team-allies, &.team-minions border-color: darkgreen @include gradient-radial-custom-stops(hsla(116,80%,74%,1), 20%, hsla(116,80%,31%,1), 70%) + + .thang-canvas + width: 100% + + .avatar-frame + position: absolute + left: -18% + top: -19% + width: 145% + + &.hide-hud-properties .center:hover + // Don't allow them to hover over confusing HUD stuff until later levels + top: 24px + + .center + width: 560px + height: 166px + position: absolute + top: 24px + left: 13% + left: -webkit-calc(50% - 560px / 2) + left: calc(50% - 560px / 2) + padding: 10px 20px 0 145px + background-image: url(/images/level/hud_background.png) + color: white + text-transform: uppercase + font-family: Open Sans Condensed + font-weight: bold + font-size: 16px + z-index: 2 + @include transition(0.5s ease) + + &:hover + top: -36px + + .thang-name + font-size: 18px + margin: 10px 0 0 0 .thang-props - margin: 8px 8px 0 0 + margin: 24px 0 0 0 float: left + @include user-select(text) - .thang-props-column + .prop:not([name="health"]) + min-width: 120px + display: inline-block + line-height: 16px + + &.nonexistent + visibility: hidden + + .text-prop + width: 50% + + .prop-label-icon + $iconSize: 16px + display: inline-block + width: $iconSize + height: $iconSize + margin-right: 5px + background: transparent url(/images/level/hud_info_icons.png) no-repeat + background-size: auto $iconSize float: left - width: 144px - height: 100px - @include user-select(text) - - &.nonexistent - visibility: hidden - .text-prop - width: 50% + &.prop-label-icon-pos + background-position: (-1 * $iconSize) 0px + &.prop-label-icon-target + background-position: (-2 * $iconSize) 0px + &.prop-label-icon-collectedThangIDs + background-position: (-3 * $iconSize) 0px + &.prop-label-icon-visualRange + background-position: (-4 * $iconSize) 0px + &.prop-label-icon-attackDamage + background-position: (-5 * $iconSize) 0px + &.prop-label-icon-attackRange, &.prop-label-icon-attackNearbyEnemyRange + background-position: (-6 * $iconSize) 0px + &.prop-label-icon-maxSpeed + background-position: (-7 * $iconSize) 0px + &.prop-label-icon-gold, &.prop-label-icon-bountyGold + background-position: (-8 * $iconSize) 0px - .prop-label-icon - $iconSize: 16px - display: inline-block - width: $iconSize - height: $iconSize - margin-right: 5px - background: transparent url(/images/level/hud_info_icons.png) no-repeat - background-size: auto $iconSize - float: left - - &.prop-label-icon-pos - background-position: (-1 * $iconSize) 0px - &.prop-label-icon-target - background-position: (-2 * $iconSize) 0px - &.prop-label-icon-collectedThangIDs - background-position: (-3 * $iconSize) 0px - &.prop-label-icon-visualRange - background-position: (-4 * $iconSize) 0px - &.prop-label-icon-attackDamage - background-position: (-5 * $iconSize) 0px - &.prop-label-icon-attackRange, &.prop-label-icon-attackNearbyEnemyRange - background-position: (-6 * $iconSize) 0px - &.prop-label-icon-maxSpeed - background-position: (-7 * $iconSize) 0px - &.prop-label-icon-gold, &.prop-label-icon-bountyGold - background-position: (-8 * $iconSize) 0px - - .prop-value.bar-prop - width: 100px - display: inline-block - height: 6px - background: #ddd - border: 1px solid black - border-radius: 6px - overflow: hidden - - .bar - background: black - width: 100% - height: 100% - - .prop[name="health"] .bar - background: #C5362B - - .message - text-align: center - display: table - height: 100% - width: 100% - - p - display: table-cell - vertical-align: middle - font-size: 20px - - .thang-actions - width: 212px - height: 100px - margin: 8px 24px 8px 0 - float: left - overflow-y: auto - overflow-x: hidden - - .table-container - position: relative - - .progress-indicator - position: absolute - right: 45px - background-color: #fce - z-index: 1 - - .progress-arrow - width: 14px - height: 6px - top: -6px - // Could put top: 0 to make the arrow go inside, but it doesn't have enough contrast over the bar - right: 39px - background: transparent url(/images/level/action_timeline_indicator.png) no-repeat center - - .progress-line - width: 1px - height: 100% - top: 0 - background-color: #A4A198 - - table - border: 1px solid #5B5855 - border-radius: 2px - line-height: 17px - width: 100% - - tr - border: 1px solid #5b5855 - - .action-indicator - width: 10px - - .action-label - width: 75px - - .action-timeline - padding: 0 - - .timeline-wrapper - position: relative - width: 100% - height: 19px - - div - border-radius: 1px - background-color: #6BA1C8 - height: 100% - border-bottom: 2px groove darken(#6BA1C8, 30%) - border-right: 1px solid darken(#6BA1C8, 10%) - position: absolute - top: 0 - - .current-action - font-weight: bold - - .action-indicator - background: #4B4133 url(/images/level/current_action_indicator.png) no-repeat center - - td - background-color: #4B4133 - - .dialogue-area - opacity: 0.0 - position: relative - height: 100% - width: 100% - z-index: 1 - - .bubble + .prop[name="health"] position: absolute - left: 140px - right: 8px - top: 8px - bottom: 0px - padding: 10px - color: black - font-weight: bold - background: #FFFFFF - border: black solid 1px - border-radius: 10px - font-size: 14px + right: 35px + top: 23px + height: 18px line-height: 18px + font-size: 18px - strong - color: #09B057 + .prop-value.bar-prop + width: 150px + margin: 1px 10px 0 0 + height: 16px + background: rgb(32, 27, 21) + padding: 4px + border-radius: 8px + border: 0 - .hud-hint - font-weight: normal - color: #999 - - .enter - position: absolute - right: 7px - bottom: 7px - div.dot - background: #337 - width: 8px + .bar + background: rgb(234, 35, 45) height: 8px - position: absolute - right: 8px - top: 9px - border-radius: 5px + border-radius: 4px - button, .alert - padding: 2px 5px + .bar-prop-value + vertical-align: top - .enter button.with-dot - padding-right: 20px + .prop-value.bar-prop + width: 100px + display: inline-block + height: 6px + background: #ddd + border: 1px solid black + border-radius: 6px + overflow: hidden - h3 - margin: 0 - font-size: 16px - line-height: 16px - color: #338 + .bar + background: black + width: 100% + height: 100% - button - margin-left: 10px + .message + text-align: center + display: table + height: 100% + width: 100% - .bubble:after - content: "" - position: absolute - top: 55px - left: -27px - border-style: solid - border-width: 11px 27px 11px 0 - border-color: transparent #FFFFFF - display: block - width: 0 - z-index: 1 - - .bubble:before - content: "" - position: absolute - top: 55px - left: -28px - border-style: solid - border-width: 11px 27px 11px 0 - border-color: transparent black - display: block - width: 0 - z-index: 0 + p + display: table-cell + vertical-align: middle + font-size: 20px diff --git a/app/templates/play/level/hud.jade b/app/templates/play/level/hud.jade index 5e093bf04..be7fdc949 100644 --- a/app/templates/play/level/hud.jade +++ b/app/templates/play/level/hud.jade @@ -1,29 +1,14 @@ -.center +.wood-background +.hinge.hinge-0 +.hinge.hinge-1 +.hinge.hinge-2 +.hinge.hinge-3 + +.avatar-wrapper-container .thang-canvas-wrapper.thang-elem canvas.thang-canvas - + +.center + .thang-name .thang-props.thang-elem - .thang-name - - .thang-actions.thang-elem - .nano - .nano-content - .action-header(data-i18n="play_level.action_timeline") Action Timeline - .table-container - .progress-arrow.progress-indicator - .progress-line.progress-indicator - table - tbody - - .dialogue-area - p.bubble.dialogue-bubble - - .no-selection-message - div(data-i18n="play_level.click_to_select") Click on a unit to select it. - -.left-wing - .gradient#hud-left-gradient.gradient - -.right-wing - .gradient#hud-right-gradient.gradient \ No newline at end of file diff --git a/app/templates/play/level/hud_action.jade b/app/templates/play/level/hud_action.jade deleted file mode 100644 index c4b8cdaf4..000000000 --- a/app/templates/play/level/hud_action.jade +++ /dev/null @@ -1,5 +0,0 @@ -tr(name="#{action}") - td.action-indicator - td.action-label #{action} - td.action-timeline - .timeline-wrapper \ No newline at end of file diff --git a/app/views/play/level/LevelHUDView.coffee b/app/views/play/level/LevelHUDView.coffee index 7265ef1e0..7e9ce3511 100644 --- a/app/views/play/level/LevelHUDView.coffee +++ b/app/views/play/level/LevelHUDView.coffee @@ -1,25 +1,17 @@ CocoView = require 'views/kinds/CocoView' template = require 'templates/play/level/hud' prop_template = require 'templates/play/level/hud_prop' -action_template = require 'templates/play/level/hud_action' DialogueAnimator = require './DialogueAnimator' module.exports = class LevelHUDView extends CocoView id: 'thang-hud' template: template - dialogueMode: false - showingActions: false subscriptions: 'surface:frame-changed': 'onFrameChanged' 'level:disable-controls': 'onDisableControls' 'level:enable-controls': 'onEnableControls' 'surface:sprite-selected': 'onSpriteSelected' - 'sprite:speech-updated': 'onSpriteDialogue' - 'level:sprite-clear-dialogue': 'onSpriteClearDialogue' - 'level:shift-space-pressed': 'onShiftSpacePressed' - 'level:escape-pressed': 'onEscapePressed' - 'sprite:dialogue-sound-completed': 'onDialogueSoundCompleted' 'sprite:thang-began-talking': 'onThangBeganTalking' 'sprite:thang-finished-talking': 'onThangFinishedTalking' 'god:new-world-created': 'onNewWorld' @@ -50,69 +42,23 @@ module.exports = class LevelHUDView extends CocoView @disabled = false onSpriteSelected: (e) -> - # TODO: this allows the surface and HUD selection to get out of sync if we select another unit while in dialogue mode - return if @disabled or @dialogueMode - @switchToThangElements() + return if @disabled @setThang e.thang, e.sprite?.thangType - onSpriteDialogue: (e) -> - return unless e.message - spriteID = e.sprite.thang.id - @setSpeaker e.sprite - @stage?.startTalking() - @setMessage(e.message, e.mood, e.responses) - window.tracker?.trackEvent 'Heard Sprite', {speaker: spriteID, message: e.message, label: e.message}, ['Google Analytics'] - - onDialogueSoundCompleted: -> - @stage?.stopTalking() - - onSpriteClearDialogue: -> - @clearSpeaker() - onNewWorld: (e) -> hadThang = @thang @thang = e.world.thangMap[@thang.id] if @thang if hadThang and not @thang @setThang null, null - else if @thang - @createActions() # Make sure it updates its actions. setThang: (thang, thangType) -> - unless @speaker - if not thang? and not @thang? then return - if thang? and @thang? and thang.id is @thang.id then return - + if not thang? and not @thang? then return + if thang? and @thang? and thang.id is @thang.id then return @thang = thang @thangType = thangType - @$el.toggleClass 'no-selection', not @thang? - clearTimeout @hintNextSelectionTimeout - @$el.find('.no-selection-message').hide() - if not @thang - unless @options.level.get('type', true) in ['hero', 'hero-ladder', 'hero-coop'] - @hintNextSelectionTimeout = _.delay((=> @$el.find('.no-selection-message').slideDown('slow')), 10000) - return + return unless @thang @createAvatar thangType, @thang @createProperties() - @createActions() - @update() - @speaker = null - - setSpeaker: (speakerSprite) -> - return if speakerSprite is @speakerSprite - @speakerSprite = speakerSprite - @speaker = @speakerSprite.thang.id - @createAvatar @speakerSprite.thangType, @speakerSprite.thang, @speakerSprite.options.colorConfig - @$el.removeClass 'no-selection' - @switchToDialogueElements() - - clearSpeaker: -> - if not @thang - @$el.addClass 'no-selection' - @setThang @thang, @thangType - @switchToThangElements() - @speaker = null - @speakerSprite = null - @bubble = null @update() createAvatar: (thangType, thang, colorConfig) -> @@ -127,18 +73,19 @@ module.exports = class LevelHUDView extends CocoView options.async = false options.colorConfig = colorConfig if colorConfig wrapper = @$el.find '.thang-canvas-wrapper' - team = @thang?.team or @speakerSprite?.thang?.team + team = @thang?.team wrapper.removeClass (i, css) -> (css.match(/\bteam-\S+/g) or []).join ' ' wrapper.addClass "team-#{team}" if thangType.get('raster') - wrapper.empty().append($('').attr('src', '/file/'+thangType.get('raster'))) + wrapper.empty().append($('').addClass('avatar').attr('src', '/file/'+thangType.get('raster'))) else - return unless stage = thangType.getPortraitStage options - newCanvas = $(stage.canvas).addClass('thang-canvas') + return unless stage = thangType.getPortraitStage options, 100 + newCanvas = $(stage.canvas).addClass('thang-canvas avatar') wrapper.empty().append(newCanvas) stage.update() @stage?.stopTalking() @stage = stage + wrapper.append($('').addClass('avatar-frame').attr('src', '/images/level/thang_avatar_frame.png')) onThangBeganTalking: (e) -> return unless @stage and @thang is e.thang @@ -149,136 +96,29 @@ module.exports = class LevelHUDView extends CocoView @stage?.stopTalking() createProperties: -> - props = @$el.find('.thang-props') - props.find(':not(.thang-name)').remove() if @thang.id is 'Hero Placeholder' name = {knight: 'Tharin', captain: 'Anya'}[@thang.type] ? 'Hero' else name = if @thang.type then "#{@thang.id} - #{@thang.type}" else @thang.id - props.find('.thang-name').text name - propNames = _.without @thang.hudProperties ? [], 'action' - nColumns = Math.ceil propNames.length / 5 - columns = ($('
').appendTo(props) for i in [0 ... nColumns]) + @$el.find('.thang-name').text name + props = @$el.find('.thang-props') + props.find('.prop').remove() + #propNames = _.without @thang.hudProperties ? [], 'action' + propNames = @thang.hudProperties for prop, i in propNames - continue if prop is 'action' pel = @createPropElement prop continue unless pel? if pel.find('.bar').is('*') and props.find('.bar').is('*') props.find('.bar-prop').last().after pel # Keep bars together else - columns[i % nColumns].append pel + props.append pel null - createActions: -> - actions = @$el.find('.thang-actions tbody').empty() - showActions = @thang.world and not @thang.notOfThisWorld and not _.isEmpty(@thang.actions) and 'action' in (@thang.hudProperties ? []) - @$el.find('.thang-actions').toggleClass 'secret', not showActions - @showingActions = showActions - return unless showActions - @buildActionTimespans() - for actionName, action of @thang.actions - actions.append @createActionElement(actionName) - @lastActionTimespans[actionName] = {} - - setMessage: (message, mood, responses) -> - message = marked message - # Fix old HTML icons like in the Markdown - message = message.replace /<i class='(.+?)'><\/i>/, "" - clearInterval(@messageInterval) if @messageInterval - @bubble = $('.dialogue-bubble', @$el) - @bubble.removeClass(@lastMood) if @lastMood - @lastMood = mood - @bubble.text('') - group = $('
') - @bubble.append(group) - if responses - @lastResponses = responses - for response in responses - button = $('').text(response.text) - button.addClass response.buttonClass if response.buttonClass - group.append(button) - response.button = $('button:last', group) - else - if @options.level.get('type', true) in ['hero', 'hero-ladder', 'hero-coop'] - s = $.i18n.t('play_level.hud_continue_short', defaultValue: 'Continue') - else - s = $.i18n.t('play_level.hud_continue', defaultValue: 'Continue (shift+space)') # Get rid of eventually - sk = $.i18n.t('play_level.skip_tutorial', defaultValue: 'skip: esc') - if not @escapePressed - group.append('' + sk + '') - group.append($('')) - @lastResponses = null - if @speaker is 'Hero Placeholder' - # Doesn't work if it fires from a script; we don't really know who we are then. - name = {knight: 'Tharin', captain: 'Anya'}[@speakerSprite?.thang?.id] ? 'Hero' - else - name = @speaker - @bubble.append($("

#{name}

")) - @animator = new DialogueAnimator(message, @bubble) - @messageInterval = setInterval(@addMoreMessage, 1000 / 30) # 30 FPS - - addMoreMessage: => - if @animator.done() - clearInterval(@messageInterval) - @messageInterval = null - $('.enter', @bubble).removeClass('secret').css('opacity', 0.0).delay(500).animate({opacity: 1.0}, 500, @animateEnterButton) - if @lastResponses - buttons = $('.enter button') - for response, i in @lastResponses - channel = response.channel.replace 'level-set-playing', 'level:set-playing' # Easier than migrating all those victory buttons. - f = (r) => => setTimeout((-> Backbone.Mediator.publish(channel, r.event or {})), 10) - $(buttons[i]).click(f(response)) - else - $('.enter', @bubble).click(-> Backbone.Mediator.publish('script:end-current-script', {})) - return - @animator.tick() - - onShiftSpacePressed: (e) -> - @shiftSpacePressed = (@shiftSpacePressed || 0) + 1 - # We don't need to handle script:end-current-script--that's done--but if we do have - # custom buttons, then we need to trigger the one that should fire (the last one). - # 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] - channel = r.channel.replace 'level-set-playing', 'level:set-playing' - _.delay (-> Backbone.Mediator.publish(channel, r.event or {})), 10 - - onEscapePressed: (e) -> - @escapePressed = true - - animateEnterButton: => - return unless @bubble - button = $('.enter', @bubble) - dot = $('.dot', button) - dot.animate({opacity: 0.2}, 300).animate({opacity: 1.9}, 600, @animateEnterButton) - - switchToDialogueElements: -> - @dialogueMode = true - $('.thang-elem', @$el).addClass('secret') - @$el.find('.thang-canvas-wrapper').removeClass('secret') - $('.dialogue-area', @$el) - .removeClass('secret') - .animate({opacity: 1.0}, 200) - $('.dialogue-bubble', @$el) - .css('opacity', 0.0) - .delay(200) - .animate({opacity: 1.0}, 200) - clearTimeout @hintNextSelectionTimeout - - switchToThangElements: -> - @dialogueMode = false - $('.thang-elem', @$el).removeClass('secret') - $('.dialogue-area', @$el).addClass('secret') - $('.thang-actions', @$el).toggleClass 'secret', not @showingActions - @$el.find('.thang-canvas-wrapper').addClass('secret') if @hidesHUD - update: -> - return unless @thang and not @speaker + return unless @thang @$el.find('.thang-props-column').toggleClass 'nonexistent', not @thang.exists if @thang.exists @updatePropElement(prop, @thang[prop]) for prop in @thang.hudProperties ? [] - # Update action timeline - @updateActions() createPropElement: (prop) -> if prop in ['maxHealth'] @@ -336,60 +176,6 @@ module.exports = class LevelHUDView extends CocoView return 'No ' + prop return val - updateActions: -> - return unless @thang.world and @showingActions and not _.isEmpty @thang.actions - @buildActionTimespans() unless @timespans - for actionName, action of @thang.actions - @updateActionElement(actionName, @timespans[actionName], @thang.action is actionName) - tableContainer = @$el.find('.table-container') - arrow = tableContainer.find('.progress-arrow') - @timelineWidth ||= tableContainer.find('tr:not(.secret) .action-timeline').width() - @actionArrowWidth ||= arrow.width() - right = (1 - (@timeProgress ? 0)) * @timelineWidth - arrow.css 'right', right - @actionArrowWidth / 2 - tableContainer.find('.progress-line').css 'right', right - - buildActionTimespans: -> - @lastActionTimespans = {} - @timespans = {} - dt = @thang.world.dt - actionHistory = @thang.world.actionsForThang @thang.id, true - [lastFrame, lastAction] = [0, null] - for hist in actionHistory.concat {frame: @thang.world.totalFrames, name: 'END'} - [newFrame, newAction] = [hist.frame, hist.name] - continue if newAction is lastAction - if newFrame > lastFrame and lastAction - # TODO: don't push it if it didn't exist until then - (@timespans[lastAction] ?= []).push [lastFrame * dt, newFrame * dt] - [lastFrame, lastAction] = [newFrame, newAction] - - createActionElement: (action) -> - $(action_template(action: action)) - - updateActionElement: (action, timespans, current) -> - ael = @$el.find '.thang-actions *[name=' + action + ']' - ael.toggleClass 'current-action', current - - timespans ?= [] - lastTimespans = @lastActionTimespans[action] ? [] - if @lastActionTimespans and timespans.length is lastTimespans.length - changed = false - for timespan, i in timespans - if timespan[0] isnt lastTimespans[i][0] or timespan[1] isnt lastTimespans[i][1] - changed = true - break - return unless changed - ael.toggleClass 'secret', not timespans.length - @lastActionTimespans[action] = timespans - timeline = ael.find('.action-timeline .timeline-wrapper').empty() - lifespan = @thang.world.totalFrames / @thang.world.frameRate - scale = timeline.width() / lifespan - for [start, end] in timespans - bar = $('
').css left: start * scale, right: (lifespan - end) * scale - timeline.append bar - - ael - destroy: -> @stage?.stopTalking() clearInterval(@messageInterval) if @messageInterval diff --git a/app/views/play/level/LevelLoadingView.coffee b/app/views/play/level/LevelLoadingView.coffee index da5e40323..996de9f0e 100644 --- a/app/views/play/level/LevelLoadingView.coffee +++ b/app/views/play/level/LevelLoadingView.coffee @@ -31,7 +31,8 @@ module.exports = class LevelLoadingView extends CocoView eventualCanvasWidth = $('#canvas-wrapper').outerWidth() eventualCanvasHeight = Math.max(eventualCanvasWidth / canvasAspectRatio) currentCanvasHeight = 589 - @$el.addClass('manually-sized').css('height', @$el.outerHeight() + eventualCanvasHeight - currentCanvasHeight + 2) + extraHeight # From control bar (I think) + @$el.addClass('manually-sized').css('height', @$el.outerHeight() + eventualCanvasHeight - currentCanvasHeight + 2 + extraHeight) onLevelLoaded: (e) -> @level = e.level diff --git a/app/views/play/level/tome/SpellListTabEntryView.coffee b/app/views/play/level/tome/SpellListTabEntryView.coffee index 6db1ea9f8..27f0d2395 100644 --- a/app/views/play/level/tome/SpellListTabEntryView.coffee +++ b/app/views/play/level/tome/SpellListTabEntryView.coffee @@ -98,7 +98,9 @@ module.exports = class SpellListTabEntryView extends SpellListEntryView onCodeReload: (e) -> return unless @controlsEnabled - Backbone.Mediator.publish 'tome:reload-code', spell: @spell + #Backbone.Mediator.publish 'tome:reload-code', spell: @spell # Old: just reload the current code + Backbone.Mediator.publish 'level:restart', {} # New: prompt them to restart the level + # TODO: actually prompt them to restart rather than just doing it onBeautifyClick: (e) -> return unless @controlsEnabled @@ -138,16 +140,6 @@ module.exports = class SpellListTabEntryView extends SpellListEntryView return if enabled is @controlsEnabled @controlsEnabled = enabled @$el.toggleClass 'read-only', not enabled - @toggleBackground() - - toggleBackground: => - # TODO: make the palette background an actual background and do the CSS trick - # used in spell_list_entry.sass for disabling - background = @$el.find('img.spell-tab-image-hidden')[0] - if background.naturalWidth is 0 # not loaded yet - return _.delay @toggleBackground, 100 - filters.revertImage background, '.spell-list-entry-view.spell-tab' if @controlsEnabled - filters.darkenImage background, '.spell-list-entry-view.spell-tab', 0.8 unless @controlsEnabled attachTransitionEventListener: => transitionListener = '' From d43fd49d12d628776866eaed26632155c9e72b80 Mon Sep 17 00:00:00 2001 From: Matt Lott Date: Fri, 7 Nov 2014 21:56:49 -0800 Subject: [PATCH 19/47] Use testGroupNumber in cast button text A/B test --- app/models/User.coffee | 10 +++++ .../play/level/tome/CastButtonView.coffee | 42 +++++++++---------- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/app/models/User.coffee b/app/models/User.coffee index 9fa59cb0f..6af72c853 100644 --- a/app/models/User.coffee +++ b/app/models/User.coffee @@ -91,6 +91,16 @@ module.exports = class User extends CocoModel application.tracker.identify branchingGroup: @branchingGroup unless me.isAdmin() @branchingGroup + getCastButtonTextGroup: -> + # Group 0 is original behavior + unless @castButtonTextGroup? + if me.isAdmin() + @castButtonTextGroup = 0 + else + @castButtonTextGroup = me.get('testGroupNumber') % 7 + application.tracker.identify castButtonTextGroup: @castButtonTextGroup + @castButtonTextGroup + getHighlightArrowSoundGroup: -> return @highlightArrowGroup if @highlightArrowGroup group = me.get('testGroupNumber') % 8 diff --git a/app/views/play/level/tome/CastButtonView.coffee b/app/views/play/level/tome/CastButtonView.coffee index d11c9ff4f..2ab5976ec 100644 --- a/app/views/play/level/tome/CastButtonView.coffee +++ b/app/views/play/level/tome/CastButtonView.coffee @@ -36,7 +36,7 @@ module.exports = class CastButtonView extends CocoView context.castVerbose = castShortcutVerbose + ': ' + $.i18n.t('keyboard_shortcuts.run_code') context.castRealTimeVerbose = castRealTimeShortcutVerbose + ': ' + $.i18n.t('keyboard_shortcuts.run_real_time') # A/B test submit button text - context.testSubmitText = @testButtonsText.submit if @testGroup? and @testGroup isnt 0 + context.testSubmitText = @testButtonsText.submit if @testGroup? and @testGroup isnt 0 context afterRender: -> @@ -107,7 +107,7 @@ module.exports = class CastButtonView extends CocoView @castButton.toggleClass('castable', castable).toggleClass('casting', @casting) # A/B testing cast button text for en-US - if $.i18n.lng() isnt 'en-US' or not @testGroup? or @testGroup is 0 + unless @testGroup? and @testGroup isnt 0 if @casting castText = $.i18n.t('play_level.tome_cast_button_running') else if castable or true @@ -141,22 +141,22 @@ module.exports = class CastButtonView extends CocoView @multiplayerSession = null initButtonTextABTest: -> - if $.i18n.lng() is 'en-US' - # A/B test buttons text - # Only testing 'en-US' for simplicity and it accounts for a significant % of users - # Test group 0 is existing behavior - # Intentionally leaving out cast shortcut for test groups for simplicity - @testGroup = Math.floor(Math.random() * 7) - console.info 'Cast button text test group', @testGroup - @testButtonsText = switch @testGroup - when 0 then run: 'Run/Running', submit: 'Submit' - when 1 then run: 'Run', submit: 'Submit' - when 2 then run: 'Test', submit: 'Submit' - when 3 then run: 'Run', submit: 'Continue' - when 4 then run: 'Test', submit: 'Continue' - when 5 then run: 'Run', submit: 'Finish' - when 6 then run: 'Test', submit: 'Finish' - application.tracker?.trackEvent 'Spell View', - Action: 'Loaded' - levelID: @levelID - castButtonText: @testButtonsText.run + ' ' + @testButtonsText.submit + return if me.isAdmin() + return unless $.i18n.lng() is 'en-US' + # A/B test buttons text + # Only testing 'en-US' for simplicity and it accounts for a significant % of users + # Test group 0 is existing behavior + # Intentionally leaving out cast shortcut for test groups for simplicity + @testGroup = me.getCastButtonTextGroup() + @testButtonsText = switch @testGroup + when 0 then run: 'Run/Running', submit: 'Submit' + when 1 then run: 'Run', submit: 'Submit' + when 2 then run: 'Test', submit: 'Submit' + when 3 then run: 'Run', submit: 'Continue' + when 4 then run: 'Test', submit: 'Continue' + when 5 then run: 'Run', submit: 'Finish' + when 6 then run: 'Test', submit: 'Finish' + application.tracker?.trackEvent 'Spell View', + Action: 'Loaded' + levelID: @levelID + castButtonText: @testButtonsText.run + ' ' + @testButtonsText.submit From 588fa0620e71c869b2faad0faeaba0685648af93 Mon Sep 17 00:00:00 2001 From: Matt Lott Date: Fri, 7 Nov 2014 22:46:12 -0800 Subject: [PATCH 20/47] Jiggle user code problem alert --- app/schemas/subscriptions/tome.coffee | 2 + app/styles/play/level/tome/problem_alert.sass | 49 +++++++++++++++++++ .../play/level/tome/ProblemAlertView.coffee | 13 +++++ app/views/play/level/tome/SpellView.coffee | 8 +-- 4 files changed, 65 insertions(+), 7 deletions(-) diff --git a/app/schemas/subscriptions/tome.coffee b/app/schemas/subscriptions/tome.coffee index 74f77c66a..4d9f3e369 100644 --- a/app/schemas/subscriptions/tome.coffee +++ b/app/schemas/subscriptions/tome.coffee @@ -127,3 +127,5 @@ module.exports = 'tome:show-problem-alert': c.object {title: 'Show Problem Alert', description: 'A problem alert needs to be shown.', required: ['problem']}, problem: {type: 'object'} lineOffsetPx: {type: ['number', 'undefined']} + + 'tome:jiggle-problem-alert': c.object {title: 'Jiggle Problem Alert'} diff --git a/app/styles/play/level/tome/problem_alert.sass b/app/styles/play/level/tome/problem_alert.sass index 42c7be399..1926fecf3 100644 --- a/app/styles/play/level/tome/problem_alert.sass +++ b/app/styles/play/level/tome/problem_alert.sass @@ -18,6 +18,55 @@ border-image: url(/images/level/code_editor_error_background.png) 16 20 fill round border-width: 16px 20px + // Jiggle animation + // TODO: Cleanup browser compat nonsense with sass mixin + // TODO: http://joshbroton.com/quick-fix-sass-mixins-for-css-keyframe-animations/ + animation-duration: .4s + animation-name: jiggle + animation-play-state: running + animation-iteration-count: infinite + @keyframes jiggle + 0% + transform: rotate(0deg) + 25% + transform: rotate(1deg) + 50% + transform: rotate(0deg) + 75% + transform: rotate(-1deg) + 100% + transform: rotate(0deg) + -moz-animation-duration: .4s + -moz-animation-name: jiggle + -moz-animation-play-state: running + -moz-animation-iteration-count: infinite + @-moz-keyframes jiggle + 0% + -moz-transform: rotate(0deg) + 25% + -moz-transform: rotate(1deg) + 50% + -moz-transform: rotate(0deg) + 75% + -moz-transform: rotate(-1deg) + 100% + -moz-transform: rotate(0deg) + -webkit-animation-duration: .4s + -webkit-animation-name: jiggle + -webkit-animation-play-state: running + -webkit-animation-iteration-count: infinite + @-webkit-keyframes jiggle + 0% + -webkit-transform: rotate(0deg) + 25% + -webkit-transform: rotate(1deg) + 50% + -webkit-transform: rotate(0deg) + 75% + -webkit-transform: rotate(-1deg) + 100% + -webkit-transform: rotate(0deg) + &.no-hint // Since it's probably only one line, let's make it not look weird by being tiny. padding: 7px diff --git a/app/views/play/level/tome/ProblemAlertView.coffee b/app/views/play/level/tome/ProblemAlertView.coffee index e19163df9..c516bd40e 100644 --- a/app/views/play/level/tome/ProblemAlertView.coffee +++ b/app/views/play/level/tome/ProblemAlertView.coffee @@ -9,6 +9,7 @@ module.exports = class ProblemAlertView extends CocoView subscriptions: 'tome:show-problem-alert': 'onShowProblemAlert' + 'tome:jiggle-problem-alert': 'onJiggleProblemAlert' 'tome:manual-cast': 'onHideProblemAlert' 'real-time-multiplayer:manual-cast': 'onHideProblemAlert' @@ -51,6 +52,18 @@ module.exports = class ProblemAlertView extends CocoView @$el.show() @onWindowResize() @render() + @onJiggleProblemAlert() + + onJiggleProblemAlert: -> + if @$el.is(":visible") + @$el.css('animation-play-state', 'running') + @$el.css('-moz-animation-play-state', 'running') + @$el.css('-webkit-animation-play-state', 'running') + pauseJiggle = => + @$el.css('animation-play-state', 'paused') + @$el.css('-moz-animation-play-state', 'paused') + @$el.css('-webkit-animation-play-state', 'paused') + _.delay pauseJiggle, 2000 onHideProblemAlert: -> @onRemoveClicked() diff --git a/app/views/play/level/tome/SpellView.coffee b/app/views/play/level/tome/SpellView.coffee index a246f2a0a..eafc1473e 100644 --- a/app/views/play/level/tome/SpellView.coffee +++ b/app/views/play/level/tome/SpellView.coffee @@ -773,13 +773,7 @@ module.exports = class SpellView extends CocoView onAnnotationClick: -> # @ is the gutter element - msg = "Edit line #{$(@).index() + 1} to fix it." - alertBox = $("
#{msg}
") - offset = $(@).offset() - offset.left -= 162 # default width of the Bootstrap alert here - alertBox.css(offset).css('z-index', 500).css('position', 'absolute') - $('body').append(alertBox.alert()) - _.delay (-> alertBox.alert('close')), 2500 + Backbone.Mediator.publish 'tome:jiggle-problem-alert', {} onDisableControls: (e) -> @toggleControls e, false onEnableControls: (e) -> @toggleControls e, @writable From 506109864b30200f6742ecdb4193fcff34bc67a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Caeiro=20Rodr=C3=ADguez?= Date: Sat, 8 Nov 2014 16:51:53 +0100 Subject: [PATCH 21/47] Update gl.coffee --- app/locale/gl.coffee | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/app/locale/gl.coffee b/app/locale/gl.coffee index 52fdb83f4..5cf613fd8 100644 --- a/app/locale/gl.coffee +++ b/app/locale/gl.coffee @@ -25,49 +25,49 @@ home: "Inicio" contribute: "Colaborar" legal: "Legalidade" - about: "Sobre nó" + about: "Sobre nós" contact: "Contacta" twitter_follow: "Síguenos en Twitter" teachers: "Profesores" modal: - close: "Cerrar" + close: "Pechar" okay: "Ok" not_found: - page_not_found: "Páxina no atopada" + page_not_found: "Páxina non atopada" diplomat_suggestion: title: "Axuda a traducir CodeCombat!" # This shows up when a player switches to a non-English language using the language selector. sub_heading: "Necesitamos das túas habilidades lingüisticas." pitch_body: "Nos desenvolvemos CodeCombat en inglés, pero xa temos xogadores de todo o mundo. Moitos deles queren xogar en galego porque non falan inglés, así que si falas ambos idiomas, inscríbete como Diplomático e axuda a traducir a web e todos os niveis de CodeCombat ao galego." - missing_translations: "Mientras terminamos la traducción al español, verás en inglés las partes que no estén todavía disponibles." - learn_more: "Aprende más sobre ser un Diplomático" + missing_translations: "Mentras terminamos a traducción ao galego, verás en castelán ou en inglés as partes que non estén ainda dispoñibles." + learn_more: "Aprende máis sobre o que é ser un Diplomático" subscribe_as_diplomat: "Suscríbete como Diplomático" play: - play_as: "Jugar como" # Ladder page - spectate: "Observar" # Ladder page - players: "jugadores" # Hover over a level on /play - hours_played: "horas jugadas" # Hover over a level on /play - items: "Objetos" # Tooltip on item shop button from /play + play_as: "Xogar como" # Ladder page + spectate: "Mirar" # Ladder page + players: "xogadores" # Hover over a level on /play + hours_played: "horas xogadas" # Hover over a level on /play + items: "Obxectos" # Tooltip on item shop button from /play heroes: "Heroes" # Tooltip on hero shop button from /play achievements: "Logros" # Tooltip on achievement list button from /play - account: "Cuenta" # Tooltip on account button from /play - settings: "Ajustes" # Tooltip on settings button from /play - next: "Siguiente Heroe" # Go from choose hero to choose inventory before playing a level + account: "Conta" # Tooltip on account button from /play + settings: "Axustes" # Tooltip on settings button from /play + next: "Seguente Heroe" # Go from choose hero to choose inventory before playing a level change_hero: "Seleccionar Heroe" # Go back from choose inventory to choose hero - choose_inventory: "Equipar Objetos" + choose_inventory: "Equipar Obxectos" older_campaigns: "Campañas Anteriores" - anonymous: "Jugador Anonimo" - level_difficulty: "Dificultad: " + anonymous: "Xogador Anónimo" + level_difficulty: "Dificultade: " campaign_beginner: "Campaña de Principiante" - choose_your_level: "Elige tu nivel" # The rest of this section is the old play view at /play-old and isn't very important. - adventurer_prefix: "Puedes elegir cualquier pantalla o charlar en " - adventurer_forum: "el foro del aventurero " - adventurer_suffix: "sobre ello." - campaign_old_beginner: "Antigua Campaña de Principiante" - campaign_old_beginner_description: "... en la que aprenderás la magia de la programación." + choose_your_level: "Elixe o teu nivel" # The rest of this section is the old play view at /play-old and isn't very important. + adventurer_prefix: "Podes elixir calqueira pantalla ou falar no " + adventurer_forum: " foro do aventureiro " + adventurer_suffix: "sobre elo." + campaign_old_beginner: "Antiga Campaña de Principiante" + campaign_old_beginner_description: "... na que aprenderás xa maxia da programación." campaign_dev: "Niveles aleatorios más dificiles" campaign_dev_description: "... en los que aprenderás sobre la interfaz mientras haces algo más difícil." campaign_multiplayer: "Arenas Multijugador" From a8700f51136365bf508bec1be4ac86b1608e2685 Mon Sep 17 00:00:00 2001 From: Nick Winter Date: Sat, 8 Nov 2014 08:38:25 -0800 Subject: [PATCH 22/47] Reload now shows confirmation modal again. Added some stuff missing from the last commit. --- app/assets/images/level/hud_background.png | Bin 0 -> 9430 bytes app/assets/images/level/hud_wood_background.png | Bin 0 -> 25707 bytes .../play/level/tome/spell_list_entry.sass | 4 ++-- .../play/level/modal/reload-level-modal.jade | 11 +++++++++++ app/views/play/level/LevelLoadingView.coffee | 2 +- .../play/level/modal/ReloadLevelModal.coffee | 9 +++++++++ .../level/tome/SpellListTabEntryView.coffee | 8 ++++---- 7 files changed, 27 insertions(+), 7 deletions(-) create mode 100644 app/assets/images/level/hud_background.png create mode 100644 app/assets/images/level/hud_wood_background.png create mode 100644 app/templates/play/level/modal/reload-level-modal.jade create mode 100644 app/views/play/level/modal/ReloadLevelModal.coffee diff --git a/app/assets/images/level/hud_background.png b/app/assets/images/level/hud_background.png new file mode 100644 index 0000000000000000000000000000000000000000..e76950a8c50e59cc1adbf110041e0e2681e316b4 GIT binary patch literal 9430 zcmai3bzD?kw}t_A5RvX08tIgf7^H=vyBkKD8A?JBrKK4{LP0vDl}4o-MnO`#6i`5E zxPvnKe!us-_s$=1&fa^iXRT+&-shYM4K+o)>r~ewMr<)L$~p zRxs)xCQM85E=Ktv%{m4KHaS$s0B!(L6}NVE=CQPKwX)^$adtzk!oZO55l3A*+rlkD zKF&@qFmWGA#$PMMQP&s4yo{hN*GnlJKyx6W5Yc zxD-d-NisUX;cnu*yx!j4Jl=vlt{(Qh{9u2h;{4SfpURe`i1h4*T>S0m!F4^*V&o( zze&R2TDE_U{I8NQ9bY$FUM*XgtEY#xEowQ_e^Z1a?*BI6zX`#icK-|b#mq0e|8RnG zSpo$Dfr!i5dO*EwZ4^9QoqrMIX6XU5y)aUe5pCr^r7i@2xhW2Hfx#_ZtZkL$q)?i8 zpimp}+x&t8eDb1V!t%0r`T6CALZBB`0k2{$_elbO7Q+m^gsB&)NJEw?dfdm z0>9L3^H;OX|EKvMqJK3@@czryUkUa*?r0wV4SH8VPE=M{R!&%6PX52UbE)^Q=s!Sz z&nf?#rAxK4|DW1_i2kQqaaj*rOSr3tj;pJal*~oZfixUk;jS{iCZf5o*E`2iX`ka`QR_m?*3b|QVASr0pX+e#(0`@Ub z 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/level/hud_wood_background.png b/app/assets/images/level/hud_wood_background.png new file mode 100644 index 0000000000000000000000000000000000000000..3745a4d6bae484469ae4c1ae13ea8a0f6358e131 GIT binary patch literal 25707 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