213 lines
8.2 KiB
GDScript
213 lines
8.2 KiB
GDScript
# global_parameters.gd
|
|
# This file is part of: SimpleGrassTextured
|
|
# Copyright (c) 2023 IcterusGames
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person obtaining
|
|
# a copy of this software and associated documentation files (the
|
|
# "Software"), to deal in the Software without restriction, including
|
|
# without limitation the rights to use, copy, modify, merge, publish,
|
|
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
# permit persons to whom the Software is furnished to do so, subject to
|
|
# the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be
|
|
# included in all copies or substantial portions of the Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
@tool
|
|
extends AcceptDialog
|
|
|
|
const DEFAULT_WIND_DIR := Vector3.RIGHT
|
|
const DEFAULT_WIND_STRENGTH := 0.15
|
|
const DEFAULT_WIND_TURBULENCE := 1.0
|
|
const DEFAULT_WIND_PATTERN := "res://addons/simplegrasstextured/images/wind_pattern.png"
|
|
|
|
var _wind_dir_x_slider :EditorSpinSlider
|
|
var _wind_dir_y_slider :EditorSpinSlider
|
|
var _wind_dir_z_slider :EditorSpinSlider
|
|
var _wind_strength_slider :EditorSpinSlider
|
|
var _wind_turbulence_slider :EditorSpinSlider
|
|
var _wind_pattern :EditorResourcePicker
|
|
|
|
|
|
func _ready() -> void:
|
|
name = &"SimpleGrassTexturedGlobalParameters"
|
|
size = Vector2.ZERO
|
|
_wind_dir_x_slider = _create_slider("X", -1, 1, 0.01)
|
|
_wind_dir_y_slider = _create_slider("Y", -1, 1, 0.01)
|
|
_wind_dir_z_slider = _create_slider("Z", -1, 1, 0.01)
|
|
_wind_strength_slider = _create_slider("", 0, 1, 0.001)
|
|
_wind_turbulence_slider = _create_slider("", 0, 20, 0.01)
|
|
_wind_pattern = EditorResourcePicker.new()
|
|
_wind_pattern.base_type = "Texture"
|
|
_wind_pattern.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
|
_wind_dir_x_slider.value_changed.connect(_on_wind_dir_x_value_changed)
|
|
_wind_dir_y_slider.value_changed.connect(_on_wind_dir_y_value_changed)
|
|
_wind_dir_z_slider.value_changed.connect(_on_wind_dir_z_value_changed)
|
|
_wind_strength_slider.value_changed.connect(_on_wind_strength_value_changed)
|
|
_wind_turbulence_slider.value_changed.connect(_on_wind_turbulence_value_changed)
|
|
_wind_pattern.resource_changed.connect(_on_wind_pattern_resource_changed)
|
|
%WindDirHbox.add_child(_wind_dir_x_slider)
|
|
%WindDirHbox.add_child(_wind_dir_y_slider)
|
|
%WindDirHbox.add_child(_wind_dir_z_slider)
|
|
%WindStrengthHBox.add_child(_wind_strength_slider)
|
|
%WindTurbulenceHBox.add_child(_wind_turbulence_slider)
|
|
%WindPatternHBox.add_child(_wind_pattern)
|
|
get_ok_button().custom_minimum_size.x = 100
|
|
|
|
|
|
func _create_slider(label :String, min :float, max :float, step :float) -> EditorSpinSlider:
|
|
var slider := EditorSpinSlider.new()
|
|
slider.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
|
slider.step = step;
|
|
slider.min_value = min
|
|
slider.max_value = max
|
|
slider.label = label
|
|
slider.custom_minimum_size.x = 80
|
|
return slider
|
|
|
|
|
|
func disable_button(button :Button, disabled :bool) -> void:
|
|
if disabled:
|
|
button.disabled = true
|
|
button.modulate.a = 0
|
|
button.focus_mode = Control.FOCUS_NONE
|
|
else:
|
|
button.disabled = false
|
|
button.modulate.a = 1
|
|
button.focus_mode = Control.FOCUS_ALL
|
|
|
|
|
|
func on_theme_changed() -> void:
|
|
%DefaultWindDirButton.icon = get_theme_icon(&"Reload", &"EditorIcons")
|
|
%DefaultWindStrengthButton.icon = get_theme_icon(&"Reload", &"EditorIcons")
|
|
%DefaultWindTurbulenceButton.icon = get_theme_icon(&"Reload", &"EditorIcons")
|
|
%DefaultWindPatternButton.icon = get_theme_icon(&"Reload", &"EditorIcons")
|
|
|
|
|
|
func _on_about_to_popup() -> void:
|
|
var windir :Vector3 = ProjectSettings.get_setting("shader_globals/sgt_wind_direction").value
|
|
_wind_dir_x_slider.value = windir.x
|
|
_wind_dir_y_slider.value = windir.y
|
|
_wind_dir_z_slider.value = windir.z
|
|
_wind_strength_slider.value = ProjectSettings.get_setting("shader_globals/sgt_wind_strength").value
|
|
_wind_turbulence_slider.value = ProjectSettings.get_setting("shader_globals/sgt_wind_turbulence").value
|
|
_wind_pattern.edited_resource = load(ProjectSettings.get_setting("shader_globals/sgt_wind_pattern").value)
|
|
_on_wind_pattern_resource_changed(_wind_pattern.edited_resource)
|
|
on_theme_changed()
|
|
|
|
|
|
func _on_wind_dir_x_value_changed(value :float) -> void:
|
|
var windir :Vector3 = ProjectSettings.get_setting("shader_globals/sgt_wind_direction", {"value":Vector3.RIGHT}).value
|
|
windir.x = value
|
|
ProjectSettings.set_setting("shader_globals/sgt_wind_direction", {
|
|
"type": "vec3",
|
|
"value": windir
|
|
})
|
|
RenderingServer.global_shader_parameter_set("sgt_wind_direction", windir)
|
|
$SaveConfigTimer.start()
|
|
get_tree().emit_signal(&"sgt_globals_params_changed")
|
|
disable_button(%DefaultWindDirButton, windir == DEFAULT_WIND_DIR)
|
|
|
|
|
|
func _on_wind_dir_y_value_changed(value :float) -> void:
|
|
var windir :Vector3 = ProjectSettings.get_setting("shader_globals/sgt_wind_direction", {"value":Vector3.RIGHT}).value
|
|
windir.y = value
|
|
ProjectSettings.set_setting("shader_globals/sgt_wind_direction", {
|
|
"type": "vec3",
|
|
"value": windir
|
|
})
|
|
RenderingServer.global_shader_parameter_set("sgt_wind_direction", windir)
|
|
$SaveConfigTimer.start()
|
|
get_tree().emit_signal(&"sgt_globals_params_changed")
|
|
disable_button(%DefaultWindDirButton, windir == DEFAULT_WIND_DIR)
|
|
|
|
|
|
func _on_wind_dir_z_value_changed(value :float) -> void:
|
|
var windir :Vector3 = ProjectSettings.get_setting("shader_globals/sgt_wind_direction", {"value":Vector3.RIGHT}).value
|
|
windir.z = value
|
|
ProjectSettings.set_setting("shader_globals/sgt_wind_direction", {
|
|
"type": "vec3",
|
|
"value": windir
|
|
})
|
|
RenderingServer.global_shader_parameter_set("sgt_wind_direction", windir)
|
|
$SaveConfigTimer.start()
|
|
get_tree().emit_signal(&"sgt_globals_params_changed")
|
|
disable_button(%DefaultWindDirButton, windir == DEFAULT_WIND_DIR)
|
|
|
|
|
|
func _on_wind_strength_value_changed(value :float) -> void:
|
|
ProjectSettings.set_setting("shader_globals/sgt_wind_strength", {
|
|
"type": "float",
|
|
"value": value
|
|
})
|
|
RenderingServer.global_shader_parameter_set("sgt_wind_strength", value)
|
|
$SaveConfigTimer.start()
|
|
get_tree().emit_signal(&"sgt_globals_params_changed")
|
|
disable_button(%DefaultWindStrengthButton, _wind_strength_slider.value == DEFAULT_WIND_STRENGTH)
|
|
|
|
|
|
func _on_wind_turbulence_value_changed(value :float) -> void:
|
|
ProjectSettings.set_setting("shader_globals/sgt_wind_turbulence", {
|
|
"type": "float",
|
|
"value": value
|
|
})
|
|
RenderingServer.global_shader_parameter_set("sgt_wind_turbulence", value)
|
|
$SaveConfigTimer.start()
|
|
get_tree().emit_signal(&"sgt_globals_params_changed")
|
|
disable_button(%DefaultWindTurbulenceButton, _wind_turbulence_slider.value == DEFAULT_WIND_TURBULENCE)
|
|
|
|
|
|
func _on_wind_pattern_resource_changed(resource :Resource) -> void:
|
|
if resource.resource_path == "":
|
|
_wind_pattern.edited_resource = load(DEFAULT_WIND_PATTERN)
|
|
_on_wind_pattern_resource_changed(_wind_pattern.edited_resource)
|
|
return
|
|
ProjectSettings.set_setting("shader_globals/sgt_wind_pattern", {
|
|
"type": "sampler2D",
|
|
"value": resource.resource_path
|
|
})
|
|
RenderingServer.global_shader_parameter_set("sgt_wind_pattern", load(resource.resource_path))
|
|
$SaveConfigTimer.start()
|
|
get_tree().emit_signal(&"sgt_globals_params_changed")
|
|
disable_button(%DefaultWindPatternButton, resource.resource_path == DEFAULT_WIND_PATTERN)
|
|
|
|
|
|
func _on_save_config_timer_timeout() -> void:
|
|
ProjectSettings.save()
|
|
|
|
|
|
func _on_canceled():
|
|
queue_free()
|
|
|
|
|
|
func _on_confirmed() -> void:
|
|
ProjectSettings.save()
|
|
queue_free()
|
|
|
|
|
|
func _on_default_wind_dir_button_pressed() -> void:
|
|
_wind_dir_x_slider.value = DEFAULT_WIND_DIR.x
|
|
_wind_dir_y_slider.value = DEFAULT_WIND_DIR.y
|
|
_wind_dir_z_slider.value = DEFAULT_WIND_DIR.z
|
|
|
|
|
|
func _on_default_wind_strength_button_pressed() -> void:
|
|
_wind_strength_slider.value = DEFAULT_WIND_STRENGTH
|
|
|
|
|
|
func _on_default_wind_turbulence_button_pressed() -> void:
|
|
_wind_turbulence_slider.value = DEFAULT_WIND_TURBULENCE
|
|
|
|
|
|
func _on_default_wind_pattern_button_pressed() -> void:
|
|
_wind_pattern.edited_resource = load(DEFAULT_WIND_PATTERN)
|
|
_on_wind_pattern_resource_changed(_wind_pattern.edited_resource)
|