private bool DestroyIfFatal(Virus virus)
        {
            if (!virus.isFatal)
            {
                return(false);
            }
            GameObject hostObject = virus.host.gameObject;

            if (hostObject == null)
            {
                return(true);
            }
            MobileTile mobile = hostObject.GetComponent <MobileTile>();

            if (mobile != null)
            {
                mobile.velocity = new Vector2();
            }
            if (!virus.isDead)
            {
                if (m_Fatalities.Contains(mobile))
                {
                    return(false);
                }
                m_Fatalities.Add(mobile);
                if (onFatal != null)
                {
                    onFatal();
                }
                return(false);
            }
            hostObject.SetActive(false);
            virus.gameObject.SetActive(false);
            return(true);
        }
        // Only subtracts from original virus when branching.
        //
        // Virus link follows the host.
        // Does not add virus as child, because Unity merges child triggers with parent.
        // https://answers.unity.com/questions/410711/trigger-in-child-object-calls-ontriggerenter-in-pa.html
        private static void TryTransmit(Virus virus, Collider2D potentialHost)
        {
            if (virus == null)
            {
                return;
            }
            if (virus.host != null && virus.count < 2)
            {
                return;
            }
            MobileTile mobile = potentialHost.gameObject.GetComponent <MobileTile>();

            if (mobile == null)
            {
                return;
            }
            VirusLink potentialHostVirusLink = potentialHost.gameObject.GetComponent <VirusLink>();

            if (potentialHostVirusLink == null)
            {
                GameObject cloneObject;
                Virus      clone;
                if (virus.count > 1)
                {
                    virus.count--;
                    cloneObject = GameObject.Instantiate(virus.gameObject);
                    clone       = cloneObject.GetComponent <Virus>();
                }
                else
                {
                    cloneObject = virus.gameObject;
                    clone       = virus;
                }
                clone.host = mobile;
                potentialHost.gameObject.AddComponent <VirusLink>();
                potentialHostVirusLink         = potentialHost.gameObject.GetComponent <VirusLink>();
                potentialHostVirusLink.virus   = clone;
                cloneObject.transform.position = potentialHost.transform.position;
                return;
            }
            Virus potentialHostVirus = potentialHostVirusLink.virus;

            if (virus.count == potentialHostVirus.count)
            {
                return;
            }
            if (virus.count < potentialHostVirus.count)
            {
                Virus swap = virus;
                virus = potentialHostVirus;
                potentialHostVirus = swap;
            }
            virus.count--;
            potentialHostVirus.count++;
        }