]> Untitled Git - wolf-seeking-sheep.git/blob - addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Choices/vn_choice_layer.gd
Initial Godot project with Dialogic 2.0-Alpha-17
[wolf-seeking-sheep.git] / addons / dialogic / Modules / DefaultLayoutParts / Layer_VN_Choices / vn_choice_layer.gd
1 @tool
2 extends DialogicLayoutLayer
3
4 ## A layer that allows showing up to 10 choices.
5 ## Choices are positioned in the center of the screen.
6
7 @export_group("Text")
8 @export_subgroup('Font')
9 @export var font_use_global: bool = true
10 @export_file('*.ttf', '*.tres') var font_custom: String = ""
11 @export_subgroup('Size')
12 @export var font_size_use_global: bool = true
13 @export var font_size_custom: int = 16
14 @export_subgroup('Color')
15 @export var text_color_use_global: bool = true
16 @export var text_color_custom: Color = Color.WHITE
17 @export var text_color_pressed: Color = Color.WHITE
18 @export var text_color_hovered: Color = Color.GRAY
19 @export var text_color_disabled: Color = Color.DARK_GRAY
20 @export var text_color_focused: Color = Color.WHITE
21
22 @export_group('Boxes')
23 @export_subgroup('Panels')
24 @export_file('*.tres') var boxes_stylebox_normal: String = "res://addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Choices/choice_panel_normal.tres"
25 @export_file('*.tres') var boxes_stylebox_hovered: String = "res://addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Choices/choice_panel_hover.tres"
26 @export_file('*.tres') var boxes_stylebox_pressed: String = ""
27 @export_file('*.tres') var boxes_stylebox_disabled: String = ""
28 @export_file('*.tres') var boxes_stylebox_focused: String = "res://addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Choices/choice_panel_focus.tres"
29 @export_subgroup('Modulate')
30 @export_subgroup('Size & Position')
31 @export var boxes_v_separation: int = 10
32 @export var boxes_fill_width: bool = true
33 @export var boxes_min_size: Vector2 = Vector2()
34 @export var boxes_offset: Vector2 = Vector2()
35
36 @export_group('Sounds')
37 @export_range(-80, 24, 0.01) var sounds_volume: float = -10
38 @export_file("*.wav", "*.ogg", "*.mp3") var sounds_pressed: String = "res://addons/dialogic/Example Assets/sound-effects/typing1.wav"
39 @export_file("*.wav", "*.ogg", "*.mp3") var sounds_hover: String = "res://addons/dialogic/Example Assets/sound-effects/typing2.wav"
40 @export_file("*.wav", "*.ogg", "*.mp3") var sounds_focus: String = "res://addons/dialogic/Example Assets/sound-effects/typing4.wav"
41
42 func get_choices() -> VBoxContainer:
43         return $Choices
44
45
46 func get_button_sound() -> DialogicNode_ButtonSound:
47         return %DialogicNode_ButtonSound
48
49
50 ## Method that applies all exported settings
51 func _apply_export_overrides() -> void:
52         # apply text settings
53         var layer_theme: Theme = Theme.new()
54
55         # font
56         if font_use_global and get_global_setting(&'font', false):
57                 layer_theme.set_font(&'font', &'Button', load(get_global_setting(&'font', '') as String) as Font)
58         elif ResourceLoader.exists(font_custom):
59                 layer_theme.set_font(&'font', &'Button', load(font_custom) as Font)
60
61         # font size
62         if font_size_use_global:
63                 layer_theme.set_font_size(&'font_size', &'Button', get_global_setting(&'font_size', font_size_custom) as int)
64         else:
65                 layer_theme.set_font_size(&'font_size', &'Button', font_size_custom)
66
67         # font color
68         if text_color_use_global:
69                 layer_theme.set_color(&'font_color', &'Button', get_global_setting(&'font_color', text_color_custom) as Color)
70         else:
71                 layer_theme.set_color(&'font_color', &'Button', text_color_custom)
72
73         layer_theme.set_color(&'font_pressed_color', &'Button', text_color_pressed)
74         layer_theme.set_color(&'font_hover_color', &'Button', text_color_hovered)
75         layer_theme.set_color(&'font_disabled_color', &'Button', text_color_disabled)
76         layer_theme.set_color(&'font_pressed_color', &'Button', text_color_pressed)
77         layer_theme.set_color(&'font_focus_color', &'Button', text_color_focused)
78
79
80         # apply box settings
81         if ResourceLoader.exists(boxes_stylebox_normal):
82                 var style_box: StyleBox = load(boxes_stylebox_normal)
83                 layer_theme.set_stylebox(&'normal', &'Button', style_box)
84                 layer_theme.set_stylebox(&'hover', &'Button', style_box)
85                 layer_theme.set_stylebox(&'pressed', &'Button', style_box)
86                 layer_theme.set_stylebox(&'disabled', &'Button', style_box)
87                 layer_theme.set_stylebox(&'focus', &'Button', style_box)
88
89         if ResourceLoader.exists(boxes_stylebox_hovered):
90                 layer_theme.set_stylebox(&'hover', &'Button', load(boxes_stylebox_hovered) as StyleBox)
91
92         if ResourceLoader.exists(boxes_stylebox_pressed):
93                 layer_theme.set_stylebox(&'pressed', &'Button', load(boxes_stylebox_pressed) as StyleBox)
94         if ResourceLoader.exists(boxes_stylebox_disabled):
95                 layer_theme.set_stylebox(&'disabled', &'Button', load(boxes_stylebox_disabled) as StyleBox)
96         if ResourceLoader.exists(boxes_stylebox_focused):
97                 layer_theme.set_stylebox(&'focus', &'Button', load(boxes_stylebox_focused) as StyleBox)
98
99         get_choices().add_theme_constant_override(&"separation", boxes_v_separation)
100         self.position = boxes_offset
101
102         for child: Node in get_choices().get_children():
103                 if not child is DialogicNode_ChoiceButton:
104                         continue
105                 var choice: DialogicNode_ChoiceButton = child as DialogicNode_ChoiceButton
106
107                 if boxes_fill_width:
108                         choice.size_flags_horizontal = Control.SIZE_FILL
109                 else:
110                         choice.size_flags_horizontal = Control.SIZE_SHRINK_CENTER
111
112                 choice.custom_minimum_size = boxes_min_size
113
114
115         set(&'theme', layer_theme)
116
117         # apply sound settings
118         var button_sound: DialogicNode_ButtonSound = get_button_sound()
119         button_sound.volume_db = sounds_volume
120         button_sound.sound_pressed = load(sounds_pressed)
121         button_sound.sound_hover = load(sounds_hover)
122         button_sound.sound_focus = load(sounds_focus)