jump-game/Jump Game/Assets/Scripts/Player/PlayerController.cs
2020-04-30 01:56:05 +03:00

102 lines
2.7 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class PlayerController : Player
{
private float moveInput;
private SpriteRenderer spriteRenderer;
public int maxCharge;
//public RaycastHit2D hit;
//public Ray ray;
public float movementSpeed;
public float jumpForce;
private bool _isGrounded;
public bool isGrounded { get { return _isGrounded; } set { _isGrounded = value; } }
public Transform feetPos;
public LayerMask whatIsGround;
public Transform checkRadius;
private double _charger;
public double charger
{
get { return _charger; }
set { _charger = value; }
}
public float chargeMultiplier;
public bool isCharging;
void Start()
{
isCharging = false;
Player.movementSpeed = movementSpeed;
Player.jumpForce = jumpForce;
spriteRenderer = GetComponent<SpriteRenderer>();
}
void FixedUpdate()
{
Player.rbody.velocity += new Vector2(0, -0.75f);
//ray.origin = feetPos.position;
//ray.direction = Vector2.down;
//RaycastHit2D hit = Physics2D.Raycast(origin: transform.position, direction: -Vector2.up, layerMask: whatIsGround, distance: 100);
}
void Update()
{
//isGrounded = hit.collider == null ? true : false;
isGrounded = Physics2D.OverlapArea(feetPos.position, checkRadius.position, whatIsGround); //return true for overlap
moveInput = Input.GetAxis("Horizontal");
if (Input.GetKeyDown(KeyCode.Escape)) {
SceneManager.LoadScene(0);
}
if(_isGrounded && Input.GetAxis("Horizontal") != -1 && Input.GetAxis("Horizontal") != 1) { Player.rbody.velocity = new Vector2(0, Player.rbody.velocity.y); }
if (Input.GetAxis("Horizontal") > 0) { spriteRenderer.flipX = false; }
if (Input.GetAxis("Horizontal") < 0) { spriteRenderer.flipX = true; }
if (!isCharging && _isGrounded)
{
rbody.velocity = new Vector2(moveInput * movementSpeed, rbody.velocity.y);
}
if (_isGrounded && Input.GetButton("Jump") && _charger < maxCharge)
{
if (_charger > maxCharge) { _charger = maxCharge; }
else { _charger += Time.deltaTime * chargeMultiplier; }
rbody.velocity = new Vector2(0, rbody.velocity.y);
isCharging = true;
}
if (isCharging && !Input.GetButton("Jump"))
{
Jump(moveInput, (float)System.Math.Round(_charger, 1));
}
}
void Jump(float direction, float jumpCharge)
{
Debug.Log(jumpCharge);
Player.rbody.velocity = new Vector2((8 - (float)charger) * direction, jumpForce * jumpCharge);
_charger = 0f;
isCharging = false;
}
void OnCollisionEnter(Collision collision)
{
if (!_isGrounded && collision.gameObject.layer == LayerMask.NameToLayer("Wall"))
{
rbody.velocity = new Vector2(rbody.velocity.x * -1, rbody.velocity.y);
}
}
}