improvements

This commit is contained in:
2025-08-01 21:41:59 -07:00
parent 5cde8be9a7
commit 3e9b50fa30
3 changed files with 52 additions and 58 deletions

View File

@@ -0,0 +1,45 @@
[gd_scene load_steps=3 format=3 uid="uid://hnknhvuc6wut"]
[ext_resource type="Script" path="res://scripts/dialogue_system.gd" id="1_78qb7"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_u70vs"]
border_width_left = 10
border_width_top = 10
border_width_right = 10
border_width_bottom = 10
corner_radius_top_left = 25
corner_radius_top_right = 25
corner_radius_bottom_right = 25
corner_radius_bottom_left = 25
[node name="DialogueSystem" type="Node2D"]
script = ExtResource("1_78qb7")
text_reveal_speed = 0.02
[node name="PanelContainer" type="PanelContainer" parent="."]
clip_children = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -125.0
offset_top = -50.0
offset_right = 125.0
offset_bottom = 50.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_u70vs")
[node name="ColorRect" type="ColorRect" parent="PanelContainer"]
custom_minimum_size = Vector2(250, 100)
layout_mode = 2
[node name="Control" type="Control" parent="PanelContainer/ColorRect"]
anchors_preset = 0
offset_right = 40.0
offset_bottom = 40.0
[node name="Label" type="Label" parent="PanelContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0, 0, 0, 1)

View File

@@ -2,7 +2,7 @@
[ext_resource type="Script" path="res://scripts/test_dialogue.gd" id="1_f305o"] [ext_resource type="Script" path="res://scripts/test_dialogue.gd" id="1_f305o"]
[ext_resource type="Script" path="res://scripts/base_character.gd" id="2_00bif"] [ext_resource type="Script" path="res://scripts/base_character.gd" id="2_00bif"]
[ext_resource type="Script" path="res://scripts/dialogue_system.gd" id="3_11ynk"] [ext_resource type="PackedScene" uid="uid://hnknhvuc6wut" path="res://scenes/dialogue_system.tscn" id="3_febaf"]
[node name="TestScene" type="Node2D"] [node name="TestScene" type="Node2D"]
position = Vector2(-1, 0) position = Vector2(-1, 0)
@@ -19,5 +19,4 @@ color = Color(0.2, 0.6, 1, 1)
antialiased = true antialiased = true
polygon = PackedVector2Array(10, -20, 20, 0, 10, 20, -10, 20, -20, 0, -10, -20) polygon = PackedVector2Array(10, -20, 20, 0, 10, 20, -10, 20, -20, 0, -10, -20)
[node name="DialogueSystem" type="Node2D" parent="Character/BaseCharacter"] [node name="DialogueSystem" parent="Character/BaseCharacter" instance=ExtResource("3_febaf")]
script = ExtResource("3_11ynk")

View File

@@ -13,8 +13,8 @@ signal dialogue_completed()
@export var hide_animation_duration: float = 0.2 # seconds @export var hide_animation_duration: float = 0.2 # seconds
# Private variables # Private variables
var dialogue_box: Control = null @onready var dialogue_box = $PanelContainer
var text_label: Label = null @onready var text_label: Label = $PanelContainer/Label
var timer: Timer = null var timer: Timer = null
var current_text: String = "" var current_text: String = ""
var current_duration: float = 0.0 var current_duration: float = 0.0
@@ -24,58 +24,7 @@ var is_revealing: bool = false
func _ready(): func _ready():
# Initialize the dialogue system # Initialize the dialogue system
_create_dialogue_ui() pass
func _create_dialogue_ui():
# Create dialogue box UI
dialogue_box = Control.new()
dialogue_box.name = "DialogueBox"
# Create background
var background = ColorRect.new()
background.name = "Background"
background.color = Color(1, 1, 1, 1) # White background
background.size = Vector2(300, 80)
background.anchor_left = 0.5
background.anchor_top = 1.0
background.anchor_right = 0.5
background.anchor_bottom = 1.0
background.position = Vector2(-150, -40) # Positioned above character
background.pivot_offset = Vector2(150, 40) # Center pivot
# Create text label
text_label = Label.new()
text_label.name = "TextLabel"
text_label.text = ""
text_label.size = Vector2(280, 60)
text_label.anchor_left = 0.5
text_label.add_theme_color_override("font_color", Color.BLACK)
text_label.anchor_top = 0.5
text_label.anchor_right = 0.5
text_label.anchor_bottom = 0.5
text_label.position = Vector2(-140, -30) # Centered in background
text_label.pivot_offset = Vector2(140, 30) # Center pivot
text_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_LEFT
text_label.vertical_alignment = VERTICAL_ALIGNMENT_TOP
text_label.autowrap_mode = 2 # TextServer.AUTOWRAP_WORD_SMART
#text_label.custom_styles.normal.font_size = 16
# Add to dialogue box
dialogue_box.add_child(background)
dialogue_box.add_child(text_label)
# Set initial state - hidden and transparent
dialogue_box.visible = false
dialogue_box.modulate.a = 0.0
# Add to scene tree (should be added to parent character)
add_child(dialogue_box)
# Position the dialogue box above the character
# This ensures it's positioned correctly relative to the character
if get_parent() != null:
var parent_pos = get_parent().position
dialogue_box.position = Vector2(parent_pos.x, parent_pos.y - 50) # Position above character
func trigger_dialogue(text: String, duration: float = 3.0) -> void: func trigger_dialogue(text: String, duration: float = 3.0) -> void:
"""Trigger dialogue with specified text and duration""" """Trigger dialogue with specified text and duration"""
@@ -167,7 +116,8 @@ func reveal_next_character():
text_index += 1 text_index += 1
# Schedule next character reveal # Schedule next character reveal
await get_tree().create_timer(text_reveal_speed)
await get_tree().create_timer(text_reveal_speed).timeout
reveal_next_character() reveal_next_character()
func _on_dialogue_timeout(): func _on_dialogue_timeout():