Grassy knoll
This commit is contained in:
@@ -0,0 +1,212 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user