using System; namespace Unity.VisualScripting { public sealed class ValueInputDefinition : ValuePortDefinition, IUnitInputPortDefinition { [SerializeAs(nameof(defaultValue))] private object _defaultvalue; [Inspectable] [DoNotSerialize] public override Type type { get { return base.type; } set { base.type = value; if (!type.IsAssignableFrom(defaultValue)) { if (ValueInput.SupportsDefaultValue(type)) { _defaultvalue = type.PseudoDefault(); } else { hasDefaultValue = false; _defaultvalue = null; } } } } [Serialize] [Inspectable] public bool hasDefaultValue { get; set; } [DoNotSerialize] [Inspectable] public object defaultValue { get { return _defaultvalue; } set { if (type == null) { throw new InvalidOperationException("A type must be defined before setting the default value."); } if (!ValueInput.SupportsDefaultValue(type)) { throw new InvalidOperationException("The selected type does not support default values."); } Ensure.That(nameof(value)).IsOfType(value, type); _defaultvalue = value; } } } }