private void Update() { foreach (LevelDimension dimension in m_Dimensions) { if (Input.GetKeyDown(dimension.m_SwapHereKey) && dimension != m_ActiveDimension) { if (m_ActiveDimension.SwapCharacters(dimension)) { m_ActiveDimension = dimension; break; } else { // Can't swap due to blocked location on one end // Play a warning sound or something Debug.Log("Can't swap, something is blocked"); } } } if (!m_ActiveDimension.ContainsCharacter()) { // Player has left playable area; game over GameManager.Instance.GameOver(); } }
public bool SwapCharacters(LevelDimension other) { BoxCollider2D collider = m_Character.GetComponent <BoxCollider2D>(); Collider2D overlap = Physics2D.OverlapBox(m_Character.position, collider.size * 0.95f, 0, m_GroundLayer); BoxCollider2D otherCollider = other.m_Character.GetComponent <BoxCollider2D>(); Collider2D otherOverlap = Physics2D.OverlapBox(other.m_Character.position, otherCollider.size * 0.95f, 0, m_GroundLayer); if (overlap != null || otherOverlap != null) { // One of the two characters is inside a wall, so don't swap return(false); } // Swap character positions Vector2 otherPosition = other.m_Character.transform.position; other.m_Character.transform.position = m_Character.transform.position; m_Character.transform.position = otherPosition; // Swap character transform parents other.m_Character.transform.parent = transform; m_Character.transform.parent = other.transform; // Toggle camera effects on/off if new character is the player other.m_CameraEffect.enabled = m_Character.GetComponent <PlayerController>() == null; m_CameraEffect.enabled = other.m_Character.GetComponent <PlayerController>() == null; // Swap character references Rigidbody2D otherCharacter = other.m_Character; other.m_Character = m_Character; m_Character = otherCharacter; return(true); }
private void Start() { foreach (LevelDimension dimension in m_Dimensions) { if (dimension.m_Character.GetComponent <PlayerController>() != null) { m_ActiveDimension = dimension; break; } } }