From 00f001ab1df95c96d5d148133bf1dbd790baae05 Mon Sep 17 00:00:00 2001 From: Carson Katri Date: Sat, 12 Jun 2021 12:52:30 -0400 Subject: Add player graphics --- .../Scripts/Controllers/Player/PlayerController.cs | 67 ++++++++++------------ 1 file changed, 30 insertions(+), 37 deletions(-) (limited to 'Assets/Scripts/Controllers/Player/PlayerController.cs') diff --git a/Assets/Scripts/Controllers/Player/PlayerController.cs b/Assets/Scripts/Controllers/Player/PlayerController.cs index c5cfc3d..e0de738 100644 --- a/Assets/Scripts/Controllers/Player/PlayerController.cs +++ b/Assets/Scripts/Controllers/Player/PlayerController.cs @@ -1,3 +1,4 @@ +using System; using System.Linq; using Controllers.Player; using UnityEngine; @@ -10,15 +11,18 @@ namespace Controllers.Player [SerializeField] private float sensitivity; [SerializeField] private float verticalSensitivity; - [SerializeField] private Rigidbody2D ballPrefab; - [SerializeField] private float ballSpeed; + [SerializeField] private GameController game; + [SerializeField] private Controls controls; + private void Update() { + // Loop over each body segment and control it. for (var i = 0; i < segments.Length; i++) { var segment = segments[i]; var isRoot = i == 0; + var isTop = i == segments.Length - 1; // Update icons foreach (var control in new[] {segment.left, segment.right}) @@ -31,45 +35,34 @@ namespace Controllers.Player // Add forces if (Input.GetKey(segment.left.keyCode)) - segment.Rigidbody.AddForceAtPosition(Vector2.left * (sensitivity * (isRoot ? 2f : 1f)) + Vector2.up * (verticalSensitivity * (isRoot ? -1f : 1f)), segment.transform.position + (segment.Sprite.bounds.size.y * segment.forceOrigin)); + segment.Rigidbody.AddForceAtPosition(Vector2.left * (sensitivity * (isRoot ? 2f : 1f)) + Vector2.up * (verticalSensitivity * (isRoot ? -1f : 1f)), segment.transform.position + (segment.height * segment.forceOrigin)); if (Input.GetKey(segment.right.keyCode)) - segment.Rigidbody.AddForceAtPosition(Vector2.right * (sensitivity * (isRoot ? 2f : 1f)) + Vector2.up * (verticalSensitivity * (isRoot ? -1f : 1f)), segment.transform.position + (segment.Sprite.bounds.size.y * segment.forceOrigin)); - } + segment.Rigidbody.AddForceAtPosition(Vector2.right * (sensitivity * (isRoot ? 2f : 1f)) + Vector2.up * (verticalSensitivity * (isRoot ? -1f : 1f)), segment.transform.position + (segment.height * segment.forceOrigin)); - // if (Input.GetKey(KeyCode.D)) - // { - // segments[0].AddForceAtPosition(Vector2.right * sensitivity, (Vector2)segments[0].transform.position - Vector2.up * 0.5f); - // } - // else if (Input.GetKey(KeyCode.A)) - // { - // segments[0].AddForceAtPosition(Vector2.left * sensitivity, (Vector2)segments[0].transform.position - Vector2.up * 0.5f); - // } - // - // if (Input.GetKey(KeyCode.L)) - // { - // segments[1].AddForceAtPosition(Vector2.right * sensitivity, (Vector2)segments[1].transform.position + Vector2.up * 0.5f); - // } - // else if (Input.GetKey(KeyCode.J)) - // { - // segments[1].AddForceAtPosition(Vector2.left * sensitivity, (Vector2)segments[1].transform.position + Vector2.up * 0.5f); - // } - // - // if (Input.GetKey(KeyCode.RightArrow)) - // { - // segments[2].AddForceAtPosition(Vector2.right * sensitivity, (Vector2)segments[2].transform.position + Vector2.up * 0.5f); - // } - // else if (Input.GetKey(KeyCode.LeftArrow)) - // { - // segments[2].AddForceAtPosition(Vector2.left * sensitivity, (Vector2)segments[2].transform.position + Vector2.up * 0.5f); - // } - // - if (Input.GetKeyDown(KeyCode.Space)) + if (isTop) + game.player.Move(segment.transform.position); + } + + // Try grabbing the ball if pressed. + if (Input.GetKeyDown(controls.grab)) { - var ball = Instantiate(ballPrefab); - var lastSegment = segments.Last(); - ball.transform.position = lastSegment.transform.position; - ball.AddForce((lastSegment.transform.right + lastSegment.transform.up) * ballSpeed); + // Try grabbing at each segment, and then the segment can pass it up to the top guy. + foreach (var segment in segments) + { + if (game.player.GrabBall(segment.transform.position)) break; // Stop after we successfully grab. + } } + + // Try shooting the ball if pressed. + if (Input.GetKeyDown(controls.shoot)) + game.player.Shoot(segments.Last().transform); + } + + [Serializable] + private struct Controls + { + [SerializeField] internal KeyCode grab; + [SerializeField] internal KeyCode shoot; } } } -- cgit v1.2.3-56-ge451