@tool @icon("res://addons/guide/triggers/guide_trigger.svg") class_name GUIDETrigger extends Resource enum GUIDETriggerState { ## The trigger did not fire. NONE, ## The trigger's conditions are partially met ONGOING, ## The trigger has fired. TRIGGERED } enum GUIDETriggerType { # If there are more than one explicit triggers at least one must trigger # for the action to trigger. EXPLICIT = 1, # All implicit triggers must trigger for the action to trigger. IMPLICIT = 2, # All blocking triggers prevent the action from triggering. BLOCKING = 3 } @export var actuation_threshold:float = 0.5 var _last_value:Vector3 ## Returns the trigger type of this trigger. func _get_trigger_type() -> GUIDETriggerType: return GUIDETriggerType.EXPLICIT func _update_state(input:Vector3, delta:float, value_type:GUIDEAction.GUIDEActionValueType) -> GUIDETriggerState: return GUIDETriggerState.NONE func _is_actuated(input:Vector3, value_type:GUIDEAction.GUIDEActionValueType) -> bool: match value_type: GUIDEAction.GUIDEActionValueType.AXIS_1D, GUIDEAction.GUIDEActionValueType.BOOL: return _is_axis1d_actuated(input) GUIDEAction.GUIDEActionValueType.AXIS_2D: return _is_axis2d_actuated(input) GUIDEAction.GUIDEActionValueType.AXIS_3D: return _is_axis3d_actuated(input) return false ## Checks if a 1D input is actuated. func _is_axis1d_actuated(input:Vector3) -> bool: return is_finite(input.x) and abs(input.x) > actuation_threshold ## Checks if a 2D input is actuated. func _is_axis2d_actuated(input:Vector3) -> bool: return is_finite(input.x) and is_finite(input.y) and Vector2(input.x, input.y).length_squared() > actuation_threshold * actuation_threshold ## Checks if a 3D input is actuated. func _is_axis3d_actuated(input:Vector3) -> bool: return input.is_finite() and input.length_squared() > actuation_threshold * actuation_threshold func _editor_name() -> String: return "GUIDETrigger" func _editor_description() -> String: return ""