예제 #1
0
        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
        }
    }
예제 #2
0
 public StatBuff(float time, StatAdjustment buffs) :
     base(time)
 {
     Buffs = buffs;
 }
예제 #3
0
 public void AddStatAdjustment(StatAdjustment Adjustment)
 {
     StatAdjustments.Add(Adjustment);
 }
예제 #4
0
 public StatBuff()
 {
     Buffs = new StatAdjustment();
 }