OverviewFilesCommitsIssuesDocsReleasesPeers

godot-witchy_world_demo / addons / scatter / src / modifiers / base_modifier.gd

70 lines · gd ref:
tool
extends Node


signal warning_changed


export var enabled := true


var display_name: String = "Base Modifier Name"
var category: String = "None"
var warning: String = ""
var warning_ignore_no_transforms := false
var warning_ignore_no_path := true


func get_warning() -> String:
	return warning


func _clear_warning() -> void:
	warning = ""


func _notify_warning_changed() -> void:
	emit_signal("warning_changed")


func process_transforms(transforms, global_seed) -> void:
	_clear_warning()

	var path = transforms.path
	if path.curve.get_point_count() <= 1 and not warning_ignore_no_path:
		warning += """The Scatter node 3D curve is empty.
		You can draw one using the controls on top of the viewport."""
		return

	if transforms.list.empty() and not warning_ignore_no_transforms:
		warning += """The list of transforms is empty.
		Make sure you have a Distribute or Create modifier at the begining of the stack.
		"""

	_process_transforms(transforms, global_seed)
	_notify_warning_changed()


# Override in inherited class
func _process_transforms(_transforms, _global_seed) -> void:
	pass


func shuffle(array, random_seed := 0) -> void:
	var n = array.size()
	if n < 2:
		return

	var rng = RandomNumberGenerator.new()
	rng.set_seed(random_seed)

	var i = n - 1
	var j
	var tmp
	while i >= 1:
		j = rng.randi() % (i + 1)
		tmp = array[j]
		array[j] = array[i]
		array[i] = tmp
		i -= 1