Files
EGJ25/addons/guide/modifiers/guide_modifier_map_range.gd
minimata 9a79715e47
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 6s
Create tag and build when new code gets to main / Export (push) Successful in 3m16s
feat: made sure the aspect ration fit a pixel art game and added useful addons
2025-06-27 15:19:12 +02:00

68 lines
1.9 KiB
GDScript

@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"