Files
fracturepoint/.FROMOLDPROJECTPLEASEORGANISETHESEORDELETE/Scripts/TestScripts/playerMovement.cs
2026-01-21 10:56:26 -07:00

125 lines
4.0 KiB
C#

using JetBrains.Annotations;
using System;
using UnityEngine;
using static UnityEngine.Rendering.DebugUI;
public class playerMovement : MonoBehaviour
{
private GroundCheck groundCheck; //Allows Use Of GroundCheck Script Variables
private Rigidbody2D body;
private BoxCollider2D hBox;
private bool allowedToMove = true, allowedToJump = true, doubleJumpUnlocked = true; //Unlocking & Locking Abilities
private bool isGrounded, canJumpAgain; //Physics Checks
private float CoyoteTimer, BufferTimer, airjumpTurnTimer, turnaround; //Timers & Calculation Variables
private float moveSpeed = 10f, groundJumpSpeed = 18f, airJumpSpeed = 14f, turnResponsiveness = 4f; //Physics Values
private float coyoteTimeAmount = .1f, airjumpTurnaroundTimeAmount = 1.5f, jumpBufferAmount = .2f; //Leniency Velues
private KeyCode hop = KeyCode.W, crouch = KeyCode.S, left = KeyCode.A, right = KeyCode.D; //Controls
void Start()
{
body = GetComponent<Rigidbody2D>();
hBox = transform.GetComponent<BoxCollider2D>();
body.gravityScale = 4;
}
void Update()
{
TimerHandler();
GroundCheck();
Movement();
}
void GroundCheck() {
groundCheck = GetComponentInChildren<GroundCheck>(); // Ground Check
isGrounded = groundCheck.isGrounded;
if (doubleJumpUnlocked && isGrounded) canJumpAgain = true; //Realoading Double Jump
} //Ground & Double Jump Checks
void TimerHandler()
{
if (isGrounded && !(body.linearVelocity.y > 0)) CoyoteTimer = coyoteTimeAmount; //Coyote Time
else CoyoteTimer -= Time.deltaTime;
if (Input.GetKeyDown(hop)) BufferTimer = jumpBufferAmount; //Jump Buffering
if (BufferTimer > 0) BufferTimer -= Time.deltaTime;
if (airjumpTurnTimer > 0) airjumpTurnTimer -= Time.deltaTime; //Double Jump Physics
} //Input Leniency & Special Input Time Windows
void Movement() {
if (allowedToMove)
{
if (!(Input.GetKey(left) && Input.GetKey(right)))
{
if (!isGrounded) turnaround = turnResponsiveness * .75f;
else turnaround = turnResponsiveness;
if (Input.GetKey(left))
{
body.linearVelocity += new Vector2(-moveSpeed * turnaround * Time.deltaTime, 0);
body.linearVelocity = new Vector2(Mathf.Clamp(body.linearVelocity.x, -moveSpeed, moveSpeed), body.linearVelocity.y);
}
if (Input.GetKey(right))
{
body.linearVelocity += new Vector2(moveSpeed * turnaround * Time.deltaTime, 0);
body.linearVelocity = new Vector2(Mathf.Clamp(body.linearVelocity.x, -moveSpeed, moveSpeed), body.linearVelocity.y);
}
} //Walking
if ( !(Input.GetKey(left) || Input.GetKey(right)) || (Input.GetKey(left) && Input.GetKey(right)))
{
body.linearVelocity = new Vector2(body.linearVelocity.x * .985f, body.linearVelocity.y);
} //Custom friction
} //Horizontal Movement & Physics
if (allowedToJump)
{
if ((CoyoteTimer > 0 && BufferTimer > 0))
{
body.linearVelocity = new Vector2(body.linearVelocity.x, groundJumpSpeed);
BufferTimer = 0;
CoyoteTimer = 0;
} //Normal jump is performed
else if (canJumpAgain && Input.GetKeyDown(hop))
{
body.linearVelocity = new Vector2(body.linearVelocity.x, airJumpSpeed);
canJumpAgain = false;
airjumpTurnTimer = airjumpTurnaroundTimeAmount;
} //Air jump is performed
if (!Input.GetKey(hop) && body.linearVelocity.y > 0)
{
body.linearVelocity = new Vector2(body.linearVelocity.x, body.linearVelocity.y * .92f);
} //Jump Released
} //Vertical Movement & Physics
} //Check Player Input
}