WIP(party-page): UI draft

This commit is contained in:
Sabe Jones
2015-08-10 13:42:36 -05:00
parent f97012798e
commit 28ae6afd92
11 changed files with 107 additions and 59 deletions

View File

@@ -46,7 +46,7 @@
"logoUrl": "Logo URL", "logoUrl": "Logo URL",
"assignLeader": "Assign Group Leader", "assignLeader": "Assign Group Leader",
"members": "Members", "members": "Members",
"partyList": "Order for party members in header (reload browser after changing order)", "partyList": "Order for party members in header",
"banTip": "Boot Member", "banTip": "Boot Member",
"moreMembers": "more members", "moreMembers": "more members",
"invited": "Invited", "invited": "Invited",
@@ -136,5 +136,6 @@
"exclusiveQuestScroll": "Inviting a friend to your party will grant you an exclusive Quest Scroll to battle the Basi-List together!", "exclusiveQuestScroll": "Inviting a friend to your party will grant you an exclusive Quest Scroll to battle the Basi-List together!",
"nameYourParty": "Name your new party!", "nameYourParty": "Name your new party!",
"partyEmpty": "You're the only one in your party. Invite your friends!", "partyEmpty": "You're the only one in your party. Invite your friends!",
"partyChatEmpty": "Your Party Chat is empty! Type a message in the box above to start chatting.",
"possessiveParty": "<%= name %>'s Party" "possessiveParty": "<%= name %>'s Party"
} }

View File

@@ -60,5 +60,7 @@
"questWarning": "If new players join the party before the quest starts, they will also receive an invitation. However once the quest has started, no new party members can join the quest.", "questWarning": "If new players join the party before the quest starts, they will also receive an invitation. However once the quest has started, no new party members can join the quest.",
"bossRageTitle": "Rage", "bossRageTitle": "Rage",
"bossRageDescription": "When this bar fills, the boss will unleash a special attack!", "bossRageDescription": "When this bar fills, the boss will unleash a special attack!",
"startQuest": "START A QUEST" "startQuest": "START A QUEST",
"whichQuestStart": "Which quest do you want to start?",
"getMoreQuests": "Get more quests"
} }

View File

@@ -1119,6 +1119,11 @@ api.food =
_.each api.food, (food,key) -> _.each api.food, (food,key) ->
_.defaults food, {value: 1, key, notes: t('foodNotes')} _.defaults food, {value: 1, key, notes: t('foodNotes')}
api.questCategories =
ableUnlock: 'unlockableQuests'
gold: 'goldQuests'
pet: 'petQuests'
api.quests = api.quests =
dilatory: dilatory:
@@ -1309,7 +1314,7 @@ api.quests =
notes: t('questVice1Notes') notes: t('questVice1Notes')
value: 4 value: 4
lvl: 30 lvl: 30
category: 'unlockable' category: 'ableUnlock'
boss: boss:
name: t('questVice1Boss') name: t('questVice1Boss')
hp: 750 hp: 750
@@ -1326,7 +1331,7 @@ api.quests =
notes: t('questVice2Notes') notes: t('questVice2Notes')
value: 4 value: 4
lvl: 30 lvl: 30
category: 'unlockable' category: 'ableUnlock'
previous: 'vice1' previous: 'vice1'
collect: collect:
lightCrystal: text: t('questVice2CollectLightCrystal'), count: 45 lightCrystal: text: t('questVice2CollectLightCrystal'), count: 45
@@ -1344,7 +1349,7 @@ api.quests =
previous: 'vice2' previous: 'vice2'
value: 4 value: 4
lvl: 30 lvl: 30
category: 'unlockable' category: 'ableUnlock'
boss: boss:
name: t('questVice3Boss') name: t('questVice3Boss')
hp: 1500 hp: 1500
@@ -1450,7 +1455,7 @@ api.quests =
notes: t('questAtom1Notes') notes: t('questAtom1Notes')
value: 4 value: 4
lvl: 15 lvl: 15
category: 'unlockable' category: 'ableUnlock'
collect: collect:
soapBars: text: t('questAtom1CollectSoapBars'), count: 20 soapBars: text: t('questAtom1CollectSoapBars'), count: 20
drop: drop:
@@ -1465,7 +1470,7 @@ api.quests =
previous: 'atom1' previous: 'atom1'
value: 4 value: 4
lvl: 15 lvl: 15
category: 'unlockable' category: 'ableUnlock'
boss: boss:
name: t('questAtom2Boss') name: t('questAtom2Boss')
hp: 300 hp: 300
@@ -1483,7 +1488,7 @@ api.quests =
completion: t('questAtom3Completion') completion: t('questAtom3Completion')
value: 4 value: 4
lvl: 15 lvl: 15
category: 'unlockable' category: 'ableUnlock'
boss: boss:
name: t('questAtom3Boss') name: t('questAtom3Boss')
hp: 800 hp: 800
@@ -1562,7 +1567,7 @@ api.quests =
notes: t('questMoonstone1Notes') notes: t('questMoonstone1Notes')
value: 4 value: 4
lvl: 60 lvl: 60
category: 'unlockable' category: 'ableUnlock'
collect: collect:
moonstone: text: t('questMoonstone1CollectMoonstone'), count: 500 moonstone: text: t('questMoonstone1CollectMoonstone'), count: 500
drop: drop:
@@ -1577,7 +1582,7 @@ api.quests =
value: 4 value: 4
lvl: 60 lvl: 60
previous: 'moonstone1' previous: 'moonstone1'
category: 'unlockable' category: 'ableUnlock'
boss: boss:
name: t('questMoonstone2Boss') name: t('questMoonstone2Boss')
hp: 1500 hp: 1500
@@ -1595,7 +1600,7 @@ api.quests =
previous: 'moonstone2' previous: 'moonstone2'
value: 4 value: 4
lvl: 60 lvl: 60
category: 'unlockable' category: 'ableUnlock'
boss: boss:
name: t('questMoonstone3Boss') name: t('questMoonstone3Boss')
hp: 2000 hp: 2000
@@ -1620,7 +1625,7 @@ api.quests =
notes: t('questGoldenknight1Notes') notes: t('questGoldenknight1Notes')
value: 4 value: 4
lvl: 40 lvl: 40
category: 'unlockable' category: 'ableUnlock'
collect: collect:
testimony: text: t('questGoldenknight1CollectTestimony'), count: 300 testimony: text: t('questGoldenknight1CollectTestimony'), count: 300
drop: drop:
@@ -1635,7 +1640,7 @@ api.quests =
value: 4 value: 4
previous: 'goldenknight1' previous: 'goldenknight1'
lvl: 40 lvl: 40
category: 'unlockable' category: 'ableUnlock'
boss: boss:
name: t('questGoldenknight2Boss') name: t('questGoldenknight2Boss')
hp: 1000 hp: 1000
@@ -1653,7 +1658,7 @@ api.quests =
previous: 'goldenknight2' previous: 'goldenknight2'
value: 4 value: 4
lvl: 40 lvl: 40
category: 'unlockable' category: 'ableUnlock'
boss: boss:
name: t('questGoldenknight3Boss') name: t('questGoldenknight3Boss')
hp: 1700 hp: 1700
@@ -1675,7 +1680,7 @@ api.quests =
notes: t('questBasilistNotes') notes: t('questBasilistNotes')
completion: t('questBasilistCompletion') completion: t('questBasilistCompletion')
value: 4 value: 4
category: 'unlockable' category: 'ableUnlock'
unlockCondition: unlockCondition:
condition: 'party invite' condition: 'party invite'
text: t('inviteFriends') text: t('inviteFriends')

View File

@@ -27,7 +27,6 @@ function dropPetsCurrentlyOwned(pets) {
return count; return count;
} }
function mountMasterProgress(mounts) { function mountMasterProgress(mounts) {
var count = 0; var count = 0;
_(DROP_ANIMALS).each(function(animal) { _(DROP_ANIMALS).each(function(animal) {
@@ -51,9 +50,23 @@ function remainingGearInSet(userGear, set) {
return count; return count;
} }
function questsOfCategory(userQuests, category) {
var quests = _.filter(content.quests, function(quest) {
var categoryMatches = quest.category === category;
var hasQuest = userQuests[quest.key];
return categoryMatches && hasQuest;
});
var count = _.size(quests);
return count;
}
module.exports = { module.exports = {
beastMasterProgress: beastMasterProgress, beastMasterProgress: beastMasterProgress,
dropPetsCurrentlyOwned: dropPetsCurrentlyOwned, dropPetsCurrentlyOwned: dropPetsCurrentlyOwned,
mountMasterProgress: mountMasterProgress, mountMasterProgress: mountMasterProgress,
remainingGearInSet: remainingGearInSet remainingGearInSet: remainingGearInSet,
questsOfCategory: questsOfCategory
}; };

View File

@@ -535,7 +535,15 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', '
content: html content: html
}).popover('show'); }).popover('show');
}); });
} };
$scope.clickStartQuest = function(){
if (_.reduce(User.user.items.quests, function(a,v){a += v; return a}) > 0){
$rootScope.openModal("ownedQuests", {controller:"InventoryCtrl"});
} else {
$rootScope.$state.go('options.inventory.quests');
}
};
$scope.reject = function(){ $scope.reject = function(){
//User.user.invitations.party = undefined; //User.user.invitations.party = undefined;

View File

@@ -1,5 +1,4 @@
//- If this variable gets any bigger, please move it out of this jade template and into common/script/content include ../../shared/mixins
- var questCategories = {'unlockable':'unlockableQuests','gold':'goldQuests','pet':'petQuests'}
.container-fluid .container-fluid
.row: .col-xs-12 .row: .col-xs-12
@@ -13,25 +12,14 @@
.row .row
.col-md-6 .col-md-6
h3.equipment-title=env.t('yourQuests') h3.equipment-title=env.t('yourQuests')
menu.inventory-list +ownedQuests(true,'right')
li.customize-menu
p.muted(ng-show='questCount < 1')=env.t('noScrolls')
each caption,type in questCategories
menu.pets-menu(label=env.t(caption))
div(ng-repeat='(quest_key,points) in ownedItems(user.items.quests)', ng-init='quest = Content.quests[quest_key]', ng-if='Content.quests[quest_key].category === "#{type}"')
button.customize-option(ng-class='lockQuest(quest) ? "inventory_quest_scroll_locked inventory_quest_scroll_{{::quest.key}}_locked locked" : "inventory_quest_scroll inventory_quest_scroll_{{::quest.key}}"',
ng-click='showQuest(quest_key)',
data-popover-html="{{::lockQuest(quest) ? env.t('scrollsPre') : questPopover(quest) | markdown}}",
popover-title='{{::quest.text()}}', popover-trigger='mouseenter',
popover-placement='right', popover-append-to-body='true')
.badge.badge-info.stack-count {{points}}
.col-md-6.border-left .col-md-6.border-left
li.customize-menu li.customize-menu
h3.equipment-title=env.t('questsForSale') h3.equipment-title=env.t('questsForSale')
each caption,type in questCategories div(ng-repeat='(type,caption) in Content.questCategories')
menu.pets-menu(label=env.t(caption)) menu.pets-menu(label='{{env.t(caption)}}')
div(ng-repeat='quest in Content.questsByLevel', ng-if='quest.canBuy && quest.category === "#{type}"') div(ng-repeat='quest in Content.questsByLevel', ng-if='quest.canBuy && quest.category === type')
button.customize-option(ng-class='lockQuest(quest) ? "inventory_quest_scroll_locked inventory_quest_scroll_{{::quest.key}}_locked locked" : "inventory_quest_scroll inventory_quest_scroll_{{::quest.key}}"', button.customize-option(ng-class='lockQuest(quest) ? "inventory_quest_scroll_locked inventory_quest_scroll_{{::quest.key}}_locked locked" : "inventory_quest_scroll inventory_quest_scroll_{{::quest.key}}"',
data-popover-html="{{::lockQuest(quest,true) ? env.t('scrollsPre') : questPopover(quest) | markdown}}", data-popover-html="{{::lockQuest(quest,true) ? env.t('scrollsPre') : questPopover(quest) | markdown}}",
popover-title='{{::quest.text()}}', popover-append-to-body="true", popover-title='{{::quest.text()}}', popover-append-to-body="true",

View File

@@ -56,6 +56,9 @@ a.pull-right.gem-wallet(ng-if='group.type!="party"', popover-trigger='mouseenter
a(class='badge badge-info', ng-click='clickMember(group.leader._id, true)') a(class='badge badge-info', ng-click='clickMember(group.leader._id, true)')
| {{group.leader.profile.name}} | {{group.leader.profile.name}}
div.text-center(ng-if='group.type === "party"')
button.btn.btn-success.margin-auto.width-50(ng-click='clickStartQuest();')=env.t('startQuest')
// ------ Members ------- // ------ Members -------
.panel.panel-default .panel.panel-default
.panel-heading .panel-heading
@@ -63,21 +66,6 @@ a.pull-right.gem-wallet(ng-if='group.type!="party"', popover-trigger='mouseenter
=env.t('members') =env.t('members')
button.pull-right.btn.btn-primary(ng-click="openInviteModal(group)")=env.t("inviteFriends") button.pull-right.btn.btn-primary(ng-click="openInviteModal(group)")=env.t("inviteFriends")
.panel-body.modal-fixed-height .panel-body.modal-fixed-height
div.form-group(ng-if='::group.type=="party" && group.memberCount > 1')
p=env.t('partyList')
select.form-control#partyOrder(
ng-model='user.party.order',
ng-controller='ChatCtrl',
ng-options='k as v for (k , v) in partyOrderChoices',
ng-change='set({"party.order": user.party.order})'
)
|&nbsp;
select.form-control#partyOrderAscending(
ng-model='user.party.orderAscending',
ng-controller='ChatCtrl',
ng-options='k as v for (k , v) in partyOrderAscendingChoices',
ng-change='set({"party.orderAscending": user.party.orderAscending})'
)
h4(ng-show='group.memberCount === 1 && group.type === "party"')=env.t('partyEmpty') h4(ng-show='group.memberCount === 1 && group.type === "party"')=env.t('partyEmpty')
table.table.table-striped(ng-show='group.memberCount > 1 || group.type !== "party"' bindonce='group') table.table.table-striped(ng-show='group.memberCount > 1 || group.type !== "party"' bindonce='group')
tr(ng-repeat='member in group.members track by member._id') tr(ng-repeat='member in group.members track by member._id')
@@ -94,7 +82,6 @@ a.pull-right.gem-wallet(ng-if='group.type!="party"', popover-trigger='mouseenter
|<span class='badge'>{{group.memberCount - group.members.length}} |<span class='badge'>{{group.memberCount - group.members.length}}
= ' ' + env.t('moreMembers') = ' ' + env.t('moreMembers')
|</span> |</span>
h4(ng-show='group.invites.length > 0')=env.t('invited') h4(ng-show='group.invites.length > 0')=env.t('invited')
table.table.table-striped table.table.table-striped
tr(ng-repeat='invite in group.invites') tr(ng-repeat='invite in group.invites')
@@ -107,8 +94,24 @@ a.pull-right.gem-wallet(ng-if='group.type!="party"', popover-trigger='mouseenter
span(ng-click='clickMember(invite._id, true)') span(ng-click='clickMember(invite._id, true)')
| {{invite.profile.name}} | {{invite.profile.name}}
div.text-center(ng-if='group.type === "party"') .panel.panel-default
button.btn.btn-success.margin-auto.width-100=env.t('startQuest') .panel-heading
h3.panel-title=env.t('partyList')
.panel-body
div.form-group(ng-if='::group.type=="party" && group.memberCount > 1')
select.form-control#partyOrder(
ng-model='user.party.order',
ng-controller='ChatCtrl',
ng-options='k as v for (k , v) in partyOrderChoices',
ng-change='set({"party.order": user.party.order})'
)
| &nbsp;
select.form-control#partyOrderAscending(
ng-model='user.party.orderAscending',
ng-controller='ChatCtrl',
ng-options='k as v for (k , v) in partyOrderAscendingChoices',
ng-change='set({"party.orderAscending": user.party.orderAscending})'
)
include ./challenge-box include ./challenge-box
@@ -135,3 +138,4 @@ a.pull-right.gem-wallet(ng-if='group.type!="party"', popover-trigger='mouseenter
include ./chat-box include ./chat-box
+chatMessages() +chatMessages()
h4(ng-if='group.chat.length < 1 && group.type === "party"')=env.t('partyChatEmpty')

View File

@@ -13,10 +13,10 @@ script(type='text/ng-template', id='partials/options.social.party.html')
.row.margin-auto.text-center .row.margin-auto.text-center
a.btn.btn-primary.btn-lg.width-50(ng-click="inviteOrStartParty(group)")=env.t("startPartyWithFriends") a.btn.btn-primary.btn-lg.width-50(ng-click="inviteOrStartParty(group)")=env.t("startPartyWithFriends")
.row.text-center.margin-auto(ng-controller='UserCtrl') .row.text-center.margin-auto(ng-controller='UserCtrl')
span.inline-block.party_preview(style='margin-left:-100px') span.inline-block.party_preview
span.figure.herobox.inline-block.width-0 span.figure.herobox.inline-block
.character-sprites(style='width:0') .character-sprites(style='margin:0 0 0 4.2em')
+generatedAvatar +generatedAvatar
.row.margin-auto.text-center .row.margin-auto.text-center
ul ul
li=env.t('partyExplanation1') li=env.t('partyExplanation1')

View File

@@ -16,4 +16,20 @@ mixin previewMarkdown(text)
.panel.panel-warning .panel.panel-warning
.panel-heading=env.t('msgPreviewHeading') .panel-heading=env.t('msgPreviewHeading')
.panel-body.markdown-preview .panel-body.markdown-preview
markdown(text='#{text}') markdown(text='#{text}')
mixin ownedQuests(popoverAppend,popoverPlacement)
menu.inventory-list
li.customize-menu
p.muted(ng-show='questCount < 1')=env.t('noScrolls')
div(ng-repeat='(type,caption) in Content.questCategories')
menu.pets-menu(ng-if='Shared.count.questsOfCategory(user.items.quests,type) > 0', label='{{env.t(caption)}}')
div(ng-repeat='(quest_key,points) in ownedItems(user.items.quests)', ng-init='quest = Content.quests[quest_key]', ng-if='Content.quests[quest_key].category === type')
button.customize-option(ng-class='lockQuest(quest) ? "inventory_quest_scroll_locked inventory_quest_scroll_{{::quest.key}}_locked locked" : "inventory_quest_scroll inventory_quest_scroll_{{::quest.key}}"',
ng-click='$close(); showQuest(quest_key)',
data-popover-html="{{::lockQuest(quest) ? env.t('scrollsPre') : questPopover(quest) | markdown}}",
popover-title='{{::quest.text()}}',
popover-trigger='mouseenter',
popover-append-to-body='#{popoverAppend}',
popover-placement='#{popoverPlacement}')
.badge.badge-info.stack-count {{points}}

View File

@@ -54,7 +54,7 @@ script(type='text/ng-template', id='modals/invite-friends.html')
.quest_basilist.pull-left .quest_basilist.pull-left
p(style='margin:2em')=env.t('exclusiveQuestScroll') p(style='margin:2em')=env.t('exclusiveQuestScroll')
button.btn.btn-default.pull-right(style='margin:auto 1em', ng-click='$close()')=env.t('close') button.btn.btn-default.pull-right(style='margin:auto 1em', ng-click='$close()')=env.t('close')
.modal-footer(style='padding-bottom:0') .modal-footer(style='padding-bottom:0',ng-if='!group || group.memberCount === 1')
p!=env.t('wantExistingParty', {linkStart: "<a href='/#/options/groups/guilds/f2db2a7f-13c5-454d-b3ee-ea1f5089e601'>", linkEnd: "</a>"}) p!=env.t('wantExistingParty', {linkStart: "<a href='/#/options/groups/guilds/f2db2a7f-13c5-454d-b3ee-ea1f5089e601'>", linkEnd: "</a>"})
pre(style='margin:1em 0 0 0'). pre(style='margin:1em 0 0 0').
{{user.id}} {{user.id}}

View File

@@ -1,4 +1,5 @@
include ./quest-rewards include ./quest-rewards
include ../mixins
mixin questInfo mixin questInfo
.pull-right-sm.text-center .pull-right-sm.text-center
@@ -92,3 +93,13 @@ script(type='text/ng-template', id='modals/questDrop.html')
button.btn.btn-default(ng-click='closeQuest(); $close()')=env.t('questLater') button.btn.btn-default(ng-click='closeQuest(); $close()')=env.t('questLater')
button.btn.btn-primary(ng-click='inviteOrStartParty(group); $close()', ng-if='!party.members')=env.t('startAParty') button.btn.btn-primary(ng-click='inviteOrStartParty(group); $close()', ng-if='!party.members')=env.t('startAParty')
button.btn.btn-primary(ng-click='questInit(); $close()', ng-if='party.members')=env.t('inviteParty') button.btn.btn-primary(ng-click='questInit(); $close()', ng-if='party.members')=env.t('inviteParty')
script(type='text/ng-template', id='modals/ownedQuests.html')
.modal-header
h4=env.t('whichQuestStart')
.modal-body
+ownedQuests(false,'top')
.modal-footer
h4.pull-left
a(ui-sref='options.inventory.quests', ng-click='$close()')=env.t('getMoreQuests')
button.btn.btn-default.pull-right(ng-click='$close()')=env.t('neverMind')