Files
Infratest/Assets/Code/Example/Platformer/Entity/Entity.cs
T

53 lines
1.8 KiB
C#

using System;
using Code.Infrastructure.Configs;
using UnityEngine;
namespace Code.Example.Platformer.Entity
{
public abstract class Entity : MonoBehaviour
{
private static readonly int VelocityY = Animator.StringToHash("VelocityY");
private static readonly int VelocityX = Animator.StringToHash("VelocityX");
private static readonly int OnGround = Animator.StringToHash("OnGround");
[SerializeField] protected Rigidbody2D rigidbody2D;
[SerializeField] protected Animator animator;
[SerializeField] protected SpriteRenderer spriteRenderer;
[SerializeField] private Vector2 groundPoint;
private PlatformerEntityData _data;
public void SetData(PlatformerEntityData data)
{
_data = data;
}
protected bool onGround;
protected virtual void Update()
{
animator.SetFloat(VelocityX, rigidbody2D.linearVelocityX);
animator.SetFloat(VelocityY, rigidbody2D.linearVelocityY);
}
protected virtual void HandleFlipX() => spriteRenderer.flipX = rigidbody2D.linearVelocity.x < 0.01f;
protected virtual void FixedUpdate()
{
onGround = CheckGround();
animator.SetBool(OnGround, onGround);
Move();
if(rigidbody2D.linearVelocity.x is > 0.01f or < -0.01f) HandleFlipX();
}
protected virtual bool CheckGround()
{
UnityEngine.Debug.DrawLine(transform.position,(Vector2)transform.position + groundPoint, Color.green);
return Physics2D.OverlapPoint((Vector2)transform.position + groundPoint, LayerMasks.Masks[LayerMaskType.PlatformerGround]);
}
protected abstract void Move();
}
}