aboutsummaryrefslogtreecommitdiff
path: root/src/features/hud/HudTextElement.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/features/hud/HudTextElement.js')
-rw-r--r--src/features/hud/HudTextElement.js143
1 files changed, 143 insertions, 0 deletions
diff --git a/src/features/hud/HudTextElement.js b/src/features/hud/HudTextElement.js
new file mode 100644
index 0000000..cdde6f3
--- /dev/null
+++ b/src/features/hud/HudTextElement.js
@@ -0,0 +1,143 @@
+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.renderingDisabled = false
+
+ this.renderElm = new HudText([""], 0, 0, true).startRender()
+ }
+
+ disableRendering() {
+ this.renderingDisabled = true
+ this.renderElm.stopRender()
+ }
+
+ enableRendering() {
+ this.renderingDisabled = false
+ if (this.toggleSetting.getValue()) {
+ this.renderElm.startRender()
+ }
+ }
+
+ delete() {
+ this.renderElm.stopRender()
+ if (this.locationSetting) this.locationSetting.delete()
+ }
+
+ 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.renderingDisabled) {
+ this.renderElm.startRender()
+ } else {
+ this.renderElm.stopRender()
+ }
+ }
+ if (this.toggleSetting.getValue() && !this.renderingDisabled) {
+ 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 \ No newline at end of file