/// <inheritdoc />
        public void ShowResult <TSource>(IActionResult <TSource> result)
        {
            if (result.TargetProtected)
            {
                ShowMessage(result.DescribeProtected());
            }
            else
            {
                switch (result)
                {
                case BuffActionResult <TSource> br:
                    var buffDescription = br.Describe();
                    if (buffDescription is not null)
                    {
                        ShowMessage(buffDescription);
                    }
                    break;

                case DamageActionResult <TSource> dr:
                    var damageDescription = dr.Describe();
                    if (damageDescription is not null)
                    {
                        ShowMessage(damageDescription);
                    }
                    break;

                case HealActionResult <TSource> hr:
                    var healDescription = hr.Describe();
                    if (healDescription is not null)
                    {
                        ShowMessage(healDescription);
                    }
                    break;

                case ProtectLimitChangeActionResult <TSource> plcr:
                    var plcrDescription = plcr.Describe();
                    if (plcrDescription is not null)
                    {
                        ShowMessage(plcrDescription);
                    }
                    break;

                case ProtectActionResult <TSource> pr:
                    var protectDescription = pr.Describe();
                    if (protectDescription is not null)
                    {
                        ShowMessage(protectDescription);
                    }
                    break;
                }
            }
        }