propertyValuesEqual function

bool propertyValuesEqual(
  1. PropertyValue? a,
  2. PropertyValue? b
)

Whether a and b carry the same value, comparing structurally (vectors by components, lists and maps element-wise, refs by id).

Implementation

bool propertyValuesEqual(PropertyValue? a, PropertyValue? b) {
  if (identical(a, b)) return true;
  if (a == null || b == null) return false;
  return switch (a) {
    BoolValue(:final value) => b is BoolValue && b.value == value,
    IntValue(:final value) => b is IntValue && b.value == value,
    DoubleValue(:final value) => b is DoubleValue && b.value == value,
    StringValue(:final value) => b is StringValue && b.value == value,
    Vec2Value(:final value) => b is Vec2Value && _vec2(value, b.value),
    Vec3Value(:final value) => b is Vec3Value && _vec3(value, b.value),
    Vec4Value(:final value) => b is Vec4Value && _vec4(value, b.value),
    QuaternionValue(:final value) =>
      b is QuaternionValue && _quat(value, b.value),
    Matrix4Value(:final value) => b is Matrix4Value && _mat4(value, b.value),
    ColorValue() =>
      b is ColorValue && a.r == b.r && a.g == b.g && a.b == b.b && a.a == b.a,
    ResourceRefValue(:final id) => b is ResourceRefValue && b.id == id,
    NodeRefValue(:final id) => b is NodeRefValue && b.id == id,
    ListValue(:final values) => b is ListValue && _list(values, b.values),
    MapValue(:final values) => b is MapValue && _map(values, b.values),
  };
}