using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices.WindowsRuntime;
using UnityEngine;
using UnityEngine.Animations;
using UnityEngine.Scripting.APIUpdating;
public class Movement : MonoBehaviour, IMovable
{
private Rigidbody rb;
private bool colliding = false;
private bool statusChanged = false;
private bool blockMovement = false;
void Start()
{
rb = GetComponent<Rigidbody>();
}
bool IMovable.OnGround()
{
//Checks if the vertical velocity is different then 0 to know if he is falling. If it is different then 0 means that it is on air.
if (Mathf.Abs(rb.velocity.y) < 0.5)
{
if (colliding)
{
if (statusChanged)
{
RaycastHit hit;
if (Physics.Raycast(transform.position, Vector3.down, out hit))
{
//Makes sure that the player is on ground.
if (hit.distance < transform.localScale.y / 2 + 0.2)
{
//Debug.Log("Raycasting");
statusChanged = false;
return true;
}
}
}
else return true;
}
}
return false;
}
void IMovable.ChangeDrag(float drag)
{
rb.drag = drag;
}
void IMovable.ChangeVelocity(Vector3 velocity)
{
rb.velocity = velocity;
}
void IMovable.ToggleGravity(bool b)
{
rb.useGravity= b;
}
bool IMovable.GetGravity()
{
return rb.useGravity;
}
Vector3 IMovable.GetVelocity()
{
return rb.velocity;
}
void IMovable.AddForce(Vector3 force)
{
rb.AddForce(force);
}
void IMovable.Move(Vector3 direction, float speed, float acceleration)
{
//Just changes the current velocity to the new one without changing the Y values.
rb.velocity = new Vector3(direction.x * acceleration, rb.velocity.y, direction.z * acceleration);
//Debug.Log(rb.velocity);
//Debug.Log("Gravity: " + Physics.gravity);
}
bool IMovable.IsColliding() { return colliding; }
void IMovable.SetBlockMovement(bool b)
{
blockMovement = b;
}
bool IMovable.GetBlockMovement()
{
return blockMovement;
}
private void OnCollisionStay(Collision collision)
{
if (!colliding) statusChanged = true;
colliding = true;
}
private void OnCollisionExit(Collision collision)
{
//Debug.Log("Exiting collision");
if (colliding) statusChanged = true;
colliding = false;
}
}