using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Linq; public class Player : MonoBehaviour { Rigidbody2D rb; private Animator myAnimator; public float walkSpeed = 4f; float speedLimiter = 0.7f; float inputHorizontal; float inputVertical; public GameObject Panel; private bool inRange = false; public ParticleSystem dmgParticleSystem; public FloatValue maxHealth; public float currentHealth=10; public HealthBar healthBar; private static bool attackSword; private bool attackFist; private static bool pickaxeInUse; private static bool playerInCollider; public bool lvlUp = false; public float test; private float timerRegen = 0f; private float timerTick = 0f; private float waitRegen = 8.0f; private float waitTick = 1.0f; private bool startRegen = false; private bool canWalk = true; public float exp; public int lvl; public float maxExp; public LevelBar levelBar; public FloatValue minPlayerExp; public static void putPlayerInCollider() { playerInCollider = true; } public static void takePlayerFromCollider() { playerInCollider = false; } void Start() { Panel = GameObject.FindObjectsOfType(true).Where(sr => sr.gameObject.name == "YouDied").ToArray()[0]; healthBar = (HealthBar)FindObjectOfType(); levelBar = (LevelBar)FindObjectOfType(); if (OnMapAppearanceMethod.Gateway == OnMapAppearanceMethodEnum.NewGame) { currentHealth = PlayerPrefs.GetFloat("health"); exp = PlayerPrefs.GetFloat("exp"); lvl = PlayerPrefs.GetInt("lvl"); } else { currentHealth = PlayerPrefs.GetFloat("health-S"); exp = PlayerPrefs.GetFloat("exp-S"); lvl = PlayerPrefs.GetInt("lvl-S"); } rb = gameObject.GetComponent(); myAnimator = GetComponent(); healthBar.SetMaxHealth(maxHealth.initialValue); healthBar.SetHealth(currentHealth); //levelBar.SetStartExp(minPlayerExp.initialValue); //levelBar.SetExp(exp); walkSpeed = 4f; ManageLevels(exp); } public void GetExp(float expValue) { exp = exp + expValue; ManageLevels(exp); } public void ManageLevels(float exp) { if (lvl == 1) { maxExp = 10; if (exp >= maxExp) { lvl = 2; lvlUp = true; maxExp = 50; } } else if (lvl == 2) { maxExp = 50; if (exp >= maxExp) { lvl = 3; lvlUp = true; maxExp = 100; } } else if(lvl == 3) { maxExp = 100; if (exp >= maxExp) { lvl = 4; lvlUp = true; maxExp = 200; } } } public void TakeDamage(float damage, bool isPanelEnabled = true) { currentHealth = currentHealth - damage; healthBar.SetHealth(currentHealth); var em = dmgParticleSystem.emission; em.enabled = true; StartCoroutine(Timer()); timerRegen = 0.0f; startRegen = false; if (currentHealth <= 0) { if(isPanelEnabled) { Panel.SetActive(true); } walkSpeed = 0f; canWalk = false; } } IEnumerator Timer() { yield return new WaitForSeconds(0.2f); var em = dmgParticleSystem.emission; em.enabled = false; } private void HandleAttacks() { if (canWalk == true) { if(!EquipmentManager.Instance._weapon) return; 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"); } } } private void HandleInput() { if (Input.GetKeyDown(KeyCode.Space)) { attackSword = true; } if (Input.GetKeyDown(KeyCode.LeftShift)) { attackFist = true; } if(Input.GetKeyDown(KeyCode.X)) { pickaxeInUse = true; } } private void ResetValues() { attackSword = false; attackFist = false; pickaxeInUse = false; } void Update() { if (lvlUp == true) { exp = 0; lvlUp = false; } 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); } timerRegen += Time.deltaTime; if(timerRegen >= waitRegen) { startRegen = true; } if (startRegen == true) { timerTick += Time.deltaTime; if(timerTick >= waitTick) { if(currentHealth < 10) { currentHealth = currentHealth + 1; healthBar.SetHealth(currentHealth); timerTick = 0f; } } } PlayerPrefs.SetFloat("health", currentHealth); PlayerPrefs.SetFloat("exp", exp); PlayerPrefs.SetInt("lvl", lvl); PlayerPrefs.SetFloat("maxExp", maxExp); } HandleInput(); } void FixedUpdate() { if(canWalk == true) { 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); } } HandleAttacks(); ResetValues(); } public void SaveCheckpoint() { PlayerPrefs.SetFloat("health-S", currentHealth); PlayerPrefs.SetFloat("exp-S", exp); PlayerPrefs.SetInt("lvl-S", lvl); } }