set up clay ui + move gold rendering to clay
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
package game
|
||||
|
||||
import clay "../clay-odin"
|
||||
import "core:math"
|
||||
import "core:strings"
|
||||
import rl "vendor:raylib"
|
||||
|
||||
UI_FONT_ID :: 0
|
||||
|
||||
ui_font: rl.Font
|
||||
|
||||
ui_register_font :: proc() {
|
||||
ui_font = rl.GetFontDefault()
|
||||
}
|
||||
|
||||
clay_color_to_rl :: proc(c: clay.Color) -> rl.Color {
|
||||
return {u8(c.r), u8(c.g), u8(c.b), u8(c.a)}
|
||||
}
|
||||
|
||||
measure_text :: proc "c" (
|
||||
text: clay.StringSlice,
|
||||
config: ^clay.TextElementConfig,
|
||||
_: rawptr,
|
||||
) -> clay.Dimensions {
|
||||
return {width = f32(text.length) * f32(config.fontSize) * 0.55, height = f32(config.fontSize)}
|
||||
}
|
||||
|
||||
clay_raylib_render :: proc(commands: ^clay.ClayArray(clay.RenderCommand)) {
|
||||
for i in 0 ..< commands.length {
|
||||
cmd := clay.RenderCommandArray_Get(commands, i)
|
||||
bounds := cmd.boundingBox
|
||||
|
||||
#partial switch cmd.commandType {
|
||||
case .None:
|
||||
case .Text:
|
||||
cfg := cmd.renderData.text
|
||||
text := string(cfg.stringContents.chars[:cfg.stringContents.length])
|
||||
cstr := strings.clone_to_cstring(text, context.temp_allocator)
|
||||
|
||||
rl.DrawTextEx(
|
||||
ui_font,
|
||||
cstr,
|
||||
{bounds.x, bounds.y},
|
||||
f32(cfg.fontSize),
|
||||
f32(cfg.letterSpacing),
|
||||
clay_color_to_rl(cfg.textColor),
|
||||
)
|
||||
case .Rectangle:
|
||||
cfg := cmd.renderData.rectangle
|
||||
rl.DrawRectangle(
|
||||
i32(math.round(bounds.x)),
|
||||
i32(math.round(bounds.y)),
|
||||
i32(math.round(bounds.width)),
|
||||
i32(math.round(bounds.height)),
|
||||
clay_color_to_rl(cfg.backgroundColor),
|
||||
)
|
||||
case .ScissorStart:
|
||||
rl.BeginScissorMode(
|
||||
i32(math.round(bounds.x)),
|
||||
i32(math.round(bounds.y)),
|
||||
i32(math.round(bounds.width)),
|
||||
i32(math.round(bounds.height)),
|
||||
)
|
||||
case .ScissorEnd:
|
||||
rl.EndScissorMode()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user