58 lines
1.5 KiB
C#
58 lines
1.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace Player
|
|
{
|
|
[RequireComponent(typeof(Rigidbody2D))]
|
|
public class Movement : MonoBehaviour
|
|
{
|
|
[SerializeField] private float runSpeed;
|
|
[SerializeField] private float springPower;
|
|
[SerializeField] private SpriteRenderer spriteRenderer;
|
|
[SerializeField] private float turnDelay;
|
|
|
|
private bool _onSpring;
|
|
private Rigidbody2D _rb;
|
|
private bool _grounded = true;
|
|
private bool _facingLeft;
|
|
private float _turnDelayTimer;
|
|
|
|
private void Awake()
|
|
{
|
|
_rb = GetComponent<Rigidbody2D>();
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
_turnDelayTimer += Time.deltaTime;
|
|
spriteRenderer.flipX = !_facingLeft;
|
|
}
|
|
|
|
private void FixedUpdate()
|
|
{
|
|
if (_grounded)
|
|
{
|
|
_rb.linearVelocityX = _facingLeft ? -runSpeed : runSpeed;
|
|
}
|
|
}
|
|
|
|
private void OnCollisionStay2D(Collision2D other)
|
|
{
|
|
if (_turnDelayTimer < turnDelay) return;
|
|
var contacts = new List<ContactPoint2D>();
|
|
other.GetContacts(contacts);
|
|
foreach(var c in contacts)
|
|
{
|
|
var x = c.normal.x;
|
|
if (Mathf.Abs(x) > 0.1f)
|
|
{
|
|
_facingLeft = !_facingLeft;
|
|
_turnDelayTimer = 0f;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|