dcl-npc-toolkit 0.0.0 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/config.js ADDED
@@ -0,0 +1,89 @@
1
+ import { Color4 } from "@dcl/sdk/math";
2
+ export let extraFemaleShoes = [
3
+ "urn:decentraland:off-chain:base-avatars:bun_shoes",
4
+ "urn:decentraland:off-chain:base-avatars:pink_blue_socks",
5
+ "urn:decentraland:off-chain:base-avatars:SchoolShoes",
6
+ "urn:decentraland:off-chain:base-avatars:ruby_blue_loafer"
7
+ ];
8
+ export let extraFemalePants = [
9
+ "urn:decentraland:off-chain:base-avatars:f_stripe_white_pants",
10
+ "urn:decentraland:off-chain:base-avatars:f_red_modern_pants",
11
+ "urn:decentraland:off-chain:base-avatars:f_school_skirt",
12
+ "urn:decentraland:off-chain:base-avatars:f_capris",
13
+ "urn:decentraland:off-chain:base-avatars:f_red_comfy_pants"
14
+ ];
15
+ export let extraFemaleTop = [
16
+ "urn:decentraland:off-chain:base-avatars:baggy_pullover",
17
+ "urn:decentraland:off-chain:base-avatars:light_green_shirt",
18
+ "urn:decentraland:off-chain:base-avatars:school_shirt",
19
+ "urn:decentraland:off-chain:base-avatars:f_blue_jacket",
20
+ "urn:decentraland:matic:collections-v2:0xb8326d69371668bb8403463e4f71c10b408535c3:1"
21
+ ];
22
+ export let extraMaleShoes = [
23
+ "urn:decentraland:off-chain:base-avatars:comfy_sport_sandals",
24
+ "urn:decentraland:off-chain:base-avatars:crocs",
25
+ "urn:decentraland:off-chain:base-avatars:m_mountainshoes.glb",
26
+ "urn:decentraland:off-chain:base-avatars:citycomfortableshoes",
27
+ "urn:decentraland:off-chain:base-avatars:classic_shoes",
28
+ "urn:decentraland:off-chain:base-avatars:sneakers",
29
+ "urn:decentraland:off-chain:base-avatars:moccasin"
30
+ ];
31
+ export let extraMalePants = [
32
+ "urn:decentraland:off-chain:base-avatars:soccer_pants",
33
+ "urn:decentraland:off-chain:base-avatars:swim_short",
34
+ "urn:decentraland:off-chain:base-avatars:kilt",
35
+ "urn:decentraland:off-chain:base-avatars:hip_hop_joggers",
36
+ "urn:decentraland:off-chain:base-avatars:brown_pants_02",
37
+ "urn:decentraland:off-chain:base-avatars:basketball_shorts",
38
+ "urn:decentraland:off-chain:base-avatars:brown_pants_02",
39
+ "urn:decentraland:off-chain:base-avatars:puffer_jacket_hoodie"
40
+ ];
41
+ export let extraMaleTop = [
42
+ "urn:decentraland:off-chain:base-avatars:yellow_tshirt",
43
+ "urn:decentraland:off-chain:base-avatars:m_sweater",
44
+ "urn:decentraland:off-chain:base-avatars:turtle_neck_sweater",
45
+ "urn:decentraland:off-chain:base-avatars:puffer_jacket_hoodie",
46
+ "urn:decentraland:off-chain:base-avatars:elegant_sweater",
47
+ "urn:decentraland:off-chain:base-avatars:pride_tshirt",
48
+ "urn:decentraland:off-chain:base-avatars:elegant_sweater",
49
+ "urn:decentraland:matic:collections-v2:0xb8326d69371668bb8403463e4f71c10b408535c3:1"
50
+ ];
51
+ export let extraskin = [
52
+ Color4.create(.24, .13, .04),
53
+ Color4.create(.6, .37, .22),
54
+ Color4.create(.48, .28, .09),
55
+ Color4.create(.98, .82, .51),
56
+ ];
57
+ export let extrahair = [
58
+ Color4.create(.6, .37, .22),
59
+ Color4.create(.3, .52, .4),
60
+ Color4.create(.55, .13, .08),
61
+ Color4.create(.11, .11, .11),
62
+ Color4.create(.48, .28, .09),
63
+ Color4.create(.98, .82, .51),
64
+ Color4.create(.55, .13, .08),
65
+ ];
66
+ export let extraFemaleHairstyle = [
67
+ "urn:decentraland:off-chain:base-avatars:hair_anime_01",
68
+ "urn:decentraland:off-chain:base-avatars:pony_tail",
69
+ "urn:decentraland:off-chain:base-avatars:standard_hair",
70
+ "urn:decentraland:off-chain:base-avatars:shoulder_hair",
71
+ "urn:decentraland:off-chain:base-avatars:two_tails"
72
+ ];
73
+ export let extraMaleHairstyle = [
74
+ "urn:decentraland:off-chain:base-avatars:standard_hair",
75
+ "urn:decentraland:off-chain:base-avatars:hair_oldie",
76
+ "urn:decentraland:off-chain:base-avatars:keanu_hair",
77
+ "urn:decentraland:off-chain:base-avatars:tall_front_01",
78
+ "urn:decentraland:off-chain:base-avatars:00_bald"
79
+ ];
80
+ export let extraeyes = [
81
+ Color4.create(.22, .49, .69),
82
+ Color4.create(.6, .37, .22),
83
+ Color4.create(.3, .52, .4),
84
+ Color4.create(.55, .13, .08),
85
+ Color4.create(.11, .11, .11),
86
+ Color4.create(.48, .28, .09),
87
+ Color4.create(.98, .82, .51),
88
+ ];
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRXRDLE1BQU0sQ0FBQyxJQUFJLGdCQUFnQixHQUFRO0lBQy9CLG1EQUFtRDtJQUNuRCx5REFBeUQ7SUFDekQscURBQXFEO0lBQ3JELDBEQUEwRDtDQUM3RCxDQUFBO0FBRUQsTUFBTSxDQUFDLElBQUksZ0JBQWdCLEdBQVE7SUFDaEMsOERBQThEO0lBQzlELDREQUE0RDtJQUM1RCx3REFBd0Q7SUFDeEQsa0RBQWtEO0lBQ2xELDJEQUEyRDtDQUM3RCxDQUFBO0FBRUQsTUFBTSxDQUFDLElBQUksY0FBYyxHQUFRO0lBQzlCLHdEQUF3RDtJQUN4RCwyREFBMkQ7SUFDM0Qsc0RBQXNEO0lBQ3RELHVEQUF1RDtJQUN2RCxvRkFBb0Y7Q0FDdEYsQ0FBQTtBQUVELE1BQU0sQ0FBQyxJQUFJLGNBQWMsR0FBUTtJQUM5Qiw2REFBNkQ7SUFDN0QsK0NBQStDO0lBQy9DLDZEQUE2RDtJQUM3RCw4REFBOEQ7SUFDOUQsdURBQXVEO0lBQ3ZELGtEQUFrRDtJQUNsRCxrREFBa0Q7Q0FDcEQsQ0FBQTtBQUVELE1BQU0sQ0FBQyxJQUFJLGNBQWMsR0FBUTtJQUM5QixzREFBc0Q7SUFDdEQsb0RBQW9EO0lBQ3BELDhDQUE4QztJQUM5Qyx5REFBeUQ7SUFDekQsd0RBQXdEO0lBQ3ZELDJEQUEyRDtJQUMzRCx3REFBd0Q7SUFDeEQsOERBQThEO0NBQ2pFLENBQUE7QUFFRCxNQUFNLENBQUMsSUFBSSxZQUFZLEdBQVE7SUFDNUIsdURBQXVEO0lBQ3ZELG1EQUFtRDtJQUNuRCw2REFBNkQ7SUFDN0QsOERBQThEO0lBQzlELHlEQUF5RDtJQUN6RCxzREFBc0Q7SUFDdEQseURBQXlEO0lBQ3pELG9GQUFvRjtDQUN0RixDQUFBO0FBRUQsTUFBTSxDQUFDLElBQUksU0FBUyxHQUFRO0lBQ3pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLENBQUM7SUFDMUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEdBQUcsQ0FBQztJQUN6QixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQzNCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBQyxHQUFHLENBQUM7Q0FDN0IsQ0FBQTtBQUVELE1BQU0sQ0FBQyxJQUFJLFNBQVMsR0FBUTtJQUN6QixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsR0FBRyxDQUFDO0lBQ3pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLENBQUM7SUFDeEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsQ0FBQztJQUMxQixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxDQUFDO0lBQzFCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDM0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFDLEdBQUcsQ0FBQztJQUMzQixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUMsR0FBRyxDQUFDO0NBQzdCLENBQUE7QUFFRCxNQUFNLENBQUMsSUFBSSxvQkFBb0IsR0FBUztJQUNyQyx1REFBdUQ7SUFDdkQsbURBQW1EO0lBQ25ELHVEQUF1RDtJQUN2RCx1REFBdUQ7SUFDdkQsbURBQW1EO0NBQ3JELENBQUE7QUFFRCxNQUFNLENBQUMsSUFBSSxrQkFBa0IsR0FBUztJQUNuQyx1REFBdUQ7SUFDdkQsb0RBQW9EO0lBQ3BELG9EQUFvRDtJQUNwRCx1REFBdUQ7SUFDdkQsaURBQWlEO0NBQ25ELENBQUE7QUFFRCxNQUFNLENBQUMsSUFBSSxTQUFTLEdBQVM7SUFDMUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsQ0FBQztJQUMxQixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsR0FBRyxDQUFDO0lBQ3pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLENBQUM7SUFDeEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsQ0FBQztJQUMxQixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxDQUFDO0lBQzFCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDM0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFDLEdBQUcsQ0FBQztDQUM3QixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sb3I0IH0gZnJvbSBcIkBkY2wvc2RrL21hdGhcIlxuXG5leHBvcnQgbGV0IGV4dHJhRmVtYWxlU2hvZXM6YW55W10gPVtcbiAgICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpidW5fc2hvZXNcIixcbiAgICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpwaW5rX2JsdWVfc29ja3NcIixcbiAgICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpTY2hvb2xTaG9lc1wiLFxuICAgIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOnJ1YnlfYmx1ZV9sb2FmZXJcIlxuXVxuXG5leHBvcnQgbGV0IGV4dHJhRmVtYWxlUGFudHM6YW55W10gPVtcbiAgIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmZfc3RyaXBlX3doaXRlX3BhbnRzXCIsXG4gICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpmX3JlZF9tb2Rlcm5fcGFudHNcIixcbiAgIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmZfc2Nob29sX3NraXJ0XCIsXG4gICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpmX2NhcHJpc1wiLFxuICAgXCJ1cm46ZGVjZW50cmFsYW5kOm9mZi1jaGFpbjpiYXNlLWF2YXRhcnM6Zl9yZWRfY29tZnlfcGFudHNcIlxuXVxuXG5leHBvcnQgbGV0IGV4dHJhRmVtYWxlVG9wOmFueVtdID1bXG4gICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpiYWdneV9wdWxsb3ZlclwiLFxuICAgXCJ1cm46ZGVjZW50cmFsYW5kOm9mZi1jaGFpbjpiYXNlLWF2YXRhcnM6bGlnaHRfZ3JlZW5fc2hpcnRcIixcbiAgIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOnNjaG9vbF9zaGlydFwiLFxuICAgXCJ1cm46ZGVjZW50cmFsYW5kOm9mZi1jaGFpbjpiYXNlLWF2YXRhcnM6Zl9ibHVlX2phY2tldFwiLFxuICAgXCJ1cm46ZGVjZW50cmFsYW5kOm1hdGljOmNvbGxlY3Rpb25zLXYyOjB4YjgzMjZkNjkzNzE2NjhiYjg0MDM0NjNlNGY3MWMxMGI0MDg1MzVjMzoxXCJcbl1cblxuZXhwb3J0IGxldCBleHRyYU1hbGVTaG9lczphbnlbXSA9W1xuICAgXCJ1cm46ZGVjZW50cmFsYW5kOm9mZi1jaGFpbjpiYXNlLWF2YXRhcnM6Y29tZnlfc3BvcnRfc2FuZGFsc1wiLFxuICAgXCJ1cm46ZGVjZW50cmFsYW5kOm9mZi1jaGFpbjpiYXNlLWF2YXRhcnM6Y3JvY3NcIixcbiAgIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOm1fbW91bnRhaW5zaG9lcy5nbGJcIixcbiAgIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmNpdHljb21mb3J0YWJsZXNob2VzXCIsXG4gICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpjbGFzc2ljX3Nob2VzXCIsXG4gICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpzbmVha2Vyc1wiLFxuICAgXCJ1cm46ZGVjZW50cmFsYW5kOm9mZi1jaGFpbjpiYXNlLWF2YXRhcnM6bW9jY2FzaW5cIlxuXVxuXG5leHBvcnQgbGV0IGV4dHJhTWFsZVBhbnRzOmFueVtdID1bXG4gICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpzb2NjZXJfcGFudHNcIixcbiAgIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOnN3aW1fc2hvcnRcIixcbiAgIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmtpbHRcIixcbiAgIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmhpcF9ob3Bfam9nZ2Vyc1wiLFxuICAgXCJ1cm46ZGVjZW50cmFsYW5kOm9mZi1jaGFpbjpiYXNlLWF2YXRhcnM6YnJvd25fcGFudHNfMDJcIixcbiAgICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpiYXNrZXRiYWxsX3Nob3J0c1wiLFxuICAgIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmJyb3duX3BhbnRzXzAyXCIsXG4gICAgXCJ1cm46ZGVjZW50cmFsYW5kOm9mZi1jaGFpbjpiYXNlLWF2YXRhcnM6cHVmZmVyX2phY2tldF9ob29kaWVcIlxuXVxuXG5leHBvcnQgbGV0IGV4dHJhTWFsZVRvcDphbnlbXSA9W1xuICAgXCJ1cm46ZGVjZW50cmFsYW5kOm9mZi1jaGFpbjpiYXNlLWF2YXRhcnM6eWVsbG93X3RzaGlydFwiLFxuICAgXCJ1cm46ZGVjZW50cmFsYW5kOm9mZi1jaGFpbjpiYXNlLWF2YXRhcnM6bV9zd2VhdGVyXCIsXG4gICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczp0dXJ0bGVfbmVja19zd2VhdGVyXCIsXG4gICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpwdWZmZXJfamFja2V0X2hvb2RpZVwiLFxuICAgXCJ1cm46ZGVjZW50cmFsYW5kOm9mZi1jaGFpbjpiYXNlLWF2YXRhcnM6ZWxlZ2FudF9zd2VhdGVyXCIsXG4gICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpwcmlkZV90c2hpcnRcIixcbiAgIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmVsZWdhbnRfc3dlYXRlclwiLFxuICAgXCJ1cm46ZGVjZW50cmFsYW5kOm1hdGljOmNvbGxlY3Rpb25zLXYyOjB4YjgzMjZkNjkzNzE2NjhiYjg0MDM0NjNlNGY3MWMxMGI0MDg1MzVjMzoxXCJcbl1cblxuZXhwb3J0IGxldCBleHRyYXNraW46YW55W109IFtcbiAgIENvbG9yNC5jcmVhdGUoLjI0LC4xMywuMDQpLFxuICAgQ29sb3I0LmNyZWF0ZSguNiwuMzcsLjIyKSxcbiAgIENvbG9yNC5jcmVhdGUoLjQ4LC4yOCwgLjA5KSxcbiAgIENvbG9yNC5jcmVhdGUoLjk4LCAuODIsLjUxKSxcbl1cblxuZXhwb3J0IGxldCBleHRyYWhhaXI6YW55W109IFtcbiAgIENvbG9yNC5jcmVhdGUoLjYsLjM3LC4yMiksXG4gICBDb2xvcjQuY3JlYXRlKC4zLC41MiwuNCksXG4gICBDb2xvcjQuY3JlYXRlKC41NSwuMTMsLjA4KSxcbiAgIENvbG9yNC5jcmVhdGUoLjExLC4xMSwuMTEpLFxuICAgQ29sb3I0LmNyZWF0ZSguNDgsLjI4LCAuMDkpLFxuICAgQ29sb3I0LmNyZWF0ZSguOTgsIC44MiwuNTEpLFxuICAgQ29sb3I0LmNyZWF0ZSguNTUsIC4xMywuMDgpLFxuXVxuXG5leHBvcnQgbGV0IGV4dHJhRmVtYWxlSGFpcnN0eWxlOmFueVtdID0gW1xuICAgXCJ1cm46ZGVjZW50cmFsYW5kOm9mZi1jaGFpbjpiYXNlLWF2YXRhcnM6aGFpcl9hbmltZV8wMVwiLFxuICAgXCJ1cm46ZGVjZW50cmFsYW5kOm9mZi1jaGFpbjpiYXNlLWF2YXRhcnM6cG9ueV90YWlsXCIsXG4gICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpzdGFuZGFyZF9oYWlyXCIsXG4gICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpzaG91bGRlcl9oYWlyXCIsXG4gICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczp0d29fdGFpbHNcIlxuXVxuXG5leHBvcnQgbGV0IGV4dHJhTWFsZUhhaXJzdHlsZTphbnlbXSA9IFtcbiAgIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOnN0YW5kYXJkX2hhaXJcIixcbiAgIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmhhaXJfb2xkaWVcIixcbiAgIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmtlYW51X2hhaXJcIixcbiAgIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOnRhbGxfZnJvbnRfMDFcIixcbiAgIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOjAwX2JhbGRcIlxuXVxuXG5leHBvcnQgbGV0IGV4dHJhZXllczphbnlbXSA9IFtcbiAgIENvbG9yNC5jcmVhdGUoLjIyLC40OSwuNjkpLFxuICAgQ29sb3I0LmNyZWF0ZSguNiwuMzcsLjIyKSxcbiAgIENvbG9yNC5jcmVhdGUoLjMsLjUyLC40KSxcbiAgIENvbG9yNC5jcmVhdGUoLjU1LC4xMywuMDgpLFxuICAgQ29sb3I0LmNyZWF0ZSguMTEsLjExLC4xMSksXG4gICBDb2xvcjQuY3JlYXRlKC40OCwuMjgsIC4wOSksXG4gICBDb2xvcjQuY3JlYXRlKC45OCwgLjgyLC41MSksXG5dXG4iXX0=
@@ -0,0 +1,27 @@
1
+ import { Entity } from "@dcl/sdk/ecs";
2
+ import { Dialog } from "./types";
3
+ export declare const npcDialogComponent: Map<Entity, any>;
4
+ export declare const npcDialogTypingSystems: Map<Entity, any>;
5
+ export declare enum ConfirmMode {
6
+ Confirm = 0,
7
+ Cancel = 1,
8
+ Next = 2,
9
+ Button3 = 3,
10
+ Button4 = 4
11
+ }
12
+ export declare function addDialog(npc: Entity, sound?: string): void;
13
+ export declare function getText(): any;
14
+ export declare function getButtonText(button: number): string;
15
+ export declare function getFontSize(): any;
16
+ export declare function displayDialog(): any;
17
+ export declare function displayButton(button: number): any;
18
+ export declare function displayFirstButtonContainer(): any;
19
+ export declare function displaySecondButtonContainer(): any;
20
+ export declare function getTextPosition(): {
21
+ top: any;
22
+ };
23
+ export declare function buttonClick(button: number): void;
24
+ export declare function closeDialog(npc: Entity): void;
25
+ export declare function talk(npc: Entity, dialog: Dialog[], startIndex?: number, duration?: number): void;
26
+ export declare function handleDialogClick(): void;
27
+ export declare function confirmText(npc: Entity, mode: ConfirmMode): void;
package/dist/dialog.js ADDED
@@ -0,0 +1,266 @@
1
+ import * as utils from '@dcl-sdk/utils';
2
+ import { AudioSource, engine } from "@dcl/sdk/ecs";
3
+ import { activeNPC, npcDataComponent } from "./npc";
4
+ import { IsTypingDialog } from "./components";
5
+ import { NPCState } from "./types";
6
+ export const npcDialogComponent = new Map();
7
+ export const npcDialogTypingSystems = new Map();
8
+ export var ConfirmMode;
9
+ (function (ConfirmMode) {
10
+ ConfirmMode[ConfirmMode["Confirm"] = 0] = "Confirm";
11
+ ConfirmMode[ConfirmMode["Cancel"] = 1] = "Cancel";
12
+ ConfirmMode[ConfirmMode["Next"] = 2] = "Next";
13
+ ConfirmMode[ConfirmMode["Button3"] = 3] = "Button3";
14
+ ConfirmMode[ConfirmMode["Button4"] = 4] = "Button4";
15
+ })(ConfirmMode || (ConfirmMode = {}));
16
+ export function addDialog(npc, sound) {
17
+ console.log('adding dialog for npc', npc);
18
+ npcDialogComponent.set(npc, {
19
+ typing: true,
20
+ visible: false,
21
+ visibleText: "",
22
+ visibleChars: 0,
23
+ fullText: "",
24
+ timer: 0,
25
+ speed: 30,
26
+ script: [],
27
+ index: 0,
28
+ sound: sound ? sound : undefined,
29
+ soundPlayer: sound ? engine.addEntity() : undefined,
30
+ fontSize: 22,
31
+ isQuestion: false,
32
+ buttons: 0
33
+ });
34
+ }
35
+ export function getText() {
36
+ return activeNPC == 0 || !npcDialogComponent.has(activeNPC) ? "" : npcDialogComponent.get(activeNPC).visibleText;
37
+ }
38
+ export function getButtonText(button) {
39
+ let text = "";
40
+ if (activeNPC != 0 && npcDialogComponent.has(activeNPC)) {
41
+ let dialogData = npcDialogComponent.get(activeNPC);
42
+ if (dialogData.isQuestion && dialogData.buttons > button) {
43
+ text = dialogData.script[dialogData.index].buttons[button].label;
44
+ }
45
+ }
46
+ return text;
47
+ }
48
+ export function getFontSize() {
49
+ return activeNPC == 0 || !npcDialogComponent.has(activeNPC) ? 22 : npcDialogComponent.get(activeNPC).fontSize;
50
+ }
51
+ export function displayDialog() {
52
+ return activeNPC == 0 || !npcDialogComponent.has(activeNPC) ? false : npcDialogComponent.get(activeNPC).visible;
53
+ }
54
+ export function displayButton(button) {
55
+ return activeNPC == 0 || !npcDialogComponent.has(activeNPC) ? false : npcDialogComponent.get(activeNPC).isQuestion && npcDialogComponent.get(activeNPC).buttons >= button;
56
+ }
57
+ export function displayFirstButtonContainer() {
58
+ return activeNPC == 0 || !npcDialogComponent.has(activeNPC) ? false : npcDialogComponent.get(activeNPC).isQuestion && npcDialogComponent.get(activeNPC).buttons >= 1;
59
+ }
60
+ export function displaySecondButtonContainer() {
61
+ return activeNPC == 0 || !npcDialogComponent.has(activeNPC) ? false : npcDialogComponent.get(activeNPC).isQuestion && npcDialogComponent.get(activeNPC).buttons >= 3;
62
+ }
63
+ export function getTextPosition() {
64
+ return activeNPC == 0 || !npcDialogComponent.has(activeNPC) ? { top: 0 } : { top: npcDataComponent.get(activeNPC).margin };
65
+ }
66
+ export function buttonClick(button) {
67
+ if (activeNPC != 0 && npcDataComponent.has(activeNPC)) {
68
+ confirmText(activeNPC, button);
69
+ }
70
+ }
71
+ export function closeDialog(npc) {
72
+ let dialogData = npcDialogComponent.get(npc);
73
+ dialogData.visible = false;
74
+ dialogData.typing = false;
75
+ dialogData.visibleText = "";
76
+ dialogData.visibleChars = 0;
77
+ dialogData.fullText = "";
78
+ dialogData.timer = 0;
79
+ dialogData.index = 0;
80
+ dialogData.script = [];
81
+ dialogData.buttons = 0;
82
+ dialogData.margin = 0;
83
+ }
84
+ export function talk(npc, dialog, startIndex, duration) {
85
+ npcDataComponent.get(npc).introduced = true;
86
+ console.log('trying to talk npc');
87
+ if (npcDialogComponent.has(npc)) {
88
+ console.log('we have npc dialog compoentn for ', npc);
89
+ npcDataComponent.get(npc).state = NPCState.TALKING;
90
+ openDialog(npc, dialog, startIndex ? startIndex : 0);
91
+ }
92
+ }
93
+ function openDialog(npc, dialog, startIndex) {
94
+ let dialogData = npcDialogComponent.get(npc);
95
+ dialogData.script = addLineBreaks(dialog);
96
+ dialogData.index = startIndex;
97
+ let currentText = dialog[startIndex] ? dialog[startIndex] : { text: '' };
98
+ if (currentText.audio) {
99
+ AudioSource.createOrReplace(dialogData.soundPlayer, {
100
+ audioClipUrl: currentText.audio,
101
+ loop: false,
102
+ playing: false
103
+ });
104
+ let audio = AudioSource.getMutable(dialogData.soundPlayer);
105
+ audio.volume = 0.5;
106
+ audio.playing = true;
107
+ }
108
+ else if (dialogData.sound) {
109
+ AudioSource.createOrReplace(dialogData.soundPlayer, {
110
+ audioClipUrl: dialogData.sound,
111
+ loop: false,
112
+ playing: false
113
+ });
114
+ let audio = AudioSource.getMutable(dialogData.soundPlayer);
115
+ audio.volume = 0.5;
116
+ audio.playing = true;
117
+ }
118
+ beginTyping(npc);
119
+ }
120
+ function beginTyping(npc) {
121
+ let dialogData = npcDialogComponent.get(npc);
122
+ dialogData.fullText = dialogData.script[dialogData.index].text;
123
+ dialogData.visible = true;
124
+ dialogData.typing = true;
125
+ dialogData.visibleText = "";
126
+ dialogData.visibleChars = 0;
127
+ dialogData.timer = 0;
128
+ dialogData.isQuestion = false;
129
+ dialogData.buttons = 0;
130
+ if (dialogData.script[dialogData.index].isQuestion) {
131
+ dialogData.buttons = dialogData.script[dialogData.index].buttons.length;
132
+ if (dialogData.buttons >= 3) {
133
+ dialogData.margin = -300;
134
+ }
135
+ else if (dialogData.buttons >= 1) {
136
+ dialogData.margin = -300;
137
+ }
138
+ console.log(dialogData);
139
+ utils.timers.setTimeout(function () {
140
+ console.log('setting question to true');
141
+ dialogData.isQuestion = true;
142
+ }, 700);
143
+ }
144
+ dialogData.openTime = Math.floor(Date.now());
145
+ if (dialogData.script[dialogData.index].fontSize) {
146
+ dialogData.fontSize = dialogData.script[dialogData.index].fontSize;
147
+ }
148
+ if (dialogData.script[dialogData.index].hasOwnProperty("typeSpeed")) {
149
+ dialogData.speed = dialogData.script[dialogData.index].typeSpeed;
150
+ }
151
+ else {
152
+ dialogData.speed = 30;
153
+ }
154
+ if (dialogData.speed <= 0) {
155
+ rushText(npc);
156
+ }
157
+ else {
158
+ if (!IsTypingDialog.has(npc)) {
159
+ IsTypingDialog.create(npc);
160
+ }
161
+ }
162
+ }
163
+ function addLineBreaks(dialog) {
164
+ let cleaned = [];
165
+ dialog.forEach((d) => {
166
+ d.text = lineBreak(d.text, 50);
167
+ cleaned.push(d);
168
+ });
169
+ return cleaned;
170
+ }
171
+ function lineBreak(text, maxLineLength) {
172
+ const words = text.split(' ');
173
+ let currentLine = '';
174
+ const lines = [];
175
+ for (const word of words) {
176
+ if (currentLine.length + word.length + 1 <= maxLineLength) {
177
+ currentLine += `${word} `;
178
+ }
179
+ else {
180
+ lines.push(currentLine.trim());
181
+ currentLine = `${word} `;
182
+ }
183
+ }
184
+ lines.push(currentLine.trim());
185
+ return lines.join('\n');
186
+ }
187
+ export function handleDialogClick() {
188
+ let npc = activeNPC;
189
+ if (npcDialogComponent.has(npc)) {
190
+ let dialogData = npcDialogComponent.get(npc);
191
+ if (!dialogData.visible || (Math.floor(Date.now()) - dialogData.openTime < 100))
192
+ return;
193
+ if (dialogData.typing) {
194
+ rushText(npc);
195
+ }
196
+ else {
197
+ confirmText(npc, ConfirmMode.Next);
198
+ }
199
+ }
200
+ }
201
+ function rushText(npc) {
202
+ let dialogData = npcDialogComponent.get(npc);
203
+ dialogData.typing = false;
204
+ dialogData.timer = 0;
205
+ dialogData.visibleChars = dialogData.fullText.length;
206
+ dialogData.visibleText = dialogData.fullText;
207
+ }
208
+ export function confirmText(npc, mode) {
209
+ let dialogData = npcDialogComponent.get(npc);
210
+ dialogData.openTime = Math.floor(Date.now());
211
+ let currentText = dialogData.script[dialogData.index];
212
+ if (mode == ConfirmMode.Next) {
213
+ if (!currentText.isQuestion) {
214
+ if (currentText.triggeredByNext) {
215
+ currentText.triggeredByNext();
216
+ }
217
+ if (currentText.isEndOfDialog) {
218
+ closeDialog(npc);
219
+ return;
220
+ }
221
+ dialogData.index++;
222
+ }
223
+ }
224
+ if (mode == ConfirmMode.Confirm) {
225
+ if (currentText.buttons && currentText.buttons.length >= 1) {
226
+ if (typeof currentText.buttons[0].goToDialog === 'number') {
227
+ dialogData.index = currentText.buttons[0].goToDialog;
228
+ }
229
+ if (currentText.buttons[0].triggeredActions) {
230
+ currentText.buttons[0].triggeredActions();
231
+ }
232
+ }
233
+ }
234
+ if (mode == ConfirmMode.Cancel) {
235
+ if (currentText.buttons && currentText.buttons.length >= 1) {
236
+ if (typeof currentText.buttons[1].goToDialog === 'number') {
237
+ dialogData.index = currentText.buttons[1].goToDialog;
238
+ }
239
+ if (currentText.buttons[1].triggeredActions) {
240
+ currentText.buttons[1].triggeredActions();
241
+ }
242
+ }
243
+ }
244
+ if (mode == ConfirmMode.Button3) {
245
+ if (currentText.buttons && currentText.buttons.length >= 1) {
246
+ if (typeof currentText.buttons[2].goToDialog === 'number') {
247
+ dialogData.index = currentText.buttons[2].goToDialog;
248
+ }
249
+ if (currentText.buttons[2].triggeredActions) {
250
+ currentText.buttons[2].triggeredActions();
251
+ }
252
+ }
253
+ }
254
+ if (mode == ConfirmMode.Button4) {
255
+ if (currentText.buttons && currentText.buttons.length >= 1) {
256
+ if (typeof currentText.buttons[3].goToDialog === 'number') {
257
+ dialogData.index = currentText.buttons[3].goToDialog;
258
+ }
259
+ if (currentText.buttons[3].triggeredActions) {
260
+ currentText.buttons[3].triggeredActions();
261
+ }
262
+ }
263
+ }
264
+ beginTyping(npc);
265
+ }
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2RpYWxvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLGdCQUFnQixDQUFBO0FBRXZDLE9BQU8sRUFBRSxXQUFXLEVBQVUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU5QyxPQUFPLEVBQVUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRzNDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFxQixJQUFJLEdBQUcsRUFBRSxDQUFBO0FBQzdELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFxQixJQUFJLEdBQUcsRUFBRSxDQUFBO0FBRWpFLE1BQU0sQ0FBTixJQUFZLFdBTVQ7QUFOSCxXQUFZLFdBQVc7SUFDbkIsbURBQVcsQ0FBQTtJQUNYLGlEQUFVLENBQUE7SUFDViw2Q0FBUSxDQUFBO0lBQ1IsbURBQVcsQ0FBQTtJQUNYLG1EQUFXLENBQUE7QUFDYixDQUFDLEVBTlMsV0FBVyxLQUFYLFdBQVcsUUFNcEI7QUFFSCxNQUFNLFVBQVUsU0FBUyxDQUFDLEdBQVUsRUFBRSxLQUFhO0lBQy9DLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDekMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUN4QixNQUFNLEVBQUMsSUFBSTtRQUNYLE9BQU8sRUFBQyxLQUFLO1FBQ2IsV0FBVyxFQUFDLEVBQUU7UUFDZCxZQUFZLEVBQUMsQ0FBQztRQUNkLFFBQVEsRUFBQyxFQUFFO1FBQ1gsS0FBSyxFQUFDLENBQUM7UUFDUCxLQUFLLEVBQUMsRUFBRTtRQUNSLE1BQU0sRUFBQyxFQUFFO1FBQ1QsS0FBSyxFQUFDLENB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QUksQ0FBQyxFQUFFO1lBQzFELElBQUksT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxRQUFRLEVBQUU7Z0JBQ3pELFVBQVUsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUE7YUFDckQ7WUFPRCxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQzNDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTthQUMxQztTQUNGO0tBQ0o7SUFHRCxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7QUFFcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0aWxzIGZyb20gJ0BkY2wtc2RrL3V0aWxzJ1xuXG5pbXBvcnQgeyBBdWRpb1NvdXJjZSwgRW50aXR5LCBlbmdpbmUgfSBmcm9tIFwiQGRjbC9zZGsvZWNzXCI7XG5pbXBvcnQgeyBhY3RpdmVOUEMsIG5wY0RhdGFDb21wb25lbnQgfSBmcm9tIFwiLi9ucGNcIjtcbmltcG9ydCB7IElzVHlwaW5nRGlhbG9nIH0gZnJvbSBcIi4vY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgaGFuZGxlRGlhbG9nVHlwaW5nIH0gZnJvbSBcIi4vc3lzdGVtc1wiO1xuaW1wb3J0IHsgRGlhbG9nLCBOUENTdGF0ZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cblxuZXhwb3J0IGNvbnN0IG5wY0RpYWxvZ0NvbXBvbmVudDogTWFwPEVudGl0eSwgYW55PiA9IG5ldyBNYXAoKVxuZXhwb3J0IGNvbnN0IG5wY0RpYWxvZ1R5cGluZ1N5c3RlbXM6IE1hcDxFbnRpdHksIGFueT4gPSBuZXcgTWFwKClcblxuZXhwb3J0IGVudW0gQ29uZmlybU1vZGUge1xuICAgIENvbmZpcm0gPSAwLFxuICAgIENhbmNlbCA9IDEsXG4gICAgTmV4dCA9IDIsXG4gICAgQnV0dG9uMyA9IDMsXG4gICAgQnV0dG9uNCA9IDRcbiAgfVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkRGlhbG9nKG5wYzpFbnRpdHksIHNvdW5kPzpzdHJpbmcpe1xuICAgIGNvbnNvbGUubG9nKCdhZGRpbmcgZGlhbG9nIGZvciBucGMnLCBucGMpXG4gICAgbnBjRGlhbG9nQ29tcG9uZW50LnNldChucGMsIHtcbiAgICAgICAgdHlwaW5nOnRydWUsXG4gICAgICAgIHZpc2libGU6ZmFsc2UsXG4gICAgICAgIHZpc2libGVUZXh0OlwiXCIsXG4gICAgICAgIHZpc2libGVDaGFyczowLFxuICAgICAgICBmdWxsVGV4dDpcIlwiLFxuICAgICAgICB0aW1lcjowLFxuICAgICAgICBzcGVlZDozMCxcbiAgICAgICAgc2NyaXB0OltdLFxuICAgICAgICBpbmRleDowLFxuICAgICAgICBzb3VuZDogc291bmQgPyBzb3VuZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgc291bmRQbGF5ZXI6IHNvdW5kID8gZW5naW5lLmFkZEVudGl0eSgpIDogdW5kZWZpbmVkLFxuICAgICAgICBmb250U2l6ZToyMixcbiAgICAgICAgaXNRdWVzdGlvbjpmYWxzZSxcbiAgICAgICAgYnV0dG9uczowXG4gICAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHQoKXtcbiAgICByZXR1cm4gYWN0aXZlTlBDID09IDAgfHwgIW5wY0RpYWxvZ0NvbXBvbmVudC5oYXMoYWN0aXZlTlBDIGFzIEVudGl0eSkgPyBcIlwiIDogbnBjRGlhbG9nQ29tcG9uZW50LmdldChhY3RpdmVOUEMgYXMgRW50aXR5KS52aXNpYmxlVGV4dFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnV0dG9uVGV4dChidXR0b246bnVtYmVyKXtcbiAgICBsZXQgdGV4dCA9IFwiXCJcblxuICAgIGlmKGFjdGl2ZU5QQyAhPSAwICYmIG5wY0RpYWxvZ0NvbXBvbmVudC5oYXMoYWN0aXZlTlBDIGFzIEVudGl0eSkpe1xuICAgICAgICBsZXQgZGlhbG9nRGF0YSA9IG5wY0RpYWxvZ0NvbXBvbmVudC5nZXQoYWN0aXZlTlBDIGFzIEVudGl0eSlcbiAgICAgICAgaWYoZGlhbG9nRGF0YS5pc1F1ZXN0aW9uICYmIGRpYWxvZ0RhdGEuYnV0dG9ucyA+IGJ1dHRvbil7XG4gICAgICAgICAgICB0ZXh0ID0gZGlhbG9nRGF0YS5zY3JpcHRbZGlhbG9nRGF0YS5pbmRleF0uYnV0dG9uc1tidXR0b25dLmxhYmVsXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRleHRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvbnRTaXplKCl7XG4gICAgcmV0dXJuIGFjdGl2ZU5QQyA9PSAwIHx8ICFucGNEaWFsb2dDb21wb25lbnQuaGFzKGFjdGl2ZU5QQyBhcyBFbnRpdHkpID8gMjIgOiBucGNEaWFsb2dDb21wb25lbnQuZ2V0KGFjdGl2ZU5QQyBhcyBFbnRpdHkpLmZvbnRTaXplXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5RGlhbG9nKCl7XG4gICAgcmV0dXJuIGFjdGl2ZU5QQyA9PSAwIHx8ICFucGNEaWFsb2dDb21wb25lbnQuaGFzKGFjdGl2ZU5QQyBhcyBFbnRpdHkpID8gZmFsc2UgOiAgbnBjRGlhbG9nQ29tcG9uZW50LmdldChhY3RpdmVOUEMgYXMgRW50aXR5KS52aXNpYmxlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5QnV0dG9uKGJ1dHRvbjpudW1iZXIpe1xuICAgIHJldHVybiBhY3RpdmVOUEMgPT0gMCB8fCAhbnBjRGlhbG9nQ29tcG9uZW50LmhhcyhhY3RpdmVOUEMgYXMgRW50aXR5KSA/IGZhbHNlIDogIG5wY0RpYWxvZ0NvbXBvbmVudC5nZXQoYWN0aXZlTlBDIGFzIEVudGl0eSkuaXNRdWVzdGlvbiAmJiBucGNEaWFsb2dDb21wb25lbnQuZ2V0KGFjdGl2ZU5QQyBhcyBFbnRpdHkpLmJ1dHRvbnMgPj0gYnV0dG9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5Rmlyc3RCdXR0b25Db250YWluZXIoKXtcbiAgICByZXR1cm4gYWN0aXZlTlBDID09IDAgfHwgIW5wY0RpYWxvZ0NvbXBvbmVudC5oYXMoYWN0aXZlTlBDIGFzIEVudGl0eSkgPyBmYWxzZSA6ICBucGNEaWFsb2dDb21wb25lbnQuZ2V0KGFjdGl2ZU5QQyBhcyBFbnRpdHkpLmlzUXVlc3Rpb24gJiYgbnBjRGlhbG9nQ29tcG9uZW50LmdldChhY3RpdmVOUEMgYXMgRW50aXR5KS5idXR0b25zID49IDFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BsYXlTZWNvbmRCdXR0b25Db250YWluZXIoKXtcbiAgICByZXR1cm4gYWN0aXZlTlBDID09IDAgfHwgIW5wY0RpYWxvZ0NvbXBvbmVudC5oYXMoYWN0aXZlTlBDIGFzIEVudGl0eSkgPyBmYWxzZSA6ICBucGNEaWFsb2dDb21wb25lbnQuZ2V0KGFjdGl2ZU5QQyBhcyBFbnRpdHkpLmlzUXVlc3Rpb24gJiYgbnBjRGlhbG9nQ29tcG9uZW50LmdldChhY3RpdmVOUEMgYXMgRW50aXR5KS5idXR0b25zID49IDNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRQb3NpdGlvbigpe1xuICAgIC8vY29uc29sZS5sb2cobnBjRGlhbG9nQ29tcG9uZW50LmdldChhY3RpdmVOUEMgYXMgRW50aXR5KS5idXR0b25zKVxuICAgIHJldHVybiBhY3RpdmVOUEMgPT0gMCB8fCAhbnBjRGlhbG9nQ29tcG9uZW50LmhhcyhhY3RpdmVOUEMgYXMgRW50aXR5KSA/IHt0b3A6MH0gOiB7dG9wOm5wY0RhdGFDb21wb25lbnQuZ2V0KGFjdGl2ZU5QQyBhcyBFbnRpdHkpLm1hcmdpbn1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1dHRvbkNsaWNrKGJ1dHRvbjpudW1iZXIpe1xuICAgIGlmKGFjdGl2ZU5QQyAhPSAwICYmIG5wY0RhdGFDb21wb25lbnQuaGFzKGFjdGl2ZU5QQyBhcyBFbnRpdHkpKXtcbiAgICAgICAgY29uZmlybVRleHQoYWN0aXZlTlBDIGFzIEVudGl0eSwgYnV0dG9uKVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlRGlhbG9nKG5wYzpFbnRpdHkpe1xuICAgIGxldCBkaWFsb2dEYXRhID0gbnBjRGlhbG9nQ29tcG9uZW50LmdldChucGMpXG4gICAgZGlhbG9nRGF0YS52aXNpYmxlID0gZmFsc2VcbiAgICBkaWFsb2dEYXRhLnR5cGluZyA9IGZhbHNlXG4gICAgZGlhbG9nRGF0YS52aXNpYmxlVGV4dCA9IFwiXCJcbiAgICBkaWFsb2dEYXRhLnZpc2libGVDaGFycyA9IDBcbiAgICBkaWFsb2dEYXRhLmZ1bGxUZXh0ID0gXCJcIlxuICAgIGRpYWxvZ0RhdGEudGltZXIgPSAwXG4gICAgZGlhbG9nRGF0YS5pbmRleCA9IDBcbiAgICBkaWFsb2dEYXRhLnNjcmlwdCA9IFtdXG4gICAgZGlhbG9nRGF0YS5idXR0b25zID0gMFxuICAgIGRpYWxvZ0RhdGEubWFyZ2luID0gMFxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFsayhucGM6RW50aXR5LCBkaWFsb2c6RGlhbG9nW10sIHN0YXJ0SW5kZXg/Om51bWJlciwgZHVyYXRpb24/Om51bWJlcil7XG4gICAgbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKS5pbnRyb2R1Y2VkID0gdHJ1ZVxuICAgIGNvbnNvbGUubG9nKCd0cnlpbmcgdG8gdGFsayBucGMnKVxuICAgIGlmKG5wY0RpYWxvZ0NvbXBvbmVudC5oYXMobnBjKSl7XG4gICAgICAgIGNvbnNvbGUubG9nKCd3ZSBoYXZlIG5wYyBkaWFsb2cgY29tcG9lbnRuIGZvciAnLCBucGMpXG4gICAgICAgIG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykuc3RhdGUgPSBOUENTdGF0ZS5UQUxLSU5HXG4gICAgICAgIG9wZW5EaWFsb2cobnBjLGRpYWxvZywgc3RhcnRJbmRleCA/IHN0YXJ0SW5kZXggOiAwKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gb3BlbkRpYWxvZyhucGM6RW50aXR5LCBkaWFsb2c6YW55W10sIHN0YXJ0SW5kZXg6bnVtYmVyKXtcbiAgICBsZXQgZGlhbG9nRGF0YSA9IG5wY0RpYWxvZ0NvbXBvbmVudC5nZXQobnBjKVxuICAgIGRpYWxvZ0RhdGEuc2NyaXB0ID0gYWRkTGluZUJyZWFrcyhkaWFsb2cpXG4gICAgZGlhbG9nRGF0YS5pbmRleCA9IHN0YXJ0SW5kZXhcbiAgICBcbiAgICBsZXQgY3VycmVudFRleHQ6IERpYWxvZyA9IGRpYWxvZ1tzdGFydEluZGV4XSA/IGRpYWxvZ1tzdGFydEluZGV4XSA6IHsgdGV4dDogJycgfVxuXG4gICAgaWYgKGN1cnJlbnRUZXh0LmF1ZGlvKSB7XG4gICAgICAgIEF1ZGlvU291cmNlLmNyZWF0ZU9yUmVwbGFjZShkaWFsb2dEYXRhLnNvdW5kUGxheWVyLCB7XG4gICAgICAgICAgICBhdWRpb0NsaXBVcmw6IGN1cnJlbnRUZXh0LmF1ZGlvLFxuICAgICAgICAgICAgbG9vcDogZmFsc2UsXG4gICAgICAgICAgICBwbGF5aW5nOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgICBsZXQgYXVkaW8gPSBBdWRpb1NvdXJjZS5nZXRNdXRhYmxlKGRpYWxvZ0RhdGEuc291bmRQbGF5ZXIpXG4gICAgICAgIGF1ZGlvLnZvbHVtZSA9IDAuNVxuICAgICAgICBhdWRpby5wbGF5aW5nID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoZGlhbG9nRGF0YS5zb3VuZCkge1xuICAgICAgICBBdWRpb1NvdXJjZS5jcmVhdGVPclJlcGxhY2UoZGlhbG9nRGF0YS5zb3VuZFBsYXllciwge1xuICAgICAgICAgICAgYXVkaW9DbGlwVXJsOiBkaWFsb2dEYXRhLnNvdW5kLFxuICAgICAgICAgICAgbG9vcDogZmFsc2UsXG4gICAgICAgICAgICBwbGF5aW5nOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgICBsZXQgYXVkaW8gPSBBdWRpb1NvdXJjZS5nZXRNdXRhYmxlKGRpYWxvZ0RhdGEuc291bmRQbGF5ZXIpXG4gICAgICAgIGF1ZGlvLnZvbHVtZSA9IDAuNVxuICAgICAgICBhdWRpby5wbGF5aW5nID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vVE9ET1xuICAgIC8vc2V0IHBvcnRyYWl0XG4gICAgLy9zZXQgaW1hZ2Ugb24gdGhlIHJpZ2h0XG4gICAgLy9zZXQgdGV4dFxuICAgIC8vZ2xvYmFsIGJ1dHRvbiBhY3Rpb25zXG5cbiAgICBiZWdpblR5cGluZyhucGMpXG59XG5cbmZ1bmN0aW9uIGJlZ2luVHlwaW5nKG5wYzpFbnRpdHkpe1xuICAgIGxldCBkaWFsb2dEYXRhID0gbnBjRGlhbG9nQ29tcG9uZW50LmdldChucGMpXG4gICAgZGlhbG9nRGF0YS5mdWxsVGV4dCA9IGRpYWxvZ0RhdGEuc2NyaXB0W2RpYWxvZ0RhdGEuaW5kZXhdLnRleHRcbiAgICBkaWFsb2dEYXRhLnZpc2libGUgPSB0cnVlXG4gICAgZGlhbG9nRGF0YS50eXBpbmcgPSB0cnVlXG4gICAgZGlhbG9nRGF0YS52aXNpYmxlVGV4dCA9IFwiXCJcbiAgICBkaWFsb2dEYXRhLnZpc2libGVDaGFycyA9IDBcbiAgICBkaWFsb2dEYXRhLnRpbWVyID0gMFxuICAgIGRpYWxvZ0RhdGEuaXNRdWVzdGlvbiA9IGZhbHNlXG4gICAgZGlhbG9nRGF0YS5idXR0b25zID0gMFxuXG4gICAgaWYoZGlhbG9nRGF0YS5zY3JpcHRbZGlhbG9nRGF0YS5pbmRleF0uaXNRdWVzdGlvbil7XG4gICAgICAgIGRpYWxvZ0RhdGEuYnV0dG9ucyA9IGRpYWxvZ0RhdGEuc2NyaXB0W2RpYWxvZ0RhdGEuaW5kZXhdLmJ1dHRvbnMubGVuZ3RoXG4gICAgICAgIGlmKGRpYWxvZ0RhdGEuYnV0dG9ucyA+PSAzKXtcbiAgICAgICAgICAgIGRpYWxvZ0RhdGEubWFyZ2luID0gLTMwMFxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYoZGlhbG9nRGF0YS5idXR0b25zID49MSl7XG4gICAgICAgICAgICBkaWFsb2dEYXRhLm1hcmdpbiA9IC0zMDBcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKGRpYWxvZ0RhdGEpXG4gICAgICAgIHV0aWxzLnRpbWVycy5zZXRUaW1lb3V0KFxuICAgICAgICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3NldHRpbmcgcXVlc3Rpb24gdG8gdHJ1ZScpXG4gICAgICAgICAgICAgICAgZGlhbG9nRGF0YS5pc1F1ZXN0aW9uID0gdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDcwMFxuICAgICAgICAgIClcbiAgICB9XG5cbiAgICBkaWFsb2dEYXRhLm9wZW5UaW1lID0gTWF0aC5mbG9vcihEYXRlLm5vdygpKVxuICAgIGlmKGRpYWxvZ0RhdGEuc2NyaXB0W2RpYWxvZ0RhdGEuaW5kZXhdLmZvbnRTaXplKXtcbiAgICAgICAgZGlhbG9nRGF0YS5mb250U2l6ZSA9IGRpYWxvZ0RhdGEuc2NyaXB0W2RpYWxvZ0RhdGEuaW5kZXhdLmZvbnRTaXplXG4gICAgfVxuICAgIFxuICAgIGlmKGRpYWxvZ0RhdGEuc2NyaXB0W2RpYWxvZ0RhdGEuaW5kZXhdLmhhc093blByb3BlcnR5KFwidHlwZVNwZWVkXCIpKXtcbiAgICAgICAgZGlhbG9nRGF0YS5zcGVlZCA9IGRpYWxvZ0RhdGEuc2NyaXB0W2RpYWxvZ0RhdGEuaW5kZXhdLnR5cGVTcGVlZFxuICAgIH1cbiAgICBlbHNle1xuICAgICAgICBkaWFsb2dEYXRhLnNwZWVkID0gMzBcbiAgICB9XG5cbiAgICBpZihkaWFsb2dEYXRhLnNwZWVkIDw9IDApe1xuICAgICAgICBydXNoVGV4dChucGMpXG4gICAgfVxuICAgIGVsc2V7XG4gICAgICAgIGlmKCFJc1R5cGluZ0RpYWxvZy5oYXMobnBjKSl7XG4gICAgICAgICAgICBJc1R5cGluZ0RpYWxvZy5jcmVhdGUobnBjKVxuICAgICAgICB9XG4gICAgXG4gICAgICAgIC8vIGlmKCFucGNEaWFsb2dUeXBpbmdTeXN0ZW1zLmhhcyhucGMpKXtcbiAgICAgICAgLy8gICAgIG5wY0RpYWxvZ1R5cGluZ1N5c3RlbXMuc2V0KG5wYyxlbmdpbmUuYWRkU3lzdGVtKGhhbmRsZURpYWxvZ1R5cGluZykpXG4gICAgICAgIC8vIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFkZExpbmVCcmVha3MoZGlhbG9nOkRpYWxvZ1tdKXtcbiAgICBsZXQgY2xlYW5lZDpEaWFsb2dbXSA9IFtdXG4gICAgZGlhbG9nLmZvckVhY2goKGQpPT57XG4gICAgICAgIGQudGV4dCA9IGxpbmVCcmVhayhkLnRleHQsIDUwKVxuICAgICAgICBjbGVhbmVkLnB1c2goZClcbiAgICB9KVxuICAgIHJldHVybiBjbGVhbmVkXG59XG5cbmZ1bmN0aW9uIGxpbmVCcmVhayh0ZXh0OiBzdHJpbmcsIG1heExpbmVMZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3Qgd29yZHMgPSB0ZXh0LnNwbGl0KCcgJyk7XG4gICAgbGV0IGN1cnJlbnRMaW5lID0gJyc7XG4gICAgY29uc3QgbGluZXMgPSBbXTtcbiAgXG4gICAgZm9yIChjb25zdCB3b3JkIG9mIHdvcmRzKSB7XG4gICAgICBpZiAoY3VycmVudExpbmUubGVuZ3RoICsgd29yZC5sZW5ndGggKyAxIDw9IG1heExpbmVMZW5ndGgpIHtcbiAgICAgICAgY3VycmVudExpbmUgKz0gYCR7d29yZH0gYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpbmVzLnB1c2goY3VycmVudExpbmUudHJpbSgpKTtcbiAgICAgICAgY3VycmVudExpbmUgPSBgJHt3b3JkfSBgO1xuICAgICAgfVxuICAgIH1cbiAgICBsaW5lcy5wdXNoKGN1cnJlbnRMaW5lLnRyaW0oKSk7XG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRGlhbG9nQ2xpY2soKXtcbiAgICBsZXQgbnBjID0gYWN0aXZlTlBDIGFzIEVudGl0eVxuICAgIGlmKG5wY0RpYWxvZ0NvbXBvbmVudC5oYXMobnBjKSl7XG4gICAgICAgIGxldCBkaWFsb2dEYXRhID0gbnBjRGlhbG9nQ29tcG9uZW50LmdldChucGMpXG4gICAgICAgIGlmKCFkaWFsb2dEYXRhLnZpc2libGUgfHwgKE1hdGguZmxvb3IoRGF0ZS5ub3coKSkgLSBkaWFsb2dEYXRhLm9wZW5UaW1lICA8IDEwMCkpIHJldHVyblxuICAgICAgICBcbiAgICAgICAgaWYoZGlhbG9nRGF0YS50eXBpbmcpe1xuICAgICAgICAgICAgcnVzaFRleHQobnBjKVxuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgICBjb25maXJtVGV4dChucGMsIENvbmZpcm1Nb2RlLk5leHQpXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJ1c2hUZXh0KG5wYzpFbnRpdHkpe1xuICAgIGxldCBkaWFsb2dEYXRhID0gbnBjRGlhbG9nQ29tcG9uZW50LmdldChucGMpXG4gICAgZGlhbG9nRGF0YS50eXBpbmcgPSBmYWxzZVxuICAgIGRpYWxvZ0RhdGEudGltZXIgPSAwXG4gICAgZGlhbG9nRGF0YS52aXNpYmxlQ2hhcnMgPSBkaWFsb2dEYXRhLmZ1bGxUZXh0Lmxlbmd0aFxuICAgIGRpYWxvZ0RhdGEudmlzaWJsZVRleHQgPSBkaWFsb2dEYXRhLmZ1bGxUZXh0XG4gICAgLy9lbmdpbmUucmVtb3ZlU3lzdGVtKG5wY0RpYWxvZ1R5cGluZ1N5c3RlbXMuZ2V0KG5wYykpXG59XG5leHBvcnQgZnVuY3Rpb24gY29uZmlybVRleHQobnBjOkVudGl0eSwgbW9kZTogQ29uZmlybU1vZGUpOiB2b2lkIHtcbiAgICBsZXQgZGlhbG9nRGF0YSA9IG5wY0RpYWxvZ0NvbXBvbmVudC5nZXQobnBjKVxuICAgIGRpYWxvZ0RhdGEub3BlblRpbWUgPSBNYXRoLmZsb29yKERhdGUubm93KCkpXG5cbiAgICBsZXQgY3VycmVudFRleHQgPSBkaWFsb2dEYXRhLnNjcmlwdFtkaWFsb2dEYXRhLmluZGV4XVxuICAgIC8vIFVwZGF0ZSBhY3RpdmUgdGV4dFxuICAgIGlmIChtb2RlID09IENvbmZpcm1Nb2RlLk5leHQpIHtcbiAgICAgICAgaWYgKCFjdXJyZW50VGV4dC5pc1F1ZXN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFRleHQudHJpZ2dlcmVkQnlOZXh0KSB7XG4gICAgICAgICAgICBjdXJyZW50VGV4dC50cmlnZ2VyZWRCeU5leHQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGN1cnJlbnRUZXh0LmlzRW5kT2ZEaWFsb2cpIHtcbiAgICAgICAgICAgIGNsb3NlRGlhbG9nKG5wYylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlhbG9nRGF0YS5pbmRleCsrXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobW9kZSA9PSBDb25maXJtTW9kZS5Db25maXJtKSB7XG4gICAgICAgIGlmIChjdXJyZW50VGV4dC5idXR0b25zICYmIGN1cnJlbnRUZXh0LmJ1dHRvbnMubGVuZ3RoID49IDEpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRUZXh0LmJ1dHRvbnNbMF0uZ29Ub0RpYWxvZyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGRpYWxvZ0RhdGEuaW5kZXggPSBjdXJyZW50VGV4dC5idXR0b25zWzBdLmdvVG9EaWFsb2dcbiAgICAgICAgICB9IFxuXG4gICAgICAgICAgLy9UT0RPXG4gICAgICAgICAgLy9hbGxvdyBkaWFsb2dzIHRvIGJlIGluZGV4IGJ5IG5hbWVcbiAgICAgICAgLy8gICBlbHNlIHtcbiAgICAgICAgLy8gICAgIHRoaXMuYWN0aXZlVGV4dElkID0gZmluZERpYWxvZ0J5TmFtZSh0aGlzLk5QQ1NjcmlwdCwgY3VycmVudFRleHQuYnV0dG9uc1swXS5nb1RvRGlhbG9nKVxuICAgICAgICAvLyAgIH1cbiAgICAgICAgICBpZiAoY3VycmVudFRleHQuYnV0dG9uc1swXS50cmlnZ2VyZWRBY3Rpb25zKSB7XG4gICAgICAgICAgICBjdXJyZW50VGV4dC5idXR0b25zWzBdLnRyaWdnZXJlZEFjdGlvbnMoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtb2RlID09IENvbmZpcm1Nb2RlLkNhbmNlbCkge1xuICAgICAgICBpZiAoY3VycmVudFRleHQuYnV0dG9ucyAmJiBjdXJyZW50VGV4dC5idXR0b25zLmxlbmd0aCA+PSAxKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50VGV4dC5idXR0b25zWzFdLmdvVG9EaWFsb2cgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBkaWFsb2dEYXRhLmluZGV4ID0gY3VycmVudFRleHQuYnV0dG9uc1sxXS5nb1RvRGlhbG9nXG4gICAgICAgICAgfSBcblxuICAgICAgICAgIC8vVE9ET1xuICAgICAgICAgIC8vYWxsb3cgZGlhbG9ncyB0byBiZSBpbmRleCBieSBuYW1lXG4gICAgICAgIC8vICAgZWxzZSB7XG4gICAgICAgIC8vICAgICB0aGlzLmFjdGl2ZVRleHRJZCA9IGZpbmREaWFsb2dCeU5hbWUodGhpcy5OUENTY3JpcHQsIGN1cnJlbnRUZXh0LmJ1dHRvbnNbMF0uZ29Ub0RpYWxvZylcbiAgICAgICAgLy8gICB9XG4gICAgICAgICAgaWYgKGN1cnJlbnRUZXh0LmJ1dHRvbnNbMV0udHJpZ2dlcmVkQWN0aW9ucykge1xuICAgICAgICAgICAgY3VycmVudFRleHQuYnV0dG9uc1sxXS50cmlnZ2VyZWRBY3Rpb25zKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobW9kZSA9PSBDb25maXJtTW9kZS5CdXR0b24zKSB7XG4gICAgICAgIGlmIChjdXJyZW50VGV4dC5idXR0b25zICYmIGN1cnJlbnRUZXh0LmJ1dHRvbnMubGVuZ3RoID49IDEpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRUZXh0LmJ1dHRvbnNbMl0uZ29Ub0RpYWxvZyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGRpYWxvZ0RhdGEuaW5kZXggPSBjdXJyZW50VGV4dC5idXR0b25zWzJdLmdvVG9EaWFsb2dcbiAgICAgICAgICB9IFxuXG4gICAgICAgICAgLy9UT0RPXG4gICAgICAgICAgLy9hbGxvdyBkaWFsb2dzIHRvIGJlIGluZGV4IGJ5IG5hbWVcbiAgICAgICAgLy8gICBlbHNlIHtcbiAgICAgICAgLy8gICAgIHRoaXMuYWN0aXZlVGV4dElkID0gZmluZERpYWxvZ0J5TmFtZSh0aGlzLk5QQ1NjcmlwdCwgY3VycmVudFRleHQuYnV0dG9uc1swXS5nb1RvRGlhbG9nKVxuICAgICAgICAvLyAgIH1cbiAgICAgICAgICBpZiAoY3VycmVudFRleHQuYnV0dG9uc1syXS50cmlnZ2VyZWRBY3Rpb25zKSB7XG4gICAgICAgICAgICBjdXJyZW50VGV4dC5idXR0b25zWzJdLnRyaWdnZXJlZEFjdGlvbnMoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtb2RlID09IENvbmZpcm1Nb2RlLkJ1dHRvbjQpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0LmJ1dHRvbnMgJiYgY3VycmVudFRleHQuYnV0dG9ucy5sZW5ndGggPj0gMSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudFRleHQuYnV0dG9uc1szXS5nb1RvRGlhbG9nID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgZGlhbG9nRGF0YS5pbmRleCA9IGN1cnJlbnRUZXh0LmJ1dHRvbnNbM10uZ29Ub0RpYWxvZ1xuICAgICAgICAgIH0gXG5cbiAgICAgICAgICAvL1RPRE9cbiAgICAgICAgICAvL2FsbG93IGRpYWxvZ3MgdG8gYmUgaW5kZXggYnkgbmFtZVxuICAgICAgICAvLyAgIGVsc2Uge1xuICAgICAgICAvLyAgICAgdGhpcy5hY3RpdmVUZXh0SWQgPSBmaW5kRGlhbG9nQnlOYW1lKHRoaXMuTlBDU2NyaXB0LCBjdXJyZW50VGV4dC5idXR0b25zWzBdLmdvVG9EaWFsb2cpXG4gICAgICAgIC8vICAgfVxuICAgICAgICAgIGlmIChjdXJyZW50VGV4dC5idXR0b25zWzNdLnRyaWdnZXJlZEFjdGlvbnMpIHtcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LmJ1dHRvbnNbM10udHJpZ2dlcmVkQWN0aW9ucygpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBiZWdpblR5cGluZyhucGMpXG5cbn0iXX0=
@@ -0,0 +1,7 @@
1
+ export declare function addFaceUserSystem(): void;
2
+ export declare const TrackUserFlag: import("@dcl/sdk/ecs").MapComponentDefinition<import("@dcl/sdk/ecs").MapResult<{
3
+ lockXZRotation: import("@dcl/sdk/ecs").ISchema<boolean>;
4
+ active: import("@dcl/sdk/ecs").ISchema<boolean>;
5
+ rotSpeed: import("@dcl/sdk/ecs").ISchema<number>;
6
+ }>>;
7
+ export declare function faceUserSystem(dt: number): void;
@@ -0,0 +1,28 @@
1
+ import { Schemas, Transform, engine } from "@dcl/sdk/ecs";
2
+ import { Quaternion, Vector3 } from "@dcl/sdk/math";
3
+ let faceUserAdded = false;
4
+ export function addFaceUserSystem() {
5
+ faceUserAdded = true;
6
+ engine.addSystem(faceUserSystem);
7
+ }
8
+ export const TrackUserFlag = engine.defineComponent("npcutils::trackUserFlag", {
9
+ lockXZRotation: Schemas.Boolean,
10
+ active: Schemas.Boolean,
11
+ rotSpeed: Schemas.Number
12
+ });
13
+ export function faceUserSystem(dt) {
14
+ for (const [entity, track] of engine.getEntitiesWith(TrackUserFlag)) {
15
+ if (track.active) {
16
+ const player = Transform.get(engine.PlayerEntity);
17
+ let lookAtTarget = Vector3.create(player.position.x, player.position.y, player.position.z);
18
+ let direction = Vector3.subtract(lookAtTarget, Transform.get(entity).position);
19
+ let transform = Transform.getMutable(entity);
20
+ transform.rotation = Quaternion.slerp(player.rotation, Quaternion.lookRotation(direction), dt * track.rotSpeed);
21
+ if (track.lockXZRotation) {
22
+ transform.rotation.x = 0;
23
+ transform.rotation.z = 0;
24
+ }
25
+ }
26
+ }
27
+ }
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjZVVzZXJTeXN0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZmFjZVVzZXJTeXN0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBR25ELElBQUksYUFBYSxHQUFZLEtBQUssQ0FBQTtBQUVsQyxNQUFNLFVBQVUsaUJBQWlCO0lBQy9CLGFBQWEsR0FBRyxJQUFJLENBQUE7SUFFcEIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQTtBQUNsQyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQ2xELHlCQUF5QixFQUN6QjtJQUNDLGNBQWMsRUFBRSxPQUFPLENBQUMsT0FBTztJQUMvQixNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU87SUFDckIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0NBQzFCLENBQUMsQ0FBQTtBQUVILE1BQU0sVUFBVSxjQUFjLENBQUMsRUFBVTtJQUN2QyxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsRUFBRTtRQUNuRSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDaEIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDakQsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQzFGLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUE7WUFFOUUsSUFBSSxTQUFTLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUM1QyxTQUFTLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7WUFFL0csSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFO2dCQUN4QixTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ3hCLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUN6QjtTQUNGO0tBQ0Y7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2NoZW1hcywgVHJhbnNmb3JtLCBlbmdpbmUgfSBmcm9tIFwiQGRjbC9zZGsvZWNzXCJcbmltcG9ydCB7IFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tIFwiQGRjbC9zZGsvbWF0aFwiXG5cblxubGV0IGZhY2VVc2VyQWRkZWQ6IGJvb2xlYW4gPSBmYWxzZVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkRmFjZVVzZXJTeXN0ZW0oKSB7XG4gIGZhY2VVc2VyQWRkZWQgPSB0cnVlXG5cbiAgZW5naW5lLmFkZFN5c3RlbShmYWNlVXNlclN5c3RlbSlcbn1cblxuZXhwb3J0IGNvbnN0IFRyYWNrVXNlckZsYWcgPSBlbmdpbmUuZGVmaW5lQ29tcG9uZW50KFxuXHRcIm5wY3V0aWxzOjp0cmFja1VzZXJGbGFnXCIsXG5cdHtcblx0XHRsb2NrWFpSb3RhdGlvbjogU2NoZW1hcy5Cb29sZWFuLFxuXHRcdGFjdGl2ZTogU2NoZW1hcy5Cb29sZWFuLFxuICAgIHJvdFNwZWVkOiBTY2hlbWFzLk51bWJlclxuXHR9KVxuXG5leHBvcnQgZnVuY3Rpb24gZmFjZVVzZXJTeXN0ZW0oZHQ6IG51bWJlcikge1xuICBmb3IgKGNvbnN0IFtlbnRpdHksIHRyYWNrXSBvZiBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKFRyYWNrVXNlckZsYWcpKSB7XG4gICAgaWYgKHRyYWNrLmFjdGl2ZSkge1xuICAgICAgY29uc3QgcGxheWVyID0gVHJhbnNmb3JtLmdldChlbmdpbmUuUGxheWVyRW50aXR5KVxuICAgICAgbGV0IGxvb2tBdFRhcmdldCA9IFZlY3RvcjMuY3JlYXRlKHBsYXllci5wb3NpdGlvbi54LCBwbGF5ZXIucG9zaXRpb24ueSwgcGxheWVyLnBvc2l0aW9uLnopXG4gICAgICBsZXQgZGlyZWN0aW9uID0gVmVjdG9yMy5zdWJ0cmFjdChsb29rQXRUYXJnZXQsIFRyYW5zZm9ybS5nZXQoZW50aXR5KS5wb3NpdGlvbilcblxuICAgICAgbGV0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlKGVudGl0eSlcbiAgICAgIHRyYW5zZm9ybS5yb3RhdGlvbiA9IFF1YXRlcm5pb24uc2xlcnAocGxheWVyLnJvdGF0aW9uLCBRdWF0ZXJuaW9uLmxvb2tSb3RhdGlvbihkaXJlY3Rpb24pLCBkdCAqIHRyYWNrLnJvdFNwZWVkKVxuXG4gICAgICBpZiAodHJhY2subG9ja1haUm90YXRpb24pIHtcbiAgICAgICAgdHJhbnNmb3JtLnJvdGF0aW9uLnggPSAwXG4gICAgICAgIHRyYW5zZm9ybS5yb3RhdGlvbi56ID0gMFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,4 @@
1
+ import { activate, stopWalking, followPath, create, handleWalkAway, playAnimation, showDebug, getData, changeIdleAnim } from "./npc";
2
+ import { talk } from "./dialog";
3
+ import { Dialog, NPCPathType, NPCType } from "./types";
4
+ export { activate, stopWalking, followPath, create, handleWalkAway, playAnimation, showDebug, talk, Dialog, getData, NPCPathType, NPCType, changeIdleAnim };
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ import { activate, stopWalking, followPath, create, handleWalkAway, playAnimation, showDebug, getData, changeIdleAnim } from "./npc";
2
+ import { talk } from "./dialog";
3
+ import { NPCPathType, NPCType } from "./types";
4
+ export { activate, stopWalking, followPath, create, handleWalkAway, playAnimation, showDebug, talk, getData, NPCPathType, NPCType, changeIdleAnim };
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFFBQVEsRUFDUixXQUFXLEVBQ1gsVUFBVSxFQUNWLE1BQU0sRUFDTixjQUFjLEVBQ2QsYUFBYSxFQUNiLFNBQVMsRUFDVCxPQUFPLEVBQ1AsY0FBYyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFVLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFdkQsT0FBTyxFQUNILFFBQVEsRUFDUixXQUFXLEVBQ1gsVUFBVSxFQUNWLE1BQU0sRUFDTixjQUFjLEVBQ2QsYUFBYSxFQUNiLFNBQVMsRUFDVCxJQUFJLEVBRUosT0FBTyxFQUNQLFdBQVcsRUFDWCxPQUFPLEVBQ1AsY0FBYyxFQUNqQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgXG4gICAgYWN0aXZhdGUsIFxuICAgIHN0b3BXYWxraW5nLCBcbiAgICBmb2xsb3dQYXRoLCBcbiAgICBjcmVhdGUsIFxuICAgIGhhbmRsZVdhbGtBd2F5LCBcbiAgICBwbGF5QW5pbWF0aW9uLCBcbiAgICBzaG93RGVidWcsXG4gICAgZ2V0RGF0YSxcbiAgICBjaGFuZ2VJZGxlQW5pbSB9IGZyb20gXCIuL25wY1wiO1xuaW1wb3J0IHsgdGFsayB9IGZyb20gXCIuL2RpYWxvZ1wiO1xuaW1wb3J0IHsgRGlhbG9nLCBOUENQYXRoVHlwZSwgTlBDVHlwZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCB7XG4gICAgYWN0aXZhdGUsIFxuICAgIHN0b3BXYWxraW5nLCBcbiAgICBmb2xsb3dQYXRoLCBcbiAgICBjcmVhdGUsIFxuICAgIGhhbmRsZVdhbGtBd2F5LCBcbiAgICBwbGF5QW5pbWF0aW9uLCBcbiAgICBzaG93RGVidWcsIFxuICAgIHRhbGssXG4gICAgRGlhbG9nLFxuICAgIGdldERhdGEsXG4gICAgTlBDUGF0aFR5cGUsXG4gICAgTlBDVHlwZSxcbiAgICBjaGFuZ2VJZGxlQW5pbVxufSJdfQ==
package/dist/npc.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ import { Entity } from '@dcl/sdk/ecs';
2
+ import { FollowPathData, NPCData } from './types';
3
+ export declare const walkingTimers: Map<Entity, number>;
4
+ export declare const npcDataComponent: Map<Entity, any>;
5
+ export declare let activeNPC: number;
6
+ export declare function showDebug(debug: boolean): void;
7
+ export declare function getData(npc: Entity): any;
8
+ export declare function create(transform: any, data: NPCData): Entity;
9
+ export declare function followPath(npc: Entity, data?: FollowPathData): void;
10
+ export declare function stopWalking(npc: Entity, duration?: number, finished?: boolean): void;
11
+ export declare function activate(npc: Entity): void;
12
+ export declare function handleWalkAway(npc: Entity): void;
13
+ export declare function playAnimation(npc: Entity, anim: string, noLoop?: boolean, duration?: number): void;
14
+ export declare function changeIdleAnim(npc: Entity, animation: string, play?: boolean): void;