Scriptum/Assets/Scripts/Player.cs

256 lines
6.6 KiB
C#
Raw Normal View History

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
2022-04-07 23:46:09 +02:00
public class Player : MonoBehaviour
{
Rigidbody2D rb;
2022-04-07 23:46:09 +02:00
private Animator myAnimator;
2022-06-09 21:51:48 +02:00
public float walkSpeed = 4f;
float speedLimiter = 0.7f;
float inputHorizontal;
float inputVertical;
public GameObject Panel;
private bool inRange = false;
public ParticleSystem dmgParticleSystem;
2022-06-12 20:14:11 +02:00
public FloatValue maxHealth;
public float currentHealth=10;
2022-06-12 20:14:11 +02:00
public HealthBar healthBar;
2022-10-23 00:21:54 +02:00
2022-06-21 03:57:04 +02:00
private static bool attackSword;
2022-06-14 21:20:02 +02:00
private bool attackFist;
2022-06-21 03:57:04 +02:00
private static bool pickaxeInUse;
private static bool playerInCollider;
2022-06-13 17:38:09 +02:00
private float timerRegen = 0f;
private float timerTick = 0f;
private float waitRegen = 8.0f;
private float waitTick = 1.0f;
2022-06-12 20:14:11 +02:00
2022-06-13 17:38:09 +02:00
private bool startRegen = false;
2022-06-12 20:14:11 +02:00
private bool canWalk = true;
2022-10-16 21:35:56 +02:00
2022-10-23 00:21:54 +02:00
public float exp=0;
2022-10-16 21:35:56 +02:00
public int lvl;
2022-10-23 00:21:54 +02:00
public LevelBar levelBar;
public FloatValue minPlayerExp;
2022-06-21 03:57:04 +02:00
public static void putPlayerInCollider()
{
playerInCollider = true;
}
public static void takePlayerFromCollider()
{
playerInCollider = false;
}
void Start()
{
Panel = GameObject.FindObjectsOfType<GameObject>(true).Where(sr => sr.gameObject.name == "YouDied").ToArray()[0];
healthBar = (HealthBar)FindObjectOfType<HealthBar>();
2022-10-23 00:21:54 +02:00
levelBar = (LevelBar)FindObjectOfType<LevelBar>();
if (OnMapAppearanceMethod.Gateway == OnMapAppearanceMethodEnum.NewGame)
{
2022-10-16 21:35:56 +02:00
currentHealth = PlayerPrefs.GetFloat("health");
2022-10-23 00:21:54 +02:00
exp = PlayerPrefs.GetFloat("exp");
}
else
{
currentHealth = PlayerPrefs.GetFloat("health-S");
2022-10-23 00:21:54 +02:00
exp = PlayerPrefs.GetFloat("exp-S");
}
2022-10-16 21:35:56 +02:00
ManageLevels(exp);
rb = gameObject.GetComponent<Rigidbody2D>();
2022-04-07 23:46:09 +02:00
myAnimator = GetComponent<Animator>();
2022-06-12 20:14:11 +02:00
healthBar.SetMaxHealth(maxHealth.initialValue);
healthBar.SetHealth(currentHealth);
2022-10-23 00:21:54 +02:00
levelBar.SetStartExp(minPlayerExp.initialValue);
levelBar.SetExp(exp);
walkSpeed = 4f;
}
2022-10-23 00:21:54 +02:00
public void GetExp(float expValue)
2022-10-16 21:35:56 +02:00
{
exp = exp + expValue;
2022-10-23 00:21:54 +02:00
levelBar.SetExp(exp);
2022-10-16 21:35:56 +02:00
}
2022-10-23 00:21:54 +02:00
public void ManageLevels(float exp)
2022-10-16 21:35:56 +02:00
{
if (exp < 20)
{
lvl = 1;
}
else if (exp < 50)
{
lvl = 2;
}
}
2022-10-02 18:45:58 +02:00
public void TakeDamage(float damage, bool isPanelEnabled = true)
{
2022-06-12 20:14:11 +02:00
currentHealth = currentHealth - damage;
healthBar.SetHealth(currentHealth);
var em = dmgParticleSystem.emission;
em.enabled = true;
StartCoroutine(Timer());
2022-06-13 17:38:09 +02:00
timerRegen = 0.0f;
startRegen = false;
2022-06-12 20:14:11 +02:00
if (currentHealth <= 0)
{
2022-10-02 18:45:58 +02:00
if(isPanelEnabled)
{
Panel.SetActive(true);
}
walkSpeed = 0f;
2022-10-16 21:35:56 +02:00
canWalk = false;
}
}
IEnumerator Timer()
{
yield return new WaitForSeconds(0.2f);
var em = dmgParticleSystem.emission;
em.enabled = false;
}
2022-05-31 23:53:48 +02:00
private void HandleAttacks()
{
2022-10-16 21:35:56 +02:00
if (canWalk == true)
2022-05-31 23:53:48 +02:00
{
2022-10-20 23:39:22 +02:00
if(!EquipmentManager.Instance._weapon)
return;
2022-10-16 21:35:56 +02:00
if (EquipmentManager.Instance._weapon.Name.Equals("pickaxe_test") && attackSword)
{
myAnimator.SetTrigger("pickaxe");
}
else if (attackSword && EquipmentManager.Instance._weapon.Name.Equals("Basic_Sword"))
{
myAnimator.SetTrigger("attack");
}
else if (attackFist)
{
myAnimator.SetTrigger("attackFist");
}
2022-05-31 23:53:48 +02:00
}
2022-05-31 23:53:48 +02:00
}
2022-06-21 03:57:04 +02:00
private void HandleInput()
{
if (Input.GetKeyDown(KeyCode.Space))
{
attackSword = true;
}
if (Input.GetKeyDown(KeyCode.LeftShift))
{
attackFist = true;
}
if(Input.GetKeyDown(KeyCode.X))
{
pickaxeInUse = true;
}
2022-06-21 03:57:04 +02:00
}
private void ResetValues()
2022-06-21 03:57:04 +02:00
{
attackSword = false;
attackFist = false;
pickaxeInUse = false;
}
void Update()
{
2022-10-16 21:35:56 +02:00
ManageLevels(exp);
if (canWalk == true)
{
inputHorizontal = Input.GetAxisRaw("Horizontal");
inputVertical = Input.GetAxisRaw("Vertical");
myAnimator.SetFloat("moveX", inputHorizontal * walkSpeed);
myAnimator.SetFloat("moveY", inputVertical * walkSpeed);
if (inputHorizontal != 0)
{
myAnimator.SetFloat("speed", walkSpeed);
}
else if (inputVertical != 0)
{
myAnimator.SetFloat("speed", walkSpeed);
}
else
{
myAnimator.SetFloat("speed", 0);
}
if (inputHorizontal == 1 || inputHorizontal == -1 || inputVertical == 1 || inputVertical == -1)
{
myAnimator.SetFloat("lastMoveX", inputHorizontal);
myAnimator.SetFloat("lastMoveY", inputVertical);
}
2022-06-21 03:57:04 +02:00
timerRegen += Time.deltaTime;
if(timerRegen >= waitRegen)
{
startRegen = true;
}
2022-06-21 03:57:04 +02:00
if (startRegen == true)
{
timerTick += Time.deltaTime;
if(timerTick >= waitTick)
{
if(currentHealth < 10)
{
currentHealth = currentHealth + 1;
healthBar.SetHealth(currentHealth);
timerTick = 0f;
}
}
}
PlayerPrefs.SetFloat("health", currentHealth);
2022-10-23 00:21:54 +02:00
PlayerPrefs.SetFloat("exp", exp);
2022-10-16 21:35:56 +02:00
}
2022-06-21 03:57:04 +02:00
HandleInput();
}
2022-06-21 03:57:04 +02:00
void FixedUpdate()
{
if(canWalk == true)
2022-06-21 03:57:04 +02:00
{
if (inputHorizontal != 0 || inputVertical != 0)
{
if (inputHorizontal != 0 && inputVertical != 0)
{
inputHorizontal *= speedLimiter;
inputVertical *= speedLimiter;
}
rb.velocity = new Vector2(inputHorizontal * walkSpeed, inputVertical * walkSpeed);
}
else
{
rb.velocity = new Vector2(0f, 0f);
}
2022-06-21 03:57:04 +02:00
}
HandleAttacks();
ResetValues();
}
public void SaveCheckpoint()
2022-06-21 03:57:04 +02:00
{
PlayerPrefs.SetFloat("health-S", currentHealth);
2022-10-23 00:21:54 +02:00
PlayerPrefs.SetFloat("exp-S", exp);
2022-06-21 03:57:04 +02:00
}
}