using System; using UnityEngine; namespace Controllers.Player { [RequireComponent(typeof(Rigidbody2D))] public class PlayerSegment : MonoBehaviour { internal float sensitivity; internal float verticalSensitivity; internal bool moveleft; internal bool moveright; [Header("Controls")] [SerializeField] public Control left; [SerializeField] public Control right; [Header("Settings")] [SerializeField] public Vector3 forceOrigin; [SerializeField] public float height; [SerializeField] public bool isRoot; [SerializeField] public bool isTop; [Header("References")] [SerializeField] private GameController game; [SerializeField] private bool callFoulOnContact; [SerializeField] public Transform flipper; public Rigidbody2D Rigidbody => _rigidbody != null ? _rigidbody : _rigidbody = GetComponent(); private Rigidbody2D _rigidbody; private void FixedUpdate() { if (moveleft) { Rigidbody.AddForceAtPosition( Vector2.left * (sensitivity * (isRoot ? 2f : 1f)) + Vector2.up * (verticalSensitivity * (isRoot ? -1f : 1f)), transform.position + (height * forceOrigin)); } if (moveright) { Rigidbody.AddForceAtPosition( Vector2.right * (sensitivity * (isRoot ? 2f : 1f)) + Vector2.up * (verticalSensitivity * (isRoot ? -1f : 1f)), transform.position + (height * forceOrigin)); } } private void OnCollisionEnter2D(Collision2D other) { if (callFoulOnContact && game.player.HasBall && other.gameObject.CompareTag("Ground")) game.player.Foul("LOOSE BALL FOUL"); } } [Serializable] public struct Control { public KeyCode keyCode; public GameObject icon; public GameObject leg; public GameObject arm; } }