generated from SGDA/GodotExampleProject
52 lines
1.2 KiB
GDScript3
52 lines
1.2 KiB
GDScript3
|
@tool
|
||
|
## Applies a separate curve to each input axis.
|
||
|
class_name GUIDEModifierCurve
|
||
|
extends GUIDEModifier
|
||
|
|
||
|
|
||
|
## The curve to apply to the x axis
|
||
|
@export var curve: Curve = default_curve()
|
||
|
|
||
|
## 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
|
||
|
|
||
|
|
||
|
## Create default curve resource with a smoothstep, 0.0 - 1.0 input/output range
|
||
|
static func default_curve() -> Curve:
|
||
|
var curve = Curve.new()
|
||
|
curve.add_point(Vector2(0.0, 0.0))
|
||
|
curve.add_point(Vector2(1.0, 1.0))
|
||
|
|
||
|
return curve
|
||
|
|
||
|
|
||
|
func _modify_input(input: Vector3, delta: float, value_type: GUIDEAction.GUIDEActionValueType) -> Vector3:
|
||
|
# Curve should never be null
|
||
|
if curve == null:
|
||
|
push_error("No curve added to Curve modifier.")
|
||
|
return input
|
||
|
|
||
|
if not input.is_finite():
|
||
|
return Vector3.INF
|
||
|
|
||
|
# Return vector with enabled axes modified, others remain unchanged.
|
||
|
return Vector3(
|
||
|
curve.sample(input.x) if x else input.x,
|
||
|
curve.sample(input.y) if y else input.y,
|
||
|
curve.sample(input.z) if z else input.z
|
||
|
)
|
||
|
|
||
|
|
||
|
func _editor_name() -> String:
|
||
|
return "Curve"
|
||
|
|
||
|
|
||
|
func _editor_description() -> String:
|
||
|
return "Applies a curve to each input axis."
|