Compare commits
No commits in common. '80e4008ac6e013f8d485b6f1ae5496faa656f3d4' and '3dc9a3a3daa947144c07a69ccc5de66c96cab007' have entirely different histories.
80e4008ac6
...
3dc9a3a3da
6 changed files with 103 additions and 331 deletions
@ -1,45 +0,0 @@ |
|||||||
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 |
|
@ -1 +0,0 @@ |
|||||||
uid://w5fuyrkwf40c |
|
Loading…
Reference in new issue