// Token: 0x060013D3 RID: 5075 RVA: 0x0006124C File Offset: 0x0005F44C
        public void BakeRoaches2()
        {
            List <RoachController.Roach> list = new List <RoachController.Roach>();

            for (int i = 0; i < this.roachCount; i++)
            {
                Ray        ray = new Ray(base.transform.position, Util.ApplySpread(base.transform.forward, this.placementSpreadMin, this.placementSpreadMax, 1f, 1f, 0f, 0f));
                RaycastHit raycastHit;
                if (Physics.Raycast(ray, out raycastHit, this.placementMaxDistance, LayerIndex.world.mask))
                {
                    RoachController.SimulatedRoach simulatedRoach = new RoachController.SimulatedRoach(raycastHit.point + raycastHit.normal * 0.01f, raycastHit.normal, ray.direction, this.roachParams);
                    float keyframeInterval = this.roachParams.keyframeInterval;
                    List <RoachController.KeyFrame> list2 = new List <RoachController.KeyFrame>();
                    while (!simulatedRoach.finished)
                    {
                        simulatedRoach.Simulate(keyframeInterval);
                        list2.Add(new RoachController.KeyFrame
                        {
                            position = simulatedRoach.transform.position,
                            rotation = simulatedRoach.transform.rotation,
                            time     = simulatedRoach.age
                        });
                    }
                    RoachController.KeyFrame keyFrame = list2[list2.Count - 1];
                    keyFrame.position     += keyFrame.rotation * (Vector3.down * 0.25f);
                    list2[list2.Count - 1] = keyFrame;
                    simulatedRoach.Dispose();
                    list.Add(new RoachController.Roach
                    {
                        keyFrames = list2.ToArray()
                    });
                }
            }
            this.roaches = list.ToArray();
        }
 public override void FixedUpdate()
 {
     base.FixedUpdate();
     timer += Time.fixedDeltaTime;
     if (timer >= intervalFire)
     {
         timer -= intervalFire;
         Vector3 position  = aimOrigin.position;
         Vector3 direction = transform.forward;
         direction = RoR2Util.ApplySpread(direction, 0, spread, 1, 1);
         Quaternion rotation = RoR2Util.QuaternionSafeLookRotation(direction);
         StopSound();
         soundId = (int)RoR2Util.PlaySound(soundString, gameObject);
         if (effectPrefab)
         {
             EffectData effectData = new EffectData
             {
                 origin     = position,
                 rootObject = aimOrigin.gameObject,
                 rotation   = rotation
             };
             EffectManager.SpawnEffect(effectPrefab, effectData, false);
             Util.EffectOptions(characterBody, effectPrefab, false);
         }
         if (isAuthority)
         {
             float computedDamage = damageStat * damageCoefficient;
             FireProjectileInfo fireProjectileInfo = new FireProjectileInfo
             {
                 projectilePrefab = grenadePrefab,
                 crit             = RollCrit(),
                 damage           = computedDamage,
                 damageColorIndex = DamageColorIndex.Default,
                 force            = 0f,
                 owner            = gameObject,
                 position         = position,
                 rotation         = rotation
             };
             ProjectileManager.instance.FireProjectile(fireProjectileInfo);
             Util.FireOptions(characterBody, fireProjectileInfo, (_o, optionDirection) =>
             {
                 return(RoR2Util.ApplySpread(optionDirection, 0, spread, 1, 1));
             });
             Util.TriggerArmsRace(characterBody, computedDamage);
         }
     }
     if (isAuthority && fixedAge >= duration)
     {
         outer.SetNextStateToMain();
     }
 }
        // Token: 0x06001573 RID: 5491 RVA: 0x0005B878 File Offset: 0x00059A78
        private void Start()
        {
            if (NetworkServer.active)
            {
                Rigidbody component = base.GetComponent <Rigidbody>();
                if (component)
                {
                    float num = (this.minSpeed != this.maxSpeed) ? UnityEngine.Random.Range(this.minSpeed, this.maxSpeed) : this.minSpeed;
                    if (num != 0f)
                    {
                        Vector3 vector  = Vector3.zero;
                        Vector3 vector2 = this.localDirection ? (base.transform.rotation * this.baseDirection) : this.baseDirection;
                        switch (this.directionMode)
                        {
                        case VelocityRandomOnStart.DirectionMode.Sphere:
                            vector = UnityEngine.Random.onUnitSphere;
                            break;

                        case VelocityRandomOnStart.DirectionMode.Hemisphere:
                            vector = UnityEngine.Random.onUnitSphere;
                            if (Vector3.Dot(vector, vector2) < 0f)
                            {
                                vector = -vector;
                            }
                            break;

                        case VelocityRandomOnStart.DirectionMode.Cone:
                            vector = Util.ApplySpread(vector2, 0f, this.coneAngle, 1f, 1f, 0f, 0f);
                            break;
                        }
                        component.velocity = vector * num;
                    }
                    float num2 = (this.minAngularSpeed != this.maxAngularSpeed) ? UnityEngine.Random.Range(this.minAngularSpeed, this.maxAngularSpeed) : this.minAngularSpeed;
                    if (num2 != 0f)
                    {
                        component.angularVelocity = UnityEngine.Random.onUnitSphere * (num2 * 0.017453292f);
                    }
                }
            }
        }