示例#1
0
            public override void OnEffectApplied(GameActor actor, RuntimeGameActorEffectData effectData, float partialAmount = 1)
            {
                base.OnEffectApplied(actor, effectData, partialAmount);
                float MathIsCool = actor.specRigidbody.UnitWidth / (effectData.instanceOverheadVFX.GetBounds().extents.x * 16);

                effectData.instanceOverheadVFX.transform.localScale = new Vector3(MathIsCool, MathIsCool);
            }
        public override void EffectTick(GameActor actor, RuntimeGameActorEffectData effectData)
        {
            base.EffectTick(actor, effectData);
            var ddgm = DeadlyDeadlyGoopManager.GetGoopManagerForGoopType(SwordtressBloodGoop);

            ddgm.TimedAddGoopCircle(actor.sprite.WorldCenter, .45f, .05f);
        }
示例#3
0
 public override void OnEffectApplied(GameActor actor, RuntimeGameActorEffectData effectData, float partialAmount = 1)
 {
     actor.healthHaver.OnDeath             += effectData.OnActorPreDeath;
     actor.healthHaver.AllDamageMultiplier += -0.3f;
     base.OnEffectApplied(actor, effectData, partialAmount);
     ShouldISpawn = true;
 }
 public override void OnEffectApplied(GameActor actor, RuntimeGameActorEffectData effectData, float partialAmount = 1)
 {
     base.OnEffectApplied(actor, effectData, partialAmount);
     effectData.OnActorPreDeath = delegate(Vector2 dir)
     {
         if (actor is AIActor)
         {
             AIActor aiActor = actor as AIActor;
             if (aiActor.GetAbsoluteParentRoom() == GameManager.Instance.GetActivePlayerClosestToPoint(actor.CenterPosition).CurrentRoom&& !aiActor.IgnoreForRoomClear && !noNoGUIDs.Contains(aiActor.EnemyGuid))
             {
                 Vector2    dirVec     = UnityEngine.Random.insideUnitCircle;
                 GameObject gameObject = SpawnManager.SpawnProjectile(((Gun)ETGMod.Databases.Items[39]).DefaultModule.projectiles[0].gameObject, actor.CenterPosition, Quaternion.Euler(0, 0, 0));
                 Projectile proj       = gameObject.GetComponent <Projectile>();
                 if (proj != null)
                 {
                     proj.Owner               = actor;
                     proj.Shooter             = aiActor.specRigidbody;
                     proj.collidesWithEnemies = false;
                     proj.collidesWithPlayer  = true;
                     proj.MakeLookLikeEnemyBullet(true);
                     proj.gameObject.AddComponent <PierceDeadActors>();
                     PlayerController closestToPos = BraveUtility.GetClosestToPosition <PlayerController>(GameManager.Instance.AllPlayers.ToList(), aiActor.CenterPosition);
                     if (closestToPos)
                     {
                         dirVec = closestToPos.CenterPosition - proj.transform.position.XY();
                     }
                     proj.SendInDirection(dirVec, false, true);
                 }
             }
         }
     };
     actor.healthHaver.OnPreDeath += effectData.OnActorPreDeath;
 }
 public static void DestroyFlames(RuntimeGameActorEffectData effectData)
 {
     if (effectData.vfxObjects == null)
     {
         return;
     }
     if (!effectData.actor.IsFrozen)
     {
         for (int i = 0; i < effectData.vfxObjects.Count; i++)
         {
             GameObject first = effectData.vfxObjects[i].First;
             if (first)
             {
                 first.transform.parent = SpawnManager.Instance.VFX;
             }
         }
     }
     effectData.vfxObjects.Clear();
     effectData.destroyVfx = true;
     if (GameManager.Options.ShaderQuality == GameOptions.GenericHighMedLowOption.HIGH && effectData.actor && effectData.actor.healthHaver && effectData.actor.healthHaver.GetCurrentHealth() <= 0f && effectData.actor.specRigidbody.HitboxPixelCollider != null)
     {
         Vector2 unitBottomLeft = effectData.actor.specRigidbody.HitboxPixelCollider.UnitBottomLeft;
         Vector2 unitTopRight   = effectData.actor.specRigidbody.HitboxPixelCollider.UnitTopRight;
         float   num            = (unitTopRight.x - unitBottomLeft.x) * (unitTopRight.y - unitBottomLeft.y);
         GlobalSparksDoer.DoRandomParticleBurst(Mathf.Max(1, (int)(75f * num)), unitBottomLeft, unitTopRight, new Vector3(1f, 1f, 0f), 120f, 0.75f, null, null, null, GlobalSparksDoer.SparksType.BLACK_PHANTOM_SMOKE);
     }
 }
 public override void OnEffectApplied(GameActor actor, RuntimeGameActorEffectData effectData, float partialAmount = 1f)
 {
     base.OnEffectApplied(actor, effectData, partialAmount);
     effectData.OnActorPreDeath = delegate(Vector2 dir)
     {
         GameActorWitherEffect.DestroyFlames(effectData);
     };
     actor.healthHaver.OnPreDeath += effectData.OnActorPreDeath;
     {
         if (effectData.vfxObjects == null)
         {
             effectData.vfxObjects = new List <Tuple <GameObject, float> >();
         }
         effectData.OnFlameAnimationCompleted = delegate(tk2dSpriteAnimator spriteAnimator, tk2dSpriteAnimationClip clip)
         {
             if (effectData.destroyVfx || !actor)
             {
                 spriteAnimator.AnimationCompleted = (Action <tk2dSpriteAnimator, tk2dSpriteAnimationClip>)Delegate.Remove(spriteAnimator.AnimationCompleted, effectData.OnFlameAnimationCompleted);
                 UnityEngine.Object.Destroy(spriteAnimator.gameObject);
                 return;
             }
             if (UnityEngine.Random.value < this.flameMoveChance)
             {
                 Vector2 a = actor.specRigidbody.HitboxPixelCollider.UnitDimensions / 2f;
                 Vector2 b = BraveUtility.RandomVector2(-a + this.flameBuffer, a - this.flameBuffer);
                 Vector2 v = actor.specRigidbody.HitboxPixelCollider.UnitCenter + b;
                 spriteAnimator.transform.position = v;
             }
             spriteAnimator.Play(clip, 0f, clip.fps * UnityEngine.Random.Range(1f - this.flameFpsVariation, 1f + this.flameFpsVariation), false);
         };
     }
 }
示例#7
0
 // Token: 0x06004CA7 RID: 19623 RVA: 0x00199138 File Offset: 0x00197338
 public override void OnEffectApplied(GameActor actor, RuntimeGameActorEffectData effectData, float partialAmount = 1f)
 {
     effectData.MovementModifier = delegate(ref Vector2 volundaryVel, ref Vector2 involuntaryVel)
     {
         float d = Mathf.Clamp01((100f - actor.FreezeAmount) / 100f);
         volundaryVel *= d;
     };
     actor.MovementModifiers   += effectData.MovementModifier;
     effectData.OnActorPreDeath = delegate(Vector2 dir)
     {
         if (actor.IsFrozen)
         {
             this.DestroyCrystals(effectData, !actor.IsFalling);
             AkSoundEngine.PostEvent("Play_OBJ_crystal_shatter_01", GameManager.Instance.PrimaryPlayer.gameObject);
             actor.FreezeAmount = 0f;
             if (this.ShouldVanishOnDeath(actor))
             {
                 if (actor is AIActor)
                 {
                     (actor as AIActor).ForceDeath(dir, false);
                 }
                 UnityEngine.Object.Destroy(actor.gameObject);
             }
         }
     };
     actor.healthHaver.OnPreDeath += effectData.OnActorPreDeath;
     actor.FreezeAmount           += this.FreezeAmount * partialAmount;
 }
示例#8
0
 public override void EffectTick(GameActor actor, RuntimeGameActorEffectData effectData)
 {
     if (this.AffectsEnemies && actor is AIActor && !actor.healthHaver.IsBoss)
     {
         if (actor.healthHaver.IsDead)
         {
             if (ShouldISpawn == true)
             {
                 if (actor.aiActor.EnemyGuid != "5861e5a077244905a8c25c2b7b4d6ebb")
                 {
                     string guid;
                     guid = "4db03291a12144d69fe940d5a01de376";
                     AIActor    orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(guid);
                     IntVector2?intVector    = new IntVector2?(actor.PlacedPosition);
                     AIActor    aiactor      = AIActor.Spawn(orLoadByGuid.aiActor, actor.CenterPosition, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(intVector.Value), true, AIActor.AwakenAnimationType.Default, true);
                     aiactor.CanTargetEnemies = true;
                     aiactor.CanTargetPlayers = false;
                     PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(aiactor.specRigidbody, null, false);
                     aiactor.gameObject.AddComponent <KillOnRoomClear>();
                     aiactor.CanDropCurrency    = false;
                     aiactor.HitByEnemyBullets  = false;
                     aiactor.CollisionDamage    = 0f;
                     aiactor.IsHarmlessEnemy    = true;
                     aiactor.IgnoreForRoomClear = true;
                     ShouldISpawn = false;
                 }
             }
         }
     }
 }
示例#9
0
        public override void OnEffectRemoved(GameActor actor, RuntimeGameActorEffectData effectData)
        {
            var hand = actor.transform.Find("DemonVFX").gameObject;

            UnityEngine.Object.Destroy(hand);
            actor.DeregisterOverrideColor(vfxNamedemon);
            base.OnEffectRemoved(actor, effectData);
        }
示例#10
0
        // Token: 0x06000190 RID: 400 RVA: 0x00011064 File Offset: 0x0000F264
        public override void OnEffectRemoved(GameActor actor, RuntimeGameActorEffectData effectData)
        {
            AIActor aiActor = actor.aiActor;

            aiActor.MovementSpeed    = aiActor.BaseMovementSpeed;
            aiActor.CanTargetPlayers = this.prev;
            base.OnEffectRemoved(actor, effectData);
        }
 public override void OnEffectRemoved(GameActor actor, RuntimeGameActorEffectData effectData)
 {
     if (extantConfusionDecoy)
     {
         UnityEngine.Object.Destroy(extantConfusionDecoy);
     }
     base.OnEffectRemoved(actor, effectData);
 }
示例#12
0
 public override void EffectTick(GameActor actor, RuntimeGameActorEffectData effectData)
 {
     if (EasyGoopDefinitions.PlagueGoop != null)
     {
         DeadlyDeadlyGoopManager goop = DeadlyDeadlyGoopManager.GetGoopManagerForGoopType(EasyGoopDefinitions.PlagueGoop);
         goop.TimedAddGoopCircle(actor.specRigidbody.UnitCenter, 1.5f, 0.75f, true);
     }
     base.EffectTick(actor, effectData);
 }
示例#13
0
        public override void OnEffectApplied(GameActor actor, RuntimeGameActorEffectData effectData, float partialAmount = 1)
        {
            base.OnEffectApplied(actor, effectData, partialAmount);
            AIActor        Grenade            = EnemyDatabase.GetOrLoadByGuid("4d37ce3d666b4ddda8039929225b7ede");
            ExplodeOnDeath DoYouWantToExplode = actor.gameObject.AddComponent <ExplodeOnDeath>();
            ExplosionData  explosionData      = Grenade.GetComponent <ExplodeOnDeath>().explosionData;

            explosionData.damageToPlayer     = 0;
            DoYouWantToExplode.explosionData = explosionData;
        }
示例#14
0
 public override void OnEffectApplied(GameActor actor, RuntimeGameActorEffectData effectData, float partialAmount = 1)
 {
     base.OnEffectApplied(actor, effectData, partialAmount);
     effectData.OnActorPreDeath = delegate(Vector2 dir)
     {
         var ddgm = DeadlyDeadlyGoopManager.GetGoopManagerForGoopType(Library.NitricAcidGoop);
         ddgm.TimedAddGoopCircle(actor.CenterPosition, 3.5f, .35f);
     };
     actor.healthHaver.OnPreDeath += effectData.OnActorPreDeath;
 }
 public override void OnEffectRemoved(GameActor actor, RuntimeGameActorEffectData effectData)
 {
     try
     {
         actor.healthHaver.AllDamageMultiplier -= counter.HowMuchToRemove;
     } catch (Exception error)
     {
         error.ToString().Log();
     }
 }
示例#16
0
        public override void OnEffectRemoved(GameActor actor, RuntimeGameActorEffectData effectData)
        {
            var hand = actor.transform.Find("money22VFX").gameObject;

            UnityEngine.Object.Destroy(hand);

            actor.DeregisterOverrideColor(vfxNamemoney2);
            base.OnEffectRemoved(actor, effectData);
            actor.healthHaver.AllDamageMultiplier -= -0.3f;
        }
示例#17
0
 // Token: 0x06004CA8 RID: 19624 RVA: 0x001991DC File Offset: 0x001973DC
 public override void OnDarkSoulsAccumulate(GameActor actor, RuntimeGameActorEffectData effectData, float partialAmount = 1f, Projectile sourceProjectile = null)
 {
     if (!effectData.actor.IsFrozen)
     {
         actor.FreezeAmount += this.FreezeAmount * partialAmount;
         if (actor.healthHaver.IsBoss)
         {
             actor.FreezeAmount = Mathf.Min(actor.FreezeAmount, 75f);
         }
     }
 }
示例#18
0
 public override void EffectTick(GameActor actor, RuntimeGameActorEffectData effectData)
 {
     i++;
     if (i == 180)
     {
         i   = 0;
         num = actor.healthHaver.GetCurrentHealth();
         actor.healthHaver.ApplyHealing(num / 5);
         ETGModConsole.Log((num / 5).ToString());
     }
 }
        public override void OnEffectApplied(GameActor actor, RuntimeGameActorEffectData effectData, float partialAmount = 1)
        {
            if (actor && actor.specRigidbody)
            {
                GameObject newDecoy = UnityEngine.Object.Instantiate <GameObject>(Confusion.ConfusionDecoyTarget, actor.CenterPosition, Quaternion.identity);
                newDecoy.GetComponent <ConfusionDecoyTargetController>().surroundObject = actor.specRigidbody;
                extantConfusionDecoy = newDecoy;
            }

            base.OnEffectApplied(actor, effectData, partialAmount);
        }
 public override void OnEffectRemoved(GameActor actor, RuntimeGameActorEffectData effectData)
 {
     base.OnEffectRemoved(actor, effectData);
     if (actor.aiActor)
     {
         if (actor.healthHaver && (actor.healthHaver.IsBoss || actor.healthHaver.IsSubboss))
         {
             return;
         }
         Vector2 newSize = new Vector2((actor.aiActor.EnemyScale.x / newScaleMultiplier.x), (actor.aiActor.EnemyScale.y / newScaleMultiplier.y));
         actor.StartCoroutine(LerpToSize(actor.aiActor, newSize));
     }
 }
示例#21
0
        // Token: 0x0600018F RID: 399 RVA: 0x00011000 File Offset: 0x0000F200
        public override void OnEffectApplied(GameActor actor, RuntimeGameActorEffectData effectData, float partialAmount = 1f)
        {
            bool flag = !actor.healthHaver.IsBoss && !actor.healthHaver.IsDead;

            if (flag)
            {
                AIActor aiActor = actor.aiActor;
                this.prev = aiActor.CanTargetPlayers;
                aiActor.CanTargetPlayers = false;
                aiActor.MovementSpeed    = 0f;
                base.OnEffectApplied(actor, effectData, partialAmount);
            }
        }
 public override void OnEffectApplied(GameActor actor, RuntimeGameActorEffectData effectData, float partialAmount = 1)
 {
     try
     {
         actor.healthHaver.AllDamageMultiplier += initalAmount;
         counter.HowMuchToRemove += initalAmount;
         counter.TimesApplied++;
         counter = actor.gameObject.AddComponent <CountingComponent>();
     } catch (Exception error)
     {
         error.ToString().Log();
     }
 }
 public override void EffectTick(GameActor actor, RuntimeGameActorEffectData effectData)
 {
     base.EffectTick(actor, effectData);
     if (GameManager.Options.ShaderQuality == GameOptions.GenericHighMedLowOption.HIGH && effectData.actor && effectData.actor.specRigidbody.HitboxPixelCollider != null)
     {
         Vector2 unitBottomLeft = effectData.actor.specRigidbody.HitboxPixelCollider.UnitBottomLeft;
         Vector2 unitTopRight   = effectData.actor.specRigidbody.HitboxPixelCollider.UnitTopRight;
         this.m_emberCounter += 30f * BraveTime.DeltaTime;
         if (this.m_emberCounter > 1f)
         {
             int num = Mathf.FloorToInt(this.m_emberCounter);
             this.m_emberCounter -= (float)num;
             GlobalSparksDoer.DoRandomParticleBurst(num, unitBottomLeft, unitTopRight, new Vector3(1f, 1f, 0f), 120f, 0.75f, null, null, null, GlobalSparksDoer.SparksType.BLACK_PHANTOM_SMOKE);
         }
     }
     if (actor && actor.specRigidbody)
     {
         Vector2 unitDimensions = actor.specRigidbody.HitboxPixelCollider.UnitDimensions;
         Vector2 a    = unitDimensions / 2f;
         int     num2 = Mathf.RoundToInt((float)this.flameNumPerSquareUnit * 0.5f * Mathf.Min(30f, Mathf.Min(new float[]
         {
             unitDimensions.x *unitDimensions.y
         })));
         this.m_particleTimer += BraveTime.DeltaTime * (float)num2;
         if (this.m_particleTimer > 1f)
         {
             int           num3          = Mathf.FloorToInt(this.m_particleTimer);
             Vector2       vector        = actor.specRigidbody.HitboxPixelCollider.UnitBottomLeft;
             Vector2       vector2       = actor.specRigidbody.HitboxPixelCollider.UnitTopRight;
             PixelCollider pixelCollider = actor.specRigidbody.GetPixelCollider(ColliderType.Ground);
             if (pixelCollider != null && pixelCollider.ColliderGenerationMode == PixelCollider.PixelColliderGeneration.Manual)
             {
                 vector  = Vector2.Min(vector, pixelCollider.UnitBottomLeft);
                 vector2 = Vector2.Max(vector2, pixelCollider.UnitTopRight);
             }
             vector    += Vector2.Min(a * 0.15f, new Vector2(0.25f, 0.25f));
             vector2   -= Vector2.Min(a * 0.15f, new Vector2(0.25f, 0.25f));
             vector2.y -= Mathf.Min(a.y * 0.1f, 0.1f);
             GlobalSparksDoer.DoRandomParticleBurst(num3, vector, vector2, Vector3.zero, 0f, 0f, null, null, null, GlobalSparksDoer.SparksType.BLACK_PHANTOM_SMOKE);
             this.m_particleTimer -= Mathf.Floor(this.m_particleTimer);
         }
     }
     if (actor.IsGone)
     {
         effectData.elapsed = 10000f;
     }
     if ((actor.IsFalling || actor.IsGone) && effectData.vfxObjects != null && effectData.vfxObjects.Count > 0)
     {
         GameActorFireEffect.DestroyFlames(effectData);
     }
 }
示例#24
0
 public override void EffectTick(GameActor actor, RuntimeGameActorEffectData effectData)
 {
     if (this.AffectsEnemies && actor is AIActor && !actor.healthHaver.IsBoss)
     {
         if (actor.healthHaver.IsDead)
         {
             if (ShouldISpawn == true)
             {
                 LootEngine.SpawnItem(PickupObjectDatabase.GetById(70).gameObject, actor.specRigidbody.UnitCenter, actor.specRigidbody.UnitCenter, 1f, false, true, false);
                 ShouldISpawn = false;
             }
         }
     }
 }
示例#25
0
        // Token: 0x06004CAA RID: 19626 RVA: 0x00199814 File Offset: 0x00197A14
        public override void OnEffectRemoved(GameActor actor, RuntimeGameActorEffectData effectData)
        {
            if (actor.IsFrozen)
            {
                actor.FreezeAmount = 0f;
                float resistanceForEffectType = actor.GetResistanceForEffectType(this.resistanceType);
                float damage = Mathf.Max(0f, actor.healthHaver.GetMaxHealth() * this.UnfreezeDamagePercent * (1f - resistanceForEffectType));
                actor.healthHaver.ApplyDamage(damage, Vector2.zero, "Freezer Burn", CoreDamageTypes.Ice, DamageCategory.DamageOverTime, true, null, false);
                this.DestroyCrystals(effectData, !actor.healthHaver.IsDead);
                if (this.AppliesTint)
                {
                    actor.DeregisterOverrideColor(this.effectIdentifier);
                }
                if (actor.behaviorSpeculator)
                {
                    actor.behaviorSpeculator.enabled = true;
                }
                if (this.ShouldVanishOnDeath(actor))
                {
                    actor.StealthDeath = false;
                }
                actor.IsFrozen = false;
            }
            actor.MovementModifiers      -= effectData.MovementModifier;
            actor.healthHaver.OnPreDeath -= effectData.OnActorPreDeath;
            if (actor.aiAnimator)
            {
                actor.aiAnimator.FpsScale = 1f;
            }
            if (actor.aiShooter)
            {
                actor.aiShooter.AimTimeScale = 1f;
            }
            if (actor.behaviorSpeculator)
            {
                actor.behaviorSpeculator.CooldownScale = 1f;
            }
            if (actor.bulletBank)
            {
                actor.bulletBank.TimeScale = 1f;
            }
            tk2dSpriteAnimator spriteAnimator = actor.spriteAnimator;

            if (spriteAnimator && actor.aiAnimator && spriteAnimator.CurrentClip != null && !spriteAnimator.IsPlaying(spriteAnimator.CurrentClip))
            {
                actor.aiAnimator.PlayUntilFinished(actor.spriteAnimator.CurrentClip.name, false, null, -1f, true);
            }
        }
 public override void OnEffectApplied(GameActor actor, RuntimeGameActorEffectData effectData, float partialAmount = 1)
 {
     base.OnEffectApplied(actor, effectData, partialAmount);
     if (actor.aiActor)
     {
         if (actor.healthHaver && (actor.healthHaver.IsBoss || actor.healthHaver.IsSubboss))
         {
             return;
         }
         SpecialSizeStatModification sizeStats = actor.gameObject.GetOrAddComponent <SpecialSizeStatModification>();
         sizeStats.canBeSteppedOn = true;
         sizeStats.adjustsSpeed   = adjustsSpeed;
         Vector2 newSize = new Vector2((actor.aiActor.EnemyScale.x * newScaleMultiplier.x), (actor.aiActor.EnemyScale.y * newScaleMultiplier.y));
         actor.StartCoroutine(LerpToSize(actor.aiActor, newSize));
     }
 }
示例#27
0
 public override void OnEffectApplied(GameActor actor, RuntimeGameActorEffectData effectData, float partialAmount = 1)
 {
     base.OnEffectApplied(actor, effectData, partialAmount);
     effectData.OnActorPreDeath = delegate(Vector2 dir)
     {
         int amt = UnityEngine.Random.Range(5, 15);
         for (int i = 0; i < amt; i++)
         {
             float      angle = UnityEngine.Random.Range(0, 360);
             GameObject obj   = SpawnManager.SpawnProjectile(((Gun)ETGMod.Databases.Items[15]).DefaultModule.projectiles[0].gameObject, actor.CenterPosition, Quaternion.Euler(0, 0, angle));
             Projectile proj  = obj.GetComponent <Projectile>();
             if (proj != null)
             {
                 proj.Owner = GameManager.Instance.PrimaryPlayer;
                 proj.gameObject.AddComponent <PreventBloatDuping>();
                 proj.gameObject.AddComponent <PierceDeadActors>();
             }
         }
     };
     actor.healthHaver.OnPreDeath += effectData.OnActorPreDeath;
 }
示例#28
0
 public override void OnEffectApplied(GameActor actor, RuntimeGameActorEffectData effectData, float partialAmount = 1)
 {
     base.OnEffectApplied(actor, effectData, partialAmount);
     try
     {
         effectData.OnActorPreDeath = delegate(Vector2 dir)
         {
             if (actor is AIActor)
             {
                 AIActor aiActor = actor as AIActor;
                 if (aiActor.GetAbsoluteParentRoom() == GameManager.Instance.GetRandomActivePlayer().CurrentRoom&& !aiActor.IgnoreForRoomClear && !noNoGUIDs.Contains(aiActor.EnemyGuid))
                 {
                     GameManager.Instance.StartCoroutine(DelayedSpawnSpent(actor.CenterPosition));
                 }
             }
         };
         actor.healthHaver.OnPreDeath += effectData.OnActorPreDeath;
     }
     catch (Exception e)
     {
         ETGModConsole.Log(e.ToString());
     }
 }
示例#29
0
 // Token: 0x06004CA9 RID: 19625 RVA: 0x00199234 File Offset: 0x00197434
 public override void EffectTick(GameActor actor, RuntimeGameActorEffectData effectData)
 {
     if (actor.FreezeAmount > 0f)
     {
         actor.FreezeAmount = Mathf.Max(0f, actor.FreezeAmount - BraveTime.DeltaTime * actor.FreezeDispelFactor);
         if (!actor.IsFrozen)
         {
             if (actor.FreezeAmount > 100f && actor.healthHaver.IsAlive)
             {
                 actor.FreezeAmount = 100f;
                 if (this.FreezeCrystals.Count > 0)
                 {
                     if (effectData.vfxObjects == null)
                     {
                         effectData.vfxObjects = new List <global::Tuple <GameObject, float> >();
                     }
                     int num = this.crystalNum;
                     if (effectData.actor && effectData.actor.specRigidbody && effectData.actor.specRigidbody.HitboxPixelCollider != null)
                     {
                         float num2 = effectData.actor.specRigidbody.HitboxPixelCollider.UnitDimensions.x * effectData.actor.specRigidbody.HitboxPixelCollider.UnitDimensions.y;
                         num = Mathf.Max(this.crystalNum, (int)((float)this.crystalNum * (0.5f + num2 / 4f)));
                     }
                     for (int i = 0; i < num; i++)
                     {
                         GameObject prefab  = BraveUtility.RandomElement <GameObject>(this.FreezeCrystals);
                         Vector2    vector  = actor.specRigidbody.HitboxPixelCollider.UnitCenter;
                         Vector2    vector2 = BraveUtility.RandomVector2(-this.crystalVariation, this.crystalVariation);
                         vector += vector2;
                         float      num3       = BraveMathCollege.QuantizeFloat(vector2.ToAngle(), 360f / (float)this.crystalRot);
                         Quaternion rotation   = Quaternion.Euler(0f, 0f, num3);
                         GameObject gameObject = SpawnManager.SpawnVFX(prefab, vector, rotation, true);
                         gameObject.transform.parent = actor.transform;
                         tk2dSprite component = gameObject.GetComponent <tk2dSprite>();
                         if (component)
                         {
                             actor.sprite.AttachRenderer(component);
                             component.HeightOffGround = 0.1f;
                         }
                         if (effectData.actor && effectData.actor.specRigidbody && effectData.actor.specRigidbody.HitboxPixelCollider != null)
                         {
                             Vector2 unitCenter = effectData.actor.specRigidbody.HitboxPixelCollider.UnitCenter;
                             float   num4       = (float)i * (360f / (float)num);
                             Vector2 normalized = BraveMathCollege.DegreesToVector(num4, 1f).normalized;
                             normalized.x *= effectData.actor.specRigidbody.HitboxPixelCollider.UnitDimensions.x / 2f;
                             normalized.y *= effectData.actor.specRigidbody.HitboxPixelCollider.UnitDimensions.y / 2f;
                             float   magnitude = normalized.magnitude;
                             Vector2 vector3   = unitCenter + normalized;
                             vector3 += (unitCenter - vector3).normalized * (magnitude * UnityEngine.Random.Range(0.15f, 0.85f));
                             gameObject.transform.position = vector3.ToVector3ZUp(0f);
                             gameObject.transform.rotation = Quaternion.Euler(0f, 0f, num4);
                         }
                         effectData.vfxObjects.Add(global::Tuple.Create <GameObject, float>(gameObject, num3));
                     }
                 }
                 if (this.ShouldVanishOnDeath(actor))
                 {
                     actor.StealthDeath = true;
                 }
                 if (actor.behaviorSpeculator)
                 {
                     if (actor.behaviorSpeculator.IsInterruptable)
                     {
                         actor.behaviorSpeculator.InterruptAndDisable();
                     }
                     else
                     {
                         actor.behaviorSpeculator.enabled = false;
                     }
                 }
                 if (actor is AIActor)
                 {
                     AIActor aiactor = actor as AIActor;
                     aiactor.ClearPath();
                     aiactor.BehaviorOverridesVelocity = false;
                 }
                 actor.IsFrozen = true;
             }
         }
         else if (actor.IsFrozen)
         {
             if (actor.FreezeAmount <= 0f)
             {
                 return;
             }
             if (actor.IsFalling)
             {
                 if (effectData.vfxObjects != null && effectData.vfxObjects.Count > 0)
                 {
                     this.DestroyCrystals(effectData, false);
                 }
                 if (actor.aiAnimator)
                 {
                     actor.aiAnimator.FpsScale = 1f;
                 }
             }
         }
     }
     if (!actor.healthHaver.IsDead)
     {
         float num5 = (!actor.healthHaver.IsBoss) ? 100f : 75f;
         float num6 = (!actor.IsFrozen) ? Mathf.Clamp01((100f - actor.FreezeAmount) / 100f) : 0f;
         float num7 = (!actor.IsFrozen) ? Mathf.Clamp01(actor.FreezeAmount / num5) : 1f;
         if (actor.aiAnimator)
         {
             actor.aiAnimator.FpsScale = ((!actor.IsFalling) ? num6 : 1f);
         }
         if (actor.aiShooter)
         {
             actor.aiShooter.AimTimeScale = num6;
         }
         if (actor.behaviorSpeculator)
         {
             actor.behaviorSpeculator.CooldownScale = num6;
         }
         if (actor.bulletBank)
         {
             actor.bulletBank.TimeScale = num6;
         }
         if (this.AppliesTint)
         {
             float num8          = actor.FreezeAmount / actor.FreezeDispelFactor;
             Color overrideColor = this.TintColor;
             if (num8 < 0.1f)
             {
                 overrideColor = Color.black;
             }
             else if (num8 < 0.2f)
             {
                 overrideColor = Color.white;
             }
             overrideColor.a *= num7;
             actor.RegisterOverrideColor(overrideColor, this.effectIdentifier);
         }
     }
 }
示例#30
0
        // Token: 0x06004CAC RID: 19628 RVA: 0x001999F8 File Offset: 0x00197BF8
        private void DestroyCrystals(RuntimeGameActorEffectData effectData, bool playVfxExplosion = true)
        {
            if (effectData.vfxObjects == null || effectData.vfxObjects.Count == 0)
            {
                return;
            }
            Vector2   vector = Vector2.zero;
            GameActor actor  = effectData.actor;

            if (actor)
            {
                vector = ((!actor.specRigidbody) ? actor.sprite.WorldCenter : actor.specRigidbody.HitboxPixelCollider.UnitCenter);
            }
            else
            {
                int num = 0;
                for (int i = 0; i < effectData.vfxObjects.Count; i++)
                {
                    if (effectData.vfxObjects[i].First)
                    {
                        vector += effectData.vfxObjects[i].First.transform.position.XY();
                        num++;
                    }
                }
                if (num == 0)
                {
                    return;
                }
                vector /= (float)num;
            }
            if (playVfxExplosion && this.vfxExplosion)
            {
                GameObject gameObject = SpawnManager.SpawnVFX(this.vfxExplosion, vector, Quaternion.identity);
                tk2dSprite component  = gameObject.GetComponent <tk2dSprite>();
                if (actor && component)
                {
                    actor.sprite.AttachRenderer(component);
                    component.HeightOffGround = 0.1f;
                    component.UpdateZDepth();
                }
            }
            for (int j = 0; j < effectData.vfxObjects.Count; j++)
            {
                GameObject first = effectData.vfxObjects[j].First;
                if (first)
                {
                    first.transform.parent = SpawnManager.Instance.VFX;
                    DebrisObject orAddComponent = first.GetOrAddComponent <DebrisObject>();
                    if (actor)
                    {
                        actor.sprite.AttachRenderer(orAddComponent.sprite);
                    }
                    orAddComponent.sprite.IsPerpendicular = true;
                    orAddComponent.DontSetLayer           = true;
                    orAddComponent.gameObject.SetLayerRecursively(LayerMask.NameToLayer("FG_Critical"));
                    orAddComponent.angularVelocity         = Mathf.Sign(UnityEngine.Random.value - 0.5f) * 125f;
                    orAddComponent.angularVelocityVariance = 60f;
                    orAddComponent.decayOnBounce           = 0.5f;
                    orAddComponent.bounceCount             = 1;
                    orAddComponent.canRotate = true;
                    float num2 = effectData.vfxObjects[j].Second + UnityEngine.Random.Range(-this.debrisAngleVariance, this.debrisAngleVariance);
                    if (orAddComponent.name.Contains("tilt", true))
                    {
                        num2 += 45f;
                    }
                    Vector2 vector2        = BraveMathCollege.DegreesToVector(num2, 1f) * (float)UnityEngine.Random.Range(this.debrisMinForce, this.debrisMaxForce);
                    Vector3 startingForce  = new Vector3(vector2.x, (vector2.y >= 0f) ? 0f : vector2.y, (vector2.y <= 0f) ? 0f : vector2.y);
                    float   startingHeight = (!actor) ? 0.75f : (first.transform.position.y - actor.specRigidbody.HitboxPixelCollider.UnitBottom);
                    if (orAddComponent.minorBreakable)
                    {
                        orAddComponent.minorBreakable.enabled = true;
                    }
                    orAddComponent.Trigger(startingForce, startingHeight, 1f);
                }
            }
            effectData.vfxObjects.Clear();
        }