public void Run() { foreach (int i in _pedsToRemove) { PedBleedingInfoComponent info = _pedsToRemove.Components1[i]; EcsEntity pedEntity = _pedsToRemove.Entities[i]; foreach (EcsEntity entity in info.BleedingEntities) { _ecsWorld.RemoveEntity(entity); } _ecsWorld.RemoveComponent <PedBleedingInfoComponent>(pedEntity); } _ecsWorld.ProcessDelayedUpdates(); foreach (int i in _healedEntities) { PedBleedingInfoComponent info = _healedEntities.Components1[i]; foreach (EcsEntity bleedingEntity in info.BleedingEntities) { if (!_ecsWorld.IsEntityExists(bleedingEntity)) { continue; } _ecsWorld.RemoveEntity(bleedingEntity); } } }
public void Run() { if (_gameService.GameIsPaused) { return; } float dt = GswExtensions.GetDeltaTime(); float rate = _healthStats.Components1[0].SelfHealingRate; if (dt <= 0 || rate <= 0) { return; } foreach (int i in _pedsWithHealth) { Ped ped = _pedsWithHealth.Components1[i].ThisPed; if (!ped.Exists()) { continue; } PedBleedingInfoComponent info = _pedsWithHealth.Components3[i]; if (info.BleedingEntities.Count > 0) { continue; } HealthComponent health = _pedsWithHealth.Components2[i]; if (health.MaxHealth - health.Health < 5f) { continue; } health.Health += rate * dt; ped.SetHealth(health.Health); } }
public void Run() { if (_gameService.GameIsPaused) { return; } BleedingStatsComponent bleedingStats = _bleedingStats.Components1[0]; foreach (int i in _entities) { Ped ped = _entities.Components1[i].ThisPed; if (!ped.Exists()) { continue; } HealthComponent health = _entities.Components2[i]; if (health.Health <= 0) { continue; } PedBleedingInfoComponent info = _entities.Components3[i]; EcsEntity pedEntity = _entities.Entities[i]; float bleedingDamage = 0; for (int bleedingIndex = info.BleedingEntities.Count - 1; bleedingIndex >= 0; bleedingIndex--) { EcsEntity bleedingEntity = info.BleedingEntities[bleedingIndex]; if (!_ecsWorld.IsEntityExists(bleedingEntity)) { info.BleedingEntities.RemoveAt(bleedingIndex); continue; } var bleeding = _ecsWorld.GetComponent <BleedingComponent>(bleedingEntity); if (bleeding == null) { info.BleedingEntities.RemoveAt(bleedingIndex); continue; } float delta = GswExtensions.GetDeltaTime(); if (delta <= 0) { continue; } bleedingDamage += bleedingStats.BleedingDamageMultiplier * bleeding.Severity * delta; bleeding.Severity -= info.BleedingHealRate * delta; if (bleeding.Severity > 0) { continue; } #if DEBUG _logger.MakeLog($"Bleeding {bleedingEntity} on {pedEntity.GetEntityName()} was healed"); #endif _ecsWorld.RemoveComponent <BleedingComponent>(bleedingEntity); info.BleedingEntities.RemoveAt(bleedingIndex); } if (bleedingDamage <= 0) { continue; } health.Health -= bleedingDamage; ped.SetHealth(health.Health); } }
public void Run() { BleedingStatsComponent stats = _bleedingStats.Components1[0]; foreach (int i in _wounded) { PedBleedingInfoComponent info = _wounded.Components1[i]; WoundedComponent wounded = _wounded.Components2[i]; DamagedBodyPartComponent damagedBodyPart = _wounded.Components3[i]; DamagedByWeaponComponent damagedByWeapon = _wounded.Components4[i]; EcsEntity pedEntity = _wounded.Entities[i]; foreach (EcsEntity woundEntity in wounded.WoundEntities) { var baseBleeding = _ecsWorld.GetComponent <BaseBleedingComponent>(woundEntity); if (baseBleeding == null) { continue; } float baseSeverity = baseBleeding.BaseBleeding; if (baseSeverity <= 0) { continue; } EcsEntity bodyPartEntity = damagedBodyPart.DamagedBodyPartEntity; float bodyPartMult = _ecsWorld.GetComponent <BleedingMultiplierComponent>(bodyPartEntity).Multiplier; float sevWithMult = stats.BleedingMultiplier * bodyPartMult * baseSeverity; float sevDeviation = sevWithMult * stats.BleedingDeviation; sevDeviation = _random.NextFloat(-sevDeviation, sevDeviation); float finalSeverity = sevWithMult + sevDeviation; EcsEntity bleedingEntity = _ecsWorld.CreateEntityWith(out BleedingComponent bleeding); bleeding.DamagedBoneId = damagedBodyPart.DamagedBoneId; bleeding.BodyPartEntity = damagedBodyPart.DamagedBodyPartEntity; bleeding.Severity = finalSeverity; bleeding.MotherWoundEntity = woundEntity; bleeding.WeaponEntity = damagedByWeapon.WeaponEntity; #if DEBUG _logger.MakeLog( $"Created bleeding {woundEntity.GetEntityName()} on bone {bleeding.DamagedBoneId} for {pedEntity.GetEntityName()}. " + $"Base severity {baseSeverity:0.00}; final severity {finalSeverity:0.00}"); #endif info.BleedingEntities.Add(bleedingEntity); } #if DEBUG _ecsWorld.ProcessDelayedUpdates(); string bleedingList = ""; foreach (EcsEntity bleedEntity in info.BleedingEntities) { bleedingList += $"{_ecsWorld.GetComponent<BleedingComponent>(bleedEntity).Severity:0.00} "; } _logger.MakeLog($"BleedingList for {pedEntity.GetEntityName()}: {bleedingList}"); #endif } }