コード例 #1
0
 private static bool DamageWasAlreadyCalculated(ShotMemoKey key, out float variantDamage)
 {
     if (!WeaponDamageMemo.ContainsKey(key))
     {
         variantDamage = -1f;
         Logger.Debug($"key was not found: {key.weaponEffectId} / {key.hitIndex}");
         return(false);
     }
     // compute once per shot arrggghghhh why didn't the game designers just do this?
     // computers are fast at math but it's already in memory.
     Logger.Debug($"variant damage key found: {key.weaponEffectId} / {key.hitIndex}");
     variantDamage = WeaponDamageMemo[key];
     return(true);
 }
コード例 #2
0
        private static ShotMemoKey ShotMemoKey(WeaponEffect weaponEffect)
        {
            var hitIndex       = Traverse.Create(weaponEffect).Field("hitIndex").GetValue <int>();
            var weaponEffectId = weaponEffect.GetInstanceID();

            Logger.Debug($"shotmemokey weaponeffectid: {weaponEffectId}");
            if (weaponEffect is BulletEffect bulletEffect)
            {
                weaponEffectId = Traverse.Create(bulletEffect).Field("parentLauncher").GetValue <BallisticEffect>()
                                 .GetInstanceID();
                Logger.Debug($"shotmemokey bullet weaponeffectid: {weaponEffectId}");
            }

            var key = new ShotMemoKey(weaponEffectId, hitIndex);

            return(key);
        }
コード例 #3
0
 private static bool IsNonVariantWeapon(ShotMemoKey key, Weapon weapon, out int damageVariance, out float normalDamage)
 {
     // we reach for weapondef because Weapon.DamageVariance always returns 0. Really.
     damageVariance = weapon.weaponDef.DamageVariance;
     if (damageVariance != 0)
     {
         Logger.Debug($"variance: {key.weaponEffectId} / {key.hitIndex}");
         normalDamage = -1f;
         return(false);
     }
     WeaponDamageMemo[key] = weapon.DamagePerShotAdjusted(weapon.parent.occupiedDesignMask);
     Logger.Debug($"no variance: {key.weaponEffectId} / {key.hitIndex}");
     {
         normalDamage = WeaponDamageMemo[key];
         return(true);
     }
 }