private Vector3 CalculateTransformPosition(Transform projectileTransform, ProjectilePositions position) { Vector3 leftTop = cameraCorners[Corner.LeftTop]; Vector3 rightBottom = cameraCorners[Corner.RightBottom]; float y = CutYCorners(projectileTransform.position.y, leftTop, rightBottom); float x = CutXCorners(projectileTransform.position.x, leftTop, rightBottom); switch (position) { case ProjectilePositions.Left: return(new Vector3(leftTop.x + screenBorderOffset, y)); case ProjectilePositions.Up: return(new Vector3(x, leftTop.y - screenBorderOffset)); case ProjectilePositions.Right: return(new Vector3(rightBottom.x - screenBorderOffset, y)); case ProjectilePositions.Down: return(new Vector3(x, rightBottom.y + screenBorderOffset)); case ProjectilePositions.OnCamera: return(transform.position); default: return(new Vector3(x, y)); } }
public void SpawnAlert(Transform projectileTransform) { cameraCorners = Coordinates.GetDictionary(); ProjectilePositions position = CalculateProjectilePosition(projectileTransform); MoveAlert(projectileTransform, position); alertAnimationController = new AlertAnimationController(GetComponent <Animator>()); FadeIn(); }
private Quaternion CalculateCornerRotation(Transform projectileTransform, ProjectilePositions position) { Vector3 diffVector = ProjectilePositionToCameraCorner(position); Vector3 diff = projectileTransform.position - diffVector; diff.z = 0; float angle = Vector3.Angle(diff, Vector3.up) - 180; if (position == ProjectilePositions.RightUp || position == ProjectilePositions.RightDown) { angle *= -1; } return(Quaternion.Euler(0f, 0f, angle)); }
public void UpdateAlert(Transform projectileTransform) { ProjectilePositions position = CalculateProjectilePosition(projectileTransform); if (!ArrayUtility.Contains <ProjectilePositions>(ignoredPositions, position)) { MoveAlert(projectileTransform, position); if (fadedOut && position != ProjectilePositions.OnCamera) { FadeIn(); } } if (!fadedOut && position == ProjectilePositions.OnCamera) { FadeOut(); } }
private Vector3 ProjectilePositionToCameraCorner(ProjectilePositions position) { switch (position) { case ProjectilePositions.LeftUp: return(cameraCorners[Corner.LeftTop]); case ProjectilePositions.LeftDown: return(cameraCorners[Corner.LeftBottom]); case ProjectilePositions.RightUp: return(cameraCorners[Corner.RightTop]); case ProjectilePositions.RightDown: return(cameraCorners[Corner.RightBottom]); } return(Vector3.zero); }
private Quaternion CalculateRotation(Transform projectileTransform, ProjectilePositions position) { switch (position) { case ProjectilePositions.Down: return(Quaternion.identity); case ProjectilePositions.Left: return(Quaternion.Euler(0f, 0f, -90f)); case ProjectilePositions.Up: return(Quaternion.Euler(0f, 0f, 180f)); case ProjectilePositions.Right: return(Quaternion.Euler(0f, 0f, 90f)); case ProjectilePositions.OnCamera: return(transform.rotation); default: return(CalculateCornerRotation(projectileTransform, position)); } }
private void PositionAlert(Transform projectileTransform, ProjectilePositions position) { transform.position = CalculateTransformPosition(projectileTransform, position); }
private void RotateAlert(Transform projectileTransform, ProjectilePositions position) { transform.rotation = CalculateRotation(projectileTransform, position); }
private void MoveAlert(Transform projectileTransform, ProjectilePositions position) { RotateAlert(projectileTransform, position); PositionAlert(projectileTransform, position); }