Example #1
0
 public void OnApplianceTaken(InventoryItemBase applianceItem, Player.BodyParts bodyPart)
 {
     if (_group.IsApplicableToGroup(applianceItem))
     {
         _timesTaken.Add(_gc.WorldTime.Value);
     }
 }
Example #2
0
        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);
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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);
                }
            }
        }
Example #5
0
        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()
            });
        }
Example #6
0
 public virtual void InitializeWithInjury(Player.BodyParts initialInjury)
 {
     // Optional for children
 }
Example #7
0
        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));
 }