public override void PlayerWalkedIn(PlayerController player, List <tk2dSpriteAnimator> animators)
        {
            if (m_AIActor)
            {
                if (m_GungeoneerMimicController)
                {
                    m_GungeoneerMimicController.m_Player = player;
                    m_GungeoneerMimicController.Init();
                }
                m_AIActor.GetAbsoluteParentRoom().CompletelyPreventLeaving = true;
                m_AIActor.ToggleRenderers(false);
                m_AIActor.IsGone = true;
                m_AIActor.State  = AIActor.ActorState.Inactive;
            }

            DoInitialConfiguration(player);


            if (MirrorBase && MirrorBase.GetComponent <tk2dSprite>())
            {
                MirrorBase.GetComponent <tk2dSprite>().HeightOffGround += 2f;
                MirrorBase.GetComponent <tk2dSprite>().UpdateZDepth();
            }

            m_MirrorHasShattered = false;
        }
        private IEnumerator WalkThroughMirror()
        {
            float time = 1.5f;

            m_AIActor.IsGone = false;
            m_AIActor.State  = AIActor.ActorState.Awakening;
            // m_AIActor.State = AIActor.ActorState.Normal;
            m_AIActor.specRigidbody.CollideWithOthers = true;
            m_AIActor.ToggleRenderers(true);
            // m_AIActor.aiShooter.handObject.gameObject.SetActive(true);
            if (MirrorBase && MirrorBase.GetComponent <tk2dSprite>())
            {
                MirrorBase.GetComponent <tk2dSprite>().HeightOffGround -= 2f;
                MirrorBase.GetComponent <tk2dSprite>().UpdateZDepth();
                m_MirrorDepthUpdated = true;
            }
            if (m_GungeoneerMimicController.m_Player.UseArmorlessAnim)
            {
                m_AIActor.spriteAnimator.Play("dodge_armorless");
                while (m_AIActor.spriteAnimator.IsPlaying("dodge_armorless"))
                {
                    float Y = 0.025f;
                    m_AIActor.gameObject.transform.position -= new Vector3(0, Y);
                    m_AIActor.specRigidbody.Reinitialize();
                    m_AIActor.spriteAnimator.UpdateAnimation(GameManager.INVARIANT_DELTA_TIME);
                    yield return(null);
                }
            }
            else
            {
                m_AIActor.spriteAnimator.Play("dodge");
                while (m_AIActor.spriteAnimator.IsPlaying("dodge"))
                {
                    float Y = 0.05f;
                    m_AIActor.gameObject.transform.position -= new Vector3(0, Y);
                    m_AIActor.specRigidbody.Reinitialize();
                    m_AIActor.spriteAnimator.UpdateAnimation(GameManager.INVARIANT_DELTA_TIME);
                    yield return(null);
                }
            }
            m_AIActor.spriteAnimator.Play("run_down");
            for (float elapsed = 0f; elapsed < time; elapsed += GameManager.INVARIANT_DELTA_TIME)
            {
                float Y = 0.025f;
                m_AIActor.spriteAnimator.UpdateAnimation(GameManager.INVARIANT_DELTA_TIME);
                m_AIActor.gameObject.transform.position -= new Vector3(0, Y);
                m_AIActor.specRigidbody.Reinitialize();
                yield return(null);
            }
            yield break;
        }
        public static GameObject ReinstateAIActorObjectInfo(GameObject gameObject)
        {//reinstate boss info, otherwise bosses stand and can't take damage
            AIActor bosscomponent = gameObject.GetComponent <AIActor>();

            if (bosscomponent)
            {
                bosscomponent.behaviorSpeculator.enabled = true;
                bosscomponent.specRigidbody.enabled      = true;

                bosscomponent.ToggleRenderers(true);

                //component.invisibleUntilAwaken = false;
                bosscomponent.State = AIActor.ActorState.Normal;
                bosscomponent.specRigidbody.CollideWithOthers = true;

                bosscomponent.IsGone = false;

                if (bosscomponent.aiShooter)
                {
                    bosscomponent.aiShooter.ToggleGunAndHandRenderers(true, "genericIntro");
                }

                bosscomponent.invisibleUntilAwaken = false;
                bosscomponent.CanTargetPlayers     = true;
                bosscomponent.IsNormalEnemy        = true;
            }

            else
            {
                Debug.Log("No AiActor component found: " + gameObject.name);
            }


            return(gameObject);
        }
        private IEnumerator HandleHammerReturn(AIActor targetHammer, Vector3 returnPosition)
        {
            GameObject targetObject = Instantiate(hammerSpawnFX, returnPosition, Quaternion.identity);

            yield return(null);

            tk2dSpriteAnimator hammerAnimator = targetObject.GetComponent <tk2dSpriteAnimator>();

            if (hammerAnimator != null)
            {
                hammerAnimator.Play("HammerReturnSpawn");
                while (hammerAnimator.Playing)
                {
                    targetObject.transform.position -= new Vector3(0, 0.02f);
                    yield return(null);
                }
                Vector3 m_LastSpritePosition = targetObject.transform.position;
                targetHammer.gameObject.GetComponent <CompanionController>().enabled = true;
                targetHammer.ToggleRenderers(true);
                targetHammer.IsGone = false;
                targetHammer.behaviorSpeculator.enabled    = true;
                targetHammer.gameObject.transform.position = m_LastSpritePosition;
                if (targetHammer.specRigidbody)
                {
                    targetHammer.specRigidbody.CollideWithOthers = true;
                    targetHammer.specRigidbody.Reinitialize();
                    PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(targetHammer.specRigidbody, null, false);
                }
                Destroy(targetObject);
            }
            else
            {
                targetHammer.gameObject.GetComponent <CompanionController>().enabled = true;
                targetHammer.ToggleRenderers(true);
                targetHammer.IsGone = false;
                targetHammer.behaviorSpeculator.enabled    = true;
                targetHammer.gameObject.transform.position = (returnPosition - new Vector3(0, 4.5f));
                if (targetHammer.specRigidbody)
                {
                    targetHammer.specRigidbody.CollideWithOthers = true;
                    targetHammer.specRigidbody.Reinitialize();
                    PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(targetHammer.specRigidbody, null, false);
                }
                Destroy(targetObject);
                yield break;
            }
        }
        public override void PlayerWalkedIn(PlayerController player, List <tk2dSpriteAnimator> animators)
        {
            if (MirrorBase && MirrorBase.GetComponent <tk2dSprite>())
            {
                MirrorBase.GetComponent <tk2dSprite>().HeightOffGround += 2f;
                MirrorBase.GetComponent <tk2dSprite>().UpdateZDepth();
            }

            m_MirrorDepthUpdated = false;
            m_MirrorHasShattered = false;

            m_AIActor = aiActor;

            if (m_AIActor)
            {
                m_GungeoneerMimicController = m_AIActor.gameObject.GetComponent <ExpandGungeoneerMimicBossController>();
                m_AIActor.GetAbsoluteParentRoom().CompletelyPreventLeaving = true;
                m_AIActor.ToggleRenderers(false);
                m_AIActor.aiShooter.handObject.gameObject.SetActive(false);
                m_AIActor.IsGone = true;
                m_AIActor.State  = AIActor.ActorState.Inactive;
            }
        }