Exemplo n.º 1
0
        public void EXPostProcessProjectile(Projectile projectile)
        {
            if (EnemyGUIDs == null | EnemyGUIDs.Count <= 0)
            {
                return;
            }

            AIActor sourceActor = EnemyDatabase.GetOrLoadByGuid(BraveUtility.RandomElement(EnemyGUIDs));

            if (!sourceActor)
            {
                return;
            }

            float damageMod = m_baseDamageMod;

            if (projectile.sprite && projectile.sprite.renderer)
            {
                projectile.sprite.renderer.enabled = false;
            }

            if (sourceActor.EnemyGuid == "128db2f0781141bcb505d8f00f9e4d47" | sourceActor.EnemyGuid == "b54d89f9e802455cbb2b8a96a31e8259")
            {
                damageMod += 0.35f;
            }

            if (m_FiresJammedEnemies)
            {
                damageMod += 0.25f;
            }

            projectile.baseData.damage *= damageMod;

            if (sourceActor.EnemyGuid == "76bc43539fc24648bff4568c75c686d1")
            {
                projectile.baseData.damage    /= 2f;
                projectile.AppliesStun         = true;
                projectile.AppliedStunDuration = 3f;
                projectile.StunApplyChance     = 0.4f;
            }

            if (!sourceActor.gameObject.GetComponent <ExplodeOnDeath>() && sourceActor.EnemyGuid != "76bc43539fc24648bff4568c75c686d1")
            {
                projectile.baseData.force += 5;
            }

            projectile.pierceMinorBreakables = true;

            Vector3 targetPosition = projectile.transform.position;
            AIActor targetAIActor  = Instantiate(sourceActor, targetPosition, projectile.transform.rotation);

            if (projectile.Owner && projectile.Owner is PlayerController)
            {
                float ScaleMod = (projectile.Owner as PlayerController).BulletScaleModifier;
                targetAIActor.gameObject.layer = LayerMask.NameToLayer("Unpixelated");
                targetAIActor.EnemyScale       = new Vector2(ScaleMod, ScaleMod);
                SpriteOutlineManager.ChangeOutlineLayer(targetAIActor.sprite, LayerMask.NameToLayer("Unpixelated"));
                if (targetAIActor.EnemyScale != Vector2.one)
                {
                    targetAIActor.HasShadow = false;
                    Destroy(targetAIActor.ShadowObject);
                }
                ;
            }
            targetAIActor.specRigidbody.enabled = false;
            targetAIActor.IgnoreForRoomClear    = true;
            targetAIActor.IsHarmlessEnemy       = true;
            targetAIActor.CanTargetEnemies      = true;
            targetAIActor.CanTargetPlayers      = false;
            targetAIActor.procedurallyOutlined  = false;
            if (!m_FiresJammedEnemies && targetAIActor.EnemyGuid != "76bc43539fc24648bff4568c75c686d1")
            {
                if (targetAIActor.EnemyGuid == "01972dee89fc4404a5c408d50007dad5")
                {
                    targetAIActor.RegisterOverrideColor(new Color32(255, 240, 190, 220), "Pale BulletKin");
                }
                else if (targetAIActor.EnemyGuid == "4d37ce3d666b4ddda8039929225b7ede")
                {
                    targetAIActor.RegisterOverrideColor(new Color32(170, 170, 170, 190), "Pale Generic Enemy");
                }
                else
                {
                    targetAIActor.RegisterOverrideColor(new Color32(160, 160, 160, 170), "Pale Generic Enemy");
                }
            }

            if (targetAIActor.specRigidbody.GetPixelCollider(ColliderType.Ground) != null)
            {
                PixelCollider EnemyCollider   = targetAIActor.specRigidbody.GetPixelCollider(ColliderType.HitBox);
                PixelCollider NewProjCollider = ExpandUtility.DuplicatePixelCollider(EnemyCollider);
                NewProjCollider.CollisionLayer          = CollisionLayer.Projectile;
                projectile.specRigidbody.PixelColliders = new List <PixelCollider>()
                {
                    NewProjCollider
                };
                projectile.specRigidbody.Reinitialize();
            }

            targetAIActor.gameObject.transform.parent = projectile.transform;

            if (sourceActor.EnemyGuid == "01972dee89fc4404a5c408d50007dad5" | sourceActor.EnemyGuid == "4d37ce3d666b4ddda8039929225b7ede")
            {
                // targetPosition -= new Vector3(0.5f, 0.5f);
                targetAIActor.gameObject.transform.localPosition -= new Vector3(0.5f, 0.5f);
            }
            else if (sourceActor.EnemyGuid == "128db2f0781141bcb505d8f00f9e4d47" | sourceActor.EnemyGuid == "b54d89f9e802455cbb2b8a96a31e8259")
            {
                // targetPosition -= new Vector3(0.5f, 1);
                targetAIActor.gameObject.transform.localPosition -= new Vector3(0.5f, 1);
            }

            targetAIActor.sprite.UpdateZDepth();

            if (m_FiresJammedEnemies)
            {
                targetAIActor.BecomeBlackPhantom();
            }

            projectile.OnDestruction += OnDestruction;
        }