Scriptum/Assets/Scripts/Player.cs

538 lines
18 KiB
C#
Raw Permalink Normal View History

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
2022-10-23 15:56:31 +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 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-10-23 13:29:22 +02:00
public bool lvlUp = false;
public float test;
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
[Header("Player Starts values")]
public const int BaseHealth = 10;
public const float BaseSpeed = 4f;
[Header("Player Skills Points")]
public int healthPoints;
public int defensePoints;
public int strengthPoints;
public int intelligencePoints;
2022-10-23 15:56:31 +02:00
[Header("Player current values")]
public float attackValue;
public float defenseValue;
public float currentSpeed; // as WalkSpeed
public float currentHealth;
public float maxHealth;
2022-10-23 13:29:22 +02:00
public float exp;
2022-10-16 21:35:56 +02:00
public int lvl;
2022-10-23 13:29:22 +02:00
public float maxExp;
2022-10-23 00:21:54 +02:00
public LevelBar levelBar;
public FloatValue minPlayerExp;
2022-10-23 15:56:31 +02:00
2022-11-15 12:32:28 +01:00
2022-06-21 03:57:04 +02:00
public static void putPlayerInCollider()
{
playerInCollider = true;
}
2022-10-23 15:56:31 +02:00
2022-06-21 03:57:04 +02:00
public static void takePlayerFromCollider()
{
playerInCollider = false;
}
2022-10-23 15:56:31 +02:00
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>();
2022-12-06 01:20:01 +01:00
if (OnMapAppearanceMethod.IsNewGame())
{
2022-10-16 21:35:56 +02:00
currentHealth = PlayerPrefs.GetFloat("health");
2022-10-23 00:21:54 +02:00
exp = PlayerPrefs.GetFloat("exp");
2022-10-23 13:29:22 +02:00
lvl = PlayerPrefs.GetInt("lvl");
}
else
{
currentHealth = PlayerPrefs.GetFloat("health-S");
2022-10-23 00:21:54 +02:00
exp = PlayerPrefs.GetFloat("exp-S");
2022-10-23 13:29:22 +02:00
lvl = PlayerPrefs.GetInt("lvl-S");
}
rb = gameObject.GetComponent<Rigidbody2D>();
2022-04-07 23:46:09 +02:00
myAnimator = GetComponent<Animator>();
//healthBar.SetMaxHealth(maxHealth.initialValue);
//healthBar.SetHealth(currentHealth);
2022-10-23 13:29:22 +02:00
//levelBar.SetStartExp(minPlayerExp.initialValue);
//levelBar.SetExp(exp);
ManageSpeed();
walkSpeed = PlayerPrefs.GetFloat("speed");
2022-10-23 13:29:22 +02:00
ManageLevels(exp);
}
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 13:29:22 +02:00
ManageLevels(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
{
2022-10-23 13:29:22 +02:00
if (lvl == 1)
{
2022-12-19 22:11:22 +01:00
maxExp = 25;
2022-10-23 13:29:22 +02:00
if (exp >= maxExp)
{
lvl = 2;
lvlUp = true;
maxExp = 50;
2022-12-25 03:39:31 +01:00
// Add points and refresh view (if opened)
SkillsPointsManger.Instance.AddFreePoints(2);
SkillsPointsManger.Instance.UpdatePanelView();
2022-10-23 13:29:22 +02:00
}
}
else if (lvl == 2)
2022-10-16 21:35:56 +02:00
{
2022-10-23 13:29:22 +02:00
maxExp = 50;
if (exp >= maxExp)
{
lvl = 3;
lvlUp = true;
maxExp = 100;
2022-12-25 03:39:31 +01:00
// Add points and refresh view (if opened)
SkillsPointsManger.Instance.AddFreePoints(2);
SkillsPointsManger.Instance.UpdatePanelView();
2022-10-23 13:29:22 +02:00
}
2022-10-16 21:35:56 +02:00
}
2022-10-23 15:56:31 +02:00
else if (lvl == 3)
2022-10-16 21:35:56 +02:00
{
2022-10-23 13:29:22 +02:00
maxExp = 100;
if (exp >= maxExp)
{
lvl = 4;
lvlUp = true;
maxExp = 200;
2022-12-25 03:39:31 +01:00
// Add points and refresh view (if opened)
SkillsPointsManger.Instance.AddFreePoints(2);
SkillsPointsManger.Instance.UpdatePanelView();
2022-10-23 13:29:22 +02:00
}
2022-10-16 21:35:56 +02:00
}
}
2022-10-02 18:45:58 +02:00
public void TakeDamage(float damage, bool isPanelEnabled = true)
{
2022-11-14 23:04:29 +01:00
2022-12-25 03:39:31 +01:00
defensePoints = PlayerPrefs.GetInt(SkillsPointsManger.PLAYER_SKILS_DEFENSE_POINTS);
Debug.Log($"Minion Damage: {damage}; \nDefense: {PlayerPrefs.GetFloat("defenseValue")}");
damage = damage - PlayerPrefs.GetFloat("defenseValue");
2022-12-29 20:02:32 +01:00
damage = damage < 0 ? 0 : damage;
Debug.Log($"RealDamage: {damage}");
2022-11-14 23:04:29 +01:00
currentHealth = PlayerPrefs.GetFloat("health");
2022-06-12 20:14:11 +02:00
currentHealth = currentHealth - damage;
PlayerPrefs.SetFloat("health", 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-23 15:56:31 +02:00
if (isPanelEnabled)
2022-10-02 18:45:58 +02:00
{
2022-10-23 15:56:31 +02:00
Panel.SetActive(true);
2022-10-02 18:45:58 +02:00
}
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-11-27 21:28:55 +01:00
2022-10-16 21:35:56 +02:00
if (canWalk == true)
2022-05-31 23:53:48 +02:00
{
/* if (EquipmentUIManager.Instance.GetList().Count() == 0 || EquipmentUIManager.Instance.GetList().Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.WeaponSlot && el.Value != null).Count() == 0)
return;*/
2022-10-23 15:56:31 +02:00
if (attackFist)
{
myAnimator.SetTrigger("attackFist");
} else if (attackSword &&
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"))
2022-10-16 21:35:56 +02:00
{
myAnimator.SetTrigger("pickaxe");
}
else if (attackSword &&
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.EquipmentType == EquipmentTypeEnum.Weapon)
2022-10-16 21:35:56 +02:00
{
myAnimator.SetTrigger("attack");
}
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;
}
2022-10-23 15:56:31 +02:00
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-11-15 12:32:28 +01:00
2022-10-23 13:29:22 +02:00
if (lvlUp == true)
{
2022-10-23 15:56:31 +02:00
PlayerPrefs.SetInt("LvlUpPopUp", 1);
2022-10-23 13:29:22 +02:00
exp = 0;
lvlUp = false;
}
ManageHealth();
ManageDefense();
ManageIntelligence();
ManageStrength();
ManageSpeed();
2022-10-16 21:35:56 +02:00
if (canWalk == true)
{
2022-10-23 15:56:31 +02:00
inputHorizontal = Input.GetAxisRaw("Horizontal");
inputVertical = Input.GetAxisRaw("Vertical");
// speed calculated in ManageSpeed function
walkSpeed = PlayerPrefs.GetFloat("speed");
2022-10-23 15:56:31 +02:00
myAnimator.SetFloat("moveX", inputHorizontal * walkSpeed);
myAnimator.SetFloat("moveY", inputVertical * walkSpeed);
2022-10-23 15:56:31 +02:00
if (inputHorizontal != 0)
{
myAnimator.SetFloat("speed", walkSpeed);
}
else if (inputVertical != 0)
{
myAnimator.SetFloat("speed", walkSpeed);
}
else
{
myAnimator.SetFloat("speed", 0);
}
2022-10-23 15:56:31 +02:00
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
2022-10-23 15:56:31 +02:00
timerRegen += Time.deltaTime;
if (timerRegen >= waitRegen)
{
startRegen = true;
}
currentHealth = PlayerPrefs.GetFloat("health");
maxHealth = PlayerPrefs.GetFloat("maxHealth");
2022-10-23 15:56:31 +02:00
if (startRegen == true)
{
2022-10-23 15:56:31 +02:00
timerTick += Time.deltaTime;
if (timerTick >= waitTick)
{
if (currentHealth < maxHealth)
2022-10-23 15:56:31 +02:00
{
currentHealth = currentHealth + 1;
2022-11-14 23:04:29 +01:00
if (currentHealth > maxHealth)
{
currentHealth = maxHealth;
}
PlayerPrefs.SetFloat("health", currentHealth);
2022-10-23 15:56:31 +02:00
timerTick = 0f;
}
}
}
2022-10-23 15:56:31 +02:00
PlayerPrefs.SetFloat("health", currentHealth);
PlayerPrefs.SetFloat("exp", exp);
PlayerPrefs.SetInt("lvl", lvl);
PlayerPrefs.SetFloat("maxExp", maxExp);
PlayerPrefs.SetFloat("maxHealth", maxHealth);
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()
{
2022-10-23 15:56:31 +02:00
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
{
currentHealth = PlayerPrefs.GetFloat("health");
PlayerPrefs.SetFloat("health-S", currentHealth);
2022-10-23 00:21:54 +02:00
PlayerPrefs.SetFloat("exp-S", exp);
2022-10-23 13:29:22 +02:00
PlayerPrefs.SetInt("lvl-S", lvl);
2022-06-21 03:57:04 +02:00
}
2022-10-23 15:56:31 +02:00
public void ManageHealth()
{
//nie wiem czy to potrzebne ale zostawiam tak
2022-12-25 03:39:31 +01:00
healthPoints = PlayerPrefs.GetInt(SkillsPointsManger.PLAYER_SKILS_HEALTH_POINTS);
// nowe - analogicznie jak w ataku
var healthCalculltor = new HealthCalcullator();
var health = BaseHealth + healthCalculltor.CalculateWithoutItem();
PlayerPrefs.SetFloat("maxHealth", health);
Debug.Log("Health: " + PlayerPrefs.GetFloat("maxHealth"));
}
2022-10-23 15:56:31 +02:00
public void AddHealthPoint()
{
2022-12-25 03:39:31 +01:00
healthPoints = PlayerPrefs.GetInt(SkillsPointsManger.PLAYER_SKILS_HEALTH_POINTS);
healthPoints = healthPoints + 1;
2022-12-25 03:39:31 +01:00
PlayerPrefs.SetInt(SkillsPointsManger.PLAYER_SKILS_HEALTH_POINTS, healthPoints);
// Fetch change in scene manager responsible for this data
SkillsPointsManger.Instance.UpdatePanelView();
2022-10-23 15:56:31 +02:00
}
public void ManageStrength()
{
2022-11-27 21:28:55 +01:00
if (EquipmentUIManager.Instance.GetList().Count() == 0 || EquipmentUIManager.Instance.GetList().Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.WeaponSlot && el.Value != null).Count() == 0)
2022-11-15 12:32:28 +01:00
{
var attackCalculator = new AttackCalcullator();
attackValue = attackCalculator.CalculateWithoutItem();
2022-11-15 12:32:28 +01:00
PlayerPrefs.SetFloat("attackValue", attackValue);
}
2022-11-27 21:28:55 +01:00
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.EquipmentType == EquipmentTypeEnum.Weapon)
2022-11-15 12:32:28 +01:00
{
var equippedItem = EquipmentUIManager.Instance.GetList().Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.WeaponSlot && el.Value != null).First().Value;
2022-11-15 12:32:28 +01:00
var attackCalculator = new AttackCalcullator();
attackValue = attackCalculator.Calculate(equippedItem.Value);
2022-11-15 12:32:28 +01:00
PlayerPrefs.SetFloat("attackValue", attackValue);
} else
2022-11-15 12:32:28 +01:00
{
throw new System.Exception("Attack Calculation Error");
2022-11-15 12:32:28 +01:00
}
Debug.Log("Attack: " + PlayerPrefs.GetFloat("attackValue"));
}
2022-10-23 15:56:31 +02:00
public void AddStrengthPoint()
{
2022-12-25 03:39:31 +01:00
strengthPoints = PlayerPrefs.GetInt(SkillsPointsManger.PLAYER_SKILS_STRENGHT_POINTS);
strengthPoints = strengthPoints + 1;
2022-12-25 03:39:31 +01:00
PlayerPrefs.SetInt(SkillsPointsManger.PLAYER_SKILS_STRENGHT_POINTS, strengthPoints);
// Fetch change in scene manager responsible for this data
SkillsPointsManger.Instance.UpdatePanelView();
2022-10-23 15:56:31 +02:00
}
public void ManageDefense()
{
//nie wiem czy to potrzebne ale zostawiam tak
2022-12-25 03:39:31 +01:00
defensePoints = PlayerPrefs.GetInt(SkillsPointsManger.PLAYER_SKILS_DEFENSE_POINTS);
// nowe - analogicznie jak w ataku
var defenseCalculator = new DefenseCalculattor();
if (EquipmentUIManager.Instance.GetList().Count() == 0 ||
EquipmentUIManager.Instance.GetList().Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.HelmetSlot && el.Value != null).Count() == 0 &&
EquipmentUIManager.Instance.GetList().Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.ArmorSlot && el.Value != null).Count() == 0
){
defenseValue = defenseCalculator.CalculateWithoutItem();
PlayerPrefs.SetFloat("defenseValue", defenseValue);
}
else if (EquipmentUIManager.Instance.GetList().Count() != 0 &&
(EquipmentUIManager.Instance.GetList()
.Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.HelmetSlot && el.Value != null).Count() > 0 &&
EquipmentUIManager.Instance.GetList()
.Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.HelmetSlot && el.Value != null).First().Value.EquipmentType == EquipmentTypeEnum.Helmet) ||
(EquipmentUIManager.Instance.GetList()
.Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.ArmorSlot && el.Value != null).Count() > 0 &&
EquipmentUIManager.Instance.GetList()
.Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.ArmorSlot && el.Value != null).First().Value.EquipmentType == EquipmentTypeEnum.Chest)
) {
var helmetSlot = EquipmentUIManager.Instance.GetList().Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.HelmetSlot && el.Value != null);
var helmet = (helmetSlot.Count() != 0) ? helmetSlot.First().Value.Value : 0;
var chestplateSlot = EquipmentUIManager.Instance.GetList().Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.ArmorSlot && el.Value != null);
var chestplate = (chestplateSlot.Count() != 0) ? chestplateSlot.First().Value.Value : 0;
defenseValue = defenseCalculator.Calculate(helmet + chestplate);
PlayerPrefs.SetFloat("defenseValue", defenseValue);
}
else
{
throw new System.Exception("Defense Calculation Error");
}
Debug.Log("Defense: " + PlayerPrefs.GetFloat("defenseValue"));
}
2022-10-23 15:56:31 +02:00
public void AddDefensePoint()
{
2022-12-25 03:39:31 +01:00
defensePoints = PlayerPrefs.GetInt(SkillsPointsManger.PLAYER_SKILS_DEFENSE_POINTS);
defensePoints = defensePoints + 1;
2022-12-25 03:39:31 +01:00
PlayerPrefs.SetInt(SkillsPointsManger.PLAYER_SKILS_DEFENSE_POINTS, defensePoints);
// Fetch change in scene manager responsible for this data
SkillsPointsManger.Instance.UpdatePanelView();
2022-10-23 15:56:31 +02:00
}
public void ManageIntelligence()
{
2022-12-25 03:39:31 +01:00
intelligencePoints = PlayerPrefs.GetInt(SkillsPointsManger.PLAYER_SKILS_INTELIGENCE_POINTS);
}
public void AddIntelligencePoint()
2022-10-23 15:56:31 +02:00
{
2022-12-25 03:39:31 +01:00
intelligencePoints = PlayerPrefs.GetInt(SkillsPointsManger.PLAYER_SKILS_INTELIGENCE_POINTS);
intelligencePoints = intelligencePoints + 1;
2022-12-25 03:39:31 +01:00
PlayerPrefs.SetInt(SkillsPointsManger.PLAYER_SKILS_INTELIGENCE_POINTS, intelligencePoints);
2022-12-25 03:39:31 +01:00
// Fetch change in scene manager responsible for this data
SkillsPointsManger.Instance.UpdatePanelView();
}
2022-10-23 15:56:31 +02:00
public void LevelUpPopUp()
{
2022-12-25 03:39:31 +01:00
healthPoints = PlayerPrefs.GetInt(SkillsPointsManger.PLAYER_SKILS_HEALTH_POINTS);
2022-10-23 15:56:31 +02:00
}
public void ManageSpeed()
{
var speed = 0f;
var speedCalculator = new SpeedCalcullator();
if (EquipmentUIManager.Instance.GetList().Count() == 0 || EquipmentUIManager.Instance.GetList().Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.BootsSlot && el.Value != null).Count() == 0)
{
speed = BaseSpeed + speedCalculator.CalculateWithoutItem();
}
else if (EquipmentUIManager.Instance.GetList().Count() != 0 &&
EquipmentUIManager.Instance.GetList().Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.BootsSlot && el.Value != null).Count() > 0 &&
EquipmentUIManager.Instance.GetList().Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.BootsSlot && el.Value != null).First().Value.EquipmentType == EquipmentTypeEnum.Boots)
{
var boots = EquipmentUIManager.Instance.GetList().Where(el => el.Key == (int)EquipmentPanelSlotsTypeEnum.BootsSlot && el.Value != null).First().Value;
speed = BaseSpeed + speedCalculator.Calculate(boots.Value);
}
PlayerPrefs.SetFloat("speed", speed);
Debug.Log("Speed: " + PlayerPrefs.GetFloat("speed"));
}
// nowe - analogicznie jak w ataku
2022-10-23 15:56:31 +02:00
}