Files
tower-defense-prototype/game/overlay.odin
T

90 lines
2.1 KiB
Odin

package game
import clay "../clay-odin"
import "core:fmt"
import rl "vendor:raylib"
ui_hud_scratch: struct {
gold: [64]u8,
hp: [64]u8,
wave: [64]u8,
}
build_overlay :: proc(world: ^World) {
if clay.UI(clay.ID("HudBar"))(
{
layout = {
layoutDirection = .LeftToRight,
sizing = {width = clay.SizingGrow({}), height = clay.SizingFixed(28)},
padding = clay.PaddingAll(6),
childGap = 8,
childAlignment = {y = .Center},
},
backgroundColor = UI_BAR_COLOR,
},
) {
gold_text := fmt.bprintf(ui_hud_scratch.gold[:], "Gold: %d", world.gold)
clay.Text(
gold_text,
clay.TextElementConfig{textColor = UI_GOLD_COLOR, fontId = UI_FONT_ID, fontSize = 18},
)
hp_text := fmt.bprintf(ui_hud_scratch.hp[:], "Base HP: %d", world.base_health)
clay.Text(
hp_text,
clay.TextElementConfig{textColor = UI_TEXT_COLOR, fontId = UI_FONT_ID, fontSize = 18},
)
wave_text := fmt.bprintf(ui_hud_scratch.wave[:], "Wave: %d / %d", world.wave, MAX_WAVES)
clay.Text(
wave_text,
clay.TextElementConfig{textColor = UI_TEXT_COLOR, fontId = UI_FONT_ID, fontSize = 18},
)
if world.phase == .Build {
if clay.UI(clay.ID("StartWaveBtn"))(
{
layout = {
sizing = {width = clay.SizingFixed(110), height = clay.SizingFixed(22)},
padding = clay.PaddingAll(4),
childAlignment = {x = .Center, y = .Center},
},
backgroundColor = clay.Hovered() ? UI_BUTTON_HOVER : UI_BUTTON_COLOR,
},
) {
clay.Text(
"Start Wave",
clay.TextElementConfig {
textColor = UI_TEXT_COLOR,
fontId = UI_FONT_ID,
fontSize = 16,
},
)
}
}
}
}
render_overlay :: proc(world: ^World) {
switch world.phase {
case .Build:
case .Combat:
rl.DrawText("Combat!", 10, 98, 22, rl.MAROON)
case .Game_Over:
rl.DrawText("GAME_OVER", 260, 280, 40, rl.RED)
case .Victory:
rl.DrawText("Victory!", 260, 280, 40, rl.GREEN)
}
}
poll_overlay_command :: proc() -> Command {
if clay.PointerOver(clay.ID("StartWaveBtn")) {
ptr := clay.GetPointerState()
if ptr.state == .PressedThisFrame {
return Command{kind = .Start_Wave}
}
}
return Command{kind = .None}
}