示例#1
0
 public static void DuplicateAIShooterAndAIBulletBank(GameObject targetObject, AIShooter sourceShooter, AIBulletBank sourceBulletBank, int startingGunOverrideID = 0, Transform gunAttachPointOverride = null, Transform bulletScriptAttachPointOverride = null, PlayerHandController overrideHandObject = null)
 {
     if (targetObject.GetComponent <AIShooter>() && targetObject.GetComponent <AIBulletBank>())
     {
         return;
     }
     if (!targetObject.GetComponent <AIBulletBank>())
     {
         AIBulletBank aibulletBank = targetObject.AddComponent <AIBulletBank>();
         aibulletBank.Bullets = new List <AIBulletBank.Entry>(0);
         if (sourceBulletBank.Bullets.Count > 0)
         {
             foreach (AIBulletBank.Entry entry in sourceBulletBank.Bullets)
             {
                 aibulletBank.Bullets.Add(new AIBulletBank.Entry
                 {
                     Name               = entry.Name,
                     BulletObject       = entry.BulletObject,
                     OverrideProjectile = entry.OverrideProjectile,
                     ProjectileData     = new ProjectileData
                     {
                         damage  = entry.ProjectileData.damage,
                         speed   = entry.ProjectileData.speed,
                         range   = entry.ProjectileData.range,
                         force   = entry.ProjectileData.force,
                         damping = entry.ProjectileData.damping,
                         UsesCustomAccelerationCurve     = entry.ProjectileData.UsesCustomAccelerationCurve,
                         AccelerationCurve               = entry.ProjectileData.AccelerationCurve,
                         CustomAccelerationCurveDuration = entry.ProjectileData.CustomAccelerationCurveDuration,
                         onDestroyBulletScript           = entry.ProjectileData.onDestroyBulletScript,
                         IgnoreAccelCurveTime            = entry.ProjectileData.IgnoreAccelCurveTime
                     },
                     PlayAudio               = entry.PlayAudio,
                     AudioSwitch             = entry.AudioSwitch,
                     AudioEvent              = entry.AudioEvent,
                     AudioLimitOncePerFrame  = entry.AudioLimitOncePerFrame,
                     AudioLimitOncePerAttack = entry.AudioLimitOncePerAttack,
                     MuzzleFlashEffects      = new VFXPool
                     {
                         effects = entry.MuzzleFlashEffects.effects,
                         type    = entry.MuzzleFlashEffects.type
                     },
                     MuzzleLimitOncePerFrame          = entry.MuzzleLimitOncePerFrame,
                     MuzzleInheritsTransformDirection = entry.MuzzleInheritsTransformDirection,
                     ShellTransform                = entry.ShellTransform,
                     ShellPrefab                   = entry.ShellPrefab,
                     ShellForce                    = entry.ShellForce,
                     ShellForceVariance            = entry.ShellForceVariance,
                     DontRotateShell               = entry.DontRotateShell,
                     ShellGroundOffset             = entry.ShellGroundOffset,
                     ShellsLimitOncePerFrame       = entry.ShellsLimitOncePerFrame,
                     rampBullets                   = entry.rampBullets,
                     conditionalMinDegFromNorth    = entry.conditionalMinDegFromNorth,
                     forceCanHitEnemies            = entry.forceCanHitEnemies,
                     suppressHitEffectsIfOffscreen = entry.suppressHitEffectsIfOffscreen,
                     preloadCount                  = entry.preloadCount
                 });
             }
         }
         aibulletBank.useDefaultBulletIfMissing = true;
         aibulletBank.transforms = new List <Transform>();
         if (sourceBulletBank.transforms != null && sourceBulletBank.transforms.Count > 0)
         {
             foreach (Transform item in sourceBulletBank.transforms)
             {
                 aibulletBank.transforms.Add(item);
             }
         }
         aibulletBank.RegenerateCache();
     }
     if (!targetObject.GetComponent <AIShooter>())
     {
         AIShooter aishooter = targetObject.AddComponent <AIShooter>();
         aishooter.volley = sourceShooter.volley;
         if (startingGunOverrideID != 0)
         {
             aishooter.equippedGunId = startingGunOverrideID;
         }
         else
         {
             aishooter.equippedGunId = sourceShooter.equippedGunId;
         }
         aishooter.shouldUseGunReload        = true;
         aishooter.volleyShootPosition       = sourceShooter.volleyShootPosition;
         aishooter.volleyShellCasing         = sourceShooter.volleyShellCasing;
         aishooter.volleyShellTransform      = sourceShooter.volleyShellTransform;
         aishooter.volleyShootVfx            = sourceShooter.volleyShootVfx;
         aishooter.usesOctantShootVFX        = sourceShooter.usesOctantShootVFX;
         aishooter.bulletName                = sourceShooter.bulletName;
         aishooter.customShootCooldownPeriod = sourceShooter.customShootCooldownPeriod;
         aishooter.doesScreenShake           = sourceShooter.doesScreenShake;
         aishooter.rampBullets               = sourceShooter.rampBullets;
         aishooter.rampStartHeight           = sourceShooter.rampStartHeight;
         aishooter.rampTime = sourceShooter.rampTime;
         if (gunAttachPointOverride)
         {
             aishooter.gunAttachPoint = gunAttachPointOverride;
         }
         else
         {
             aishooter.gunAttachPoint = sourceShooter.gunAttachPoint;
         }
         if (bulletScriptAttachPointOverride)
         {
             aishooter.bulletScriptAttachPoint = bulletScriptAttachPointOverride;
         }
         else
         {
             aishooter.bulletScriptAttachPoint = sourceShooter.bulletScriptAttachPoint;
         }
         aishooter.overallGunAttachOffset = sourceShooter.overallGunAttachOffset;
         aishooter.flippedGunAttachOffset = sourceShooter.flippedGunAttachOffset;
         if (overrideHandObject)
         {
             aishooter.handObject = overrideHandObject;
         }
         else
         {
             aishooter.handObject = sourceShooter.handObject;
         }
         aishooter.AllowTwoHands            = sourceShooter.AllowTwoHands;
         aishooter.ForceGunOnTop            = sourceShooter.ForceGunOnTop;
         aishooter.IsReallyBigBoy           = sourceShooter.IsReallyBigBoy;
         aishooter.BackupAimInMoveDirection = sourceShooter.BackupAimInMoveDirection;
         aishooter.RegenerateCache();
     }
 }