From ff111d95db1878f9c35d99e7d4fa0b4d9a0de37c Mon Sep 17 00:00:00 2001 From: Carson Katri Date: Sat, 12 Jun 2021 00:30:21 -0400 Subject: Restructure scripts, improve locomotion, and add movement indicators --- .../Scripts/Controllers/Player/PlayerController.cs | 75 ++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 Assets/Scripts/Controllers/Player/PlayerController.cs (limited to 'Assets/Scripts/Controllers/Player/PlayerController.cs') diff --git a/Assets/Scripts/Controllers/Player/PlayerController.cs b/Assets/Scripts/Controllers/Player/PlayerController.cs new file mode 100644 index 0000000..c5cfc3d --- /dev/null +++ b/Assets/Scripts/Controllers/Player/PlayerController.cs @@ -0,0 +1,75 @@ +using System.Linq; +using Controllers.Player; +using UnityEngine; + +namespace Controllers.Player +{ + public class PlayerController : MonoBehaviour + { + [SerializeField] private PlayerSegment[] segments; + [SerializeField] private float sensitivity; + [SerializeField] private float verticalSensitivity; + + [SerializeField] private Rigidbody2D ballPrefab; + [SerializeField] private float ballSpeed; + + private void Update() + { + for (var i = 0; i < segments.Length; i++) + { + var segment = segments[i]; + var isRoot = i == 0; + + // Update icons + foreach (var control in new[] {segment.left, segment.right}) + { + if (Input.GetKeyDown(control.keyCode)) + control.icon.SetActive(true); + else if (Input.GetKeyUp(control.keyCode)) + control.icon.SetActive(false); + } + + // 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)); + 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)); + } + + // 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)) + { + var ball = Instantiate(ballPrefab); + var lastSegment = segments.Last(); + ball.transform.position = lastSegment.transform.position; + ball.AddForce((lastSegment.transform.right + lastSegment.transform.up) * ballSpeed); + } + } + } +} -- cgit v1.2.3-56-ge451