Skip to content
Snippets Groups Projects
Commit 8be4e507 authored by Adrian Paschkowski's avatar Adrian Paschkowski :thinking:
Browse files

Don't create new InsetEdges every frame

parent f2ff74d3
No related branches found
No related tags found
No related merge requests found
...@@ -20,6 +20,7 @@ public class BaseCameraController : MonoBehaviour ...@@ -20,6 +20,7 @@ public class BaseCameraController : MonoBehaviour
new BoxCollider2D collider; new BoxCollider2D collider;
new Rigidbody2D rigidbody; new Rigidbody2D rigidbody;
InsetCameraEdges mouseMovementEdges;
Interpolator zoomInterpolator; Interpolator zoomInterpolator;
Interpolator moveXInterpolator; Interpolator moveXInterpolator;
Interpolator moveYInterpolator; Interpolator moveYInterpolator;
...@@ -29,12 +30,19 @@ public class BaseCameraController : MonoBehaviour ...@@ -29,12 +30,19 @@ public class BaseCameraController : MonoBehaviour
get => camera.orthographicSize / maxZoom; get => camera.orthographicSize / maxZoom;
} }
public void PlayGlobalAudioClip(AudioClip clip, float volume = 1f)
{
audio.PlayOneShot(clip, volume);
}
void Awake() void Awake()
{ {
camera = GetComponent<Camera>(); camera = GetComponent<Camera>();
audio = GetComponent<AudioSource>(); audio = GetComponent<AudioSource>();
collider = GetComponent<BoxCollider2D>(); collider = GetComponent<BoxCollider2D>();
rigidbody = GetComponent<Rigidbody2D>(); rigidbody = GetComponent<Rigidbody2D>();
mouseMovementEdges = new InsetCameraEdges(camera);
zoomInterpolator = new Interpolator(1 / zoomSpeed, camera.orthographicSize, camera.orthographicSize, minZoom, maxZoom); zoomInterpolator = new Interpolator(1 / zoomSpeed, camera.orthographicSize, camera.orthographicSize, minZoom, maxZoom);
moveXInterpolator = new Interpolator(1 / moveSpeed); moveXInterpolator = new Interpolator(1 / moveSpeed);
moveYInterpolator = new Interpolator(1 / moveSpeed); moveYInterpolator = new Interpolator(1 / moveSpeed);
...@@ -59,9 +67,9 @@ public class BaseCameraController : MonoBehaviour ...@@ -59,9 +67,9 @@ public class BaseCameraController : MonoBehaviour
if (inputVector.magnitude == 0) if (inputVector.magnitude == 0)
{ {
var mouseViewportPos = camera.ScreenToWorldPoint(Input.mousePosition); var mouseViewportPos = camera.ScreenToWorldPoint(Input.mousePosition);
var mouseEdges = new InsetEdges(camera, mouseEdgeDetectionBoxSize * zoomRatio); mouseMovementEdges.RecalculateBounds(mouseEdgeDetectionBoxSize * zoomRatio);
mouseEdges.DrawDebug(); mouseMovementEdges.DrawDebug();
inputVector = mouseEdges.GetOutOfBoundsDirection(mouseViewportPos); inputVector = mouseMovementEdges.GetOutOfBoundsDirection(mouseViewportPos);
} }
moveXInterpolator.targetValue = inputVector.x; moveXInterpolator.targetValue = inputVector.x;
moveYInterpolator.targetValue = inputVector.y; moveYInterpolator.targetValue = inputVector.y;
...@@ -88,29 +96,49 @@ public class BaseCameraController : MonoBehaviour ...@@ -88,29 +96,49 @@ public class BaseCameraController : MonoBehaviour
void OnDrawGizmosSelected() void OnDrawGizmosSelected()
{ {
if (camera == null) if (camera == null || mouseMovementEdges == null)
{ {
camera = GetComponent<Camera>(); camera = GetComponent<Camera>();
mouseMovementEdges = new InsetCameraEdges(camera);
} }
var mouseEdges = new InsetEdges(camera, mouseEdgeDetectionBoxSize * zoomRatio); mouseMovementEdges.RecalculateBounds(mouseEdgeDetectionBoxSize * zoomRatio);
mouseEdges.DrawGizmos(); mouseMovementEdges.DrawGizmos();
} }
public void PlayGlobalAudioClip(AudioClip clip, float volume = 1f) private class InsetCameraEdges
{ {
audio.PlayOneShot(clip, volume); private Camera camera;
} private Vector3 insetVector;
private class InsetEdges
{
public Vector3 bottomLeft; public Vector3 bottomLeft;
public Vector3 topRight; public Vector3 topRight;
private Vector3 bottomRight; private Vector3 bottomRight;
private Vector3 topLeft; private Vector3 topLeft;
public InsetEdges(Camera camera, float inset) public InsetCameraEdges(Camera camera) : this(camera, 0) { }
public InsetCameraEdges(Camera camera, float inset) : this(camera, inset, inset) { }
public InsetCameraEdges(Camera camera, float insetX, float insetY)
{
this.camera = camera;
RecalculateBounds(insetX, insetY);
}
public void RecalculateBounds(float newInset)
{
RecalculateBounds(newInset, newInset);
}
public void RecalculateBounds(float newInsetX, float newInsetY)
{
insetVector = new Vector3(newInsetX, newInsetY);
RecalculateBounds();
}
public void RecalculateBounds()
{ {
var insetVector = new Vector3(inset, inset); // TODO this would be way better if it would just use viewport positions
bottomLeft = camera.ViewportToWorldPoint(Vector3.zero) + insetVector; bottomLeft = camera.ViewportToWorldPoint(Vector3.zero) + insetVector;
topRight = camera.ViewportToWorldPoint(Vector3.one) - insetVector; topRight = camera.ViewportToWorldPoint(Vector3.one) - insetVector;
bottomLeft.z = 0; bottomLeft.z = 0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment