Add opening story beat strip
This commit is contained in:
@@ -139,6 +139,8 @@ const BRIEFING_CAMP_THUMBNAIL_SIZE := Vector2(188, 86)
|
||||
const BRIEFING_TACTICAL_MARKER_CHIP_SIZE := Vector2(122, 26)
|
||||
const BRIEFING_TACTICAL_MARKER_ICON_SIZE := Vector2(22, 22)
|
||||
const BRIEFING_TACTICAL_MARKER_MAX_COUNT := 3
|
||||
const OPENING_STORY_BEAT_CARD_SIZE := Vector2(122, 66)
|
||||
const OPENING_STORY_BEAT_IMAGE_SIZE := Vector2(112, 42)
|
||||
const CHAPTER_SEAL_BADGE_SIZE := Vector2(54, 54)
|
||||
const CHAPTER_SCENARIO_THUMBNAIL_SIZE := Vector2(72, 50)
|
||||
const CHAPTER_INFO_BADGE_SIZE := Vector2(86, 22)
|
||||
@@ -533,6 +535,7 @@ var opening_prologue_scene_texture_rect: TextureRect
|
||||
var opening_prologue_title_label: Label
|
||||
var opening_prologue_body_label: Label
|
||||
var opening_prologue_step_label: Label
|
||||
var opening_prologue_story_strip: HBoxContainer
|
||||
var opening_prologue_next_button: Button
|
||||
var opening_prologue_skip_button: Button
|
||||
var opening_prologue_index := 0
|
||||
@@ -2004,6 +2007,81 @@ func _make_title_story_preview_card(title: String, image_path: String, index: in
|
||||
return card
|
||||
|
||||
|
||||
func _make_opening_story_beat_strip() -> PanelContainer:
|
||||
var panel := PanelContainer.new()
|
||||
panel.name = "OpeningStoryBeatStrip"
|
||||
panel.position = Vector2(630, 32)
|
||||
panel.size = Vector2(594, 86)
|
||||
panel.custom_minimum_size = Vector2(594, 86)
|
||||
_apply_panel_style(panel, "hud_info")
|
||||
|
||||
opening_prologue_story_strip = HBoxContainer.new()
|
||||
opening_prologue_story_strip.name = "OpeningStoryBeatRow"
|
||||
opening_prologue_story_strip.custom_minimum_size = Vector2(562, 66)
|
||||
opening_prologue_story_strip.add_theme_constant_override("separation", 8)
|
||||
panel.add_child(opening_prologue_story_strip)
|
||||
return panel
|
||||
|
||||
|
||||
func _rebuild_opening_story_beat_strip() -> void:
|
||||
if opening_prologue_story_strip == null:
|
||||
return
|
||||
for child in opening_prologue_story_strip.get_children():
|
||||
opening_prologue_story_strip.remove_child(child)
|
||||
child.queue_free()
|
||||
for index in range(OPENING_PROLOGUE_PAGES.size()):
|
||||
var page: Dictionary = OPENING_PROLOGUE_PAGES[index]
|
||||
opening_prologue_story_strip.add_child(_make_opening_story_beat_card(page, index, index == opening_prologue_index))
|
||||
|
||||
|
||||
func _make_opening_story_beat_card(page: Dictionary, index: int, is_current: bool) -> PanelContainer:
|
||||
var title := str(page.get("title", "장면"))
|
||||
var image_path := str(page.get("image", ""))
|
||||
var tooltip := "장면 %d. %s" % [index + 1, title]
|
||||
var card := PanelContainer.new()
|
||||
card.name = "OpeningStoryBeatCard%d" % (index + 1)
|
||||
card.custom_minimum_size = OPENING_STORY_BEAT_CARD_SIZE
|
||||
card.tooltip_text = tooltip
|
||||
card.set_meta("current_story_beat", is_current)
|
||||
_apply_panel_style(card, "edict_compact" if is_current else "caption")
|
||||
var card_style := card.get_theme_stylebox("panel")
|
||||
if card_style != null:
|
||||
card_style.content_margin_left = 5
|
||||
card_style.content_margin_right = 5
|
||||
card_style.content_margin_top = 4
|
||||
card_style.content_margin_bottom = 3
|
||||
card.modulate = Color(1.0, 1.0, 1.0, 1.0) if is_current else Color(0.56, 0.55, 0.50, 0.88)
|
||||
|
||||
var column := VBoxContainer.new()
|
||||
column.custom_minimum_size = Vector2(112, 59)
|
||||
column.add_theme_constant_override("separation", 2)
|
||||
column.tooltip_text = tooltip
|
||||
card.add_child(column)
|
||||
|
||||
var image := TextureRect.new()
|
||||
image.name = "OpeningStoryBeatImage"
|
||||
image.custom_minimum_size = OPENING_STORY_BEAT_IMAGE_SIZE
|
||||
image.expand_mode = TextureRect.EXPAND_IGNORE_SIZE
|
||||
image.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_COVERED
|
||||
image.texture = _load_art_texture(image_path)
|
||||
image.modulate = Color(1.0, 0.96, 0.88, 0.98) if is_current else Color(0.82, 0.80, 0.74, 0.72)
|
||||
image.tooltip_text = tooltip
|
||||
column.add_child(image)
|
||||
|
||||
var label := Label.new()
|
||||
label.name = "OpeningStoryBeatLabel"
|
||||
label.text = "%d %s" % [index + 1, title]
|
||||
label.custom_minimum_size = Vector2(112, 15)
|
||||
label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||
label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER
|
||||
label.clip_text = true
|
||||
label.tooltip_text = tooltip
|
||||
_apply_label_style(label, UI_PARCHMENT_TEXT if is_current else UI_OLD_BRONZE, 9)
|
||||
column.add_child(label)
|
||||
_set_control_tree_tooltip(card, tooltip)
|
||||
return card
|
||||
|
||||
|
||||
func _make_map_lattice_overlay(size: Vector2) -> Control:
|
||||
var overlay := Control.new()
|
||||
overlay.name = "MapLatticeOverlay"
|
||||
@@ -2998,6 +3076,8 @@ func _create_hud() -> void:
|
||||
_apply_label_style(opening_chapter_label, UI_PARCHMENT_TEXT, 21)
|
||||
opening_chapter_panel.add_child(opening_chapter_label)
|
||||
|
||||
opening_prologue_root.add_child(_make_opening_story_beat_strip())
|
||||
|
||||
var opening_caption_panel := PanelContainer.new()
|
||||
opening_caption_panel.name = "OpeningCaptionScroll"
|
||||
opening_caption_panel.position = Vector2(56, 500)
|
||||
@@ -11927,6 +12007,7 @@ func _update_opening_prologue_page() -> void:
|
||||
if opening_prologue_next_button != null:
|
||||
opening_prologue_next_button.text = "군막으로" if opening_prologue_index >= page_count - 1 else "다음"
|
||||
opening_prologue_next_button.tooltip_text = "군막으로 이동합니다." if opening_prologue_index >= page_count - 1 else "다음 이야기로 넘깁니다."
|
||||
_rebuild_opening_story_beat_strip()
|
||||
|
||||
|
||||
func _on_opening_prologue_next_pressed() -> void:
|
||||
|
||||
Reference in New Issue
Block a user