mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-01-19 09:39:48 +00:00
99 lines
1.9 KiB
GDScript3
99 lines
1.9 KiB
GDScript3
|
tool
|
||
|
extends "layout_node.gd"
|
||
|
# Layout binary tree nodes, defining subtrees and leaf panels
|
||
|
|
||
|
enum Direction {
|
||
|
HORIZONTAL,
|
||
|
VERTICAL,
|
||
|
}
|
||
|
|
||
|
const LayoutPanel = preload("layout_panel.gd")
|
||
|
|
||
|
export(Direction) var direction = Direction.HORIZONTAL setget set_direction, get_direction
|
||
|
export(float, 0, 1) var percent = 0.5 setget set_percent, get_percent
|
||
|
export(Resource) var first = LayoutPanel.new() setget set_first, get_first
|
||
|
export(Resource) var second = LayoutPanel.new() setget set_second, get_second
|
||
|
|
||
|
var _direction = Direction.HORIZONTAL
|
||
|
var _percent = 0.5
|
||
|
var _first
|
||
|
var _second
|
||
|
|
||
|
|
||
|
func _init() -> void:
|
||
|
resource_name = "Split"
|
||
|
|
||
|
|
||
|
func clone():
|
||
|
var new_split = get_script().new()
|
||
|
new_split._direction = _direction
|
||
|
new_split._percent = _percent
|
||
|
new_split.first = _first.clone()
|
||
|
new_split.second = _second.clone()
|
||
|
return new_split
|
||
|
|
||
|
|
||
|
func set_first(value) -> void:
|
||
|
if value == null:
|
||
|
_first = LayoutPanel.new()
|
||
|
else:
|
||
|
_first = value
|
||
|
_first.parent = self
|
||
|
emit_tree_changed()
|
||
|
|
||
|
|
||
|
func get_first():
|
||
|
return _first
|
||
|
|
||
|
|
||
|
func set_second(value) -> void:
|
||
|
if value == null:
|
||
|
_second = LayoutPanel.new()
|
||
|
else:
|
||
|
_second = value
|
||
|
_second.parent = self
|
||
|
emit_tree_changed()
|
||
|
|
||
|
|
||
|
func get_second():
|
||
|
return _second
|
||
|
|
||
|
|
||
|
func set_direction(value: int) -> void:
|
||
|
if value != _direction:
|
||
|
_direction = value
|
||
|
emit_tree_changed()
|
||
|
|
||
|
|
||
|
func get_direction() -> int:
|
||
|
return _direction
|
||
|
|
||
|
|
||
|
func set_percent(value: float) -> void:
|
||
|
var clamped_value = clamp(value, 0, 1)
|
||
|
if not is_equal_approx(_percent, clamped_value):
|
||
|
_percent = clamped_value
|
||
|
emit_tree_changed()
|
||
|
|
||
|
|
||
|
func get_percent() -> float:
|
||
|
return _percent
|
||
|
|
||
|
|
||
|
func get_names() -> PoolStringArray:
|
||
|
var names = _first.get_names()
|
||
|
names.append_array(_second.get_names())
|
||
|
return names
|
||
|
|
||
|
|
||
|
func empty() -> bool:
|
||
|
return _first.empty() and _second.empty()
|
||
|
|
||
|
|
||
|
func is_horizontal() -> bool:
|
||
|
return _direction == Direction.HORIZONTAL
|
||
|
|
||
|
|
||
|
func is_vertical() -> bool:
|
||
|
return _direction == Direction.VERTICAL
|