Expand dialogue portrait presentation

This commit is contained in:
2026-06-18 12:51:35 +09:00
parent 644bab582e
commit 0be75ac1c9
5 changed files with 33 additions and 14 deletions

View File

@@ -43,6 +43,11 @@ const UNIT_STATUS_MARKER_RADIUS := 4.0
const UNIT_STATUS_MARKER_GAP := 9.0
const UNIT_STATUS_MARKER_OFFSET_Y := 14.0
const MAX_UNIT_STATUS_MARKERS := 4
const DIALOGUE_PANEL_POSITION := Vector2(96, 448)
const DIALOGUE_PANEL_SIZE := Vector2(1040, 210)
const DIALOGUE_PORTRAIT_SIZE := Vector2(164, 186)
const DIALOGUE_COLUMN_SIZE := Vector2(820, 186)
const DIALOGUE_TEXT_SIZE := Vector2(800, 104)
var state: BattleState = BattleStateScript.new()
var campaign_state: CampaignState = CampaignStateScript.new()
@@ -136,6 +141,7 @@ var log_box: RichTextLabel
var dialogue_queue: Array = []
var active_dialogue_lines: Array = []
var active_dialogue_index := 0
var portrait_texture_cache: Dictionary = {}
var bgm_player: AudioStreamPlayer
var current_bgm_key := ""
var audio_stream_cache := {}
@@ -550,24 +556,26 @@ func _create_hud() -> void:
dialogue_panel = PanelContainer.new()
dialogue_panel.visible = false
dialogue_panel.position = Vector2(128, 474)
dialogue_panel.size = Vector2(760, 140)
dialogue_panel.position = DIALOGUE_PANEL_POSITION
dialogue_panel.size = DIALOGUE_PANEL_SIZE
dialogue_panel.mouse_filter = Control.MOUSE_FILTER_STOP
root.add_child(dialogue_panel)
dialogue_row = HBoxContainer.new()
dialogue_row.add_theme_constant_override("separation", 14)
dialogue_row.add_theme_constant_override("separation", 18)
dialogue_panel.add_child(dialogue_row)
dialogue_portrait_panel = PanelContainer.new()
dialogue_portrait_panel.custom_minimum_size = Vector2(96, 112)
dialogue_portrait_panel.custom_minimum_size = DIALOGUE_PORTRAIT_SIZE
dialogue_row.add_child(dialogue_portrait_panel)
var dialogue_portrait_stack := Control.new()
dialogue_portrait_stack.custom_minimum_size = Vector2(96, 112)
dialogue_portrait_stack.custom_minimum_size = DIALOGUE_PORTRAIT_SIZE
dialogue_portrait_panel.add_child(dialogue_portrait_stack)
dialogue_portrait_texture = TextureRect.new()
dialogue_portrait_texture.set_anchors_preset(Control.PRESET_FULL_RECT)
dialogue_portrait_texture.expand_mode = TextureRect.EXPAND_IGNORE_SIZE
dialogue_portrait_texture.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
dialogue_portrait_stack.add_child(dialogue_portrait_texture)
@@ -575,25 +583,31 @@ func _create_hud() -> void:
dialogue_portrait_label.set_anchors_preset(Control.PRESET_FULL_RECT)
dialogue_portrait_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
dialogue_portrait_label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER
dialogue_portrait_label.add_theme_font_size_override("font_size", 22)
dialogue_portrait_label.add_theme_font_size_override("font_size", 30)
dialogue_portrait_stack.add_child(dialogue_portrait_label)
dialogue_column = VBoxContainer.new()
dialogue_column.custom_minimum_size = Vector2(620, 112)
dialogue_column.custom_minimum_size = DIALOGUE_COLUMN_SIZE
dialogue_column.size_flags_horizontal = Control.SIZE_EXPAND_FILL
dialogue_column.add_theme_constant_override("separation", 8)
dialogue_row.add_child(dialogue_column)
dialogue_speaker_label = Label.new()
dialogue_speaker_label.custom_minimum_size = Vector2(600, 22)
dialogue_speaker_label.custom_minimum_size = Vector2(DIALOGUE_TEXT_SIZE.x, 26)
dialogue_speaker_label.add_theme_font_size_override("font_size", 18)
dialogue_column.add_child(dialogue_speaker_label)
dialogue_text_label = Label.new()
dialogue_text_label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
dialogue_text_label.custom_minimum_size = Vector2(600, 56)
dialogue_text_label.custom_minimum_size = DIALOGUE_TEXT_SIZE
dialogue_text_label.size_flags_vertical = Control.SIZE_EXPAND_FILL
dialogue_text_label.add_theme_font_size_override("font_size", 17)
dialogue_column.add_child(dialogue_text_label)
dialogue_continue_button = Button.new()
dialogue_continue_button.text = "Next"
dialogue_continue_button.custom_minimum_size = Vector2(120, 32)
dialogue_continue_button.size_flags_horizontal = Control.SIZE_SHRINK_END
dialogue_continue_button.pressed.connect(_advance_dialogue)
dialogue_column.add_child(dialogue_continue_button)
@@ -2006,16 +2020,21 @@ func _load_dialogue_portrait(portrait_path: String) -> Texture2D:
return null
if not normalized_path.begins_with("res://") and not normalized_path.begins_with("user://"):
normalized_path = "res://%s" % normalized_path
if portrait_texture_cache.has(normalized_path):
return portrait_texture_cache[normalized_path] as Texture2D
if ResourceLoader.exists(normalized_path, "Texture2D"):
var imported_texture := load(normalized_path) as Texture2D
if imported_texture != null:
portrait_texture_cache[normalized_path] = imported_texture
return imported_texture
if not FileAccess.file_exists(normalized_path):
return null
var image := Image.new()
if image.load(normalized_path) != OK:
return null
return ImageTexture.create_from_image(image)
var raw_texture := ImageTexture.create_from_image(image)
portrait_texture_cache[normalized_path] = raw_texture
return raw_texture
func _dialogue_portrait_initials(speaker: String) -> String: