using System.Text.Json.Nodes; namespace Sandbox; public sealed partial class ParticleEffect { public override int ComponentVersion => 3; /// /// v1 /// - Added ApplyAlpha property if ApplyColor was true. /// [Expose, JsonUpgrader( typeof( ParticleEffect ), 1 )] static void Upgrader_v1( JsonObject obj ) { if ( obj.TryGetPropertyValue( "ApplyColor", out var propertyNode ) ) { var applyColor = (bool)propertyNode; if ( applyColor ) { obj["ApplyAlpha"] = true; } } } /// /// v2 /// - Changed Space from enum to LocalSpace ParticleFloat, where 1 is local, 0 is world space. /// [Expose, JsonUpgrader( typeof( ParticleEffect ), 2 )] static void Upgrader_v2( JsonObject obj ) { if ( obj.TryGetPropertyValue( "Space", out var space ) && (string)space == "Local" ) { obj[nameof( LocalSpace )] = 1; } } [Expose, JsonUpgrader( typeof( ParticleEffect ), 3 )] static void Upgrader_v3( JsonObject obj ) { var hasPitch = obj.TryGetPropertyValue( "Pitch", out var pitch ); var hasYaw = obj.TryGetPropertyValue( "Yaw", out var yaw ); var hasRoll = obj.TryGetPropertyValue( "Roll", out var roll ); if ( hasPitch && hasYaw && hasRoll ) { var originalPitch = pitch.DeepClone(); var originalYaw = yaw.DeepClone(); var originalRoll = roll.DeepClone(); obj[nameof( Roll )] = originalPitch; obj[nameof( Pitch )] = originalYaw; obj[nameof( Yaw )] = originalRoll; } } }