PoggyBird/Assets/Scripts/Player.cs
2023-01-16 08:19:32 +05:30

130 lines
3.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
[SerializeField]private Transform body;
[field:SerializeField]public Vector2 Velocity {get; private set;}
[SerializeField]private float gravity=1;
[SerializeField]private float jumpForce= 5;
[SerializeField]private float forwardSpeed= 0.1f;
[SerializeField]private float jumpCooldown = 0.5f;
[SerializeField]private float radius = 0.5f;
[Header("Sprites")]
public Sprite normalFace;
public Sprite sadFace;
public bool isReadyToJump { get{ return jumpTimer >= jumpCooldown;}}
private float jumpTimer= 0;
private Vector3 startPos;
public bool isAlive{get;private set;}
private SpriteRenderer spriteRenderer;
private TimeAliveMoney timeAliveMoney;
public bool gameStarted = false;
[SerializeField]private Rigidbody2D playerRigidbody;
void Start(){
spriteRenderer = GetComponent<SpriteRenderer>();
timeAliveMoney = GetComponent<TimeAliveMoney>();
isAlive = true;
spriteRenderer.sprite =normalFace;
startPos = body.position;
Velocity = new Vector2(forwardSpeed,0);
CameraFollower.Target= body;
CameraFollower.UpdateFrame();
playerRigidbody.bodyType = RigidbodyType2D.Static;
playerRigidbody.gravityScale = 0;
}
int lastX = 0;
void FixedUpdate()
{
if (!gameStarted)
{
return;
}
if(!isAlive){ return; }
HandleDeath();
if(Input.GetKey(KeyCode.Space)){
Jump();
}
HandleJump();
if(lastX != (int)body.position.x){
lastX = (int)body.position.x;
LevelGenerator.instance.GenerateAhead(2);
}
//Gravity
Velocity -= new Vector2(0, gravity);
body.Translate(Velocity);
CameraFollower.UpdateFrame();
}
void HandleDeath(){
Collider2D col = Physics2D.OverlapCircle(body.position, radius);
if(col == null){ return;}
if(col.tag == "Death"){
Debug.Log("Im dead bro");
timeAliveMoney.OnPlayerDeath();
isAlive = false;
spriteRenderer.sprite = sadFace;
GameUI.ShowDeath();
}
}
void HandleJump(){
if(jumpTimer < jumpCooldown){
jumpTimer += Time.deltaTime;
}
}
public void Jump(){
if (!gameStarted)
{
gameStarted = true;
playerRigidbody.bodyType = RigidbodyType2D.Dynamic;
playerRigidbody.gravityScale = gravity;
}
if(!isReadyToJump){ return; }
jumpTimer =0;
Velocity = new Vector2(Velocity.x, jumpForce);
}
void OnValidate(){
if(body == null){
body = transform;
}
}
void OnTriggerEnter2D(Collider2D other){
Debug.Log(other.name);
}
void OnGizmos(){
Gizmos.DrawWireSphere(body.position, radius);
}
}