Blend generated terrain textures

This commit is contained in:
2026-06-20 02:56:54 +09:00
parent fa40a0f2b0
commit 4cda39f440
12 changed files with 83 additions and 3 deletions

View File

@@ -29,6 +29,7 @@ const BGM_BATTLE_PATH := "res://audio/bgm/battle_loop_placeholder.wav"
const TITLE_BACKGROUND_PATH := "res://art/backgrounds/title_war_camp_dawn.png"
const TITLE_PORTRAIT_PATH := "res://art/portraits/cao_cao.png"
const TOOLBAR_ICON_PATH_TEMPLATE := "res://art/ui/icons/toolbar_%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"
const OPENING_PROLOGUE_XIAHOU_DUN_PATH := "res://art/story/opening/xiahou_dun_joins.png"
@@ -4366,6 +4367,7 @@ func _draw_map() -> void:
var rect := _rect_for_cell(cell)
var terrain_key := state.get_terrain_key(cell)
draw_rect(rect, _terrain_fill_color(cell, terrain_key, has_background))
_draw_terrain_texture(cell, rect, terrain_key, has_background)
_draw_terrain_detail(cell, rect, terrain_key)
_draw_terrain_edge_blend(cell, rect, terrain_key)
draw_rect(rect, _map_grid_color(has_background), false, 1.0)
@@ -4755,6 +4757,35 @@ func _map_grid_color(has_background: bool) -> Color:
return color
func _draw_terrain_texture(cell: Vector2i, rect: Rect2, terrain_key: String, has_background: bool) -> void:
var texture := _load_terrain_texture(terrain_key)
if texture == null:
return
var modulate := _terrain_texture_modulate(cell, terrain_key, has_background)
draw_texture_rect(texture, rect.grow(-1.0), false, modulate)
func _load_terrain_texture(terrain_key: String) -> Texture2D:
var normalized_key := terrain_key.strip_edges().to_lower()
if normalized_key.is_empty():
return null
return _load_art_texture(TERRAIN_TEXTURE_PATH_TEMPLATE % normalized_key)
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":
alpha += 0.07 if has_background else 0.10
elif terrain_key == "C" or terrain_key == "T":
alpha += 0.08 if has_background else 0.12
elif terrain_key == "R":
alpha += 0.05 if has_background else 0.08
elif terrain_key == "F" or terrain_key == "H" or terrain_key == "D":
alpha += 0.03 if has_background else 0.06
alpha *= 0.94 + _cell_noise(cell, 137) * 0.12
return Color(1.0, 1.0, 1.0, clampf(alpha, 0.0, 0.82))
func _draw_terrain_detail(cell: Vector2i, rect: Rect2, terrain_key: String) -> void:
if terrain_key == "G":
for index in range(3):