import "luxe: world" for Entity, Text, Transform import "luxe: assets" for Assets import "globals" for Globals import "math/vector" for Vector class Tooltip{ depth{100} color{[1, 1, 1, 1]} background{[1, 0, 1, 1]} shadowOffsets{[[1, 0],[0, 1],[-1, 0],[0, -1]]} construct new(app){ _text = Entity.create(app.ui) var mat = Assets.material("luxe: material/font") Text.create(_text, mat, 8, "assets/fonts/BabyBlocks", color) Transform.create(_text) Transform.set_snap(_text, 1, 1, 0) var offsets = shadowOffsets _shadows = [] for(i in offsets){ var shadow = Entity.create(app.ui) Text.create(shadow, mat, 8, "assets/fonts/BabyBlocks", background) Transform.create(shadow) Transform.set_snap(_text, 1, 1, 0) _shadows.add(shadow) } Globals["Tooltip"] = this } tick(){ var pos = Vector.new(Globals["UiMouse"]) if(_active && pos){ if(_x){ pos.x = _x } if(_y){ pos.y = _y } Transform.set_pos(_text, pos.x, pos.y, depth) var offsets = shadowOffsets for(i in 0...offsets.count){ Transform.set_pos(_shadows[i], pos.x+offsets[i].x, pos.y+offsets[i].y, depth-10) } } } set(text) { set(text, null) } fix_y(value){ _y = value } fix_x(value){ _x = value } set(text, source){ Text.set_text_buffer(_text, text) Text.commit(_text) for(shadow in _shadows){ Text.set_text_buffer(shadow, text) Text.commit(shadow) } _active = true _source = source _x = null _y = null } clear(){ clear(_source) } clear(source){ if(_source != source) return set("", null) _active = false } }