Esempio n. 1
0
 void EmeraldGolemBoss_Start(On.EmeraldGolemBoss.orig_Start orig, EmeraldGolemBoss self)
 {
     orig(self);
     for (int i = 0; i < Manager <EmeraldGolemFightManager> .Instance.fightGeysers.Count; i++)
     {
         Manager <EmeraldGolemFightManager> .Instance.fightGeysers[i].transform.position  = (i % 2 == 0 ? self.SpikesL.position : self.SpikesR.position);
         Manager <EmeraldGolemFightManager> .Instance.fightGeysers[i].transform.position += new Vector3(i % 2 == 0 ? 2 : -2, -1.5f);
         //AirGeyser geyser = Manager<EmeraldGolemFightManager>.Instance.fightGeysers[i].GetComponent<AirGeyser>();
         //geyser.boostHeight = 8;
         //geyser.windCollider.size = new Vector2(geyser.windCollider.size.x, 8);
         //geyser.windCollider.offset = new Vector2(geyser.windCollider.size.x, geyser.windCollider.size.y * 0.5f - 0.6f);
     }
 }
Esempio n. 2
0
        IEnumerator EmeraldGolemRightTripleStompState_TripleStompCoroutine(On.EmeraldGolemRightTripleStompState.orig_TripleStompCoroutine orig, EmeraldGolemRightTripleStompState self)
        {
            DynData <EmeraldGolemRightTripleStompState> selfData = new DynData <EmeraldGolemRightTripleStompState>(self);
            EmeraldGolemBoss boss = selfData.Get <EmeraldGolemBoss>("boss");

            selfData.Set("leftArmCoroutine", boss.leftArm.GoToDefaultPosition());
            yield return(selfData.Get <Coroutine>("leftArmCoroutine"));

            selfData.Set("rightArmCoroutine", boss.StartCoroutine(boss.rightArm.AnimatorQuadrupleStompCoroutine(true, true, true, 573.5f)));
            yield return(selfData.Get <Coroutine>("rightArmCoroutine"));

            selfData.Set("rightArmCoroutine", boss.rightArm.GoToDefaultPosition());
            yield return(selfData.Get <Coroutine>("rightArmCoroutine"));

            selfData.Get <StateMachine>("stateMachine").SetState <EmeraldGolemStompLeftRightState>(new EmeraldGolemStompLeftRightStateParams(1));
        }
Esempio n. 3
0
        IEnumerator EmeraldGolemDoubleTripleStompState_TripleStompCoroutine(On.EmeraldGolemDoubleTripleStompState.orig_TripleStompCoroutine orig, EmeraldGolemDoubleTripleStompState self)
        {
            DynData <EmeraldGolemDoubleTripleStompState> selfData = new DynData <EmeraldGolemDoubleTripleStompState>(self);
            EmeraldGolemBoss boss = selfData.Get <EmeraldGolemBoss>("boss");

            selfData.Set("rightArmCoroutine", boss.rightArm.GoToDefaultPosition());
            selfData.Set("leftArmCoroutine", boss.leftArm.GoToDefaultPosition());
            yield return(selfData.Get <Coroutine>("rightArmCoroutine"));

            yield return(selfData.Get <Coroutine>("leftArmCoroutine"));

            selfData.Set("rightArmCoroutine", boss.rightArm.AnimatorTripleStomp(true, true, true));
            selfData.Set("leftArmCoroutine", boss.leftArm.AnimatorTripleStomp(true, true, true));
            yield return(selfData.Get <Coroutine>("rightArmCoroutine"));

            yield return(selfData.Get <Coroutine>("leftArmCoroutine"));

            selfData.Set("rightArmCoroutine", boss.rightArm.GoToDefaultPosition());
            selfData.Set("leftArmCoroutine", boss.leftArm.GoToDefaultPosition());
            yield return(selfData.Get <Coroutine>("rightArmCoroutine"));

            yield return(selfData.Get <Coroutine>("leftArmCoroutine"));

            if (boss.GetCurrentHpThreshold() == EmeraldGolemBoss.EEmeralGolemBossMood.MAD || boss.GetCurrentHpThreshold() == EmeraldGolemBoss.EEmeralGolemBossMood.VERY_MAD)
            {
                if (boss.centerPlayerDetectionBox.PlayerIsInBox())
                {
                    selfData.Get <StateMachine>("stateMachine").SetState <EmeraldGolemLeftRightCenterStompState>(new EmeraldGolemLeftRightCenterStompStateParams(2));
                    yield return(null);
                }
                else
                {
                    selfData.Get <StateMachine>("stateMachine").SetState <EmeraldGolemStompLeftRightState>(new EmeraldGolemStompLeftRightStateParams(1));
                }
            }
            else
            {
                selfData.Get <StateMachine>("stateMachine").SetState <EmeraldGolemStompLeftRightState>(new EmeraldGolemStompLeftRightStateParams(1));
            }
        }
Esempio n. 4
0
        IEnumerator EmeraldGolemBoss_HeadVulnerabilityWindowCoroutine(On.EmeraldGolemBoss.orig_HeadVulnerabilityWindowCoroutine orig, EmeraldGolemBoss self)
        {
            DynData <EmeraldGolemBoss> selfData = emeraldBossData = new DynData <EmeraldGolemBoss>(self);

            if (selfData.Get <Coroutine>("shootCoroutine") != null)
            {
                self.StopCoroutine(selfData.Get <Coroutine>("shootCoroutine"));
                selfData.Set <Coroutine>("shootCoroutine", null);
            }
            Manager <AudioManager> .Instance.PlaySoundEffect(self.deactivateSFX);

            Animator gemAnimator = self.gem.GetComponent <Animator>();

            // This is an invincibru moment
            self.gem.invincibru = true;
            // Don't deactivate spikes
            gemAnimator.SetTrigger("Off");
            self.head.GetComponent <Animator>().ResetTrigger("Shoot");
            self.head.GetComponent <Animator>().SetTrigger("IdleOn");
            selfData.Set("headInvincible", false);
            yield return(new WaitForSeconds(1f));

            // Shoot energy balls at the player
            for (int i = 0; i < 25; i++)
            {
                // Don't shoot if the player is above the golem
                if (Manager <PlayerManager> .Instance.Player.transform.position.y < self.head.position.y)
                {
                    Manager <AudioManager> .Instance.PlaySoundEffect(self.headShootSFX);

                    WallShmuProjectile projectile = Manager <PoolManager> .Instance.GetObjectInstance(self.headProjectilePrefab).GetComponent <WallShmuProjectile>();

                    projectile.GetComponent <DisableNotifier>().onDisabled += OnProjectileDisabled;
                    selfData.Get <List <GameObject> >("projectileList").Add(projectile.gameObject);
                    projectile.transform.position = self.head.position;
                    Vector3 dir = Manager <PlayerManager> .Instance.Player.transform.position + new Vector3(0f, 2.7f, 0f) - self.head.position;
                    dir.Normalize();
                    projectile.Initialize(23f, dir);
                }
                yield return(new WaitForSeconds(0.333333333333f));
            }

            int blinkDone2 = 0;

            for (int totalBlinks2 = 2; blinkDone2 < totalBlinks2; blinkDone2++)
            {
                gemAnimator.SetTrigger("On");
                yield return(new WaitForSeconds(0.3f));

                gemAnimator.SetTrigger("Off");
                yield return(new WaitForSeconds(0.3f));
            }
            blinkDone2 = 0;
            for (int totalBlinks2 = 8; blinkDone2 < totalBlinks2; blinkDone2++)
            {
                gemAnimator.SetTrigger("On");
                yield return(new WaitForSeconds(0.05f));

                gemAnimator.SetTrigger("Off");
                yield return(new WaitForSeconds(0.05f));
            }
            gemAnimator.SetTrigger("On");
            self.head.GetComponent <Animator>().SetTrigger("IdleOff");
            selfData.Set("headInvincible", true);
            self.gemHP          = self.gemMaxHP;
            self.gem.invincibru = false;
            Manager <AudioManager> .Instance.PlaySoundEffect(self.activateSFX);

            self.stateMachine.SetState <EmeraldGolemStunnedDoneState>();
            yield return(null);
        }