Skip to content

Commit 2ab1cf3

Browse files
Merge branch 'main' into improve-vectors-and-numbers
2 parents bc55d5d + be778f3 commit 2ab1cf3

20 files changed

Lines changed: 356 additions & 59 deletions

addons/dialogic/Core/DialogicGameHandler.gd

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,18 @@ func end_timeline(skip_ending := false) -> void:
281281
timeline_ended.emit()
282282

283283

284+
## Method to check if timeline exists.
285+
## @timeline can be either a loaded timeline resource or a path to a timeline file.
286+
func timeline_exists(timeline:Variant) -> bool:
287+
if typeof(timeline) == TYPE_STRING:
288+
if "://" in timeline and ResourceLoader.exists(timeline):
289+
return load(timeline) is DialogicTimeline
290+
else:
291+
return DialogicResourceUtil.timeline_resource_exists(timeline)
292+
293+
return timeline is DialogicTimeline
294+
295+
284296
## Handles the next event.
285297
func handle_next_event(_ignore_argument: Variant = "") -> void:
286298
handle_event(current_event_idx+1)

addons/dialogic/Core/DialogicResourceUtil.gd

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,15 @@ static func get_resource_from_identifier(identifier:String, extension:String) ->
8787
return null
8888

8989

90+
## Returns a boolean that expresses whether the resource exists.
91+
## The expected extension is needed to use the right directory.
92+
static func resource_exists_from_identifier(identifier:String, extension:String) -> bool:
93+
var value: Variant = get_directory(extension).get(identifier, '')
94+
if typeof(value) == TYPE_STRING:
95+
return ResourceLoader.exists(value)
96+
return value is Resource
97+
98+
9099
## Editor Only
91100
static func change_unique_identifier(file_path:String, new_identifier:String) -> void:
92101
var directory := get_directory(file_path.get_extension())
@@ -325,6 +334,10 @@ static func get_timeline_directory() -> Dictionary:
325334
return get_directory('dtl')
326335

327336

337+
static func timeline_resource_exists(timeline_identifier:String) -> bool:
338+
return resource_exists_from_identifier(timeline_identifier, 'dtl')
339+
340+
328341
static func get_timeline_resource(timeline_identifier:String) -> DialogicTimeline:
329342
return get_resource_from_identifier(timeline_identifier, 'dtl')
330343

addons/dialogic/Core/DialogicUtil.gd

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,7 @@ static func setup_script_property_edit_node(property_info: Dictionary, value:Var
436436
input = load("res://addons/dialogic/Editor/Events/Fields/field_number.tscn").instantiate()
437437
input.property_name = property_info['name']
438438
input.use_int_mode()
439+
439440
if ',' in property_info.hint_string:
440441
input.min_value = int(property_info.hint_string.get_slice(',', 0))
441442
input.max_value = int(property_info.hint_string.get_slice(',', 1))
@@ -445,6 +446,7 @@ static func setup_script_property_edit_node(property_info: Dictionary, value:Var
445446
input.step = 1
446447
input.max_value = INF
447448
input.min_value = -INF
449+
448450
if value != null:
449451
input.set_value(value)
450452
input.value_changed.connect(DialogicUtil._on_export_number_submitted.bind(property_changed))

addons/dialogic/Editor/Common/broken_reference_manager.gd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ func display_search_results(finds:Array[Dictionary]) -> void:
205205
## Inspired by how godot highlights stuff in its search results
206206
func _custom_draw(item:TreeItem, rect:Rect2) -> void:
207207
var text := item.get_text(2)
208-
var find := item.get_metadata(0)
208+
var find: Dictionary = item.get_metadata(0)
209209

210210
var font: Font = %ReferenceTree.get_theme_font("font")
211211
var font_size: int = %ReferenceTree.get_theme_font_size("font_size")

addons/dialogic/Editor/Common/sidebar.gd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ func _on_resources_tree_item_clicked(_pos: Vector2, mouse_button_index: int) ->
391391

392392

393393
func _on_resources_tree_item_collapsed(item:TreeItem) -> void:
394-
var collapsed_info := DialogicUtil.get_editor_setting("resource_list_collapsed_info", [])
394+
var collapsed_info: Array = DialogicUtil.get_editor_setting("resource_list_collapsed_info", [])
395395
if item.get_text(0) in collapsed_info:
396396
if not item.collapsed:
397397
collapsed_info.erase(item.get_text(0))
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
@tool
2+
class_name DialogicRichTextTransitionEffect
3+
extends RichTextEffect
4+
5+
var visible_characters := -1
6+
7+
@export var bbcode := "animate_in"
8+
var cache := []
9+
10+
@export_range(0.0, 5.0, 0.01) var time := 0.2
11+
@export_group("Color", "color")
12+
@export var color_modulate: Gradient = null
13+
@export var color_replace: Gradient = null
14+
@export_group("Scale", "scale")
15+
@export var scale_enabled := false
16+
@export var scale_curve := Curve.new()
17+
@export var scale_pivot := Vector2()
18+
@export_group("Position", "position")
19+
@export var position_enabled := false
20+
@export var position_x_curve := Curve.new()
21+
@export var position_y_curve := Curve.new()
22+
23+
@export_group("Test", "test")
24+
@export_range(-0.1, 1.0, 0.1) var test_value := -0.1
25+
26+
var was_skipped := false
27+
var was_reset := false
28+
29+
30+
func reset() -> void:
31+
was_reset = true
32+
was_skipped = false
33+
cache.clear()
34+
35+
36+
func skip() -> void:
37+
was_skipped = true
38+
39+
40+
func _process_custom_fx(char_fx: CharFXTransform) -> bool:
41+
var char_age :float = 0.0
42+
if test_value >= 0:
43+
char_age = test_value
44+
45+
else:
46+
if visible_characters == 0:
47+
cache.clear()
48+
return false
49+
if was_reset:
50+
if visible_characters != -1:
51+
was_reset = false
52+
else:
53+
return false
54+
55+
if len(cache) < visible_characters or visible_characters == -1 or was_skipped:
56+
if char_fx.range.x >= len(cache):
57+
cache.append(char_fx.elapsed_time)
58+
59+
if was_skipped:
60+
for i in range(len(cache)):
61+
cache[i] = char_fx.elapsed_time-time
62+
63+
if len(cache) > char_fx.range.x:
64+
char_age = char_fx.elapsed_time - cache[char_fx.range.x]
65+
66+
var text_server := TextServerManager.get_primary_interface()
67+
var trans: float = clamp(char_age, 0.0, time)/time
68+
69+
if color_replace:
70+
var c := color_replace.sample(trans)
71+
c.a = 1
72+
char_fx.color = char_fx.color.lerp(c, color_replace.sample(trans).a)
73+
if color_modulate:
74+
char_fx.color *= color_modulate.sample(trans)
75+
if char_fx.font.is_valid():
76+
var glyph_size := text_server.font_get_glyph_size(char_fx.font, Vector2i(16,1), char_fx.glyph_index)
77+
if scale_enabled:
78+
char_fx.transform = char_fx.transform.translated_local(scale_pivot*glyph_size*Vector2(1, -1)*(1-scale_curve.sample(trans)))
79+
char_fx.transform = char_fx.transform.scaled_local(Vector2.ONE*scale_curve.sample(trans))
80+
81+
if position_enabled:
82+
char_fx.transform = char_fx.transform.translated_local(Vector2(position_x_curve.sample(trans), position_y_curve.sample(trans))*glyph_size)
83+
84+
return true
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://wf7hpguw17ex
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
[gd_resource type="RichTextEffect" script_class="DialogicRichTextTransitionEffect" load_steps=3 format=3 uid="uid://qegqrr4g2riu"]
2+
3+
[ext_resource type="Script" uid="uid://wf7hpguw17ex" path="res://addons/dialogic/Example Assets/bbcode_transitions/bbcode_transition_effect.gd" id="1_5w3vn"]
4+
5+
[sub_resource type="Gradient" id="Gradient_5w3vn"]
6+
colors = PackedColorArray(1, 1, 1, 0, 1, 1, 1, 1)
7+
8+
[resource]
9+
script = ExtResource("1_5w3vn")
10+
bbcode = "fade_in"
11+
time = 0.2
12+
color_modulate = SubResource("Gradient_5w3vn")
13+
scale_enabled = false
14+
scale_pivot = Vector2(0, 0)
15+
position_enabled = false
16+
test_value = -0.1
17+
metadata/_custom_type_script = "uid://wf7hpguw17ex"
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
[gd_resource type="RichTextEffect" script_class="DialogicRichTextTransitionEffect" load_steps=4 format=3 uid="uid://hx8qyt5ry3h0"]
2+
3+
[ext_resource type="Script" uid="uid://wf7hpguw17ex" path="res://addons/dialogic/Example Assets/bbcode_transitions/bbcode_transition_effect.gd" id="1_rsak6"]
4+
5+
[sub_resource type="Gradient" id="Gradient_rsak6"]
6+
offsets = PackedFloat32Array(0, 0.6351706)
7+
colors = PackedColorArray(1, 1, 1, 0, 1, 1, 1, 1)
8+
9+
[sub_resource type="Curve" id="Curve_oitc5"]
10+
_limits = [0.0, 2.0, 0.0, 1.0]
11+
_data = [Vector2(0, 2), 0.0, 0.0, 0, 0, Vector2(0.40294844, 1.0066038), -0.13865282, 0.0, 0, 0]
12+
point_count = 2
13+
14+
[resource]
15+
script = ExtResource("1_rsak6")
16+
bbcode = "fade_scale_in"
17+
time = 0.30000000000000004
18+
color_modulate = SubResource("Gradient_rsak6")
19+
scale_enabled = true
20+
scale_curve = SubResource("Curve_oitc5")
21+
scale_pivot = Vector2(0.5, 0.5)
22+
position_enabled = false
23+
test_value = -0.1
24+
metadata/_custom_type_script = "uid://wf7hpguw17ex"
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
[gd_resource type="RichTextEffect" script_class="DialogicRichTextTransitionEffect" load_steps=6 format=3 uid="uid://c8b884puc720d"]
2+
3+
[ext_resource type="Script" uid="uid://wf7hpguw17ex" path="res://addons/dialogic/Example Assets/bbcode_transitions/bbcode_transition_effect.gd" id="1_n3lqs"]
4+
5+
[sub_resource type="Gradient" id="Gradient_n3lqs"]
6+
offsets = PackedFloat32Array(0, 0.45292622)
7+
colors = PackedColorArray(1, 1, 1, 0, 1, 1, 1, 1)
8+
9+
[sub_resource type="Gradient" id="Gradient_lhhwu"]
10+
interpolation_mode = 1
11+
offsets = PackedFloat32Array(0, 0.6666667, 0.86513996)
12+
colors = PackedColorArray(0.5208, 0.76631993, 0.93, 0, 0.5242275, 0.76595265, 0.93170327, 1, 0.5208, 0.76631993, 0.93, 0)
13+
14+
[sub_resource type="Curve" id="Curve_lhhwu"]
15+
_data = [Vector2(0.002457004, 1), 0.0, -1.993977, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
16+
point_count = 2
17+
18+
[sub_resource type="Curve" id="Curve_4i73d"]
19+
_limits = [0.0, 1.5, 0.0, 1.0]
20+
_data = [Vector2(0, 0.6627359), 0.0, 1.7969435, 0, 0, Vector2(0.4987715, 1.0308962), -1.6188686, -1.6188686, 0, 0, Vector2(0.66093373, 1), -0.34929827, 0.0, 0, 0]
21+
point_count = 3
22+
23+
[resource]
24+
script = ExtResource("1_n3lqs")
25+
bbcode = "fancy_in"
26+
time = 0.4
27+
color_modulate = SubResource("Gradient_n3lqs")
28+
color_replace = SubResource("Gradient_lhhwu")
29+
scale_enabled = true
30+
scale_curve = SubResource("Curve_4i73d")
31+
scale_pivot = Vector2(0.5, 0)
32+
position_enabled = true
33+
position_x_curve = SubResource("Curve_lhhwu")
34+
test_value = -0.1
35+
metadata/_custom_type_script = "uid://wf7hpguw17ex"

0 commit comments

Comments
 (0)