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