Exemple #1
0
        // 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);
        }
Exemple #2
0
        // 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;
         }
     }
 }
Exemple #8
0
        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>");
            }
        }
Exemple #9
0
        // 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++;
                    }
                }
            }
        }
Exemple #10
0
        // 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);
            }
        }