Example #1
0
 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);
 }
Example #2
0
        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));
            }
        }
Example #4
0
 public override void Attach(BaseStat target)
 {
     if (target == null)
     {
         return;
     }
     _id = _sourceStat.Stat.AddDerivedStat(_percent, target);
 }
Example #5
0
 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);
 }
Example #6
0
 public void Remove(BaseStat item)
 {
     _list.Remove(item);
     _dict.Remove(item.ID);
     if (item is VitalStat vital)
     {
         _vitals.Remove(vital.ID);
     }
 }
Example #7
0
 public override void Attach(BaseStat target)
 {
     if (target == null)
     {
         return;
     }
     _targetStat = new CachedStat <BaseStat>(target);
     _id         = target.AddValueMod(_amount);
 }
Example #8
0
 public override void Attach(BaseStat target)
 {
     if (target == null)
     {
         return;
     }
     _targetStat = new CachedStat <BaseStat>(target);
     _id         = target.AddPercentMod(_percent);
 }
Example #9
0
        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);
        }
Example #10
0
 public void OnPoolDespawned()
 {
     if (_stat != null)
     {
         _stat.OnStatChanged -= RefreshText;
     }
     _button.gameObject.SetActive(false);
     _stat       = null;
     _hoverDescr = null;
 }
Example #11
0
        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);
        }
Example #12
0
 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);
 }
Example #13
0
 protected string UpdateDerivedMod(string mod, float value, BaseStat stat)
 {
     if (string.IsNullOrEmpty(mod))
     {
         mod = AddDerivedStat(value, stat);
     }
     else
     {
         UpdateDerivedStat(mod, value);
     }
     return(mod);
 }
Example #14
0
        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);
        }
Example #15
0
 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;
     }
 }
Example #16
0
        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));
        }
Example #17
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;
        }
Example #18
0
 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);
     }
 }
Example #19
0
 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);
     }
 }
Example #20
0
        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));
        }
Example #21
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));
     }
 }
Example #22
0
        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);
        }
Example #23
0
        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);
            }
        }
Example #24
0
 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);
     }
 }
Example #25
0
        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);
        }
Example #26
0
        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);
                }
            }
        }
Example #27
0
        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);
        }
Example #28
0
 public void SetCurrentFromStat(BaseStat stat)
 {
     Current = stat.Value;
 }
Example #29
0
 public void ClearRecovery(bool canRecover)
 {
     _recoveryPercent = null;
     _canRecover      = canRecover;
 }
Example #30
0
 public VitalStat(int entity, string label, string id, float baseValue, float recovery) : base(entity, label, id, baseValue)
 {
     _recoveryPercent = new BaseStat(entity, "RecoverRate", recovery);
 }