// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System; using System.Collections.Generic; using System.Linq; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Extensions; using osu.Game.IO.Serialization; using osu.Game.Skinning; using osuTK; namespace osu.Game.Screens.Play.HUD { /// /// Serialised information governing custom changes to an . /// [Serializable] public class SkinnableInfo : IJsonSerializable { public Type Type { get; set; } [JsonConverter(typeof(StringEnumConverter))] public SkinnableTarget? Target { get; set; } public Vector2 Position { get; set; } public float Rotation { get; set; } public Vector2 Scale { get; set; } public Anchor Anchor { get; set; } public List Children { get; } = new List(); public SkinnableInfo() { } public SkinnableInfo(Drawable component) { Type = component.GetType(); ISkinnableTarget target = component.Parent as ISkinnableTarget; Target = target?.Target; Position = component.Position; Rotation = component.Rotation; Scale = component.Scale; Anchor = component.Anchor; if (component is Container container) { foreach (var child in container.Children.OfType().OfType()) Children.Add(child.CreateSerialisedInformation()); } } public Drawable CreateInstance() { Drawable d = (Drawable)Activator.CreateInstance(Type); d.ApplySerialisedInformation(this); return d; } } }