public void OnApplianceTaken(InventoryItemBase applianceItem, Player.BodyParts bodyPart) { if (_group.IsApplicableToGroup(applianceItem)) { _timesTaken.Add(_gc.WorldTime.Value); } }
public ActiveInjury(IGameController gc, Type injuryType, Player.BodyParts bodyPart, DateTime injuryTriggerTime) { _gc = gc; Injury = (InjuryBase)Activator.CreateInstance(injuryType); BodyPart = bodyPart; InjuryTriggerTime = injuryTriggerTime; _injuryTriggerTimeInitial = injuryTriggerTime; SetUpActiveStage(injuryTriggerTime); }
public void OnApplianceTaken(IGameController gc, InventoryMedicalItemBase item, Player.BodyParts bodyPart) { InjuryStage stage = null; if (TreatedStage == null) { stage = GetActiveStage(_gc.WorldTime.Value); } else { stage = TreatedStage; } if (stage != null && stage.OnApplySpecialItem != null) { stage.OnApplySpecialItem(gc, item, bodyPart, this); } }
public void OnApplianceTaken(IGameController gc, InventoryMedicalItemBase appliance, Player.BodyParts bodyPart) { if (IsTreated) { return; } if (TreatedStage != null) { if (TreatedStage.OnApplianceTaken != null) { TreatedStage.OnApplianceTaken(gc, new ApplianceInfo { Appliance = appliance, BodyPart = bodyPart }, this); } } else { var stage = GetActiveStage(gc.WorldTime.Value); if (stage != null && stage.OnApplianceTaken != null) { stage.OnApplianceTaken(gc, new ApplianceInfo { Appliance = appliance, BodyPart = bodyPart }, this); } } }
public override void InitializeWithInjury(Player.BodyParts initialInjury) { BodyPart = initialInjury; // Describe treatment for each stage _progressingStageTreatment = new ApplianceTimedTreatmentNode(DiseaseLevels.Progressing, new ApplianceTimedTreatment(initialInjury, InventoryController.MedicalItems.SuctionPump), new ApplianceTimedTreatment(null, InventoryController.MedicalItems.AntiVenomSyringe) ); _worryingStageTreatment = new ApplianceTimedTreatmentNode(DiseaseLevels.Worrying, new ApplianceTimedTreatment(initialInjury, InventoryController.MedicalItems.SuctionPump), new ApplianceTimedTreatment(null, InventoryController.MedicalItems.AntiVenomSyringe, 60, 2) ); _criticalingStageTreatment = new ApplianceTimedTreatmentNode(DiseaseLevels.Critical, new ApplianceTimedTreatment(initialInjury, InventoryController.MedicalItems.SuctionPump), new ApplianceTimedTreatment(null, InventoryController.MedicalItems.AntiVenomSyringe, 60, 3) ); Stages = new List <DiseaseStage>(new[] { StageBuilder.NewStage().WithLevelOfSeriousness(DiseaseLevels.Progressing) .NoSelfHeal() .Vitals .WithTargetHeartRate(95) .WithTargetBloodPressure(154, 83) .WithTargetBodyTemperature(39.6f) .WillReachTargetsInHours(1) .AndLastForHours(3) .AdditionalEffects .WithLowChanceOfBlackouts() .WithLowAdditionalStaminaDrain() .Disorders .NotDeadly() .Drain .FatigueIncreasePerSecond(0.0004f) .Treatment .WithAppliance(_progressingStageTreatment.OnApplianceTaken) .AndWithoutSpecialItems() .Build(), StageBuilder.NewStage().WithLevelOfSeriousness(DiseaseLevels.Worrying) .NoSelfHeal() .Vitals .WithTargetHeartRate(126) .WithTargetBloodPressure(196, 98) .WithTargetBodyTemperature(40.1f) .WillReachTargetsInHours(2) .AndLastForHours(3).AndMinutes(10) .AdditionalEffects .WithMediumChanceOfBlackouts() .WithMediumAdditionalStaminaDrain() .NoDisorders() .Drain .WaterPerSecond(0.01f) .FatigueIncreasePerSecond(0.0006f) .Treatment .WithAppliance(_worryingStageTreatment.OnApplianceTaken) .AndWithoutSpecialItems() .Build(), StageBuilder.NewStage().WithLevelOfSeriousness(DiseaseLevels.Critical) .NoSelfHeal() .Vitals .WithTargetHeartRate(148) .WithTargetBloodPressure(204, 112) .WithTargetBodyTemperature(41.6f) .WillReachTargetsInHours(2) .AndLastUntilEnd() .AdditionalEffects .WithMediumChanceOfDizziness() .WithLowChanceOfBlackouts() .WithHighAdditionalStaminaDrain() .Disorders .WillNotBeAbleToRun() .NotDeadly() .Drain .WaterPerSecond(0.015f) .FoodPerSecond(0.008f) .FatigueIncreasePerSecond(0.00085f) .Treatment .WithAppliance(_criticalingStageTreatment.OnApplianceTaken) .AndWithoutSpecialItems() .Build() }); }
public virtual void InitializeWithInjury(Player.BodyParts initialInjury) { // Optional for children }
public bool OnApplianceTaken(IGameController gc, InventoryMedicalItemBase tool, Player.BodyParts bodyPart, ActiveInjury injury) { if (_toolsNeeded.Count == 0) { return(true); } if (bodyPart != injury.BodyPart) { return(false); } if (_toolsNeeded[0].IsApplicableToGroup(tool.Name)) { if (_lastToolTime.HasValue) { if ((gc.WorldTime.Value - _lastToolTime.Value).TotalMinutes > MaximumTimeBetweenAppliancesInGameMinutes) { _toolsNeeded = _toolsOriginal.ToList(); _lastToolTime = null; return(false); } } _lastToolTime = gc.WorldTime; _toolsNeeded.RemoveAt(0); if (_toolsNeeded.Count == 0) { injury.Invert(); OnTreated?.Invoke(); Events.NotifyAll(l => l.InjuryHealed(gc, injury.Injury)); } return(true); } return(false); }
public void OnApplianceTaken(InventoryMedicalItemBase item, Player.BodyParts bodyPart) { _monitors.ForEach(x => x.OnApplianceTaken(item, bodyPart)); }