I'm working on a warning system for my game. I want to display an arrow on the screen where the object is going to be coming from.
Here is an image of what I have in mind:
The object will spawn from outside the screen and start making its way to the screen. The code that I have created works, but it looks terrible. How can I fix this to make it more readable?
private GameObject warningObject; private float warningBufferFromScreenEdge = 1f; public void ShowWarningOnScreen() { if (warning == false) { if (!NearOffScreenWarning.nearOffScreenWarningSingleton.CheckIfInScreen(gameObject)) { warningObject = ObjectPoolManager.ObjectPoolManagerSingleton.AsteroidWarnings.GetPooledObject(); if (warningObject != null) { warningObject.SetActive(true); warningObject.transform.position = NearOffScreenWarning.nearOffScreenWarningSingleton.left; warning = true; } } } else { if (warningObject.activeInHierarchy == true) { FindAsteroidWarningSide(); switch (warningSides) { case WarningSides.TopLeft: warningObject.transform.position = new Vector2(Boundary.boundarySingleton.XMin + warningBufferFromScreenEdge, Boundary.boundarySingleton.YMax + warningBufferFromScreenEdge); break; case WarningSides.Top: warningObject.transform.position = new Vector2(gameObject.transform.position.x, Boundary.boundarySingleton.YMax - warningBufferFromScreenEdge); break; case WarningSides.TopRight: warningObject.transform.position = new Vector2(Boundary.boundarySingleton.XMax - warningBufferFromScreenEdge, Boundary.boundarySingleton.YMax - warningBufferFromScreenEdge); break; case WarningSides.Right: warningObject.transform.position = new Vector2(Boundary.boundarySingleton.XMin + warningBufferFromScreenEdge, gameObject.transform.position.y); break; case WarningSides.BottomRight: warningObject.transform.position = new Vector2(Boundary.boundarySingleton.XMax - warningBufferFromScreenEdge, Boundary.boundarySingleton.YMin + warningBufferFromScreenEdge); break; case WarningSides.Bottom: warningObject.transform.position = new Vector2(gameObject.transform.position.x, Boundary.boundarySingleton.YMin + warningBufferFromScreenEdge); break; case WarningSides.BottomLeft: warningObject.transform.position = new Vector2(Boundary.boundarySingleton.XMin + warningBufferFromScreenEdge, Boundary.boundarySingleton.YMin + warningBufferFromScreenEdge); break; case WarningSides.Left: warningObject.transform.position = new Vector2(Boundary.boundarySingleton.XMin + warningBufferFromScreenEdge, gameObject.transform.position.y); break; default: break; } if (NearOffScreenWarning.nearOffScreenWarningSingleton.CheckIfInScreen(gameObject)) { warningObject.SetActive(false); warning = false; } } } } enum WarningSides { TopLeft, Top, TopRight, Right, BottomRight, Bottom, BottomLeft, Left, } private WarningSides warningSides; private void FindAsteroidWarningSide() { if (transform.position.y > Boundary.boundarySingleton.YMax) { if (transform.position.x < Boundary.boundarySingleton.XMin) { warningSides = WarningSides.TopLeft; } else if (transform.position.x > Boundary.boundarySingleton.XMax) { warningSides = WarningSides.TopRight; } else { warningSides = WarningSides.Top; } } else if (transform.position.x > Boundary.boundarySingleton.XMax) { if (transform.position.y > Boundary.boundarySingleton.YMin) { warningSides = WarningSides.Right; } else if (transform.position.y < Boundary.boundarySingleton.YMin) { warningSides = WarningSides.BottomRight; } } else if (transform.position.y < Boundary.boundarySingleton.YMin) { if (transform.position.x > Boundary.boundarySingleton.XMin) { warningSides = WarningSides.Bottom; } else if (transform.position.x < Boundary.boundarySingleton.XMin) { warningSides = WarningSides.BottomLeft; } } else { warningSides = WarningSides.Left; } }