From 55c146e1a9383f5d555bda8690884bb716fa8cc5 Mon Sep 17 00:00:00 2001 From: Gard <gardaf@stud.ntnu.no> Date: Mon, 3 Oct 2022 16:50:56 +0200 Subject: [PATCH] Added simple xp bar --- MrBigsock/Assets/Code/Character.cs | 24 +++++++++++++--- MrBigsock/Assets/Code/PlayerController.cs | 23 ++++++++++++++++ MrBigsock/Assets/Code/orc/EnemyController.cs | 1 + MrBigsock/Assets/XpBar.cs | 29 ++++++++++++++++++++ MrBigsock/Assets/XpBar.cs.meta | 11 ++++++++ 5 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 MrBigsock/Assets/XpBar.cs create mode 100644 MrBigsock/Assets/XpBar.cs.meta diff --git a/MrBigsock/Assets/Code/Character.cs b/MrBigsock/Assets/Code/Character.cs index 50524d5e..2e5eed3e 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 300cedfb..86ef3041 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; @@ -43,6 +46,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)); @@ -163,5 +170,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 5e286172..b965d45b 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 00000000..d22ce773 --- /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 00000000..7cf8ca1b --- /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: -- GitLab