-
Notifications
You must be signed in to change notification settings - Fork 0
/
user.js
61 lines (54 loc) · 1.93 KB
/
user.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
export class User {
constructor(bungie, rawData) {
this.bungie = bungie;
this.rawData = rawData;
this.memberships = rawData.destinyMemberships.map(data => new Membership(this, data));
for (let membership of this.memberships)
if (membership.rawData.membershipId == rawData.primaryMembershipId) {
this.primaryMembership = membership;
break;
}
}
}
class Membership {
constructor(user, rawData) {
this.user = user;
this.rawData = rawData;
this.profiledata = {};
}
async getCharacters() {
if (!this.characters_) {
let data = await this.user.bungie.net.platform.destiny2[this.rawData.membershipType].profile[this.rawData.membershipId](
{components: 'Characters,CharacterEquipment,CharacterInventories'});
this.characters_ = {};
for (let [characterId, characterData] of Object.entries(data.Response.characters.data))
this.characters_[characterId] = new Character(
this, characterData, data.Response.characterEquipment.data[characterId].items,
data.Response.characterInventories.data[characterId].items);
}
return this.characters_;
}
}
class Character {
constructor(membership, rawCharacter, rawEquipment, rawInventory) {
this.membership = membership;
this.rawCharacter = rawCharacter;
this.rawItems = rawEquipment.concat(rawInventory);
}
buildEmblem() {
let div = document.createElement('div');
div.appendChild(document.createElement('img')).src = this.membership.user.bungie.iconUrl(this.rawCharacter.emblemBackgroundPath);
div.appendChild(document.createTextNode(this.rawCharacter.characterId));
div.addEventListener('click', e => console.log(this));
return div;
}
getItemsByBucket() {
let buckets = {};
for (let item of this.rawItems) {
if (!buckets[item.bucketHash])
buckets[item.bucketHash] = [];
buckets[item.bucketHash].push(item);
}
return buckets;
}
}