54 lines
1.2 KiB
GDScript
54 lines
1.2 KiB
GDScript
@tool
|
|
@icon("res://addons/shaker/assets/ShakerPreset.svg")
|
|
class_name ShakerPresetBase
|
|
extends Resource
|
|
|
|
# Enum for shake categories
|
|
enum Categories {
|
|
POSITION,
|
|
ROTATION,
|
|
SCALE
|
|
}
|
|
|
|
# Graph panel reference
|
|
var Graph: Panel
|
|
|
|
# Bake internal setting
|
|
@export_range(16, 96) var bake_internal: int = 64:
|
|
set = set_bake_internal,
|
|
get = get_bake_internal
|
|
|
|
# Follow timeline flag
|
|
@export var __follow_timeline: bool = false:
|
|
set = set_follow_timeline,
|
|
get = get_follow_timeline
|
|
|
|
# Component duration and parent node
|
|
var component_duration: float = 0.0
|
|
var parent: Node
|
|
|
|
# Signal for property changes
|
|
signal property_changed(name: StringName)
|
|
|
|
func set_bake_internal(value: int) -> void:
|
|
bake_internal = clamp(value, 16, 96)
|
|
_on_property_changed("bake_internal")
|
|
|
|
func get_bake_internal() -> int:
|
|
return bake_internal
|
|
|
|
func set_follow_timeline(value: bool) -> void:
|
|
__follow_timeline = value
|
|
_on_property_changed("__follow_timeline")
|
|
|
|
func get_follow_timeline() -> bool:
|
|
return __follow_timeline
|
|
|
|
# Handle property changes
|
|
func _on_property_changed(property_name: StringName) -> void:
|
|
property_changed.emit(property_name)
|
|
|
|
# Calculate the difference between two arrays
|
|
func _array_difference(a: Array, b: Array) -> Array:
|
|
return b.filter(func(item): return not a.has(item))
|