private IEnumerator LerpToInside(GameObject a_player) { var moveController = a_player.gameObject.GetComponentInChildren <MoveController>(); if (moveController != null) { moveController.Stop(); } var roomSideVec = (Vector2)a_player.transform.position - Rect.center; var enterDirection = Facing.VectorToDirectionCardinal(roomSideVec); var offset = Mathf.Max(0, m_wallSize); var spriteRenderer = a_player.GetComponentInChildren <SpriteRenderer>(); if (spriteRenderer != null) { if (Facing.IsVertical(enterDirection)) { offset += a_player.transform.localScale.y * (spriteRenderer.drawMode == SpriteDrawMode.Simple ? 1.0f : spriteRenderer.size.y / 2.0f); } else { offset += a_player.transform.localScale.x * (spriteRenderer.drawMode == SpriteDrawMode.Simple ? 1.0f : spriteRenderer.size.x / 2.0f); } } var x = a_player.transform.position.x; var y = a_player.transform.position.y; switch (enterDirection) { // the direction they're coming from case Facing.Direction.East: x = Right - offset; break; case Facing.Direction.North: y = Top - offset; break; case Facing.Direction.South: y = Bottom + offset; break; case Facing.Direction.West: x = Left + offset; break; } var startPos = a_player.transform.position; var targetPos = new Vector2(x, y); var timeElapsed = 0.0f; while (timeElapsed < RoomManager.instance.TransitionTime) { var t = timeElapsed / RoomManager.instance.TransitionTime; a_player.transform.position = Vector3.Lerp(startPos, targetPos, t); timeElapsed += Time.deltaTime; yield return(null); } }
public void Split() { if (!Facing.IsCardinal(Direction)) { Debug.LogWarningFormat("Cannot split a wall in direction {0}.", Direction); return; } var wallMin = this; var collider = GetComponent <BoxCollider2D>(); var size = collider.size; var shift = 0.0f; size.x = size.x / 2.0f; shift = size.x / 2.0f; collider.size = size; var renderer = GetComponent <SpriteRenderer>(); if (renderer != null) { renderer.size = size; } var wallMax = Instantiate(wallMin); wallMax.transform.parent = transform.parent; wallMax.transform.position = wallMin.transform.position; var baseName = name; if (Facing.IsVertical(Direction)) { wallMin.name = baseName + " (West)"; wallMin.transform.position += Vector3.left * shift; wallMax.name = baseName + " (East)"; wallMax.transform.position += Vector3.right * shift; } else { wallMin.name = baseName + " (South)"; wallMin.transform.position += Vector3.down * shift; wallMax.name = baseName + " (North)"; wallMax.transform.position += Vector3.up * shift; } }
private void UpdateAnimation() { m_prevFacing = m_facing.CurDirection; var directionString = m_facing.CurDirection.ToString(); // if we're sticking to cardinal and not N or S, use horizontal component if (!m_useIntercardinal && !Facing.IsVertical(m_facing.CurDirection)) { directionString = Facing.GetHorizontal(m_facing.CurDirection).ToString(); } m_animator.SetAnimation(directionString); m_animator.IsPaused = !m_mover.IsMoving; }
public Vector2 GetWallCenter(Facing.Direction a_direction, bool a_relative = false) { var offset = -Facing.DirectionToVector(a_direction) * WallSize / 2.0f; float attachPoint = 0.0f; switch (a_direction) { case Facing.Direction.East: attachPoint = Right - (a_relative ? transform.position.x : 0.0f); break; case Facing.Direction.North: attachPoint = Top - (a_relative ? transform.position.y : 0.0f); break; case Facing.Direction.South: attachPoint = Bottom - (a_relative ? transform.position.y : 0.0f); break; case Facing.Direction.West: attachPoint = Left - (a_relative ? transform.position.x : 0.0f); break; } if (!Facing.IsVertical(a_direction)) { return(new Vector2(attachPoint + offset.x, 0.0f)); } return(new Vector2(0.0f, attachPoint + offset.y)); }
private void Awake() { var length = Facing.IsVertical(m_scrollDirection) ? m_sprite.bounds.size.y * m_size.y : m_sprite.bounds.size.x * m_size.x; var step = length / 2.0f - m_overlapUnits; for (int count = 0; count < m_segmentCount; ++count) { var segment = new GameObject(); var pos = transform.position - (Vector3)MoveVector.normalized * count * step; segment.transform.parent = transform; segment.transform.position = pos; var sr = segment.AddComponent <SpriteRenderer>(); sr.sprite = m_sprite; sr.color = m_color; sr.sortingOrder = m_sortingOrder; sr.sortingLayerName = m_sortingLayerName; sr.drawMode = m_drawMode; if (m_drawMode != SpriteDrawMode.Simple) { sr.size = m_size; } var iss = segment.AddComponent <InfiniteScrollSegment>(); iss.SegmentCount = m_segmentCount; iss.OverlapUnits = m_overlapUnits; iss.ScrollDirection = m_scrollDirection; iss.SegmentSize = step; m_segmentList.Add(segment); } m_body = gameObject.AddComponent <Rigidbody2D>(); m_body.gravityScale = 0.0f; }