Esempio n. 1
0
            void FixedUpdate()
            {
                if (Time.time - lastSwitch > switchTime)
                {
                    SetGoopIndex(Random.Range(1, goopDefs.Count));

                    lastSwitch = Time.time;
                    this.aiActor.OverrideTarget = this.m_owner?.CurrentRoom?.GetRandomActiveEnemy(false)?.specRigidbody;
                }

                if (!this.m_owner.IsInCombat)
                {
                    SetGoopIndex(0);
                }

                sprite.color = Color.Lerp(sprite.color, tint, .1f);


                float circleSize = .5f;

                if (PassiveItem.IsFlagSetForCharacter(m_owner, typeof(BattleStandardItem)))
                {
                    circleSize *= 2;
                }

                var ddgm = DeadlyDeadlyGoopManager.GetGoopManagerForGoopType(currentGoop);

                ddgm.AddGoopCircle(sprite.WorldCenter, circleSize);

                //if (currentGoop.name.Contains("water"))
                //ddgm.ElectrifyGoopCircle(sprite.WorldBottomCenter, 1);
            }
Esempio n. 2
0
            private void ApplyLinearDamage(Vector2 p1, Vector2 p2)
            {
                float damage = damagePerHit;

                if (PassiveItem.IsFlagSetForCharacter(Owner, typeof(BattleStandardItem)))
                {
                    damage *= BattleStandardItem.BattleStandardCompanionDamageMultiplier;
                }

                for (int i = 0; i < StaticReferenceManager.AllEnemies.Count; i++)
                {
                    AIActor aiactor = StaticReferenceManager.AllEnemies[i];
                    if (!this.m_damagedEnemies.Contains(aiactor))
                    {
                        if (aiactor && aiactor.HasBeenEngaged && aiactor.IsNormalEnemy && aiactor.specRigidbody)
                        {
                            Vector2 zero = Vector2.zero;
                            bool    flag = BraveUtility.LineIntersectsAABB(p1, p2, aiactor.specRigidbody.HitboxPixelCollider.UnitBottomLeft, aiactor.specRigidbody.HitboxPixelCollider.UnitDimensions, out zero);
                            if (flag)
                            {
                                aiactor.healthHaver.ApplyDamage(this.damagePerHit, Vector2.zero, "Chain Lightning", CoreDamageTypes.Electric, DamageCategory.Normal, false, null, false);
                                GameManager.Instance.StartCoroutine(this.HandleDamageCooldown(aiactor));
                            }
                        }
                    }
                }
            }
 protected void HandleForgeHammerPostProcessProjectile(Projectile obj)
 {
     if (obj)
     {
         obj.collidesWithPlayer  = false;
         obj.collidesWithEnemies = true;
         obj.TreatedAsNonProjectileForChallenge = true;
         if (m_Owner)
         {
             if (PassiveItem.IsFlagSetForCharacter(m_Owner, typeof(BattleStandardItem)))
             {
                 obj.baseData.damage *= BattleStandardItem.BattleStandardCompanionDamageMultiplier;
             }
             if (m_Owner.CurrentGun && m_Owner.CurrentGun.LuteCompanionBuffActive)
             {
                 obj.baseData.damage *= 2f;
                 obj.RuntimeUpdateScale(1f / obj.AdditionalScaleMultiplier);
                 obj.RuntimeUpdateScale(1.75f);
             }
             obj.baseData.damage *= 5f;
             m_Owner.DoPostProcessProjectile(obj);
         }
         else
         {
             obj.baseData.damage *= 4;
         }
     }
 }
 private void HandleCompanionPostProcessProjectile(Projectile obj)
 {
     obj.IsBulletScript = false;
     if (obj)
     {
         obj.collidesWithPlayer  = false;
         obj.collidesWithEnemies = true;
         obj.TreatedAsNonProjectileForChallenge = true;
         obj.UpdateCollisionMask();
     }
     if (this.owner)
     {
         if (PassiveItem.IsFlagSetForCharacter(this.owner, typeof(BattleStandardItem)))
         {
             obj.baseData.damage *= BattleStandardItem.BattleStandardCompanionDamageMultiplier;
         }
         if (this.owner.CurrentGun && this.owner.CurrentGun.LuteCompanionBuffActive)
         {
             obj.baseData.damage *= 2f;
         }
         if (this.owner.PlayerHasActiveSynergy("#GRIM_SUPERREAPER"))
         {
             obj.baseData.damage *= 2f;
         }
         this.owner.DoPostProcessProjectile(obj);
     }
 }
 public override void Update()
 {
     if (Owner && !Dungeon.IsGenerating && Owner.IsInCombat && base.transform.position.GetAbsoluteRoom() == Owner.CurrentRoom)
     {
         if (timer > 0)
         {
             timer -= BraveTime.DeltaTime;
         }
         if (timer <= 0)
         {
             this.aiAnimator.PlayUntilFinished("attack", false, null, -1f, false);
             Exploder.DoRadialKnockback(this.specRigidbody.UnitCenter, 70, 10);
             float dmg = 2.5f;
             if (PassiveItem.IsFlagSetForCharacter(this.Owner, typeof(BattleStandardItem)))
             {
                 dmg *= BattleStandardItem.BattleStandardCompanionDamageMultiplier;
             }
             if (this.Owner.CurrentGun && this.Owner.CurrentGun.LuteCompanionBuffActive)
             {
                 dmg *= 2;
             }
             Exploder.DoRadialDamage(dmg, this.specRigidbody.UnitCenter, 10, false, true, false, null);
             timer = 1.5f;
         }
     }
 }
    // Token: 0x0600769E RID: 30366 RVA: 0x002E4CD4 File Offset: 0x002E2ED4
    private void Shoot(Vector2 targetPosition, Vector2 startOffset)
    {
        Vector2    vector      = base.transform.position.XY() + startOffset;
        Vector2    vector2     = targetPosition - vector;
        float      z           = Mathf.Atan2(vector2.y, vector2.x) * 57.29578f;
        GameObject gameObject  = this.GetProjectile().gameObject;
        GameObject gameObject2 = SpawnManager.SpawnProjectile(gameObject, vector, Quaternion.Euler(0f, 0f, z), true);
        Projectile component   = gameObject2.GetComponent <Projectile>();

        component.collidesWithEnemies = true;
        component.collidesWithPlayer  = false;
        component.Owner   = this.m_owner;
        component.Shooter = this.m_owner.specRigidbody;
        component.TreatedAsNonProjectileForChallenge = true;
        if (this.m_owner)
        {
            if (PassiveItem.IsFlagSetForCharacter(this.m_owner, typeof(BattleStandardItem)))
            {
                component.baseData.damage *= BattleStandardItem.BattleStandardCompanionDamageMultiplier;
            }
            if (this.m_owner.CurrentGun && this.m_owner.CurrentGun.LuteCompanionBuffActive)
            {
                component.baseData.damage *= 2f;
                component.RuntimeUpdateScale(1.75f);
            }
            this.m_owner.DoPostProcessProjectile(component);
        }
    }
Esempio n. 7
0
            private IEnumerator DoLaserAttack()
            {
                isAttacking = true;
                this.aiAnimator.PlayUntilFinished("attack", false, null, -1f, false);
                yield return(new WaitForSeconds(0.5f));

                //Start Firing Lasers
                this.aiActor.MovementSpeed *= 0.0001f;
                this.aiAnimator.PlayForDuration("contattack", 1);
                Projectile beamToFire = LaserBullets.SimpleRedBeam.projectile;

                if (UnityEngine.Random.value <= 0.5f)
                {
                    int angle = 135;
                    for (int i = 0; i < 4; i++)
                    {
                        BeamController beam = BeamToolbox.FreeFireBeamFromAnywhere(beamToFire, this.m_owner, this.gameObject, Vector2.zero, false, angle, 1, true);
                        Projectile     beamprojcomponent = beam.GetComponent <Projectile>();
                        beamprojcomponent.baseData.damage *= 3f;
                        if (PassiveItem.IsFlagSetForCharacter(this.Owner, typeof(BattleStandardItem)))
                        {
                            beamprojcomponent.baseData.damage *= BattleStandardItem.BattleStandardCompanionDamageMultiplier;
                        }
                        if (this.Owner.CurrentGun && this.Owner.CurrentGun.LuteCompanionBuffActive)
                        {
                            beamprojcomponent.baseData.damage *= 2;
                        }
                        angle -= 90;
                    }
                }
                else
                {
                    int angle = 180;
                    for (int i = 0; i < 4; i++)
                    {
                        BeamController beam = BeamToolbox.FreeFireBeamFromAnywhere(beamToFire, this.m_owner, this.gameObject, Vector2.zero, false, angle, 1, true);
                        Projectile     beamprojcomponent = beam.GetComponent <Projectile>();
                        beamprojcomponent.baseData.damage *= 3f;
                        if (PassiveItem.IsFlagSetForCharacter(this.Owner, typeof(BattleStandardItem)))
                        {
                            beamprojcomponent.baseData.damage *= BattleStandardItem.BattleStandardCompanionDamageMultiplier;
                        }
                        if (this.Owner.CurrentGun && this.Owner.CurrentGun.LuteCompanionBuffActive)
                        {
                            beamprojcomponent.baseData.damage *= 2;
                        }
                        angle -= 90;
                    }
                }
                yield return(new WaitForSeconds(1f));

                //Stop shit
                isAttacking = false;
                timer       = 1.5f;
                this.aiActor.MovementSpeed /= 0.0001f;
                yield break;
            }
Esempio n. 8
0
        public float GetTrueTotalCoolness(PlayerController player)
        {
            float coolness = player.stats.GetStatValue(PlayerStats.StatType.Coolness);

            if (PassiveItem.IsFlagSetForCharacter(player, typeof(ChamberOfEvilItem)))
            {
                float sixthChamberCoolness = player.stats.GetStatValue(PlayerStats.StatType.Curse);
                coolness += sixthChamberCoolness * 2f;
            }
            return(coolness);
        }
Esempio n. 9
0
            private void FixedUpdate()
            {
                bool flag = Time.time - this.lastSwitch > 10f;

                if (flag)
                {
                    this.SetGoopIndex(UnityEngine.Random.Range(1, BabyGoodLovebulon.goopDefs.Count));
                    this.lastSwitch = Time.time;
                    AIActor              aiActor = base.aiActor;
                    PlayerController     owner   = this.m_owner;
                    SpeculativeRigidbody overrideTarget;
                    if (owner == null)
                    {
                        overrideTarget = null;
                    }
                    else
                    {
                        RoomHandler currentRoom = owner.CurrentRoom;
                        if (currentRoom == null)
                        {
                            overrideTarget = null;
                        }
                        else
                        {
                            AIActor randomActiveEnemy = currentRoom.GetRandomActiveEnemy(false);
                            overrideTarget = ((randomActiveEnemy != null) ? randomActiveEnemy.specRigidbody : null);
                        }
                    }
                    aiActor.OverrideTarget = overrideTarget;
                }
                bool flag2 = !this.m_owner.IsInCombat;

                if (flag2)
                {
                    this.SetGoopIndex(0);
                }

                float num   = 1.2f;
                bool  flag3 = PassiveItem.IsFlagSetForCharacter(this.m_owner, typeof(BattleStandardItem));

                if (flag3)
                {
                    num *= 2f;
                }
                if (this.m_owner.PlayerHasActiveSynergy("Bubble Love"))

                {
                    num *= 2f;
                }
                base.aiActor.ApplyEffect(charmEffect, 0.1f, null);
                DeadlyDeadlyGoopManager goopManagerForGoopType = DeadlyDeadlyGoopManager.GetGoopManagerForGoopType(EasyGoopDefinitions.CharmGoopDef);

                goopManagerForGoopType.AddGoopCircle(base.sprite.WorldCenter, num, -1, false, -1);
            }
Esempio n. 10
0
 public static void ApplyCompanionModifierToBullet(this Projectile bullet, PlayerController owner)
 {
     if (PassiveItem.IsFlagSetForCharacter(owner, typeof(BattleStandardItem)))
     {
         bullet.baseData.damage *= BattleStandardItem.BattleStandardCompanionDamageMultiplier;
     }
     if (owner.CurrentGun && owner.CurrentGun.LuteCompanionBuffActive)
     {
         bullet.baseData.damage *= 2f;
         bullet.RuntimeUpdateScale(1f / bullet.AdditionalScaleMultiplier);
         bullet.RuntimeUpdateScale(1.75f);
     }
 }
        public static void HealRobot(PlayerController player)
        {
            bool flag = player.healthHaver.Armor > 0f;

            bool m_revenging = (bool)typeof(PlayerController).GetField("m_revenging", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(player);

            if (!flag && m_revenging && PassiveItem.IsFlagSetForCharacter(player, typeof(PoweredByRevengeItem)))
            {
                if (player.characterIdentity == PlayableCharacters.Robot)
                {
                    player.healthHaver.Armor = 1;
                }
            }
        }
Esempio n. 12
0
 protected void HandleCompanionPostProcessProjectile(Projectile obj)
 {
     if (obj)
     {
         obj.collidesWithPlayer = false;
         obj.TreatedAsNonProjectileForChallenge = true;
     }
     if (this.m_owner)
     {
         if (PassiveItem.IsFlagSetForCharacter(this.m_owner, typeof(PactSeal)))
         {
             obj.baseData.damage *= PactSeal.PactCompanionDamageMultiplier;
         }
         this.m_owner.DoPostProcessProjectile(obj);
     }
 }
Esempio n. 13
0
        private void Shoot(Vector2 targetPos, Vector2 offset, Projectile projectileGameObject)
        {
            Vector2    vector      = base.transform.position.XY() + offset;
            Vector2    vector2     = targetPos - vector;
            float      z           = Mathf.Atan2(vector2.y, vector2.x) * 57.29578f; // Base game stuff dont know why it exists but it might be useful if my method is unreliable or doesnt work at all.
            float      angle       = Vector2.Angle(vector, targetPos);
            GameObject gameObject2 = SpawnManager.SpawnProjectile(projectileGameObject.gameObject, base.transform.position.XY(), Quaternion.Euler(0f, 0f, z + (UnityEngine.Random.Range(-spread, spread))), true);
            //Uses projectile.SendInDirection() to make the projectile aim properly. It worked with psi scale so why wouldnt it work for special orbital too?
            Projectile component = gameObject2.GetComponent <Projectile>();

            if (component != null)
            {
                component.collidesWithEnemies = true;
                component.collidesWithPlayer  = false;
                component.Owner   = owner;
                component.Shooter = owner.specRigidbody;
                component.TreatedAsNonProjectileForChallenge = true;
                component.specRigidbody.CollideWithTileMap   = false;
                //  component.SendInDirection(targetPos - vector, false, true);
                if (damageAffectedByPlayerStats)
                {
                    component.baseData.damage *= owner.stats.GetStatModifier(PlayerStats.StatType.Damage);
                }
                component.UpdateCollisionMask();
                GameManager.Instance.StartCoroutine(DelayedAddTileCollision(component));
                if (affectedByBattleStandard)
                {
                    if (PassiveItem.IsFlagSetForCharacter(owner, typeof(BattleStandardItem)))
                    {
                        component.baseData.damage *= BattleStandardItem.BattleStandardCompanionDamageMultiplier;
                    }
                }
                if (affectedByLute)
                {
                    if (owner.CurrentGun && owner.CurrentGun.LuteCompanionBuffActive)
                    {
                        component.baseData.damage *= 2f;
                        component.RuntimeUpdateScale(1.75f);
                    }
                }
                if (doesPostProcess)
                {
                    owner.DoPostProcessProjectile(component);
                }
            }
        }
Esempio n. 14
0
        public void HandleCompanionPostProcessProjectile(Action <CompanionController, Projectile> orig, CompanionController self, Projectile obj)
        {
            PlayerController m_owner = ReflectGetField <PlayerController>(typeof(CompanionController), "m_owner", self);

            if (obj)
            {
                obj.collidesWithPlayer = false;
                obj.TreatedAsNonProjectileForChallenge = true;
            }
            if (m_owner)
            {
                if (PassiveItem.IsFlagSetForCharacter(m_owner, typeof(BattleStandardItem)))
                {
                    obj.baseData.damage *= BattleStandardItem.BattleStandardCompanionDamageMultiplier;
                }
                if (m_owner.CurrentGun && m_owner.CurrentGun.LuteCompanionBuffActive)
                {
                    obj.baseData.damage *= 2f;
                    obj.RuntimeUpdateScale(1f / obj.AdditionalScaleMultiplier);
                    obj.RuntimeUpdateScale(1.75f);
                }
                // Prevent bullet modifiers from being applied to caught enemies.
                // This causes nasty bugs like flak bullets being applied to other enemies on the floor!
                if (!string.IsNullOrEmpty(self.aiActor.name))
                {
                    if (self.aiActor.name.ToLower().Contains("companionpet"))
                    {
                        // Without the additioanl damage modifiers done from DoPostProcessProjectile Monster Ball enemies end up incredably weak.
                        if (!self.aiActor.IsBlackPhantom)
                        {
                            obj.baseData.damage *= 13f;
                        }
                        else
                        {
                            obj.baseData.damage *= 15f;
                        }
                        return;
                    }
                }
                m_owner.DoPostProcessProjectile(obj);
            }
        }