diff --git a/MrBigsock/Assets/Code/Character.cs b/MrBigsock/Assets/Code/Character.cs index 50524d5e2a4be94e819abcb169ec63f0ff58857d..2e5eed3e662d8a331fe913cca0f954074f71cef3 100644 --- a/MrBigsock/Assets/Code/Character.cs +++ b/MrBigsock/Assets/Code/Character.cs @@ -56,6 +56,13 @@ namespace BigSock { public float MaxHP => Stats.MaxHP; public float baseMaxHP = 10; + /* + Xp.... + */ + public float dropXP; + public float xp; + public float maxXp; + public int level; /* @@ -194,7 +201,11 @@ namespace BigSock { Alive = false; // Inform the attacker killed us. - if(attack.Actor != null) attack.Actor.TargetKilled(this, attack); + if(attack.Actor != null) { + attack.Actor.TargetKilled(this, attack); + if(attack.Actor is PlayerController player) + player.GainXp(dropXP); + } AfterDeath(); @@ -239,7 +250,6 @@ namespace BigSock { print($"[Character.AfterDeath()] start. | {HP}, {Alive}"); Destroy(gameObject); } - } @@ -328,6 +338,12 @@ namespace BigSock { public void TargetKilled(Character target, AttackStats attack) { OnKill?.Invoke(this, target, attack); } + + + public void GiveXp(float xp) { + this.xp += xp; + OnGainedXP?.Invoke(this, xp); + } /* Triggers when character uses an attack. @@ -381,9 +397,9 @@ namespace BigSock { /* Triggers when character gains xp. - Params: actor, amount. + Params: sorce, amount. */ - public event Action<Character, int> OnGainedXP; + public event Action<Character, float> OnGainedXP; /* Triggers when character levels up. diff --git a/MrBigsock/Assets/Code/PlayerController.cs b/MrBigsock/Assets/Code/PlayerController.cs index 5bcbfb2818e1b58b5de146ad7671a868e29d9307..70a5665178d3313086a8efd3284770021ceee939 100644 --- a/MrBigsock/Assets/Code/PlayerController.cs +++ b/MrBigsock/Assets/Code/PlayerController.cs @@ -17,6 +17,9 @@ namespace BigSock { { public HPBar hpBar; + public XpBar xpBar; + + public float collisionOffset = 0.05f; public ContactFilter2D movementFilter; @@ -44,6 +47,10 @@ namespace BigSock { protected override void Start() { base.Start(); + + xpBar.SetMaxXp(maxXp); + xpBar.SetXp(xp); + animator = GetComponent<Animator>(); spriteRenderer = GetComponent<SpriteRenderer>(); hpBar.SetMaxHealth(Convert.ToInt32(MaxHP)); @@ -168,5 +175,21 @@ namespace BigSock { base.AfterDamage(attack); hpBar.SetHealth(Convert.ToInt32(HP)); } + + public void GainXp(float xp){ + GiveXp(xp); + CheckXp(); + xpBar.SetXp(this.xp); + } + + private void CheckXp(){ + if(xp > maxXp){ + level += 1; + xp -= maxXp; + maxXp = (level + 1) * 100; + xpBar.SetMaxXp(maxXp); + + } + } } } diff --git a/MrBigsock/Assets/Code/orc/EnemyController.cs b/MrBigsock/Assets/Code/orc/EnemyController.cs index 5e286172793b1282a79e2395d207afc5c7f592cc..b965d45ba19973c1db7d14eaa8f0faffc9400a87 100644 --- a/MrBigsock/Assets/Code/orc/EnemyController.cs +++ b/MrBigsock/Assets/Code/orc/EnemyController.cs @@ -9,6 +9,7 @@ namespace BigSock { public partial class EnemyController : Character { public float collisionOffset = 0.05f; + public ContactFilter2D movementFilter; protected List<RaycastHit2D> castCollisions = new List<RaycastHit2D>(); diff --git a/MrBigsock/Assets/XpBar.cs b/MrBigsock/Assets/XpBar.cs new file mode 100644 index 0000000000000000000000000000000000000000..d22ce773e18dd1179b2c3b47314a01c381ea2a09 --- /dev/null +++ b/MrBigsock/Assets/XpBar.cs @@ -0,0 +1,29 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; +using TMPro; + +namespace BigSock.UI{ + + public class XpBar : MonoBehaviour +{ + + public Slider slider; + public TextMeshPro xpText; + + protected void Start(){ + slider = GetComponent<Slider>(); + // xpText = GetComponent<TextMeshPro>(); + } + + public void SetXp(float xp){ + slider.value = xp; + xpText.SetText($"{xp}/{slider.maxValue}"); + } + + public void SetMaxXp(float xp){ + slider.maxValue = xp; + } +} +} diff --git a/MrBigsock/Assets/XpBar.cs.meta b/MrBigsock/Assets/XpBar.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..7cf8ca1be06f648a36a336b5e2cbad38ec08b9bc --- /dev/null +++ b/MrBigsock/Assets/XpBar.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a2ed0e7debd7bc7468e3a430508a7e71 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: