Add dialogue portrait side placement
This commit is contained in:
@@ -86,10 +86,12 @@ var formation_menu: VBoxContainer
|
||||
var formation_list: VBoxContainer
|
||||
var formation_status_label: Label
|
||||
var formation_unit_id := ""
|
||||
var dialogue_row: HBoxContainer
|
||||
var dialogue_panel: PanelContainer
|
||||
var dialogue_portrait_panel: PanelContainer
|
||||
var dialogue_portrait_texture: TextureRect
|
||||
var dialogue_portrait_label: Label
|
||||
var dialogue_column: VBoxContainer
|
||||
var dialogue_speaker_label: Label
|
||||
var dialogue_text_label: Label
|
||||
var dialogue_continue_button: Button
|
||||
@@ -473,7 +475,7 @@ func _create_hud() -> void:
|
||||
dialogue_panel.size = Vector2(760, 140)
|
||||
root.add_child(dialogue_panel)
|
||||
|
||||
var dialogue_row := HBoxContainer.new()
|
||||
dialogue_row = HBoxContainer.new()
|
||||
dialogue_row.add_theme_constant_override("separation", 14)
|
||||
dialogue_panel.add_child(dialogue_row)
|
||||
|
||||
@@ -497,7 +499,7 @@ func _create_hud() -> void:
|
||||
dialogue_portrait_label.add_theme_font_size_override("font_size", 22)
|
||||
dialogue_portrait_stack.add_child(dialogue_portrait_label)
|
||||
|
||||
var dialogue_column := VBoxContainer.new()
|
||||
dialogue_column = VBoxContainer.new()
|
||||
dialogue_column.custom_minimum_size = Vector2(620, 112)
|
||||
dialogue_column.add_theme_constant_override("separation", 8)
|
||||
dialogue_row.add_child(dialogue_column)
|
||||
@@ -1538,16 +1540,24 @@ func _normalized_dialogue_lines(lines: Array) -> Array:
|
||||
result.append({
|
||||
"speaker": str(line.get("speaker", "")),
|
||||
"text": text,
|
||||
"portrait": str(line.get("portrait", ""))
|
||||
"portrait": str(line.get("portrait", "")),
|
||||
"side": _normalized_dialogue_side(line.get("side", "left"))
|
||||
})
|
||||
elif typeof(line) == TYPE_STRING:
|
||||
var text := str(line)
|
||||
if text.is_empty():
|
||||
continue
|
||||
result.append({"speaker": "", "text": text, "portrait": ""})
|
||||
result.append({"speaker": "", "text": text, "portrait": "", "side": "left"})
|
||||
return result
|
||||
|
||||
|
||||
func _normalized_dialogue_side(value) -> String:
|
||||
var side := str(value).strip_edges().to_lower()
|
||||
if side == "right":
|
||||
return "right"
|
||||
return "left"
|
||||
|
||||
|
||||
func _can_show_dialogue_now() -> bool:
|
||||
if not battle_started or campaign_complete_screen:
|
||||
return false
|
||||
@@ -1582,6 +1592,8 @@ func _render_dialogue_line() -> void:
|
||||
return
|
||||
var line: Dictionary = active_dialogue_lines[active_dialogue_index]
|
||||
var speaker := str(line.get("speaker", ""))
|
||||
var side := _normalized_dialogue_side(line.get("side", "left"))
|
||||
_apply_dialogue_side(side)
|
||||
dialogue_speaker_label.text = speaker
|
||||
dialogue_speaker_label.visible = not speaker.is_empty()
|
||||
dialogue_text_label.text = str(line.get("text", ""))
|
||||
@@ -1592,6 +1604,15 @@ func _render_dialogue_line() -> void:
|
||||
queue_redraw()
|
||||
|
||||
|
||||
func _apply_dialogue_side(side: String) -> void:
|
||||
if dialogue_row == null or dialogue_portrait_panel == null or dialogue_column == null:
|
||||
return
|
||||
var portrait_index := 1 if side == "right" else 0
|
||||
dialogue_row.move_child(dialogue_portrait_panel, portrait_index)
|
||||
dialogue_speaker_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT if side == "right" else HORIZONTAL_ALIGNMENT_LEFT
|
||||
dialogue_text_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT if side == "right" else HORIZONTAL_ALIGNMENT_LEFT
|
||||
|
||||
|
||||
func _update_dialogue_portrait(speaker: String, portrait_path: String) -> void:
|
||||
if dialogue_portrait_panel == null:
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user