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",
"assignLeader": "Assign Group Leader",
"members": "Members",
"partyList": "Order for party members in header (reload browser after changing order)",
"partyList": "Order for party members in header",
"banTip": "Boot Member",
"moreMembers": "more members",
"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!",
"nameYourParty": "Name your new party!",
"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"
}

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

View File

@@ -27,7 +27,6 @@ function dropPetsCurrentlyOwned(pets) {
return count;
}
function mountMasterProgress(mounts) {
var count = 0;
_(DROP_ANIMALS).each(function(animal) {
@@ -51,9 +50,23 @@ function remainingGearInSet(userGear, set) {
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 = {
beastMasterProgress: beastMasterProgress,
dropPetsCurrentlyOwned: dropPetsCurrentlyOwned,
mountMasterProgress: mountMasterProgress,
remainingGearInSet: remainingGearInSet
remainingGearInSet: remainingGearInSet,
questsOfCategory: questsOfCategory
};

View File

@@ -535,7 +535,15 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', '
content: html
}).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(){
//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
- var questCategories = {'unlockable':'unlockableQuests','gold':'goldQuests','pet':'petQuests'}
include ../../shared/mixins
.container-fluid
.row: .col-xs-12
@@ -13,25 +12,14 @@
.row
.col-md-6
h3.equipment-title=env.t('yourQuests')
menu.inventory-list
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}}
+ownedQuests(true,'right')
.col-md-6.border-left
li.customize-menu
h3.equipment-title=env.t('questsForSale')
each caption,type in questCategories
menu.pets-menu(label=env.t(caption))
div(ng-repeat='quest in Content.questsByLevel', ng-if='quest.canBuy && quest.category === "#{type}"')
div(ng-repeat='(type,caption) in Content.questCategories')
menu.pets-menu(label='{{env.t(caption)}}')
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}}"',
data-popover-html="{{::lockQuest(quest,true) ? env.t('scrollsPre') : questPopover(quest) | markdown}}",
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)')
| {{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 -------
.panel.panel-default
.panel-heading
@@ -63,21 +66,6 @@ a.pull-right.gem-wallet(ng-if='group.type!="party"', popover-trigger='mouseenter
=env.t('members')
button.pull-right.btn.btn-primary(ng-click="openInviteModal(group)")=env.t("inviteFriends")
.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')
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')
@@ -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}}
= ' ' + env.t('moreMembers')
|</span>
h4(ng-show='group.invites.length > 0')=env.t('invited')
table.table.table-striped
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)')
| {{invite.profile.name}}
div.text-center(ng-if='group.type === "party"')
button.btn.btn-success.margin-auto.width-100=env.t('startQuest')
.panel.panel-default
.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
@@ -135,3 +138,4 @@ a.pull-right.gem-wallet(ng-if='group.type!="party"', popover-trigger='mouseenter
include ./chat-box
+chatMessages()
h4(ng-if='group.chat.length < 1 && group.type === "party"')=env.t('partyChatEmpty')

View File

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

View File

@@ -17,3 +17,19 @@ mixin previewMarkdown(text)
.panel-heading=env.t('msgPreviewHeading')
.panel-body.markdown-preview
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
p(style='margin:2em')=env.t('exclusiveQuestScroll')
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>"})
pre(style='margin:1em 0 0 0').
{{user.id}}

View File

@@ -1,4 +1,5 @@
include ./quest-rewards
include ../mixins
mixin questInfo
.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-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')
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')