@tool ## A filter that converts a 2D input into a boolean that is true when the ## input direction matches the selected direction. Note, that north is negative Y, ## because in Godot negative Y is up. class_name GUIDEModifier8WayDirection extends GUIDEModifier enum GUIDEDirection { EAST = 0, NORTH_EAST = 1, NORTH = 2, NORTH_WEST = 3, WEST = 4, SOUTH_WEST = 5, SOUTH = 6, SOUTH_EAST = 7 } ## The direction in which the input should point. @export var direction:GUIDEDirection = GUIDEDirection.EAST func _modify_input(input:Vector3, delta:float, value_type:GUIDEAction.GUIDEActionValueType) -> Vector3: if not input.is_finite(): return Vector3.INF if input.is_zero_approx(): return Vector3.ZERO # get the angle in which the direction is pointing in radians. var angle_radians = atan2( -input.y, input.x ); var octant = roundi( 8 * angle_radians / TAU + 8 ) % 8; if octant == direction: return Vector3.RIGHT # (1, 0, 0) indicating boolean true else: return Vector3.ZERO func _editor_name() -> String: return "8-way direction" func _editor_description() -> String: return "Converts a 2D input into a boolean that is true when the\n" + \ "input direction matches the selected direction. Note, that north is negative Y,\n" + \ "because in Godot negative Y is up."