generated from SGDA/GodotExampleProject
68 lines
1.9 KiB
GDScript3
68 lines
1.9 KiB
GDScript3
|
@tool
|
||
|
## Maps an input range to an output range and optionally clamps the output.
|
||
|
class_name GUIDEModifierMapRange
|
||
|
extends GUIDEModifier
|
||
|
|
||
|
## Should the output be clamped to the range?
|
||
|
@export var apply_clamp:bool = true
|
||
|
|
||
|
## The minimum input value
|
||
|
@export var input_min:float = 0.0
|
||
|
|
||
|
## The maximum input value
|
||
|
@export var input_max:float = 1.0
|
||
|
|
||
|
## The minimum output value
|
||
|
@export var output_min:float = 0.0
|
||
|
|
||
|
## The maximum output value
|
||
|
@export var output_max:float = 1.0
|
||
|
|
||
|
## Apply modifier to X axis
|
||
|
@export var x:bool = true
|
||
|
|
||
|
## Apply modifier to Y axis
|
||
|
@export var y:bool = true
|
||
|
|
||
|
## Apply modifier to Z axis
|
||
|
@export var z:bool = true
|
||
|
|
||
|
var _omin:float
|
||
|
var _omax:float
|
||
|
|
||
|
func _begin_usage():
|
||
|
# we calculate the min and max of the output range here, so we can use them later and don't have to
|
||
|
# recalculate them every time the modifier is used
|
||
|
_omin = min(output_min, output_max)
|
||
|
_omax = max(output_min, output_max)
|
||
|
|
||
|
func _modify_input(input:Vector3, delta:float, value_type:GUIDEAction.GUIDEActionValueType) -> Vector3:
|
||
|
if not input.is_finite():
|
||
|
return Vector3.INF
|
||
|
|
||
|
var x_value:float = remap(input.x, input_min, input_max, output_min, output_max)
|
||
|
var y_value:float = remap(input.y, input_min, input_max, output_min, output_max)
|
||
|
var z_value:float = remap(input.z, input_min, input_max, output_min, output_max)
|
||
|
|
||
|
if apply_clamp:
|
||
|
# clamp doesn't handle reverse ranges, so we need to use our calculated normalized output range
|
||
|
# to clamp the output values
|
||
|
x_value = clamp(x_value, _omin, _omax)
|
||
|
y_value = clamp(y_value, _omin, _omax)
|
||
|
z_value = clamp(z_value, _omin, _omax)
|
||
|
|
||
|
# Return vector with enabled axes set, others unchanged
|
||
|
return Vector3(
|
||
|
x_value if x else input.x,
|
||
|
y_value if y else input.y,
|
||
|
z_value if z else input.z,
|
||
|
)
|
||
|
|
||
|
|
||
|
func _editor_name() -> String:
|
||
|
return "Map Range"
|
||
|
|
||
|
|
||
|
func _editor_description() -> String:
|
||
|
return "Maps an input range to an output range and optionally clamps the output"
|