File size: 8,111 Bytes
19c8b95
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
! function(t, e) {
    "object" == typeof exports && "undefined" != typeof module ? module.exports = e(require("three")) : "function" == typeof define && define.amd ? define(["three"], e) : ((t = "undefined" != typeof globalThis ? globalThis : t || self).THREE = t.THREE || {}, t.THREE.TextTexture = e(t.THREE))
}(this, (function(t) {
    "use strict";
    let e = class extends t.Texture {
        constructor() {
            super(document.createElement("canvas"));
            let e = null,
                i = () => e || (e = this.createDrawable()),
                n = () => i().width,
                o = () => i().height,
                r = !0,
                l = 1,
                a = () => t.MathUtils.ceilPowerOfTwo(n() * l),
                s = () => t.MathUtils.ceilPowerOfTwo(o() * l),
                h = t => {
                    if (l !== t) {
                        let e = a(),
                            i = s();
                        l = t;
                        let n = a(),
                            o = s();
                        n === e && o === i || (r = !0)
                    }
                },
                c = (() => {
                    let e = new t.Vector3,
                        i = new t.Vector2,
                        r = new t.Vector3,
                        l = new t.Vector3,
                        a = new t.Vector2;
                    return (s, h, c) => {
                        if (a.set(n(), o()), a.x && a.y) {
                            s.getWorldPosition(r), c.getWorldPosition(e);
                            let n = r.distanceTo(e);
                            if (c.isPerspectiveCamera && (n *= 2 * Math.tan(t.MathUtils.degToRad(c.fov) / 2)), (c.isPerspectiveCamera || c.isOrthographicCamera) && (n /= c.zoom), n) {
                                var f, d;
                                s.getWorldScale(l);
                                let t = null !== (f = null === (d = h.capabilities) || void 0 === d ? void 0 : d.maxTextureSize) && void 0 !== f ? f : 1 / 0;
                                return h.getDrawingBufferSize(i), Math.min(Math.max(l.x / n * (i.x / a.x), l.y / n * (i.y / a.y)), t / a.x, t / a.y)
                            }
                        }
                        return 0
                    }
                })();
            Object.defineProperties(this, {
                width: {
                    get: n
                },
                height: {
                    get: o
                },
                pixelRatio: {
                    get: () => l,
                    set: h
                },
                needsRedraw: {
                    set(t) {
                        t && (r = !0, e = null)
                    }
                }
            }), Object.assign(this, {
                redraw() {
                    if (r) {
                        let t = this.image,
                            e = t.getContext("2d");
                        e.clearRect(0, 0, t.width, t.height), t.width = a(), t.height = s(), t.width && t.height ? (e.save(), e.scale(t.width / n(), t.height / o()), ((...t) => {
                            i().draw(...t)
                        })(e), e.restore()) : t.width = t.height = 1, r = !1, this.needsUpdate = !0
                    }
                },
                setOptimalPixelRatio(...t) {
                    h(c(...t))
                }
            })
        }
    };
    e.prototype.isDynamicTexture = !0;
    let i = class extends e {
        constructor({
            alignment: t = "center",
            backgroundColor: e = "rgba(0,0,0,0)",
            color: i = "#fff",
            fontFamily: n = "sans-serif",
            fontSize: o = 16,
            fontStyle: r = "normal",
            fontVariant: l = "normal",
            fontWeight: a = "normal",
            lineGap: s = 1 / 4,
            padding: h = .5,
            strokeColor: c = "#fff",
            strokeWidth: f = 0,
            text: d = ""
        } = {}) {
            super(), Object.entries({
                alignment: t,
                backgroundColor: e,
                color: i,
                fontFamily: n,
                fontSize: o,
                fontStyle: r,
                fontVariant: l,
                fontWeight: a,
                lineGap: s,
                padding: h,
                strokeColor: c,
                strokeWidth: f,
                text: d
            }).forEach((([t, e]) => {
                Object.defineProperty(this, t, {
                    get: () => e,
                    set(t) {
                        e !== t && (e = t, this.needsRedraw = !0)
                    }
                })
            }))
        }
        get lines() {
            let {
                text: t
            } = this;
            return t ? t.split("\n") : []
        }
        get font() {
            return function(t, e, i, n, o) {
                let r = document.createElement("span");
                return r.style.font = "1px serif", r.style.fontFamily = t, r.style.fontSize = "".concat(e, "px"), r.style.fontStyle = i, r.style.fontVariant = n, r.style.fontWeight = o, r.style.font
            }(this.fontFamily, this.fontSize, this.fontStyle, this.fontVariant, this.fontWeight)
        }
        checkFontFace() {
            try {
                let {
                    font: t
                } = this;
                return document.fonts.check(t)
            } catch (e) {}
            return !0
        }
        async loadFontFace() {
            try {
                let {
                    font: t
                } = this;
                await document.fonts.load(t)
            } catch (e) {}
        }
        createDrawable() {
            let {
                alignment: t,
                backgroundColor: e,
                color: i,
                font: n,
                fontSize: o,
                lineGap: r,
                lines: l,
                padding: a,
                strokeColor: s,
                strokeWidth: h
            } = this;
            a *= o, r *= o, h *= o;
            let c = l.length,
                f = o + r,
                d = c ? (() => {
                    let t = document.createElement("canvas").getContext("2d");
                    return t.font = n, Math.max(...l.map((e => t.measureText(e).width)))
                })() : 0,
                g = a + h / 2,
                u = d + 2 * g;
            return {
                width: u,
                height: (c ? o + f * (c - 1) : 0) + 2 * g,
                draw(r) {
                    let a;
                    r.fillStyle = e, r.fillRect(0, 0, r.canvas.width, r.canvas.height);
                    let c = g + o / 2;
                    Object.assign(r, {
                        fillStyle: i,
                        font: n,
                        lineWidth: h,
                        miterLimit: 1,
                        strokeStyle: s,
                        textAlign: (() => {
                            switch (t) {
                                case "left":
                                    return a = g, "left";
                                case "right":
                                    return a = u - g, "right"
                            }
                            return a = u / 2, "center"
                        })(),
                        textBaseline: "middle"
                    }), l.forEach((t => {

                        // r.lineWidth=60
                        // r.shadowColor="white"
                        // r.shadowBlur=2
                        // r.fillStyle = "white"
                        // r.fillText(t, a, c);

                        r.lineWidth=5
                        r.shadowColor="black"
                        r.shadowBlur=0
                        r.fillStyle = "black"
                        r.fillText(t, a, c);

                        h && r.strokeText(t, a, c), c += f
                    }))
                }
            }
        }
    };
    return i.prototype.isTextTexture = !0, i
}));