Add generated map badge icons

This commit is contained in:
2026-06-20 04:04:18 +09:00
parent 6debe968e2
commit cd8f3b6926
10 changed files with 123 additions and 12 deletions

View File

@@ -33,6 +33,7 @@ const PANEL_TEXTURE_PATH_TEMPLATE := "res://art/ui/panels/panel_%s.png"
const BUTTON_TEXTURE_PATH_TEMPLATE := "res://art/ui/buttons/button_%s.png"
const TILE_MARKER_TEXTURE_PATH_TEMPLATE := "res://art/ui/tiles/tile_marker_%s.png"
const CLASS_ICON_TEXTURE_PATH_TEMPLATE := "res://art/ui/class_icons/class_%s.png"
const MAP_BADGE_TEXTURE_PATH_TEMPLATE := "res://art/ui/map_badges/map_badge_%s.png"
const TERRAIN_TEXTURE_PATH_TEMPLATE := "res://art/terrain/terrain_%s.png"
const OPENING_PROLOGUE_REBELLION_PATH := "res://art/story/opening/yellow_turban_rebellion.png"
const OPENING_PROLOGUE_RESOLVE_PATH := "res://art/story/opening/cao_cao_resolves.png"
@@ -4530,11 +4531,12 @@ func _draw_recovery_terrain_markers(bounds: Rect2i) -> void:
var marker_rect := _recovery_marker_rect(cell)
draw_rect(marker_rect, Color(0.035, 0.022, 0.012, 0.74))
draw_rect(marker_rect, Color(UI_OLD_BRONZE.r, UI_OLD_BRONZE.g, UI_OLD_BRONZE.b, 0.88), false, 1.4)
var plus_center := marker_rect.position + Vector2(8.0, marker_rect.size.y * 0.5)
var plus_color := Color(0.54, 0.86, 0.48, 0.92)
draw_line(plus_center + Vector2(-3.0, 0.0), plus_center + Vector2(3.0, 0.0), plus_color, 1.6)
draw_line(plus_center + Vector2(0.0, -3.0), plus_center + Vector2(0.0, 3.0), plus_color, 1.6)
_draw_ink_text(font, marker_rect.position + Vector2(9.0, 13.0), marker_text, HORIZONTAL_ALIGNMENT_CENTER, marker_rect.size.x - 9.0, 11, Color(0.78, 0.98, 0.62, 0.96))
if not _draw_map_badge("recover", marker_rect.grow(3.0), Color(1.0, 1.0, 1.0, 0.96)):
var plus_center := marker_rect.position + Vector2(8.0, marker_rect.size.y * 0.5)
var plus_color := Color(0.54, 0.86, 0.48, 0.92)
draw_line(plus_center + Vector2(-3.0, 0.0), plus_center + Vector2(3.0, 0.0), plus_color, 1.6)
draw_line(plus_center + Vector2(0.0, -3.0), plus_center + Vector2(0.0, 3.0), plus_color, 1.6)
_draw_ink_text(font, marker_rect.position + Vector2(9.0, 13.0), marker_text, HORIZONTAL_ALIGNMENT_CENTER, marker_rect.size.x - 9.0, 11, Color(0.78, 0.98, 0.62, 0.96))
func _recovery_marker_text(cell: Vector2i) -> String:
@@ -4546,7 +4548,7 @@ func _recovery_marker_text(cell: Vector2i) -> String:
func _recovery_marker_rect(cell: Vector2i) -> Rect2:
var cell_rect := _rect_for_cell(cell)
var size := Vector2(34.0, 16.0)
var size := Vector2(24.0, 24.0)
return Rect2(cell_rect.position + Vector2(TILE_SIZE - size.x - 4.0, 4.0), size)
@@ -4903,6 +4905,15 @@ func _load_class_icon_texture(icon_key: String) -> Texture2D:
return _load_art_texture(CLASS_ICON_TEXTURE_PATH_TEMPLATE % normalized_key)
func _load_map_badge_texture(badge_key: String) -> Texture2D:
var normalized_key := badge_key.strip_edges().to_lower()
if normalized_key.is_empty():
normalized_key = "event"
if not ["objective", "supply", "gold", "tactic", "recover", "event"].has(normalized_key):
normalized_key = "event"
return _load_art_texture(MAP_BADGE_TEXTURE_PATH_TEMPLATE % normalized_key)
func _load_unit_class_icon_texture(unit: Dictionary) -> Texture2D:
return _load_class_icon_texture(_unit_class_icon_key(unit))
@@ -4925,6 +4936,17 @@ func _draw_tile_marker(marker_key: String, rect: Rect2, modulate: Color = Color.
return true
func _draw_map_badge(badge_key: String, rect: Rect2, modulate: Color = Color.WHITE, inset: float = 0.0) -> bool:
var texture := _load_map_badge_texture(badge_key)
if texture == null:
return false
var target_rect := rect.grow(-inset)
if target_rect.size.x <= 0.0 or target_rect.size.y <= 0.0:
return false
draw_texture_rect(texture, target_rect, false, modulate)
return true
func _terrain_texture_modulate(cell: Vector2i, terrain_key: String, has_background: bool) -> Color:
var alpha := 0.17 if has_background else 0.58
if terrain_key == "W":
@@ -5204,9 +5226,11 @@ func _draw_objective_foreground_markers() -> void:
continue
var rect := _rect_for_cell(cell)
_draw_objective_corner_brackets(rect)
var label_rect := Rect2(rect.position + Vector2(rect.size.x - 20.0, 3.0), Vector2(17.0, 16.0))
var label_rect := Rect2(rect.position + Vector2(rect.size.x - 25.0, 3.0), Vector2(22.0, 22.0))
draw_rect(label_rect, Color(UI_SEAL_RED_DARK.r, UI_SEAL_RED_DARK.g, UI_SEAL_RED_DARK.b, 0.86))
draw_rect(label_rect, Color(UI_OLD_BRONZE.r, UI_OLD_BRONZE.g, UI_OLD_BRONZE.b, 0.88), false, 1.2)
if _draw_map_badge("objective", label_rect.grow(3.0), Color(1.0, 1.0, 1.0, 0.96)):
continue
_draw_ink_text(font, label_rect.position + Vector2(0, 12), "", HORIZONTAL_ALIGNMENT_CENTER, label_rect.size.x, 11, UI_PARCHMENT_TEXT)
@@ -5228,15 +5252,16 @@ func _draw_event_foreground_marker(rect: Rect2, label: String, kind: String, fon
draw_rect(marker_rect, Color(0.035, 0.022, 0.012, 0.76))
draw_rect(marker_rect.grow(-2.0), Color(color.r, color.g, color.b, 0.72))
draw_rect(marker_rect, Color(UI_OLD_BRONZE.r, UI_OLD_BRONZE.g, UI_OLD_BRONZE.b, 0.88), false, 1.2)
var text := _event_marker_abbrev(label, kind)
_draw_ink_text(font, marker_rect.position + Vector2(0, 12), text, HORIZONTAL_ALIGNMENT_CENTER, marker_rect.size.x, 11, UI_PARCHMENT_TEXT)
if not _draw_map_badge(_event_marker_badge_kind(label, kind), marker_rect.grow(3.0), Color(1.0, 1.0, 1.0, 0.96)):
var text := _event_marker_abbrev(label, kind)
_draw_ink_text(font, marker_rect.position + Vector2(0, 12), text, HORIZONTAL_ALIGNMENT_CENTER, marker_rect.size.x, 11, UI_PARCHMENT_TEXT)
var knot := marker_rect.get_center() + Vector2(0.0, -8.0)
draw_line(knot + Vector2(-5.0, 0.0), knot + Vector2(5.0, 0.0), Color(0.10, 0.05, 0.02, 0.70), 1.2)
draw_line(knot + Vector2(0.0, -4.0), knot + Vector2(0.0, 4.0), Color(0.10, 0.05, 0.02, 0.56), 1.0)
func _event_marker_rect(cell_rect: Rect2) -> Rect2:
return Rect2(cell_rect.position + Vector2(4.0, 26.0), Vector2(23.0, 17.0))
return Rect2(cell_rect.position + Vector2(4.0, 26.0), Vector2(23.0, 23.0))
func _event_marker_color(kind: String) -> Color:
@@ -5249,6 +5274,18 @@ func _event_marker_color(kind: String) -> Color:
return Color(UI_MUTED_JADE.r, UI_MUTED_JADE.g, UI_MUTED_JADE.b, 1.0)
func _event_marker_badge_kind(label: String, kind: String) -> String:
var normalized_kind := kind.strip_edges().to_lower()
var normalized_label := label.strip_edges()
if normalized_kind == "gold" or normalized_label.contains("군자금"):
return "gold"
if normalized_kind == "supply" or normalized_label.contains("보급"):
return "supply"
if normalized_kind == "tactic" or normalized_label.contains("유인"):
return "tactic"
return "event"
func _event_marker_abbrev(label: String, kind: String) -> String:
if kind == "tactic":
return "" if label.contains("유인") else ""