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 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 currentHealth; public float maxHealth; public int healthPoints; public int defensePoints; public int strengthPoints; public int intelligencePoints; public float exp; public int lvl; public float maxExp; public LevelBar levelBar; public FloatValue minPlayerExp; public float attackValue; 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.IsNewGame()) { 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 = 25; if (exp >= maxExp) { lvl = 2; lvlUp = true; maxExp = 50; // Add points and refresh view (if opened) SkillsPointsManger.Instance.AddFreePoints(2); SkillsPointsManger.Instance.UpdatePanelView(); } } else if (lvl == 2) { maxExp = 50; if (exp >= maxExp) { lvl = 3; lvlUp = true; maxExp = 100; // Add points and refresh view (if opened) SkillsPointsManger.Instance.AddFreePoints(2); SkillsPointsManger.Instance.UpdatePanelView(); } } else if (lvl == 3) { maxExp = 100; if (exp >= maxExp) { lvl = 4; lvlUp = true; maxExp = 200; // Add points and refresh view (if opened) SkillsPointsManger.Instance.AddFreePoints(2); SkillsPointsManger.Instance.UpdatePanelView(); } } } public void TakeDamage(float damage, bool isPanelEnabled = true) { defensePoints = PlayerPrefs.GetInt(SkillsPointsManger.PLAYER_SKILS_DEFENSE_POINTS); if(defensePoints == 1) { damage = damage * 0.95f; } else if(defensePoints == 2) { damage = damage * 0.9f; } else if(defensePoints == 3) { damage = damage * 0.85f; } currentHealth = PlayerPrefs.GetFloat("health"); currentHealth = currentHealth - damage; PlayerPrefs.SetFloat("health", 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 (EquipmentUIManager.Instance.GetList().Count() == 0 || EquipmentUIManager.Instance.GetList().Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.WeaponSlot && el.Value != null).Count() == 0) return; if (EquipmentUIManager.Instance.GetList().Count() != 0 && EquipmentUIManager.Instance.GetList().Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.WeaponSlot && el.Value != null).First().Value.Name.Equals("Pickaxe") && attackSword) { myAnimator.SetTrigger("pickaxe"); } else if (attackSword && EquipmentUIManager.Instance.GetList().Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.WeaponSlot && el.Value != null).First().Value.EquipmentType == EquipmentTypeEnum.Weapon) { 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) { PlayerPrefs.SetInt("LvlUpPopUp", 1); exp = 0; lvlUp = false; } ManageHealth(); ManageDefense(); ManageIntelligence(); ManageStrength(); 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; } currentHealth = PlayerPrefs.GetFloat("health"); maxHealth = PlayerPrefs.GetFloat("maxHealth"); if (startRegen == true) { timerTick += Time.deltaTime; if (timerTick >= waitTick) { if (currentHealth < maxHealth) { currentHealth = currentHealth + 1; if (currentHealth > maxHealth) { currentHealth = maxHealth; } PlayerPrefs.SetFloat("health", currentHealth); timerTick = 0f; } } } PlayerPrefs.SetFloat("health", currentHealth); PlayerPrefs.SetFloat("exp", exp); PlayerPrefs.SetInt("lvl", lvl); PlayerPrefs.SetFloat("maxExp", maxExp); PlayerPrefs.SetFloat("maxHealth", maxHealth); } 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() { currentHealth = PlayerPrefs.GetFloat("health"); PlayerPrefs.SetFloat("health-S", currentHealth); PlayerPrefs.SetFloat("exp-S", exp); PlayerPrefs.SetInt("lvl-S", lvl); } public void ManageHealth() { healthPoints = PlayerPrefs.GetInt(SkillsPointsManger.PLAYER_SKILS_HEALTH_POINTS); if (healthPoints == 0) { PlayerPrefs.SetFloat("maxHealth", 10); } else if (healthPoints == 1) { PlayerPrefs.SetFloat("maxHealth", 12); } else if (healthPoints == 2) { PlayerPrefs.SetFloat("maxHealth", 14); } else if (healthPoints == 3) { PlayerPrefs.SetFloat("maxHealth", 16); } } public void AddHealthPoint() { healthPoints = PlayerPrefs.GetInt(SkillsPointsManger.PLAYER_SKILS_HEALTH_POINTS); healthPoints = healthPoints + 1; PlayerPrefs.SetInt(SkillsPointsManger.PLAYER_SKILS_HEALTH_POINTS, healthPoints); // Fetch change in scene manager responsible for this data SkillsPointsManger.Instance.UpdatePanelView(); } public void ManageStrength() { if (EquipmentUIManager.Instance.GetList().Count() == 0 || EquipmentUIManager.Instance.GetList().Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.WeaponSlot && el.Value != null).Count() == 0) { attackValue = 0f; } else if (EquipmentUIManager.Instance.GetList().Count() != 0 && EquipmentUIManager.Instance.GetList().Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.WeaponSlot && el.Value != null).Count() > 0 && EquipmentUIManager.Instance.GetList().Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.WeaponSlot && el.Value != null).First().Value.Name.Equals("Pickaxe")) { attackValue = 0.5f; PlayerPrefs.SetFloat("attackValue", attackValue); } else if (EquipmentUIManager.Instance.GetList().Count() != 0 && EquipmentUIManager.Instance.GetList().Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.WeaponSlot && el.Value != null).Count() > 0 && EquipmentUIManager.Instance.GetList().Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.WeaponSlot && el.Value != null).First().Value.Name.Equals("Basic Sword")) { attackValue = 1.0f; PlayerPrefs.SetFloat("attackValue", attackValue); } strengthPoints = PlayerPrefs.GetInt(SkillsPointsManger.PLAYER_SKILS_STRENGHT_POINTS); if(strengthPoints == 1) { attackValue = PlayerPrefs.GetFloat("attackValue"); attackValue = attackValue * 1.1f; PlayerPrefs.SetFloat("attackValue", attackValue); } else if(strengthPoints == 2) { attackValue = PlayerPrefs.GetFloat("attackValue"); attackValue = attackValue * 1.2f; PlayerPrefs.SetFloat("attackValue", attackValue); } else if(strengthPoints == 3) { attackValue = PlayerPrefs.GetFloat("attackValue"); attackValue = attackValue * 1.3f; PlayerPrefs.SetFloat("attackValue", attackValue); } } public void AddStrengthPoint() { strengthPoints = PlayerPrefs.GetInt(SkillsPointsManger.PLAYER_SKILS_STRENGHT_POINTS); strengthPoints = strengthPoints + 1; PlayerPrefs.SetInt(SkillsPointsManger.PLAYER_SKILS_STRENGHT_POINTS, strengthPoints); // Fetch change in scene manager responsible for this data SkillsPointsManger.Instance.UpdatePanelView(); } public void ManageDefense() { defensePoints = PlayerPrefs.GetInt(SkillsPointsManger.PLAYER_SKILS_DEFENSE_POINTS); } public void AddDefensePoint() { defensePoints = PlayerPrefs.GetInt(SkillsPointsManger.PLAYER_SKILS_DEFENSE_POINTS); defensePoints = defensePoints + 1; PlayerPrefs.SetInt(SkillsPointsManger.PLAYER_SKILS_DEFENSE_POINTS, defensePoints); // Fetch change in scene manager responsible for this data SkillsPointsManger.Instance.UpdatePanelView(); } public void ManageIntelligence() { intelligencePoints = PlayerPrefs.GetInt(SkillsPointsManger.PLAYER_SKILS_INTELIGENCE_POINTS); } public void AddIntelligencePoint() { intelligencePoints = PlayerPrefs.GetInt(SkillsPointsManger.PLAYER_SKILS_INTELIGENCE_POINTS); intelligencePoints = intelligencePoints + 1; PlayerPrefs.SetInt(SkillsPointsManger.PLAYER_SKILS_INTELIGENCE_POINTS, intelligencePoints); // Fetch change in scene manager responsible for this data SkillsPointsManger.Instance.UpdatePanelView(); } public void LevelUpPopUp() { healthPoints = PlayerPrefs.GetInt(SkillsPointsManger.PLAYER_SKILS_HEALTH_POINTS); } }