Compare commits
5 Commits
3dc9a3a3da
...
80e4008ac6
Author | SHA1 | Date |
---|---|---|
|
80e4008ac6 | 7 days ago |
|
cb18c2206a | 7 days ago |
|
9c242ff1d1 | 7 days ago |
|
4b064db838 | 1 week ago |
|
ad76ef1703 | 1 week ago |
6 changed files with 331 additions and 103 deletions
@ -0,0 +1,45 @@ |
||||
class_name BlockRegion |
||||
extends RefCounted |
||||
|
||||
static var LOCAL_CHUNK := BlockRegion.new(Vector2i.ZERO, Vector2i.ONE * (Chunk.SIZE - 1)) |
||||
|
||||
var min: Vector2i |
||||
var max: Vector2i |
||||
|
||||
func _init(a: Vector2i, b: Vector2i) -> void: |
||||
min = a.min(b) |
||||
max = a.max(b) |
||||
|
||||
func size() -> Vector2i: |
||||
return max - min + Vector2i.ONE |
||||
|
||||
func contains(pos: Vector2i) -> bool: |
||||
return (pos.x >= min.x) && (pos.x <= max.x) and (pos.y >= min.y) && (pos.y <= max.y) |
||||
|
||||
|
||||
func offset(value: Vector2i) -> BlockRegion: |
||||
return BlockRegion.new(min + value, max + value) |
||||
|
||||
func extend(amount: int) -> BlockRegion: |
||||
var v := Vector2i.ONE * amount |
||||
return BlockRegion.new(min - v, max + v) |
||||
|
||||
|
||||
func array_index(pos: Vector2i) -> int: |
||||
assert(contains(pos)) |
||||
var size := size() |
||||
var index := (pos.x - min.x) + (pos.y - min.y) * size.x |
||||
return clampi(index, 0, size.x * size.y) |
||||
|
||||
|
||||
# Custom iterators in GDScript are WEIRD. |
||||
func _iter_init(state: Array) -> bool: |
||||
state[0] = min |
||||
return true |
||||
func _iter_next(state: Array) -> bool: |
||||
var cur: Vector2i = state[0] |
||||
if cur.x < max.x: state[0].x += 1; return true |
||||
elif cur.y < max.y: state[0] = Vector2i(min.x, cur.y + 1); return true |
||||
else: return false |
||||
func _iter_get(state: Variant) -> Vector2i: |
||||
return state |
@ -0,0 +1 @@ |
||||
uid://w5fuyrkwf40c |
Loading…
Reference in new issue