private void RegenHealth(int i,
                                 HealthComponent.Component healthComponent,
                                 HealthRegenComponent.Component regenComponent,
                                 HealthRegenData regenData)
        {
            if (healthComponent.Health >= healthComponent.MaxHealth)
            {
                return;
            }

            regenData.NextRegenTimer -= Time.deltaTime;

            if (regenData.NextRegenTimer <= 0)
            {
                regenData.NextRegenTimer += regenComponent.RegenInterval;

                // Send command to regen entity.
                var commandSender       = toRegen.ModifyHealthCommandSenders[i];
                var modifyHealthRequest = new HealthComponent.ModifyHealth.Request(
                    toRegen.EntityId[i].EntityId,
                    new HealthModifier()
                {
                    Amount = regenComponent.RegenAmount
                });
                commandSender.RequestsToSend.Add(modifyHealthRequest);
            }

            toRegen.RegenData[i] = regenData;
        }
        private void UpdateDamagedRecentlyTimers(
            int i,
            HealthRegenComponent.Component regenComponent,
            HealthRegenData regenData)
        {
            regenData.DamagedRecentlyTimer -= Time.deltaTime;

            if (regenData.DamagedRecentlyTimer <= 0)
            {
                regenData.DamagedRecentlyTimer    = 0;
                regenComponent.DamagedRecently    = false;
                regenComponent.RegenCooldownTimer = 0;
                toRegen.HealthRegenComponents[i]  = regenComponent;
            }
            else
            {
                // Send a spatial update once every CooldownSyncInterval.
                regenData.NextSpatialSyncTimer -= Time.deltaTime;
                if (regenData.NextSpatialSyncTimer <= 0)
                {
                    regenData.NextSpatialSyncTimer   += regenComponent.CooldownSyncInterval;
                    regenComponent.RegenCooldownTimer = regenData.DamagedRecentlyTimer;
                    toRegen.HealthRegenComponents[i]  = regenComponent;
                }
            }

            toRegen.RegenData[i] = regenData;
        }
 private void ResetTimers(HealthRegenComponent.Component regenComponent, HealthRegenData regenData)
 {
     regenComponent.RegenCooldownTimer = 0;
     regenData.DamagedRecentlyTimer    = 0;
     regenData.NextSpatialSyncTimer    = regenComponent.CooldownSyncInterval;
 }