CabinGame/Luxe/blocks/tooltip.wren

100 lines
2.2 KiB
Text
Raw Normal View History

import "luxe: world" for Entity, Text, Transform
import "luxe: assets" for Assets
2020-09-12 05:21:12 +00:00
import "luxe: render" for Material
2020-10-04 16:35:12 +00:00
import "luxe: math" for Math
import "globals" for Globals
import "math/vector" for Vector
class Tooltip{
2020-10-25 21:20:01 +00:00
depth{127}
2020-08-29 19:25:16 +00:00
color{[1, 1, 1, 1]}
2020-09-12 05:21:12 +00:00
background{[0, 0, 0, 1]}
2020-08-29 06:14:01 +00:00
2020-09-12 05:21:12 +00:00
shadowOffsets{[[1, 0],[0, 1],[-1, 0],[0, -1],[1, 1],[1, -1],[-1, -1],[-1, 1]]}
construct new(app){
2020-09-09 14:12:39 +00:00
_text = Entity.create(app.ui)
2020-09-12 09:35:28 +00:00
var mat = Material.create("shaders/pixel_text")
Text.create(_text, mat, 8, "assets/fonts/BabyBlocks", color)
2020-09-09 14:12:39 +00:00
Transform.create(_text)
Transform.set_snap(_text, 1, 1, 0)
var offsets = shadowOffsets
_shadows = []
for(i in offsets){
var shadow = Entity.create(app.ui)
2020-10-25 21:20:01 +00:00
var mat = Material.create("shaders/pixel_text")
2020-09-12 09:35:28 +00:00
Text.create(shadow, mat, 8, "assets/fonts/BabyBlocks", background)
Transform.create(shadow)
2020-09-12 05:21:12 +00:00
Transform.set_snap(shadow, 1, 1, 0)
_shadows.add(shadow)
}
2020-10-04 16:35:12 +00:00
_width = 0
_height = 0
2020-08-29 06:14:01 +00:00
Globals["Tooltip"] = this
}
tick(){
var pos = Vector.new(Globals["UiMouse"])
if(pos){
2020-10-04 16:35:12 +00:00
pos.x = Math.clamp(pos.x, 1, Globals["Renderer"].width - _width - 1)
pos.y = Math.clamp(pos.y, 1, Globals["Renderer"].height - _height - 1)
2020-08-29 06:14:01 +00:00
if(_x){
pos.x = _x
}
if(_y){
pos.y = _y
}
2020-09-09 14:12:39 +00:00
Transform.set_pos(_text, pos.x, pos.y, depth)
var offsets = shadowOffsets
for(i in 0...offsets.count){
2020-10-25 21:20:01 +00:00
Transform.set_pos(_shadows[i], pos.x+offsets[i].x, pos.y+offsets[i].y, depth-1)
}
}
}
2020-08-29 06:14:01 +00:00
set(text) {
set(text, null)
}
fix_y(value){
_y = value
2020-09-20 09:56:25 +00:00
tick()
2020-08-29 06:14:01 +00:00
}
fix_x(value){
_x = value
2020-09-20 09:56:25 +00:00
tick()
2020-08-29 06:14:01 +00:00
}
set(text, source){
for(shadow in _shadows){
Text.set_text_buffer(shadow, text)
Text.commit(shadow)
}
2020-09-12 05:21:12 +00:00
Text.set_text_buffer(_text, text)
Text.commit(_text)
_active = true
2020-08-29 06:14:01 +00:00
_source = source
_x = null
_y = null
2020-10-04 16:35:12 +00:00
var extents = Text.get_extents(_text)
_width = extents.x
_height = extents.y
}
clear(){
2020-08-29 06:14:01 +00:00
clear(_source)
}
clear(source){
if(_source != source) return
2020-10-04 16:35:12 +00:00
set("")
_active = false
}
}