public void AddTempMod(TempHealthMod mod) { if (TempMods.Exists(tm => tm.Source.Equals(mod.Source))) { TempHealthMod toChange = TempMods.Find(tm => tm.Source.Equals(mod.Source)); float diminishingReturn = (float)toChange.Duration / (float)mod.Duration; int toIncrease = Mathf.Max(0, Mathf.FloorToInt(mod.Duration / Mathf.Max(1, 2 * diminishingReturn))); toChange.IncreaseDuration(toIncrease); } else { // Clone otherwise diminishingReturn doesn't work as duration increase on both. TempMods.Add(new TempHealthMod(mod.Value, mod.ModType, mod.HealthType, mod.Source, mod.Duration)); } IsDirty = true; }
public virtual void Sleep(BasicChar basicChar) { DateSystem.PassHour(8); basicChar.HP.AddTempMod(TempHealthMod.CreateFlatHealth(5, Source, 12)); basicChar.WP.AddTempMod(TempHealthMod.CreateFlatWill(5, Source, 12)); }
public void RemoveTempMods(TempHealthMod mod) { TempMods.Remove(mod); IsDirty = true; }