Esempio n. 1
0
        public void Start()
        {
            if (!m_configured)
            {
                ConfigureOnPlacement(GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(transform.position.IntXY(VectorConversions.Ceil)));
            }

            PlayerController player  = GameManager.Instance.PrimaryPlayer;
            PlayerController player2 = GameManager.Instance.SecondaryPlayer;

            if ((player && player.HasPassiveItem(CorruptedJunk.CorruptedJunkID)) | (player2 && player2.HasPassiveItem(CorruptedJunk.CorruptedJunkID)))
            {
                GlitchedEnemyMode = true;
            }

            if (GlitchedEnemyMode && UnityEngine.Random.value <= m_glitchOdds)
            {
                m_isGlitched = true;
            }

            transform.position = m_startingPos;
            specRigidbody.Reinitialize();
            aiAnimator.LockFacingDirection = true;
            aiAnimator.FacingDirection     = DungeonData.GetAngleFromDirection(m_facingDirection);
            if (!m_failedWallConfigure)
            {
                m_fakeWall = ExpandUtility.GenerateWallMesh(m_facingDirection, pos1, "Mimic Wall", null, true, m_isGlitched);
                if (aiActor.ParentRoom != null)
                {
                    m_fakeWall.transform.parent = aiActor.ParentRoom.hierarchyParent;
                }
                m_fakeWall.transform.position = pos1.ToVector3().WithZ(pos1.y - 2) + Vector3.down;
                if (m_facingDirection == DungeonData.Direction.SOUTH)
                {
                    StaticReferenceManager.AllShadowSystemDepthHavers.Add(m_fakeWall.transform);
                }
                else if (m_facingDirection == DungeonData.Direction.WEST)
                {
                    m_fakeWall.transform.position = m_fakeWall.transform.position + new Vector3(-0.1875f, 0f);
                }
                m_fakeCeiling = ExpandUtility.GenerateRoomCeilingMesh(GetCeilingTileSet(pos1, pos2, m_facingDirection), "Mimic Ceiling", null, true, m_isGlitched);
                if (aiActor.ParentRoom != null)
                {
                    m_fakeCeiling.transform.parent = aiActor.ParentRoom.hierarchyParent;
                }
                m_fakeCeiling.transform.position = pos1.ToVector3().WithZ(pos1.y - 4);
                if (m_facingDirection == DungeonData.Direction.NORTH)
                {
                    m_fakeCeiling.transform.position += new Vector3(-1f, 0f);
                }
                else if (m_facingDirection == DungeonData.Direction.SOUTH)
                {
                    m_fakeCeiling.transform.position += new Vector3(-1f, 2f);
                }
                else if (m_facingDirection == DungeonData.Direction.EAST)
                {
                    m_fakeCeiling.transform.position += new Vector3(-1f, 0f);
                }
                m_fakeCeiling.transform.position = m_fakeCeiling.transform.position.WithZ(m_fakeCeiling.transform.position.y - 5f);
                for (int i = 0; i < specRigidbody.PixelColliders.Count; i++)
                {
                    specRigidbody.PixelColliders[i].Enabled = false;
                }
                if (m_facingDirection == DungeonData.Direction.NORTH)
                {
                    specRigidbody.PixelColliders.Add(PixelCollider.CreateRectangle(CollisionLayer.LowObstacle, 38, 38, 32, 8, true));
                    specRigidbody.PixelColliders.Add(PixelCollider.CreateRectangle(CollisionLayer.HighObstacle, 38, 54, 32, 8, true));
                }
                else if (m_facingDirection == DungeonData.Direction.SOUTH)
                {
                    specRigidbody.PixelColliders.Add(PixelCollider.CreateRectangle(CollisionLayer.LowObstacle, 38, 38, 32, 16, true));
                    specRigidbody.PixelColliders.Add(PixelCollider.CreateRectangle(CollisionLayer.HighObstacle, 38, 54, 32, 16, true));
                }
                else if (m_facingDirection == DungeonData.Direction.WEST || m_facingDirection == DungeonData.Direction.EAST)
                {
                    specRigidbody.PixelColliders.Add(PixelCollider.CreateRectangle(CollisionLayer.LowObstacle, 46, 38, 16, 32, true));
                    specRigidbody.PixelColliders.Add(PixelCollider.CreateRectangle(CollisionLayer.HighObstacle, 46, 38, 16, 32, true));
                }
                specRigidbody.ForceRegenerate(null, null);
            }
            aiActor.HasDonePlayerEnterCheck    = true;
            m_collisionKnockbackStrength       = aiActor.CollisionKnockbackStrength;
            aiActor.CollisionKnockbackStrength = 0f;
            aiActor.CollisionDamage            = 0f;
            m_goopDoer = GetComponent <GoopDoer>();
        }