using UnityEngine;
using System.Collections;

public class ForceMovement : MonoBehaviour 
{
	[HideInInspector] public bool facingRight = true;
	[HideInInspector] public bool jump = false;

	public float moveForce = 150f;
	public float maxSpeed = 5f;
	public float jumpForce = 300f;
	public Transform groundCheck;
	private bool grounded = false;
	private Animator anim;
	private Rigidbody2D rb2d;


	void Awake () 
	{
		anim = GetComponent<Animator>();
		rb2d = GetComponent<Rigidbody2D>();
	}

	void Update () 
	{
		if (Input.GetButtonDown("Jump") && grounded)
		{
			jump = true;
		}
	}
	void FixedUpdate()
	{
		float h = Input.GetAxis("Horizontal");
		bool ish = Input.GetButton("Horizontal");

		if (!ish && grounded) 
		{
			rb2d.velocity = new Vector2(0f, rb2d.velocity.y);
		}

		anim.SetFloat("Speed", Mathf.Abs(h));

		if (h * rb2d.velocity.x < maxSpeed) 
		{
			rb2d.AddForce (Vector2.right * h * moveForce);
		}

		if (Mathf.Abs (rb2d.velocity.x) > maxSpeed) 
		{
			rb2d.velocity = new Vector2 (Mathf.Sign (rb2d.velocity.x) * maxSpeed, rb2d.velocity.y);
		}

		if (h > 0 && !facingRight) 
		{
			Flip ();
		} 
		else if (h < 0 && facingRight) 
		{
			Flip ();
		}

		if (jump) {
			anim.SetTrigger ("Jump");
			rb2d.AddForce (new Vector2 (0f, jumpForce));
			jump = false;
			grounded = false;
		} 
	}


	void Flip()
	{
		facingRight = !facingRight;
		Vector3 theScale = transform.localScale;
		theScale.x *= -1;
		transform.localScale = theScale;
	}


	void OnCollisionStay2D(Collision2D coll)					// Con esta funcion reafirmamos que el personaje esta en el suelo cuando esta tocando un collider con el CompareTag "PisoRunner"
	{
		if (coll.gameObject.CompareTag ("Grounded"))
		{
			grounded = true;
		} 
	}


	void OnCollisionEnter2D(Collision2D other)
	{
		if (other.gameObject.CompareTag ("Grounded")) 
		{
			grounded = true;
		}

	}
}








