From dccc10aa4d1c1200fe21b993b9e977db3e27697e Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sat, 11 Jul 2015 15:05:58 -0500 Subject: [PATCH] Refactor --- common/script/content.coffee | 2 + .../public/js/controllers/inventoryCtrl.js | 1 + website/public/js/controllers/rootCtrl.js | 55 +++++++++++-------- website/views/options/profile.jade | 8 ++- 4 files changed, 42 insertions(+), 24 deletions(-) diff --git a/common/script/content.coffee b/common/script/content.coffee index f7b7847887..89420ec2f3 100644 --- a/common/script/content.coffee +++ b/common/script/content.coffee @@ -67,6 +67,7 @@ api.itemList = 'hatchingPotions' : {localeKey: 'hatchingPotion', isEquipment: false} 'eggs' : {localeKey: 'eggSingular', isEquipment: false} 'quests' : {localeKey: 'quest', isEquipment: false} + 'food' : {localeKey: 'foodText', isEquipment: false} 'Saddle' : {localeKey: 'foodSaddleText', isEquipment: false} gear = @@ -938,6 +939,7 @@ api.dropEggs = Dragon: text: t('dropEggDragonText'), adjective: t('dropEggDragonAdjective') Cactus: text: t('dropEggCactusText'), adjective: t('dropEggCactusAdjective') BearCub: text: t('dropEggBearCubText'), mountText: t('dropEggBearCubMountText'), adjective: t('dropEggBearCubAdjective') + _.each api.dropEggs, (egg,key) -> _.defaults egg, canBuy:true diff --git a/website/public/js/controllers/inventoryCtrl.js b/website/public/js/controllers/inventoryCtrl.js index afd85b625b..01374f2972 100644 --- a/website/public/js/controllers/inventoryCtrl.js +++ b/website/public/js/controllers/inventoryCtrl.js @@ -186,6 +186,7 @@ habitrpg.controller("InventoryCtrl", }); $scope.closeQuest(); } + $scope.buyQuest = function(quest) { var item = Content.quests[quest]; if (item.lvl && item.lvl > user.stats.lvl) diff --git a/website/public/js/controllers/rootCtrl.js b/website/public/js/controllers/rootCtrl.js index 0fc5c0f9a1..c87c6d816d 100644 --- a/website/public/js/controllers/rootCtrl.js +++ b/website/public/js/controllers/rootCtrl.js @@ -210,38 +210,49 @@ habitrpg.controller("RootCtrl", ['$scope', '$rootScope', '$location', 'User', '$ return filteredArray; } + // @TODO: Extract equip and purchase into equipment service + $rootScope.equip = function(itemKey) { + var equipType = user.preferences.costume ? 'costume' : 'equipped'; + var equipParams = { + type: equipType, + key: itemKey + }; + + user.ops.equip({ params: equipParams }); + } + $rootScope.purchase = function(type, item){ if (type == 'special') return user.ops.buySpecialSpell({params:{key:item.key}}); var gems = user.balance * 4; - var itemName = _getLocalekeyForItem(type); + var price = item.value; - var price = ((((item.specialClass == "wizard") && (item.type == "weapon")) || item.gearSet == "animal") + 1); + var itemName = window.env.t(Content.itemList[type].localeKey) - if (itemList[type].isEquipment) { - if (user.items.gear.owned[item.key]) { - var equipType = user.preferences.costume ? 'costume' : 'equipped'; - return user.ops.equip({params:{type: equipType, key: item.key}}); - } - if (gems < price) return $rootScope.openModal('buyGems'); - var message = window.env.t('buyThis', {text: itemName, price: price, gems: gems}) - if($window.confirm(message)) - user.ops.purchase({params:{type:"gear",key:item.key}}); - } else { - if(gems < item.value) return $rootScope.openModal('buyGems'); - var message = window.env.t('buyThis', {text: itemName, price: item.value, gems: gems}) - if($window.confirm(message)) - user.ops.purchase({params:{type:type,key:item.key}}); + if (Content.itemList[type].isEquipment) { + var eligibleForPurchase = _canBuyEquipment(item.key); + if (!eligibleForPurchase) return false; + + // @TODO: Attach gemValue to content so we don't have to do this + price = ((((item.specialClass == "wizard") && (item.type == "weapon")) || item.gearSet == "animal") + 1); + type = 'gear'; } + + if (gems < price) return $rootScope.openModal('buyGems'); + + var message = window.env.t('buyThis', {text: itemName, price: price, gems: gems}); + if ($window.confirm(message)) + user.ops.purchase({params:{type:type,key:item.key}}); } - function _getLocalekeyForItem(type) { - var itemName = type; - if (Content.itemList[type]) { - itemName = window.env.t(Content.itemList[type].localeKey) + function _canBuyEquipment(itemKey) { + if (user.items.gear.owned[itemKey]) { + $window.alert(window.env.t('messageAlreadyOwnGear')); + } else if (user.items.gear.owned[itemKey] === false) { + $window.alert(window.env.t('messageAlreadyPurchasedGear')); + } else { + return true; } - - return itemName; } /* diff --git a/website/views/options/profile.jade b/website/views/options/profile.jade index d7d9731502..0d6ae1382d 100644 --- a/website/views/options/profile.jade +++ b/website/views/options/profile.jade @@ -62,7 +62,11 @@ mixin customizeProfile(mobile) span(ng-hide='#{showPath("user.items.gear.owned", gearGroup("animal"), "&&")}') +gemCost(2) button.btn.btn-xs(ng-click='#{unlockPath("items.gear.owned", gearGroup("animal"))}')!= env.t('unlockSet', {cost: 5}) + ' ' - button.customize-option(ng-repeat='item in ::getGearArray("animal")' ng-class="{locked: user.items.gear.owned[item.key] == undefined, selectableInventory: user.preferences.costume ? user.items.gear.costume.headAccessory == item.key : user.items.gear.equipped.headAccessory == item.key}", popover='{{::item.notes()}}', popover-title='{{::item.text()}}', popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', ng-click='purchase(item.type,item)', class='{{::item.key}}') + button.customize-option(ng-repeat='item in ::getGearArray("animal")', class='{{::item.key}}', + ng-class="{locked: user.items.gear.owned[item.key] == undefined, selectableInventory: user.preferences.costume ? user.items.gear.costume.headAccessory == item.key : user.items.gear.equipped.headAccessory == item.key}", + popover='{{::item.notes()}}', popover-title='{{::item.text()}}', popover-trigger='mouseenter', + popover-placement='right', popover-append-to-body='true', + ng-click='user.items.gear.owned[item.key] ? equip(item.key) : purchase(item.type,item)') .col-md-4 h3(class=mobile?'item item-divider':'')=env.t('bodyHead') @@ -73,7 +77,7 @@ mixin customizeProfile(mobile) li.customize-menu menu(label=env.t('color')) each color in ['white','brown','blond','red','black'] - button(type='button', class='#{path=="skin" ? "skin_"+color : "customize-option hair hair_bangs_1_"+color}', ng-click='set({"preferences.hair.color": "#{color}"})', ng-class='{selectableInventory: user.preferences.hair.color == "#{color}"}') + button(type='button', class='#{path=="skin" ? "skin_"+color : "customize-option hair hair_bangs_1_"+color}', ng-click='set({"preferences.hair.color": "#{color}"})', ng-class='{selectableInventory: user.preferences.hair.color == "#{color}"}') each color in ['candycane','frost','winternight','holly'] button(type='button', ng-if='user.purchased.hair.color.#{color}', class='customize-option hair hair_bangs_1_#{color}', ng-click='unlock("hair.color.#{color}")', ng-class='{selectableInventory: user.preferences.hair.color == "#{color}"}') each color in ['pblue','pgreen','porange','ppink','ppurple','pyellow']