aboutsummaryrefslogtreecommitdiff
path: root/features/hud/HudTextElement.js
blob: be9e4ee0748075a3a89293f9c38091c94de9f741 (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
class HudTextElement{
    constructor(){
        this.text = ""

        this.toggleSetting = undefined
        this.locationSetting = undefined

        this.blackText = "&0" + ChatLib.removeFormatting(this.text)

        this.editTempTimeV = 0
        this.editTempTextV = undefined

        this.editBaseWidth = undefined
        this.editBaseHeight = undefined

        this.tempDisableTime = 0
    }

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

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

    setText(text){
        this.text = text
        
        if(this.locationSetting && this.locationSetting.shadowType === 2){
            this.blackText = "&0" + ChatLib.removeFormatting(text)
        }
        return this
    }
    setToggleSetting(setting){
        this.toggleSetting = setting
        return this
    }
    setLocationSetting(setting){
        this.locationSetting = setting
        setting.setParent(this)

        if(this.locationSetting.shadowType === 2){
            this.blackText = "&0" + ChatLib.removeFormatting(text)
        }
        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()[0].map(a=>Renderer.getStringWidth(ChatLib.removeFormatting(a)))))
    }
    getHeight(locationBox=false){
        if(locationBox && this.editBaseHeight) return this.editBaseHeight
        return 9*this.getText()[0].length
    }

    getText(){
        let text = this.text
        let blackText = this.blackText
        if(Date.now()-this.editTempTimeV < 100){
            if(this.editTempTextV){
                text = this.editTempTextV
                blackText = "&0" + ChatLib.removeFormatting(text)
            }
            
            if(ChatLib.removeFormatting(text) === ""){
                text = "&0Empty string"
                blackText = "&0Empty string"
            }
        }
        return [text.split("\n"), blackText.split("\n")]
    }

    renderRaw(){
        try{
            let [text, blackText] = this.getText()
            
            text.forEach((line, 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;
                    case 2:
                        Renderer.drawString(blackText[i], (this.locationSetting.x+1)/this.locationSetting.scale, this.locationSetting.y/this.locationSetting.scale +9*i)
                        Renderer.drawString(blackText[i], (this.locationSetting.x-1)/this.locationSetting.scale, this.locationSetting.y/this.locationSetting.scale +9*i)
                        Renderer.drawString(blackText[i], this.locationSetting.x/this.locationSetting.scale, (this.locationSetting.y+1)/this.locationSetting.scale +9*i)
                        Renderer.drawString(blackText[i], this.locationSetting.x/this.locationSetting.scale, (this.locationSetting.y-1)/this.locationSetting.scale +9*i)
        
                        Renderer.drawString(line, this.locationSetting.x/this.locationSetting.scale, this.locationSetting.y/this.locationSetting.scale +9*i)
                    break;
                }
            })
            Renderer.scale(1, 1)
        }catch(e){ //incase of wrong opengl context
        }
    }
}

export default HudTextElement