gd: added input addon
This commit is contained in:
67
addons/guide/modifiers/guide_modifier_map_range.gd
Normal file
67
addons/guide/modifiers/guide_modifier_map_range.gd
Normal file
@ -0,0 +1,67 @@
|
||||
@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"
|
Reference in New Issue
Block a user