override public void Update(DwarfTime gameTime, ChunkManager chunks, Camera camera) { base.Update(gameTime, chunks, camera); if (!Active) { return; } #region Update Status Stat Effects var statAdjustments = Stats.FindAdjustment("status"); Stats.RemoveStatAdjustment("status"); if (statAdjustments == null) { statAdjustments = new StatAdjustment() { Name = "status" } } ; statAdjustments.Reset(); if (!Stats.IsAsleep) { Stats.Hunger.CurrentValue -= (float)gameTime.ElapsedGameTime.TotalSeconds * Stats.HungerGrowth; } else { Hp += (float)gameTime.ElapsedGameTime.TotalSeconds * 0.2f; } Stats.Health.CurrentValue = (Hp - MinHealth) / (MaxHealth - MinHealth); // Todo: MinHealth always 0? if (Stats.Energy.IsDissatisfied()) { DrawIndicator(IndicatorManager.StandardIndicators.Sleepy); statAdjustments.Strength += -2.0f; statAdjustments.Intelligence += -2.0f; statAdjustments.Dexterity += -2.0f; } if (Stats.CanEat && Stats.Hunger.IsDissatisfied() && !Stats.IsAsleep) { DrawIndicator(IndicatorManager.StandardIndicators.Hungry); statAdjustments.Intelligence += -1.0f; statAdjustments.Dexterity += -1.0f; if (Stats.Hunger.CurrentValue <= 1e-12 && (DateTime.Now - LastHungerDamageTime).TotalSeconds > Stats.HungerDamageRate) { Damage(1.0f / (Stats.HungerResistance) * Stats.HungerDamageRate); LastHungerDamageTime = DateTime.Now; } } if (!statAdjustments.IsAllZero) { Stats.AddStatAdjustment(statAdjustments); } #endregion } }
public StatBuff(float time, StatAdjustment buffs) : base(time) { Buffs = buffs; }
public void AddStatAdjustment(StatAdjustment Adjustment) { StatAdjustments.Add(Adjustment); }
public StatBuff() { Buffs = new StatAdjustment(); }