protected virtual void Update()
        {
            cooldown -= Time.deltaTime;

            if (cooldown <= 0.0f)
            {
                cooldown = DelayPerHeal;

                if (destructible == null)
                {
                    destructible = GetComponent <Destroyable>();
                }

                if (snapshot.AlphaWidth == destructible.AlphaWidth && snapshot.AlphaHeight == destructible.AlphaHeight)
                {
                    destructible.BeginAlphaModifications();
                    {
                        for (var y = snapshot.AlphaHeight - 1; y >= 0; y--)
                        {
                            for (var x = snapshot.AlphaWidth - 1; x >= 0; x--)
                            {
                                var index    = x + y * snapshot.AlphaWidth;
                                var oldAlpha = destructible.AlphaData[index];
                                var newAlpha = snapshot.AlphaData[index];

                                if (oldAlpha != newAlpha)
                                {
                                    newAlpha = (byte)Mathf.MoveTowards(oldAlpha, newAlpha, HealAmount);

                                    destructible.WriteAlpha(x, y, newAlpha);
                                }
                            }
                        }
                    }
                    destructible.EndAlphaModifications();
                }
            }
        }