public void ForceCompanionRegeneration(PlayerController owner, Vector2?overridePosition)
        {
            bool    flag   = false;
            Vector2 vector = Vector2.zero;

            if (m_extantCompanion)
            {
                flag   = true;
                vector = m_extantCompanion.transform.position.XY();
            }
            if (overridePosition.HasValue)
            {
                flag   = true;
                vector = overridePosition.Value;
            }

            DestroyCompanion();
            CreateCompanion(owner);

            if (m_extantCompanion && flag)
            {
                m_extantCompanion.transform.position = vector.ToVector3ZisY(0f);
                SpeculativeRigidbody component = m_extantCompanion.GetComponent <SpeculativeRigidbody>();
                if (component)
                {
                    component.Reinitialize();
                }
            }
        }
        private void Disable()
        {
            SpeculativeRigidbody component = base.GetComponent <SpeculativeRigidbody>();

            if (!string.IsNullOrEmpty(this.ChangeSpriteInstead))
            {
                base.GetComponent <tk2dBaseSprite>().SetSprite(this.ChangeSpriteInstead);
                if (component)
                {
                    component.Reinitialize();
                }
            }
            else
            {
                if (component)
                {
                    component.enabled = false;
                }
                if (!this.EnableOnGunGameMode)
                {
                    base.gameObject.SetActive(false);
                }
                else
                {
                    base.GetComponent <MeshRenderer>().enabled = false;
                }
            }
        }
 private void Update()
 {
     if (this.EnableOnGunGameMode && !GameManager.Instance.IsSelectingCharacter && GameManager.Instance.PrimaryPlayer != null && (GameManager.Instance.PrimaryPlayer.CharacterUsesRandomGuns || ChallengeManager.CHALLENGE_MODE_ACTIVE))
     {
         SpeculativeRigidbody component = base.GetComponent <SpeculativeRigidbody>();
         if (!component.enabled)
         {
             component.enabled = true;
             component.Reinitialize();
             base.GetComponent <MeshRenderer>().enabled = true;
         }
     }
 }
Example #4
0
        private void ExpandMoveObjectBetweenRooms(Transform foundObject, RoomHandler fromRoom, RoomHandler toRoom)
        {
            Vector2 b = foundObject.position.XY() - fromRoom.area.basePosition.ToVector2();
            Vector2 v = toRoom.area.basePosition.ToVector2() + b;

            foundObject.transform.position = v;
            if (foundObject.parent == fromRoom.hierarchyParent)
            {
                foundObject.parent = toRoom.hierarchyParent;
            }
            SpeculativeRigidbody component = foundObject.GetComponent <SpeculativeRigidbody>();

            if (component)
            {
                component.Reinitialize();
            }
            tk2dBaseSprite component2 = foundObject.GetComponent <tk2dBaseSprite>();

            if (component2)
            {
                component2.UpdateZDepth();
            }
        }
        public void ConfigureOnPlacement(RoomHandler room)
        {
            m_ParentRoom = room;

            Doors.transform.parent = room.hierarchyParent;
            Doors.GetComponent <tk2dSprite>().HeightOffGround = -2f;
            Doors.GetComponent <tk2dSprite>().UpdateZDepth();

            DoorBlocker_West.transform.parent  = room.hierarchyParent;
            DoorBlocker_East.transform.parent  = room.hierarchyParent;
            DoorBlocker_South.transform.parent = room.hierarchyParent;
            DoorBlocker_North.transform.parent = room.hierarchyParent;
            DoorBlocker_West.GetComponent <tk2dSprite>().HeightOffGround = -1f;
            DoorBlocker_West.GetComponent <tk2dSprite>().UpdateZDepth();
            DoorBlocker_East.GetComponent <tk2dSprite>().HeightOffGround = -1f;
            DoorBlocker_East.GetComponent <tk2dSprite>().UpdateZDepth();
            DoorBlocker_South.GetComponent <tk2dSprite>().HeightOffGround = -1f;
            DoorBlocker_South.GetComponent <tk2dSprite>().UpdateZDepth();
            DoorBlocker_North.GetComponent <tk2dSprite>().HeightOffGround = -1f;
            DoorBlocker_North.GetComponent <tk2dSprite>().UpdateZDepth();


            GameObject m_DoorBlockersObject = new GameObject("BootlegRoomPhantomDoorBlockerCollision");

            m_DoorBlockersObject.transform.position = gameObject.transform.position;
            m_DoorBlockersObject.transform.parent   = m_ParentRoom.hierarchyParent;
            ExpandUtility.GenerateOrAddToRigidBody(m_DoorBlockersObject, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, CollideWithOthers: true, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(24, 32), offset: new IntVector2(0, 96));
            ExpandUtility.GenerateOrAddToRigidBody(m_DoorBlockersObject, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, CollideWithOthers: true, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(24, 32), offset: new IntVector2(296, 96));
            ExpandUtility.GenerateOrAddToRigidBody(m_DoorBlockersObject, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, CollideWithOthers: true, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 24), offset: new IntVector2(144, 0));
            ExpandUtility.GenerateOrAddToRigidBody(m_DoorBlockersObject, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, CollideWithOthers: true, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 24), offset: new IntVector2(144, 200));

            m_DoorBlockersRigidBody = m_DoorBlockersObject.GetComponent <SpeculativeRigidbody>();

            if (room.area.instanceUsedExits != null && room.area.instanceUsedExits.Count > 0)
            {
                foreach (PrototypeRoomExit exit in room.area.instanceUsedExits)
                {
                    if (exit.exitDirection == DungeonData.Direction.WEST)
                    {
                        m_DoorBlockersRigidBody.PixelColliders[0].Enabled = false;
                        DoorBlocker_West.SetActive(false);
                    }
                    else if (exit.exitDirection == DungeonData.Direction.EAST)
                    {
                        m_DoorBlockersRigidBody.PixelColliders[1].Enabled = false;
                        DoorBlocker_East.SetActive(false);
                    }
                    else if (exit.exitDirection == DungeonData.Direction.SOUTH)
                    {
                        m_DoorBlockersRigidBody.PixelColliders[2].Enabled = false;
                        DoorBlocker_South.SetActive(false);
                    }
                    else if (exit.exitDirection == DungeonData.Direction.NORTH)
                    {
                        m_DoorBlockersRigidBody.PixelColliders[3].Enabled = false;
                        DoorBlocker_North.SetActive(false);
                    }
                }
                m_DoorBlockersRigidBody.Reinitialize();
            }
        }
Example #6
0
        protected IEnumerator ExpandHandleTransitionToFallbackCombatRoom(PaydayDrillItem drillItem, RoomHandler sourceRoom, Chest sourceChest)
        {
            Dungeon d = GameManager.Instance.Dungeon;

            sourceChest.majorBreakable.TemporarilyInvulnerable = true;
            sourceRoom.DeregisterInteractable(sourceChest);
            // RoomHandler newRoom = ExpandUtility.Instance.AddCustomRuntimeRoom(drillItem.GenericFallbackCombatRoom, true, false, lightStyle: DungeonData.LightGenerationStyle.STANDARD);
            RoomHandler newRoom = d.AddRuntimeRoom(drillItem.GenericFallbackCombatRoom, null, DungeonData.LightGenerationStyle.FORCE_COLOR);

            newRoom.CompletelyPreventLeaving = true;
            Vector3 oldChestPosition = sourceChest.transform.position;

            sourceChest.transform.position = newRoom.Epicenter.ToVector3();
            if (sourceChest.transform.parent == sourceRoom.hierarchyParent)
            {
                sourceChest.transform.parent = newRoom.hierarchyParent;
            }
            SpeculativeRigidbody component = sourceChest.GetComponent <SpeculativeRigidbody>();

            if (component)
            {
                component.Reinitialize();
                PathBlocker.BlockRigidbody(component, false);
            }
            tk2dBaseSprite component2 = sourceChest.GetComponent <tk2dBaseSprite>();

            if (component2)
            {
                component2.UpdateZDepth();
            }
            Vector3 m_baseChestOffset  = ReflectionHelpers.ReflectGetField <Vector3>(typeof(PaydayDrillItem), "m_baseChestOffset", drillItem);
            Vector3 m_largeChestOffset = ReflectionHelpers.ReflectGetField <Vector3>(typeof(PaydayDrillItem), "m_largeChestOffset", drillItem);
            Vector3 chestOffset        = m_baseChestOffset;

            if (sourceChest.name.Contains("_Red") || sourceChest.name.Contains("_Black"))
            {
                chestOffset += m_largeChestOffset;
            }
            GameObject     spawnedVFX    = SpawnManager.SpawnVFX(drillItem.DrillVFXPrefab, sourceChest.transform.position + chestOffset, Quaternion.identity);
            tk2dBaseSprite spawnedSprite = spawnedVFX.GetComponent <tk2dBaseSprite>();

            spawnedSprite.HeightOffGround = 1f;
            spawnedSprite.UpdateZDepth();
            Vector2 oldPlayerPosition = GameManager.Instance.BestActivePlayer.transform.position.XY();
            Vector2 newPlayerPosition = newRoom.Epicenter.ToVector2() + new Vector2(0f, -3f);

            Pixelator.Instance.FadeToColor(0.25f, Color.white, true, 0.125f);
            Pathfinder.Instance.InitializeRegion(d.data, newRoom.area.basePosition, newRoom.area.dimensions);
            GameManager.Instance.BestActivePlayer.WarpToPoint(newPlayerPosition, false, false);
            if (GameManager.Instance.CurrentGameType == GameManager.GameType.COOP_2_PLAYER)
            {
                GameManager.Instance.GetOtherPlayer(GameManager.Instance.BestActivePlayer).ReuniteWithOtherPlayer(GameManager.Instance.BestActivePlayer, false);
            }
            yield return(null);

            for (int i = 0; i < GameManager.Instance.AllPlayers.Length; i++)
            {
                GameManager.Instance.AllPlayers[i].WarpFollowersToPlayer(false);
                GameManager.Instance.AllPlayers[i].WarpCompanionsToPlayer(false);
            }
            yield return(new WaitForSeconds(drillItem.DelayPostExpansionPreEnemies));

            yield return(GameManager.Instance.StartCoroutine(ExpandHandleCombatWaves(drillItem, d, newRoom, sourceChest)));

            drillItem.DisappearDrillPoof.SpawnAtPosition(spawnedSprite.WorldBottomLeft + new Vector2(-0.0625f, 0.25f), 0f, null, null, null, new float?(3f), false, null, null, false);
            Destroy(spawnedVFX.gameObject);
            AkSoundEngine.PostEvent("Stop_OBJ_paydaydrill_loop_01", GameManager.Instance.gameObject);
            AkSoundEngine.PostEvent("Play_OBJ_item_spawn_01", GameManager.Instance.gameObject);
            sourceChest.ForceUnlock();
            bool goodToGo = false;

            while (!goodToGo)
            {
                goodToGo = true;
                for (int j = 0; j < GameManager.Instance.AllPlayers.Length; j++)
                {
                    float num = Vector2.Distance(sourceChest.specRigidbody.UnitCenter, GameManager.Instance.AllPlayers[j].CenterPosition);
                    if (num > 3f)
                    {
                        goodToGo = false;
                    }
                }
                yield return(null);
            }
            Pixelator.Instance.FadeToColor(0.25f, Color.white, true, 0.125f);
            GameManager.Instance.BestActivePlayer.WarpToPoint(oldPlayerPosition, false, false);
            if (GameManager.Instance.CurrentGameType == GameManager.GameType.COOP_2_PLAYER)
            {
                GameManager.Instance.GetOtherPlayer(GameManager.Instance.BestActivePlayer).ReuniteWithOtherPlayer(GameManager.Instance.BestActivePlayer, false);
            }
            sourceChest.transform.position = oldChestPosition;
            if (sourceChest.transform.parent == newRoom.hierarchyParent)
            {
                sourceChest.transform.parent = sourceRoom.hierarchyParent;
            }
            SpeculativeRigidbody component3 = sourceChest.GetComponent <SpeculativeRigidbody>();

            if (component3)
            {
                component3.Reinitialize();
            }
            tk2dBaseSprite component4 = sourceChest.GetComponent <tk2dBaseSprite>();

            if (component4)
            {
                component4.UpdateZDepth();
            }
            sourceRoom.RegisterInteractable(sourceChest);
            FieldInfo m_inEffectField = typeof(PaydayDrillItem).GetField("m_inEffect", BindingFlags.Instance | BindingFlags.NonPublic);

            m_inEffectField.SetValue(drillItem, false);
            // m_inEffect = false;
            yield break;
        }
Example #7
0
        private void SpawnObjects(GameObject[] selectedObjects)
        {
            ObjectPrefabSpawnCount = selectedObjects.Length;
            if (ObjectPrefabSpawnCount < 0 | selectedObjects == null)
            {
                if (ExpandSettings.debugMode)
                {
                    ETGModConsole.Log("[DEBUG] ERROR: Object array is empty or null! Nothing to spawn!");
                }
                return;
            }
            IntVector2 pos = specRigidbody.UnitCenter.ToIntVector2(VectorConversions.Floor);

            if (aiActor.IsFalling && !allowSpawnOverPit)
            {
                return;
            }
            if (GameManager.Instance.Dungeon.CellIsPit(specRigidbody.UnitCenter.ToVector3ZUp(0f)) && !allowSpawnOverPit)
            {
                return;
            }
            RoomHandler roomFromPosition     = GameManager.Instance.Dungeon.GetRoomFromPosition(pos);
            List <SpeculativeRigidbody> list = new List <SpeculativeRigidbody>();

            list.Add(specRigidbody);
            Vector2 unitBottomLeft = specRigidbody.UnitBottomLeft;

            for (int i = 0; i < ObjectPrefabSpawnCount; i++)
            {
                if (objectsToSpawn == null)
                {
                    return;
                }
                GameObject SelectedObject = selectedObjects[i];
                if (spawnRatCorpse)
                {
                    SelectedObject = ExpandPrefabs.RatCorpseNPC;
                }
                GameObject SpawnedObject = null;
                if (!usesExternalObjectArray)
                {
                    if (spawnRatCorpse)
                    {
                        SpawnedObject = Instantiate(SelectedObject, (specRigidbody.GetUnitCenter(ColliderType.HitBox) - new Vector2(0.6f, 0.6f)).ToVector3ZUp(), Quaternion.identity);
                    }
                    else if (SelectedObject.GetComponent <Chest>() != null)
                    {
                        if (GameManager.Instance.Dungeon.GetRoomFromPosition(aiActor.transform.PositionVector2().ToIntVector2()) != null)
                        {
                            // RoomHandler currentRoom = aiActor.GetAbsoluteParentRoom();
                            RoomHandler        currentRoom  = GameManager.Instance.Dungeon.GetRoomFromPosition(aiActor.transform.PositionVector2().ToIntVector2());
                            Chest              TruthChest   = SelectedObject.GetComponent <Chest>();
                            WeightedGameObject wChestObject = new WeightedGameObject();
                            wChestObject.rawGameObject = SelectedObject;
                            WeightedGameObjectCollection wChestObjectCollection = new WeightedGameObjectCollection();
                            wChestObjectCollection.Add(wChestObject);
                            Chest PlacedTruthChest = currentRoom.SpawnRoomRewardChest(wChestObjectCollection, aiActor.transform.PositionVector2().ToIntVector2());
                            SpawnedObject = PlacedTruthChest.gameObject;
                        }
                    }
                    else
                    {
                        SpawnedObject = Instantiate(SelectedObject, specRigidbody.UnitCenter.ToIntVector2(VectorConversions.Floor).ToVector3(), Quaternion.identity);
                    }
                    if (SpawnedObject == null)
                    {
                        return;
                    }
                }

                if (SpawnedObject == null)
                {
                    return;
                }

                if (ExpandSettings.debugMode)
                {
                    ETGModConsole.Log("About to Spawn an object after death.");
                    ETGModConsole.Log("Object: " + SpawnedObject.name);
                    ETGModConsole.Log("AIActor:" + aiActor.GetActorName());
                }

                float RandomIntervalFloat       = UnityEngine.Random.Range(0.02f, 0.06f);
                float RandomDispFloat           = UnityEngine.Random.Range(0.1f, 0.16f);
                float RandomDispIntensityFloat  = UnityEngine.Random.Range(0.1f, 0.4f);
                float RandomColorProbFloat      = UnityEngine.Random.Range(0.05f, 0.2f);
                float RandomColorIntensityFloat = UnityEngine.Random.Range(0.1f, 0.25f);

                if (!spawnRatCorpse)
                {
                    if (SpawnedObject.GetComponent <tk2dBaseSprite>() != null)
                    {
                        ExpandShaders.Instance.ApplyGlitchShader(SpawnedObject.GetComponent <tk2dBaseSprite>(), true, RandomIntervalFloat, RandomDispFloat, RandomDispIntensityFloat, RandomColorProbFloat, RandomColorProbFloat);
                    }
                    else if (SpawnedObject.GetComponentInChildren <tk2dBaseSprite>() != null && SpawnedObject.GetComponent <Chest>() == null)
                    {
                        ExpandShaders.Instance.ApplyGlitchShader(SpawnedObject.GetComponentInChildren <tk2dBaseSprite>(), true, RandomIntervalFloat, RandomDispFloat, RandomDispIntensityFloat, RandomColorProbFloat, RandomColorProbFloat);
                    }
                }
                if (SpawnedObject != null)
                {
                    if (!usesExternalObjectArray && SpawnedObject.GetComponent <MysteryMimicManController>() != null)
                    {
                        Destroy(SpawnedObject.GetComponent <MysteryMimicManController>());
                    }

                    if (!usesExternalObjectArray && SpawnedObject.GetComponent <TalkDoerLite>() != null)
                    {
                        TalkDoerLite talkdoerComponent = SpawnedObject.GetComponent <TalkDoerLite>();
                        talkdoerComponent.SpeaksGleepGlorpenese = true;
                        talkdoerComponent.transform.position.XY().GetAbsoluteRoom().RegisterInteractable(talkdoerComponent);
                        if (SpawnedObject.name == ExpandPrefabs.RatCorpseNPC.name && !usesExternalObjectArray)
                        {
                            talkdoerComponent.transform.position.XY().GetAbsoluteRoom().TransferInteractableOwnershipToDungeon(talkdoerComponent);
                        }
                        else if (spawnRatCorpse)
                        {
                            talkdoerComponent.transform.position.XY().GetAbsoluteRoom().TransferInteractableOwnershipToDungeon(talkdoerComponent);
                        }
                        if (SpawnedObject.name.StartsWith(ExpandPrefabs.RatCorpseNPC.name))
                        {
                            talkdoerComponent.playmakerFsm.SetState("Set Mode");
                            // ExpandUtility.AddHealthHaver(talkdoerComponent.gameObject, 60, flashesOnDamage: false, exploderSpawnsItem: ratCorpseSpawnsItemOnExplosion);
                            ExpandUtility.GenerateHealthHaver(talkdoerComponent.gameObject, 60, flashesOnDamage: false, exploderSpawnsItem: ratCorpseSpawnsItemOnExplosion, isCorruptedObject: false, isRatNPC: true);
                            if (ratCorpseSpawnsKey)
                            {
                                HealthHaver ratCorpseHealthHaver = talkdoerComponent.gameObject.GetComponent <HealthHaver>();
                                ratCorpseHealthHaver.gameObject.AddComponent <ExpandSpawnGlitchObjectOnDeath>();
                                ExpandSpawnGlitchObjectOnDeath ratCorpseObjectSpawnOnDeath = ratCorpseHealthHaver.gameObject.GetComponent <ExpandSpawnGlitchObjectOnDeath>();
                                ratCorpseObjectSpawnOnDeath.spawnRatKey = true;
                            }
                        }
                    }

                    if (!usesExternalObjectArray && SpawnedObject.GetComponentInChildren <KickableObject>() != null && SpawnedObject.GetComponent <TalkDoerLite>() == null)
                    {
                        KickableObject kickableObjectComponent = SpawnedObject.GetComponentInChildren <KickableObject>();
                        kickableObjectComponent.transform.position.XY().GetAbsoluteRoom().RegisterInteractable(kickableObjectComponent);
                        kickableObjectComponent.ConfigureOnPlacement(kickableObjectComponent.transform.position.XY().GetAbsoluteRoom());
                    }

                    if (!usesExternalObjectArray && SpawnedObject.GetComponent <FlippableCover>() != null)
                    {
                        FlippableCover tableComponent = SpawnedObject.GetComponent <FlippableCover>();
                        tableComponent.transform.position.XY().GetAbsoluteRoom().RegisterInteractable(tableComponent);
                        tableComponent.ConfigureOnPlacement(tableComponent.transform.position.XY().GetAbsoluteRoom());
                        SpawnedObject.AddComponent <ExpandKickableObject>();
                        ExpandKickableObject chaosKickableComponent = SpawnedObject.GetComponent <ExpandKickableObject>();
                        chaosKickableComponent.transform.position.XY().GetAbsoluteRoom().RegisterInteractable(chaosKickableComponent);
                    }

                    if (!usesExternalObjectArray && SpawnedObject.GetComponent <NoteDoer>() != null)
                    {
                        NoteDoer noteComponent = SpawnedObject.GetComponent <NoteDoer>();
                        noteComponent.transform.position.XY().GetAbsoluteRoom().RegisterInteractable(noteComponent);
                        noteComponent.alreadyLocalized     = true;
                        noteComponent.useAdditionalStrings = false;
                        noteComponent.stringKey            = ("Here lies " + aiActor.GetActorName() + "\nHe was annoying anyways....");
                    }

                    /*if (!usesExternalObjectArray && SpawnedObject.GetComponent<HeartDispenser>() != null) {
                     *  HeartDispenser heartDispenserComponent = SpawnedObject.GetComponent<HeartDispenser>();
                     *  heartDispenserComponent.transform.position.XY().GetAbsoluteRoom().RegisterInteractable(heartDispenserComponent);
                     * }*/

                    if (SpawnedObject.GetComponentInChildren <SpeculativeRigidbody>() != null &&
                        SpawnedObject.GetComponentInChildren <KickableObject>() == null &&
                        SpawnedObject.GetComponent <TrapController>() == null &&
                        SpawnedObject.GetComponent <FlippableCover>() == null &&
                        SpawnedObject.GetComponent <Chest>() == null &&
                        SelectedObject.name != "NPC_ResourcefulRat_Beaten" &&
                        !usesExternalObjectArray)
                    {
                        SpeculativeRigidbody SpawnedObjectRigidBody = SpawnedObject.GetComponentInChildren <SpeculativeRigidbody>();
                        SpawnedObjectRigidBody.PrimaryPixelCollider.Enabled = false;
                        SpawnedObjectRigidBody.HitboxPixelCollider.Enabled  = false;
                        SpawnedObjectRigidBody.CollideWithOthers            = false;
                    }
                }

                if (SpawnedObject.GetComponentInChildren <SpeculativeRigidbody>() != null && SpawnedObject.name.ToLower().StartsWith("Table"))
                {
                    try {
                        SpeculativeRigidbody objectSpecRigidBody = SpawnedObject.GetComponentInChildren <SpeculativeRigidbody>();
                        objectSpecRigidBody.Initialize();
                        Vector2 a      = unitBottomLeft - (objectSpecRigidBody.UnitBottomLeft - SpawnedObject.transform.position.XY());
                        Vector2 vector = a + new Vector2(Mathf.Max(0f, specRigidbody.UnitDimensions.x - objectSpecRigidBody.UnitDimensions.x), 0f);
                        SpawnedObject.transform.position = Vector2.Lerp(a, vector, (ObjectPrefabSpawnCount != 1) ? i / (ObjectPrefabSpawnCount - 1f) : 0f);
                        objectSpecRigidBody.Reinitialize();
                        a      -= new Vector2(PhysicsEngine.PixelToUnit(extraPixelWidth), 0f);
                        vector += new Vector2(PhysicsEngine.PixelToUnit(extraPixelWidth), 0f);
                        Vector2       a2            = Vector2.Lerp(a, vector, (ObjectPrefabSpawnCount != 1) ? i / (ObjectPrefabSpawnCount - 1f) : 0.5f);
                        IntVector2    intVector     = PhysicsEngine.UnitToPixel(a2 - SpawnedObject.transform.position.XY());
                        CollisionData collisionData = null;
                        if (PhysicsEngine.Instance.RigidbodyCastWithIgnores(objectSpecRigidBody, intVector, out collisionData, true, true, null, false, list.ToArray()))
                        {
                            intVector = collisionData.NewPixelsToMove;
                        }
                        CollisionData.Pool.Free(ref collisionData);
                        SpawnedObject.transform.position += PhysicsEngine.PixelToUnit(intVector).ToVector3ZUp(1f);
                        objectSpecRigidBody.Reinitialize();
                        list.Add(objectSpecRigidBody);
                    } catch (Exception ex) {
                        if (ExpandSettings.debugMode)
                        {
                            ETGModConsole.Log("[DEBUG]: Warning: Exception caught while setting up rigid body settings in ChaosSpawnGlitchedObjectONDeath!");
                            Debug.Log("Warning: Exception caught while setting up rigid body settings in ChaosSpawnGlitchedObjectONDeath!");
                            Debug.LogException(ex);
                        }
                    }
                }
            }
            if (list.Count > 0)
            {
                for (int j = 0; j < list.Count; j++)
                {
                    for (int k = 0; k < list.Count; k++)
                    {
                        if (j != k)
                        {
                            list[j].RegisterGhostCollisionException(list[k]);
                        }
                    }
                }
            }
        }
        private void Start()
        {
            ElevatorDepartureController departureComponent = gameObject.GetComponent <ElevatorDepartureController>();

            if (departureComponent)
            {
                elevatorAnimator        = departureComponent.elevatorAnimator;
                ceilingAnimator         = departureComponent.ceilingAnimator;
                facewallAnimator        = departureComponent.facewallAnimator;
                floorAnimator           = departureComponent.floorAnimator;
                priorSprites            = departureComponent.priorSprites;
                postSprites             = departureComponent.postSprites;
                chunker                 = departureComponent.chunker;
                spawnTransform          = departureComponent.spawnTransform;
                elevatorFloor           = departureComponent.elevatorFloor;
                crumblyBumblyAnimator   = departureComponent.crumblyBumblyAnimator;
                smokeAnimator           = departureComponent.smokeAnimator;
                elevatorDescendAnimName = departureComponent.elevatorDescendAnimName;
                elevatorOpenAnimName    = departureComponent.elevatorOpenAnimName;
                elevatorCloseAnimName   = departureComponent.elevatorCloseAnimName;
                elevatorDepartAnimName  = departureComponent.elevatorDepartAnimName;
                arrivalShake            = departureComponent.arrivalShake;
                doorOpenShake           = departureComponent.doorOpenShake;
                doorCloseShake          = departureComponent.doorCloseShake;
                departureShake          = departureComponent.departureShake;
                // Remove CryoButton. This version of the elevator won't support that.
                GameObject[]      objects     = FindObjectsOfType <GameObject>();
                List <GameObject> CryoButtons = new List <GameObject>();
                if (objects != null && objects.Length > 0)
                {
                    foreach (GameObject targetObject in objects)
                    {
                        if (targetObject != null && targetObject.transform != null && !string.IsNullOrEmpty(targetObject.name))
                        {
                            if (targetObject.name.StartsWith("CryoElevatorButton") && targetObject.transform.position.GetAbsoluteRoom() == GetAbsoluteParentRoom())
                            {
                                float magnitude = (targetObject.transform.PositionVector2() - gameObject.transform.PositionVector2()).magnitude;
                                if (magnitude <= 7)
                                {
                                    CryoButtons.Add(targetObject);
                                }
                            }
                        }
                    }
                }

                if (CryoButtons.Count > 0)
                {
                    for (int i = 0; i < CryoButtons.Count; i++)
                    {
                        Destroy(CryoButtons[i]);
                    }
                }

                departureComponent.enabled = false;
                Destroy(departureComponent);
                Destroy(gameObject.GetComponent <ElevatorDepartureController>());

                SpeculativeRigidbody component = elevatorFloor.GetComponent <SpeculativeRigidbody>();
                if (component)
                {
                    if (ConfigurationWasDeferred)
                    {
                        component.PrimaryPixelCollider.ManualOffsetY -= 8;
                        component.PrimaryPixelCollider.ManualHeight  += 8;
                        component.Reinitialize();
                    }
                    SpeculativeRigidbody speculativeRigidbody = component;
                    speculativeRigidbody.OnTriggerCollision = (SpeculativeRigidbody.OnTriggerDelegate)Delegate.Combine(speculativeRigidbody.OnTriggerCollision, new SpeculativeRigidbody.OnTriggerDelegate(OnElevatorTriggerEnter));
                }
                ToggleSprites(true);
            }
            else
            {
                if (ExpandSettings.debugMode)
                {
                    ETGModConsole.Log("[DEBUG] ERROR: ElevatorDepatureComponent is null!");
                    Destroy(this);
                }
            }

            if (ConfigurationWasDeferred)
            {
                Material material = Instantiate(priorSprites[1].renderer.material);
                material.shader = ShaderCache.Acquire("Brave/Unity Transparent Cutout");
                priorSprites[1].renderer.material = material;
                Material material2 = Instantiate(postSprites[2].renderer.material);
                material2.shader = ShaderCache.Acquire("Brave/Unity Transparent Cutout");
                postSprites[2].renderer.material = material2;
                postSprites[1].HeightOffGround   = postSprites[1].HeightOffGround - 0.0625f;
                postSprites[3].HeightOffGround   = postSprites[3].HeightOffGround - 0.0625f;
                postSprites[1].UpdateZDepth();
            }
        }