signalis-eb/godot/addons/iterator/range.gd
2025-06-09 23:12:19 -04:00

30 lines
824 B
GDScript

class_name RangeIterator extends Iterator
var index: int
var range: IntRange
var step: int
var descending: bool
func _init(range: IntRange, start_index: int = range.min, step: int = 1) -> void:
assert(step != 0, "step cannot be zero")
self.range = range
self.index = start_index
self.step = step
self.descending = step < 0
func from_values(from: int, to: int, start_index: int = range.min, step: int = 1) -> RangeIterator:
return RangeIterator.new(IntRange.new(from, to), start_index, step)
func length() -> int:
return range.length()
func clone() -> RangeIterator:
return RangeIterator.new(range, index)
func next() -> Option:
if range.contains(index):
var current_value = Option.some(index)
index += step
return current_value
else: return Option.none