using System; using System.Collections.Frozen; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Spine.Utils; using SpineRuntime34; using Spine.Interfaces; using Spine.Interfaces.Attachments; namespace Spine.Implementations.V34 { internal sealed class Slot34 : ISlot { private readonly Slot _o; private readonly SpineObjectData34 _data; private readonly Bone34 _bone; private readonly SFML.Graphics.BlendMode _blendMode; public Slot34(Slot innerObject, SpineObjectData34 data, Bone34 bone) { _o = innerObject; _data = data; _bone = bone; _blendMode = _o.Data.BlendMode switch { BlendMode.normal => SFMLBlendMode.NormalPma, BlendMode.additive => SFMLBlendMode.AdditivePma, BlendMode.multiply => SFMLBlendMode.MultiplyPma, BlendMode.screen => SFMLBlendMode.ScreenPma, _ => throw new NotImplementedException($"{_o.Data.BlendMode}"), }; } public Slot InnerObject => _o; public string Name => _o.Data.Name; public int Index => _o.Data.Index; public SFML.Graphics.BlendMode Blend => _blendMode; public float R { get => _o.R; set => _o.R = value; } public float G { get => _o.G; set => _o.G = value; } public float B { get => _o.B; set => _o.B = value; } public float A { get => _o.A; set => _o.A = value; } public IBone Bone => _bone; public IAttachment? Attachment { get { if (_o.Attachment is Attachment att) { return _data.SlotAttachments[Name][att.Name]; } return null; } set { if (value is null) { _o.Attachment = null; return; } if (value is Attachments.Attachment34 att) { _o.Attachment = att.InnerObject; return; } throw new ArgumentException($"Received {value.GetType().Name}", nameof(value)); } } public bool Disabled { get; set; } public override string ToString() => _o.ToString(); } }