// 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); } } } }