using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class PersCon : MonoBehaviour
{
Rigidbody2D rigidBody;
public float moveSpeed = 10f;
bool isFacingRight = true;
Animator anim;
bool isTilemap = false;
float tilemapRadius = 0.2f;
public LayerMask whatIsTilemap;
public Transform graChek;
public float checkRadius;
public float jumpForce;
private int extraJumps;
public int extraJumpsValue;
bool canJump;
bool canWallJump;
public static int health = 1;
private bool isFrozen = false;
void Start()
{
anim = GetComponent<Animator>();
rigidBody = GetComponent<Rigidbody2D>();
extraJumps = extraJumpsValue;
}
void FixedUpdate()
{
isTilemap = Physics2D.OverlapCircle(graChek.position, checkRadius, whatIsTilemap);
Run();
isTilemap = Physics2D.OverlapCircle(graChek.position, tilemapRadius, whatIsTilemap);
anim.SetBool("Tilemap", isTilemap);
anim.SetFloat("vSpeed", rigidBody.velocity.y);
if (!isTilemap)
return;
}
private void Update()
{
if (isTilemap == true || canWallJump == true)
{
extraJumps = extraJumpsValue;
canJump = true;
}
else
{
canJump = false;
}
if (Input.GetKeyDown(KeyCode.Space) && extraJumps > 0) //&& extraJumps > 0) && extraJumps == 0
{
DoJump();
rigidBody.velocity = Vector2.up * jumpForce;
extraJumps--;
}
else if (Input.GetKeyDown(KeyCode.Space) && extraJumps == 0 && isTilemap == true)
{
rigidBody.velocity = Vector2.up * jumpForce;
}
anim.SetInteger("Health", health);
if (health <= 0 )
{
StartCoroutine(Dead());
}
if (isFrozen == true)
{
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeRotation;
}
}
public void Run()
{
float move = Input.GetAxis("Horizontal");
anim.SetFloat("Speed", Mathf.Abs(move));
rigidBody.velocity = new Vector2(move * moveSpeed, rigidBody.velocity.y);
if (move > 0 && !isFacingRight)
Flip();
else if (move < 0 && isFacingRight)
Flip();
}
void Flip()
{
isFacingRight = !isFacingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
public void DoJump()
{
rigidBody.velocity = Vector2.up * jumpForce;
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.tag.Equals("Wall"))
{
canWallJump = true;
}
}
private void OnCollisionExit2D(Collision2D collision)
{
if (collision.gameObject.tag.Equals("Wall"))
{
canWallJump = false;
}
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.CompareTag("Respawn"))
{
health--;
isFrozen = true;
}
}
private IEnumerator Dead()
{
yield return new WaitForSeconds(3f);
health = 1;
SceneManager.LoadScene(0);
}
}