// Token: 0x06003247 RID: 12871 RVA: 0x000D9538 File Offset: 0x000D7738 public override void OnEnter() { base.OnEnter(); this.totalDuration = FireSweepBarrage.baseTotalDuration / this.attackSpeedStat; this.firingDuration = FireSweepBarrage.baseFiringDuration / this.attackSpeedStat; base.characterBody.SetAimTimer(3f); base.PlayAnimation("Gesture, Additive", "FireSweepBarrage", "FireSweepBarrage.playbackRate", this.totalDuration); base.PlayAnimation("Gesture, Override", "FireSweepBarrage", "FireSweepBarrage.playbackRate", this.totalDuration); Util.PlaySound(FireSweepBarrage.enterSound, base.gameObject); Ray aimRay = base.GetAimRay(); BullseyeSearch bullseyeSearch = new BullseyeSearch(); bullseyeSearch.teamMaskFilter = TeamMask.AllExcept(base.GetTeam()); bullseyeSearch.maxAngleFilter = FireSweepBarrage.fieldOfView * 0.5f; bullseyeSearch.maxDistanceFilter = FireSweepBarrage.maxDistance; bullseyeSearch.searchOrigin = aimRay.origin; bullseyeSearch.searchDirection = aimRay.direction; bullseyeSearch.sortMode = BullseyeSearch.SortMode.DistanceAndAngle; bullseyeSearch.filterByLoS = true; bullseyeSearch.RefreshCandidates(); this.targetHurtboxes = bullseyeSearch.GetResults().Where(new Func <HurtBox, bool>(Util.IsValid)).Distinct(default(HurtBox.EntityEqualityComparer)).ToList <HurtBox>(); this.totalBulletsToFire = Mathf.Max(this.targetHurtboxes.Count, FireSweepBarrage.minimumFireCount); this.timeBetweenBullets = this.firingDuration / (float)this.totalBulletsToFire; this.childLocator = base.GetModelTransform().GetComponent <ChildLocator>(); this.muzzleIndex = this.childLocator.FindChildIndex(FireSweepBarrage.muzzle); this.muzzleTransform = this.childLocator.FindChild(this.muzzleIndex); }
// Token: 0x06001F26 RID: 7974 RVA: 0x000875D0 File Offset: 0x000857D0 private void SearchForTarget() { this.sphereSearch.origin = this.transform.position; this.sphereSearch.radius = this.lookRange; this.sphereSearch.mask = LayerIndex.entityPrecise.mask; this.sphereSearch.queryTriggerInteraction = QueryTriggerInteraction.UseGlobal; this.sphereSearch.RefreshCandidates(); this.sphereSearch.FilterCandidatesByHurtBoxTeam(TeamMask.AllExcept(this.teamFilter.teamIndex)); this.sphereSearch.OrderCandidatesByDistance(); this.sphereSearch.FilterCandidatesByDistinctHurtBoxEntities(); this.sphereSearch.GetHurtBoxes(ProjectileSphereTargetFinder.foundHurtBoxes); HurtBox target = null; if (ProjectileSphereTargetFinder.foundHurtBoxes.Count > 0) { int i = 0; int count = ProjectileSphereTargetFinder.foundHurtBoxes.Count; while (i < count) { if (this.PassesFilters(ProjectileSphereTargetFinder.foundHurtBoxes[i])) { target = ProjectileSphereTargetFinder.foundHurtBoxes[i]; break; } i++; } ProjectileSphereTargetFinder.foundHurtBoxes.Clear(); } this.SetTarget(target); }
public void Awake() { holdoutZoneController = GetComponent <HoldoutZoneController>(); animationCurve = new AnimationCurve { keys = new Keyframe[] { new Keyframe(0f, 0f), new Keyframe(0.5f, 1f), new Keyframe(1f, 0f) }, preWrapMode = WrapMode.Clamp, postWrapMode = WrapMode.Clamp }; sphereSearch = new SphereSearch { mask = LayerIndex.entityPrecise.mask, origin = transform.position, queryTriggerInteraction = QueryTriggerInteraction.Collide, radius = 0f }; teamMask = TeamMask.AllExcept(TeamIndex.Player); }
// Token: 0x060030AB RID: 12459 RVA: 0x000D1A48 File Offset: 0x000CFC48 private BullseyeSearch CreateBullseyeSearch(Vector3 origin) { return(new BullseyeSearch { searchOrigin = origin, filterByDistinctEntity = true, maxDistanceFilter = Detonate.blastRadius, sortMode = BullseyeSearch.SortMode.Distance, maxAngleFilter = 360f, teamMaskFilter = TeamMask.AllExcept(base.projectileController.teamFilter.teamIndex) }); }
// Token: 0x06002B3E RID: 11070 RVA: 0x000B6404 File Offset: 0x000B4604 private void FirstPulse() { Vector3 position = base.transform.position; BullseyeSearch bullseyeSearch = new BullseyeSearch(); bullseyeSearch.searchOrigin = position; bullseyeSearch.teamMaskFilter = TeamMask.AllExcept(this.teamIndex); bullseyeSearch.maxDistanceFilter = this.pulseRadius; bullseyeSearch.sortMode = BullseyeSearch.SortMode.Distance; bullseyeSearch.filterByLoS = true; bullseyeSearch.filterByDistinctEntity = true; bullseyeSearch.RefreshCandidates(); IEnumerable <HurtBox> results = bullseyeSearch.GetResults(); int num = 0; foreach (HurtBox hurtBox in results) { num++; Vector3 a = hurtBox.transform.position - position; float magnitude = a.magnitude; Vector3 a2 = a / magnitude; Rigidbody component = hurtBox.healthComponent.GetComponent <Rigidbody>(); float num2 = component ? component.mass : 1f; float num3 = FlowerProjectileHover.yankSuitabilityCurve.Evaluate(num2); Vector3 force = a2 * (num2 * num3 * -FlowerProjectileHover.yankSpeed); DamageInfo damageInfo = new DamageInfo { attacker = this.owner, inflictor = base.gameObject, crit = this.crit, damage = this.damage, damageColorIndex = DamageColorIndex.Default, damageType = this.damageType, force = force, position = hurtBox.transform.position, procChainMask = this.procChainMask, procCoefficient = this.procCoefficient }; hurtBox.healthComponent.TakeDamage(damageInfo); } this.healPulseHealthFractionValue = (float)num * FlowerProjectileHover.healthFractionYieldPerHit / (float)(this.pulseCount - 1); }
// Token: 0x06002DEA RID: 11754 RVA: 0x000C36CC File Offset: 0x000C18CC private void FireSecondaryRaysServer() { Ray aimRay = base.GetAimRay(); TeamIndex team = base.GetTeam(); BullseyeSearch bullseyeSearch = new BullseyeSearch(); bullseyeSearch.teamMaskFilter = TeamMask.AllExcept(team); bullseyeSearch.maxAngleFilter = BigPunch.maxShockFOV * 0.5f; bullseyeSearch.maxDistanceFilter = BigPunch.maxShockDistance; bullseyeSearch.searchOrigin = aimRay.origin; bullseyeSearch.searchDirection = this.punchVector; bullseyeSearch.sortMode = BullseyeSearch.SortMode.Distance; bullseyeSearch.filterByLoS = false; bullseyeSearch.RefreshCandidates(); List <HurtBox> list = bullseyeSearch.GetResults().Where(new Func <HurtBox, bool>(Util.IsValid)).ToList <HurtBox>(); Transform transform = base.FindModelChild(this.swingEffectMuzzleString); if (transform) { for (int i = 0; i < Mathf.Min(list.Count, BigPunch.maxShockCount); i++) { HurtBox hurtBox = list[i]; if (hurtBox) { LightningOrb lightningOrb = new LightningOrb(); lightningOrb.bouncedObjects = new List <HealthComponent>(); lightningOrb.attacker = base.gameObject; lightningOrb.teamIndex = team; lightningOrb.damageValue = this.damageStat * BigPunch.shockDamageCoefficient; lightningOrb.isCrit = base.RollCrit(); lightningOrb.origin = transform.position; lightningOrb.bouncesRemaining = 0; lightningOrb.lightningType = LightningOrb.LightningType.Loader; lightningOrb.procCoefficient = BigPunch.shockProcCoefficient; lightningOrb.target = hurtBox; OrbManager.instance.AddOrb(lightningOrb); } } } }
// Token: 0x06002E79 RID: 11897 RVA: 0x000C571C File Offset: 0x000C391C public override void OnEnter() { base.OnEnter(); if (base.isAuthority) { TeamMask mask = TeamMask.AllExcept(base.ownerBody.teamComponent.teamIndex); HurtBox[] hurtBoxes = new SphereSearch { radius = AimState.targetAcquisitionRadius, mask = LayerIndex.entityPrecise.mask, origin = base.transform.position, queryTriggerInteraction = QueryTriggerInteraction.UseGlobal }.RefreshCandidates().FilterCandidatesByHurtBoxTeam(mask).OrderCandidatesByDistance().FilterCandidatesByDistinctHurtBoxEntities().GetHurtBoxes(); float blastRadius = FireMainBeamState.secondBombPrefab.GetComponent <ProjectileImpactExplosion>().blastRadius; int num = -1; int num2 = 0; for (int i = 0; i < hurtBoxes.Length; i++) { HurtBox[] hurtBoxes2 = new SphereSearch { radius = blastRadius, mask = LayerIndex.entityPrecise.mask, origin = hurtBoxes[i].transform.position, queryTriggerInteraction = QueryTriggerInteraction.UseGlobal }.RefreshCandidates().FilterCandidatesByHurtBoxTeam(mask).FilterCandidatesByDistinctHurtBoxEntities().GetHurtBoxes(); if (hurtBoxes2.Length > num2) { num = i; num2 = hurtBoxes2.Length; } } if (num != -1) { base.simpleRotateToDirection.targetRotation = Quaternion.LookRotation(hurtBoxes[num].transform.position - base.transform.position); this.foundTarget = true; } } }
public static void KillAll() { var localUser = LocalUserManager.GetFirstLocalUser(); var controller = localUser.cachedMasterController; if (!controller) { return; } var body = controller.master.GetBody(); if (!body) { return; } var bullseyeSearch = new BullseyeSearch { filterByLoS = false, maxDistanceFilter = float.MaxValue, maxAngleFilter = float.MaxValue }; var team = body.GetComponent <TeamComponent>(); bullseyeSearch.teamMaskFilter = TeamMask.AllExcept(team.teamIndex); bullseyeSearch.RefreshCandidates(); var hurtBoxList = bullseyeSearch.GetResults(); foreach (var hurtbox in hurtBoxList) { var mob = HurtBox.FindEntityObject(hurtbox); string mobName = mob.name.Replace("Body(Clone)", ""); // Create Chat message with this. var health = mob.GetComponent <HealthComponent>(); health.Suicide(); Chat.AddMessage($"<color=yellow>Killed {mobName} </color>"); } }
// Token: 0x06002B85 RID: 11141 RVA: 0x000B79E4 File Offset: 0x000B5BE4 private void RootPulse() { Vector3 position = base.transform.position; foreach (HurtBox hurtBox in new SphereSearch { origin = position, radius = TreebotFlower2Projectile.radius, mask = LayerIndex.entityPrecise.mask }.RefreshCandidates().FilterCandidatesByHurtBoxTeam(TeamMask.AllExcept(this.teamIndex)).OrderCandidatesByDistance().FilterCandidatesByDistinctHurtBoxEntities().GetHurtBoxes()) { CharacterBody body = hurtBox.healthComponent.body; if (!this.rootedBodies.Contains(body)) { this.rootedBodies.Add(body); body.AddBuff(BuffIndex.Entangle); body.RecalculateStats(); Vector3 a = hurtBox.transform.position - position; float magnitude = a.magnitude; Vector3 a2 = a / magnitude; Rigidbody component = hurtBox.healthComponent.GetComponent <Rigidbody>(); float num = component ? component.mass : 1f; float num2 = magnitude - TreebotFlower2Projectile.yankIdealDistance; float num3 = TreebotFlower2Projectile.yankSuitabilityCurve.Evaluate(num); Vector3 vector = component ? component.velocity : Vector3.zero; if (HGMath.IsVectorNaN(vector)) { vector = Vector3.zero; } Vector3 a3 = -vector; if (num2 > 0f) { a3 = a2 * -Trajectory.CalculateInitialYSpeedForHeight(num2, -body.acceleration); } Vector3 force = a3 * (num * num3); DamageInfo damageInfo = new DamageInfo { attacker = this.owner, inflictor = base.gameObject, crit = this.crit, damage = this.damage, damageColorIndex = DamageColorIndex.Default, damageType = this.damageType, force = force, position = hurtBox.transform.position, procChainMask = this.procChainMask, procCoefficient = this.procCoefficient }; hurtBox.healthComponent.TakeDamage(damageInfo); HurtBox hurtBoxReference = hurtBox; HurtBoxGroup hurtBoxGroup = hurtBox.hurtBoxGroup; int num4 = 0; while ((float)num4 < Mathf.Min(4f, body.radius * 2f)) { EffectData effectData = new EffectData { scale = 1f, origin = position, genericFloat = Mathf.Max(0.2f, TreebotFlower2Projectile.duration - base.fixedAge) }; effectData.SetHurtBoxReference(hurtBoxReference); EffectManager.SpawnEffect(Resources.Load <GameObject>("Prefabs/Effects/OrbEffects/EntangleOrbEffect"), effectData, true); hurtBoxReference = hurtBoxGroup.hurtBoxes[UnityEngine.Random.Range(0, hurtBoxGroup.hurtBoxes.Length)]; num4++; } } } }
// Token: 0x06002B69 RID: 11113 RVA: 0x000B6F38 File Offset: 0x000B5138 public override void OnEnter() { base.OnEnter(); this.duration = this.baseDuration / this.attackSpeedStat; base.PlayAnimation("Gesture, Additive", "FireSonicBoom"); Util.PlaySound(this.sound, base.gameObject); Ray aimRay = base.GetAimRay(); if (!string.IsNullOrEmpty(this.muzzle)) { EffectManager.SimpleMuzzleFlash(this.fireEffectPrefab, base.gameObject, this.muzzle, false); } else { EffectManager.SpawnEffect(this.fireEffectPrefab, new EffectData { origin = aimRay.origin, rotation = Quaternion.LookRotation(aimRay.direction) }, false); } aimRay.origin -= aimRay.direction * this.backupDistance; if (NetworkServer.active) { BullseyeSearch bullseyeSearch = new BullseyeSearch(); bullseyeSearch.teamMaskFilter = TeamMask.AllExcept(base.GetTeam()); bullseyeSearch.maxAngleFilter = this.fieldOfView * 0.5f; bullseyeSearch.maxDistanceFilter = this.maxDistance; bullseyeSearch.searchOrigin = aimRay.origin; bullseyeSearch.searchDirection = aimRay.direction; bullseyeSearch.sortMode = BullseyeSearch.SortMode.Distance; bullseyeSearch.filterByLoS = false; bullseyeSearch.RefreshCandidates(); foreach (HurtBox hurtBox in bullseyeSearch.GetResults().Where(new Func <HurtBox, bool>(Util.IsValid)).Distinct(default(HurtBox.EntityEqualityComparer))) { Vector3 vector = hurtBox.transform.position - aimRay.origin; float magnitude = vector.magnitude; float magnitude2 = new Vector2(vector.x, vector.z).magnitude; Vector3 vector2 = vector / magnitude; float num = 1f; CharacterBody body = hurtBox.healthComponent.body; if (body.characterMotor) { num = body.characterMotor.mass; } else if (hurtBox.healthComponent.GetComponent <Rigidbody>()) { num = base.rigidbody.mass; } float num2 = FireSonicBoom.shoveSuitabilityCurve.Evaluate(num); this.AddDebuff(body); body.RecalculateStats(); float acceleration = body.acceleration; Vector3 a = vector2; float d = Trajectory.CalculateInitialYSpeedForHeight(Mathf.Abs(this.idealDistanceToPlaceTargets - magnitude), -acceleration) * Mathf.Sign(this.idealDistanceToPlaceTargets - magnitude); a *= d; a.y = this.liftVelocity; hurtBox.healthComponent.TakeDamageForce(a * (num * num2), true, true); hurtBox.healthComponent.TakeDamage(new DamageInfo { attacker = base.gameObject, damage = this.CalculateDamage(), position = hurtBox.transform.position, procCoefficient = this.CalculateProcCoefficient() }); } } if (base.isAuthority && base.characterBody && base.characterBody.characterMotor) { float height = base.characterBody.characterMotor.isGrounded ? this.groundKnockbackDistance : this.airKnockbackDistance; float num3 = base.characterBody.characterMotor ? base.characterBody.characterMotor.mass : 1f; float acceleration2 = base.characterBody.acceleration; float num4 = Trajectory.CalculateInitialYSpeedForHeight(height, -acceleration2); base.characterBody.characterMotor.ApplyForce(-num4 * num3 * aimRay.direction, false, false); } }