public DerivedStatModHolder(BaseStat source, BaseStat target, float percent) { _sourceStat = new CachedStat <BaseStat>(source); _targetStat = new CachedStat <BaseStat>(target); _percent = percent; _id = _sourceStat.Stat.AddDerivedStat(_percent, target); }
public BaseStat GetOrAdd(string id, string label = "") { if (_dict.TryGetValue(id, out var stat)) { return(stat); } var value = 0f; var fakeEnum = GameData.Enums.GetEnumIndex(id, out var index); if (fakeEnum != null) { if (string.IsNullOrEmpty(label)) { label = fakeEnum.GetNameAt(index); } value = fakeEnum.GetAssociatedValue(index); } if (string.IsNullOrEmpty(label)) { label = id; } stat = new BaseStat(label, id, value); Add(stat); return(stat); }
private void CheckStat(BaseStat stat) { if (_statText != null) { _statText.text = stat.ToString(); } if (_actor.Entity.Tags.Contain(EntityTags.IsDead)) { _statTween.Restart(_statSlider.value, 0, 0.35f); return; } if (_statTween.Active) { return; } if (_statTween.Length <= 0) { _statSlider.value = _actor.GetVital(_targetStat).CurrentPercent; return; } var percent = _actor.GetVital(_targetStat).CurrentPercent; var statDifference = Mathf.Abs(_statSlider.value - percent); if (statDifference > 0.05f) { _statTween.Restart (_statSlider.value, percent, Mathf.Lerp(0.35f, _maxTweenLength, statDifference)); } }
public override void Attach(BaseStat target) { if (target == null) { return; } _id = _sourceStat.Stat.AddDerivedStat(_percent, target); }
public static BaseStat[] GetBasicCommandStats() { BaseStat[] stats = new BaseStat[3]; stats[0] = new BaseStat(Stats.Power, 0); stats[1] = new BaseStat(Stats.CriticalHit, 0); stats[2] = new BaseStat(Stats.CriticalMulti, GameOptions.Get(RpgSettings.DefaultCritMulti, 1f)); return(stats); }
public void Remove(BaseStat item) { _list.Remove(item); _dict.Remove(item.ID); if (item is VitalStat vital) { _vitals.Remove(vital.ID); } }
public override void Attach(BaseStat target) { if (target == null) { return; } _targetStat = new CachedStat <BaseStat>(target); _id = target.AddValueMod(_amount); }
public override void Attach(BaseStat target) { if (target == null) { return; } _targetStat = new CachedStat <BaseStat>(target); _id = target.AddPercentMod(_percent); }
public static BaseStat[] GetBasicCommandStats(StatsContainer stats) { var owner = stats.GetEntity(); BaseStat[] newStats = new BaseStat[3]; newStats[0] = new BaseStat(owner, Stats.Power, 0); newStats[1] = new BaseStat(owner, Stats.CriticalHit, 0); newStats[2] = new BaseStat(owner, Stats.CriticalMulti, GameOptions.Get(RpgSettings.DefaultCritMulti, 1f)); return(newStats); }
public void OnPoolDespawned() { if (_stat != null) { _stat.OnStatChanged -= RefreshText; } _button.gameObject.SetActive(false); _stat = null; _hoverDescr = null; }
public static int CalculateStatsNoLog(BaseStat stat, int level = -1) { var statBonus = stat.D20ModifierValue; int levelBonus = 0; if (level > 0) { levelBonus = HalfFloorBonus(level); } return(statBonus + levelBonus); }
public AmmoComponent(AmmoConfig config, string skill, float repairSpeed, BaseStat damageModStat, float damagePercent = 0f) { Config = config; RepairSpeedPercent = repairSpeed; Skill = skill; DamagePercent = damagePercent; if (damageModStat == null) { return; } DamageModStat = new CachedStat <BaseStat>(damageModStat); }
protected string UpdateDerivedMod(string mod, float value, BaseStat stat) { if (string.IsNullOrEmpty(mod)) { mod = AddDerivedStat(value, stat); } else { UpdateDerivedStat(mod, value); } return(mod); }
public string AddDerivedStat(float percent, BaseStat targetStat, string id = "") { if (targetStat == null) { return(""); } var mod = new DerivedStat(percent, targetStat, id); mod.UpdateValue(Value); _derivedStats.Add(mod); return(mod.Id); }
public AmmoComponent(AmmoTemplate template, string skill, float repairSpeed, BaseStat damageModStat, float damagePercent = 0f) { Template = template; RepairSpeedPercent = repairSpeed; _skill = skill; _damageModStat = new CachedStat <BaseStat>(damageModStat); _damagePercent = damagePercent; if (_damageModStat != null) { Amount.OnResourceChanged += CheckMod; } }
public static void SetupDefenseStats(Entity owner) { var defend = owner.Add(new DefendDamageWithStats()); for (int i = 0; i < GameData.DamageTypes.Count; i++) { var typeDef = new BaseStat(string.Format("{0} Defense", GameData.DamageTypes.GetNameAt(i)), GameData.DamageTypes.GetID(i), 0); owner.Stats.Add(typeDef); defend.AddStat(GameData.DamageTypes.GetID(i), typeDef.ID, typeDef); } owner.Stats.Add(new BaseStat(Stats.Evasion, 0)); }
public void AddStat(string type, string id, BaseStat stat) { var statEntry = FindStat(type); if (statEntry == null) { statEntry = new StatEntry(); _stats.Add(statEntry); } statEntry.Stat = stat; statEntry.Id = id; statEntry.DamageType = type; }
public void Add(BaseStat item) { if (item == null || _dict.ContainsKey(item.ID)) { return; } _list.Add(item); _dict.Add(item.ID, item); if (item is VitalStat vital) { _vitals.Add(vital.ID, vital); } }
public void Remove(BaseStat item) { List.Remove(item); _dict.Remove(item.ID); if (item is VitalStat vital) { if (item.ID == GameOptions.Get(RpgSettings.HealthStat, "Vitals.Health")) { HealthStat = null; } _vitals.Remove(vital.ID); } }
public static void SetupDefenseStats(StatsContainer stats) { var owner = stats.GetEntity(); var defend = owner.Add(new DefendDamageWithStats()); for (int i = 0; i < GameData.DamageTypes.Count; i++) { var typeDef = new BaseStat(owner, string.Format("{0} Defense", GameData.DamageTypes.GetNameAt(i)), GameData.DamageTypes.GetID(i), 0); stats.Add(typeDef); defend.AddStat(GameData.DamageTypes.GetID(i), typeDef.ID, typeDef); } stats.Add(new BaseStat(owner, Stats.Evasion, 0)); }
public DerivedStat(float percent, BaseStat stat, string id = "") : base(percent) { TargetStat = stat; if (string.IsNullOrEmpty(id)) { Id = TargetStat.AddValueMod(ValueTotal); } else { Id = id; TargetStat.AddValueMod(new StatValueMod(ValueTotal, id)); } }
public static int CalculateD20Roll(BaseStat stat, int numDice, int level = -1) { LastQueryString.Clear(); var roll = CalculateD20Roll(numDice); var bonus = CalculateStatsWithLog(stat, level); LastQueryString.Append(" = "); var result = roll + bonus; LastQueryString.Append(result.ToString("F0")); LastQueryString.AppendNewLine(); return(result); }
public static void AddCombatRating(Entity entity) { var combatPower = new BaseStat(Stats.CombatRating, "Combat Rating", 0); entity.Stats.Add(combatPower); var atkStats = GameData.Enums[Stats.AttackStats]; for (int i = 0; i < atkStats.Length; i++) { entity.Stats.Get(atkStats.IDs[i]).AddDerivedStat(1, combatPower); } for (int i = 0; i < GameData.Attributes.Count; i++) { entity.Stats.Get(GameData.Attributes[i]).AddDerivedStat(1, combatPower); } }
public void Add(BaseStat item) { if (item == null || _dict.ContainsKey(item.ID)) { return; } List.Add(item); _dict.Add(item.ID, item); if (item is VitalStat vital) { if (item.ID == GameOptions.Get(RpgSettings.HealthStat, "Vitals.Health")) { HealthStat = vital; } _vitals.Add(vital.ID, vital); } }
public static int CalculateStatsWithLog(BaseStat stat, int level = -1) { var statBonus = stat.D20ModifierValue; int levelBonus = 0; LastQueryString.Append(" + "); LastQueryString.Append(stat.Label); LastQueryString.Append(" "); LastQueryString.Append(statBonus.ToString("F0")); if (level > 0) { LastQueryString.Append(" + "); levelBonus = HalfFloorBonus(level); LastQueryString.Append(levelBonus.ToString("F0")); LastQueryString.Append(" level"); } LastQueryString.AppendNewLine(); return(statBonus + levelBonus); }
private static void SetBonuses(Entity entity, DataEntry mod) { var bonuses = mod.Get <DataList>(DatabaseFields.Bonuses); if (bonuses == null || bonuses.Value.Count == 0) { return; } var equipment = entity.Get <Equipment>(); for (int i = 0; i < bonuses.Value.Count; i++) { var modRow = bonuses.Value[i]; var statName = modRow.GetValue <string>(DatabaseFields.Stat); var bonus = modRow.GetValue <float>(DatabaseFields.Bonus); var addToEquip = modRow.GetValue <bool>(DatabaseFields.AddToEquipList); if (string.IsNullOrEmpty(statName) || bonus <= 0) { continue; } if (equipment != null && addToEquip) { if (!equipment.StatsToEquip.Contains(statName)) { equipment.StatsToEquip.Add(statName); } } var stats = entity.Get <StatsContainer>(); var stat = stats.Get(statName); if (stat == null) { var baseValue = GameData.Enums.GetFakeEnum(statName).GetAssociatedValue(statName); stat = new BaseStat(entity, statName, statName, baseValue * bonus); stats.Add(stat); } else { stat.AddToBase(stat.BaseValue * bonus); } } }
public static float CalculateTotal(BaseStat stat, float percent) { LastQueryString.Clear(); LastQueryString.Append(stat.Label); LastQueryString.Append(": "); LastQueryString.Append(stat.BaseValue.ToString("F0")); LastQueryString.Append(" + "); LastQueryString.AppendNewLine(stat.ModTotal.ToString("F0")); LastQueryString.Append(" = "); var result = stat.BaseValue + stat.ModTotal; LastQueryString.Append(result.ToString("F0")); if (Math.Abs(percent - 1) > 0.0001f) { LastQueryString.Append(" * "); LastQueryString.Append(percent.ToString("F1")); LastQueryString.Append(" Final: "); result *= percent; LastQueryString.Append(result.ToString("F0")); } return(result); }
public void SetCurrentFromStat(BaseStat stat) { Current = stat.Value; }
public void ClearRecovery(bool canRecover) { _recoveryPercent = null; _canRecover = canRecover; }
public VitalStat(int entity, string label, string id, float baseValue, float recovery) : base(entity, label, id, baseValue) { _recoveryPercent = new BaseStat(entity, "RecoverRate", recovery); }