aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Assets/Scripts/Controllers/Player/PlayerController.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts/Controllers/Player/PlayerController.cs')
-rw-r--r--Assets/Scripts/Controllers/Player/PlayerController.cs75
1 files changed, 75 insertions, 0 deletions
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);
+ }
+ }
+ }
+}