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.cs67
1 files changed, 30 insertions, 37 deletions
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;
}
}
}