aboutsummaryrefslogtreecommitdiff
path: root/features/hud/HudTextElement.js
blob: 834ef28700216035864c050ebbab2a37b7230480 (plain)
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
import { HudText } from "../../utils/renderJavaUtils"

class HudTextElement {
    constructor() {
        this.text = ""

        this.toggleSetting = undefined
        this.locationSetting = undefined

        this.editTempTimeV = 0
        this.editTempTextV = undefined

        this.editBaseWidth = undefined
        this.editBaseHeight = undefined

        this.tempDisableTime = 0

        this.renderTextCache = [""]
        this.textChanged = false

        this.renderElm = new HudText([""], 0, 0, true).startRender()
    }

    delete() {
        this.renderElm.stopRender()
    }

    setBaseEditWidth(width) {
        this.editBaseWidth = width
        return this
    }

    setBaseEditHeight(height) {
        this.editBaseHeight = height
        return this
    }

    setText(text = "") {
        if (text === this.text) return this
        this.text = text

        this.renderTextCache = ChatLib.addColor(this.text).split("\n")

        this.renderElm.setText(this.renderTextCache)
        return this
    }
    setToggleSetting(setting) {
        this.toggleSetting = setting
        setting.onChange = () => {
            if (this.toggleSetting.getValue()) {
                this.renderElm.startRender()
            } else {
                this.renderElm.stopRender()
            }
        }
        if (this.toggleSetting.getValue()) {
            this.renderElm.startRender()
        } else {
            this.renderElm.stopRender()
        }
        return this
    }
    setLocationSetting(setting) {
        this.locationSetting = setting
        setting.setParent(this)

        setting.onChange = () => {
            this.renderElm.setX(this.locationSetting.x).setY(this.locationSetting.y).setScale(this.locationSetting.scale)
        }
        this.renderElm.setX(this.locationSetting.x).setY(this.locationSetting.y).setScale(this.locationSetting.scale)
        return this
    }

    isEnabled() {
        if (!this.toggleSetting) return true
        return this.locationSetting && this.toggleSetting.getValue()
    }

    render() {
        if (this.toggleSetting && !this.toggleSetting.getValue() || !this.locationSetting) return
        if (Date.now() - this.tempDisableTime < 100) return

        this.renderRaw()
    }

    getWidth(locationBox = false) {
        if (locationBox && this.editBaseWidth) return this.editBaseWidth
        return Math.max(...(this.getText().map(a => Renderer.getStringWidth(ChatLib.removeFormatting(a)))))
    }
    getHeight(locationBox = false) {
        if (locationBox && this.editBaseHeight) return this.editBaseHeight
        return 9 * this.getText().length
    }

    getText() {
        if (Date.now() - this.editTempTimeV < 100) {
            let text = this.text
            if (this.editTempTextV) {
                text = this.editTempTextV
            }

            if (ChatLib.removeFormatting(text) === "") {
                text = "&0Empty string"
            }

            return text.split("\n")
        }
        return this.renderTextCache
    }

    renderRaw() {
        let text = this.getText()

        for (let i = 0, line = text[0]; i < text.length; i++, line = text[i]) {
            Renderer.scale(this.locationSetting.scale, this.locationSetting.scale)
            switch (this.locationSetting.shadowType) {
                case 0:
                    Renderer.drawString(line, this.locationSetting.x / this.locationSetting.scale, this.locationSetting.y / this.locationSetting.scale + 9 * i)
                    break;
                case 1:
                    Renderer.drawStringWithShadow(line, this.locationSetting.x / this.locationSetting.scale, this.locationSetting.y / this.locationSetting.scale + 9 * i)
                    break;
            }
        }
    }
}

export default HudTextElement