SummerDay/addons/summer_day/data/blueprint/z_space_manager.gd
2022-01-11 21:57:07 +01:00

57 lines
1.3 KiB
GDScript

tool
extends Reference
class_name SummerDayZSpaceManager
var z_ranges := []
# FIXME: Binary is probably only relevant when readding all the z_ranges
# from a loaded document. But not when adding entirely new ones, as the
# z_index should be aquivalent to the array index.
func load_z_index(z_range_instance):
var from = z_range_instance._index
var dest = z_ranges.bsearch_custom(from, self, "_compare_index")
for i in range(from, z_ranges.size()):
z_ranges[i]._index += 1
z_ranges.insert(dest, z_range_instance)
_print_indices()
func add_z_range(z_range_instance):
var from = z_range_instance._index
for i in range(from, z_ranges.size()):
z_ranges[i]._index += 1
z_ranges.insert(from, z_range_instance)
_print_indices()
func move_z_range(z_range_instance, to: int):
var from = z_range_instance._index
if from < to: # Index raises.
z_ranges.remove(from)
for i in range(from, to):
z_ranges[i]._index -= 1
z_ranges.insert(to, z_range_instance)
else: # Index lowers.
for i in range(to, from):
z_ranges[i]._index += 1
z_ranges.remove(from)
z_ranges.insert(to, z_range_instance)
_print_indices()
func _compare_index(a, b) -> bool:
return a._index < b
func _print_indices():
var debug_str = ""
for j in z_ranges:
debug_str += str(j._index) + ",\n"
SummerDay.debug_info.text = debug_str