From f7968ed8bde7d1eca14da821bf43f83d87aa7f7c Mon Sep 17 00:00:00 2001 From: Ny Bruker <robinhs@stud.ntnu.no> Date: Fri, 30 Sep 2022 13:48:54 +0200 Subject: [PATCH] New items system. - Items class hierarchy. - Inventory class. - CharacterStats class. - Applies modifiers to character's stats. --- MrBigsock/Assets/Code/Character.cs | 65 ++++++++++-- MrBigsock/Assets/Code/Core/CharacterStats.cs | 45 ++++++++ .../Assets/Code/Core/CharacterStats.cs.meta | 11 ++ MrBigsock/Assets/Code/Core/ICharacterStats.cs | 100 ++++++++++++++++++ .../Assets/Code/Core/ICharacterStats.cs.meta | 11 ++ MrBigsock/Assets/Code/Item.meta | 8 ++ MrBigsock/Assets/Code/Item/Base.meta | 8 ++ .../Code/Item/Base/ConditionalItemBase.cs | 25 +++++ .../Item/Base/ConditionalItemBase.cs.meta | 11 ++ MrBigsock/Assets/Code/Item/Base/IItem.cs | 30 ++++++ MrBigsock/Assets/Code/Item/Base/IItem.cs.meta | 11 ++ MrBigsock/Assets/Code/Item/Base/ItemBase.cs | 30 ++++++ .../Assets/Code/Item/Base/ItemBase.cs.meta | 11 ++ .../Assets/Code/Item/Base/PassiveItemBase.cs | 21 ++++ .../Code/Item/Base/PassiveItemBase.cs.meta | 11 ++ .../Assets/Code/Item/Base/TriggerType.cs | 20 ++++ .../Assets/Code/Item/Base/TriggerType.cs.meta | 11 ++ MrBigsock/Assets/Code/Item/EventParams.meta | 8 ++ .../Code/Item/EventParams/CharEventParams.cs | 27 +++++ .../Item/EventParams/CharEventParams.cs.meta | 11 ++ .../Code/Item/EventParams/ICharEventParms.cs | 27 +++++ .../Item/EventParams/ICharEventParms.cs.meta | 11 ++ MrBigsock/Assets/Code/Item/Inventory.cs | 49 +++++++++ MrBigsock/Assets/Code/Item/Inventory.cs.meta | 11 ++ MrBigsock/Assets/Code/Item/Items.meta | 8 ++ .../Assets/Code/Item/Items/RunningShoes.cs | 24 +++++ .../Code/Item/Items/RunningShoes.cs.meta | 11 ++ MrBigsock/Assets/Code/Item/Root.meta | 8 ++ MrBigsock/Assets/Code/PlayerController.cs | 18 ++-- MrBigsock/Assets/Code/orc/EnemyController.cs | 4 +- 30 files changed, 631 insertions(+), 15 deletions(-) create mode 100644 MrBigsock/Assets/Code/Core/CharacterStats.cs create mode 100644 MrBigsock/Assets/Code/Core/CharacterStats.cs.meta create mode 100644 MrBigsock/Assets/Code/Core/ICharacterStats.cs create mode 100644 MrBigsock/Assets/Code/Core/ICharacterStats.cs.meta create mode 100644 MrBigsock/Assets/Code/Item.meta create mode 100644 MrBigsock/Assets/Code/Item/Base.meta create mode 100644 MrBigsock/Assets/Code/Item/Base/ConditionalItemBase.cs create mode 100644 MrBigsock/Assets/Code/Item/Base/ConditionalItemBase.cs.meta create mode 100644 MrBigsock/Assets/Code/Item/Base/IItem.cs create mode 100644 MrBigsock/Assets/Code/Item/Base/IItem.cs.meta create mode 100644 MrBigsock/Assets/Code/Item/Base/ItemBase.cs create mode 100644 MrBigsock/Assets/Code/Item/Base/ItemBase.cs.meta create mode 100644 MrBigsock/Assets/Code/Item/Base/PassiveItemBase.cs create mode 100644 MrBigsock/Assets/Code/Item/Base/PassiveItemBase.cs.meta create mode 100644 MrBigsock/Assets/Code/Item/Base/TriggerType.cs create mode 100644 MrBigsock/Assets/Code/Item/Base/TriggerType.cs.meta create mode 100644 MrBigsock/Assets/Code/Item/EventParams.meta create mode 100644 MrBigsock/Assets/Code/Item/EventParams/CharEventParams.cs create mode 100644 MrBigsock/Assets/Code/Item/EventParams/CharEventParams.cs.meta create mode 100644 MrBigsock/Assets/Code/Item/EventParams/ICharEventParms.cs create mode 100644 MrBigsock/Assets/Code/Item/EventParams/ICharEventParms.cs.meta create mode 100644 MrBigsock/Assets/Code/Item/Inventory.cs create mode 100644 MrBigsock/Assets/Code/Item/Inventory.cs.meta create mode 100644 MrBigsock/Assets/Code/Item/Items.meta create mode 100644 MrBigsock/Assets/Code/Item/Items/RunningShoes.cs create mode 100644 MrBigsock/Assets/Code/Item/Items/RunningShoes.cs.meta create mode 100644 MrBigsock/Assets/Code/Item/Root.meta diff --git a/MrBigsock/Assets/Code/Character.cs b/MrBigsock/Assets/Code/Character.cs index 3a04ccfd..de0bdcac 100644 --- a/MrBigsock/Assets/Code/Character.cs +++ b/MrBigsock/Assets/Code/Character.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.InputSystem; +using BigSock.Item; namespace BigSock { // Common class for all characters. @@ -11,7 +12,7 @@ namespace BigSock { /* Attack speed of the character. */ - public float AttackSpeed => baseAttackSpeed; + public float AttackSpeed => Stats.AttackSpeed; public float baseAttackSpeed = 1; /* @@ -22,20 +23,20 @@ namespace BigSock { /* Movement speed of the character. */ - public float MovementSpeed => baseMovementSpeed; + public float MovementSpeed => Stats.MoveSpeed; public float baseMovementSpeed = 1; /* Damage of the character. */ - public float Damage => baseDamage; + public float Damage => Stats.Damage; public float baseDamage = 1; /* Knockback force */ - public float KnockbackForce => knockbackForce; + public float KnockbackForce => Stats.Knockback; public float knockbackForce = 150; @@ -52,7 +53,7 @@ namespace BigSock { /* Maximum hit points of the character. */ - public float MaxHP => baseMaxHP; + public float MaxHP => Stats.MaxHP; public float baseMaxHP = 10; @@ -81,8 +82,58 @@ namespace BigSock { protected Rigidbody2D rb; - void Start() { - rb = GetComponent<Rigidbody2D>(); + /* + The inventory of the character. + */ + public Inventory Inventory { get; protected set; } = new Inventory(); + + /* + The base stats of the character. + */ + public ICharacterStats BaseStats { get; protected set; } = new CharacterStats(); + + /* + The final stats of the character after applying modifiers. + */ + public ICharacterStats Stats { get; protected set; } = new CharacterStats(); + + + + protected virtual void Start() { + rb = GetComponent<Rigidbody2D>(); + + // Set the base stats. + BaseStats = new CharacterStats { + MaxHP = baseMaxHP, + Damage = baseDamage, + MoveSpeed = baseMovementSpeed, + Knockback = knockbackForce, + Range = 1, + AttackSpeed = baseAttackSpeed, + }; + UpdateModifiers(); + + } + + /* + Updates the modifiers to the character's stats. + */ + public void UpdateModifiers(ICharacterStats modifiers = null) { + modifiers ??= Inventory.Modifier; + Stats = BaseStats.Modify(modifiers); + } + + /* + Try to pick up an item. + */ + public bool TryPickUpItem(IItem item) { + if(Inventory.AddItem(item)) { + UpdateModifiers(); + print($"[Character.TryPickUpItem()] {item.Name} picked up. ({Inventory.Items.Count}/{Inventory.Cap})"); + return true; + } + print($"[Character.TryPickUpItem()] {item.Name} NOT picked up. ({Inventory.Items.Count}/{Inventory.Cap})"); + return false; } /* diff --git a/MrBigsock/Assets/Code/Core/CharacterStats.cs b/MrBigsock/Assets/Code/Core/CharacterStats.cs new file mode 100644 index 00000000..e6e13cba --- /dev/null +++ b/MrBigsock/Assets/Code/Core/CharacterStats.cs @@ -0,0 +1,45 @@ +using System.Collections; +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.InputSystem; + + +namespace BigSock { + + /* + class represents the stats of a character. + */ + public class CharacterStats : ICharacterStats { + /* + The hp of the character. + */ + public float MaxHP { get; set; } + + /* + The damage of the character. + */ + public float Damage { get; set; } + + /* + The movement speed of the character. + */ + public float MoveSpeed { get; set; } + + /* + The knockback of the character. + */ + public float Knockback { get; set; } + + /* + The range of the character. + */ + public float Range { get; set; } + + /* + The attack speed of the character. + */ + public float AttackSpeed { get; set; } + + } +} \ No newline at end of file diff --git a/MrBigsock/Assets/Code/Core/CharacterStats.cs.meta b/MrBigsock/Assets/Code/Core/CharacterStats.cs.meta new file mode 100644 index 00000000..aa194f50 --- /dev/null +++ b/MrBigsock/Assets/Code/Core/CharacterStats.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 697f21373556c9549b064efc46c9730b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MrBigsock/Assets/Code/Core/ICharacterStats.cs b/MrBigsock/Assets/Code/Core/ICharacterStats.cs new file mode 100644 index 00000000..afccfaf2 --- /dev/null +++ b/MrBigsock/Assets/Code/Core/ICharacterStats.cs @@ -0,0 +1,100 @@ +using System.Collections; +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.InputSystem; + + +namespace BigSock { + + /* + Interface represents the stats of a character. + */ + public interface ICharacterStats { + /* + The hp of the character. + */ + float MaxHP { get; } + + /* + The damage of the character. + */ + float Damage { get; } + + /* + The movement speed of the character. + */ + float MoveSpeed { get; } + + /* + The knockback of the character. + */ + float Knockback { get; } + + /* + The range of the character. + */ + float Range { get; } + + /* + The attack speed of the character. + */ + float AttackSpeed { get; } + + } + + /* + Holds extension methods for character stat objects. + */ + public static class CharacterStatsExtension { + /* + Identity object for character stats. + */ + public static readonly ICharacterStats IDENTITY = new CharacterStats{ + MaxHP = 1, + Damage = 1, + MoveSpeed = 1, + Knockback = 1, + Range = 1, + AttackSpeed = 1, + }; + + /* + Adds the values of 2 character stats together. + */ + public static ICharacterStats Add(this ICharacterStats a, ICharacterStats b) { + return new CharacterStats{ + MaxHP = a.MaxHP + b.MaxHP, + Damage = a.Damage + b.Damage, + MoveSpeed = a.MoveSpeed + b.MoveSpeed, + Knockback = a.Knockback + b.Knockback, + Range = a.Range + b.Range, + AttackSpeed = a.AttackSpeed + b.AttackSpeed, + }; + } + + /* + Multiplies the values of 2 character stats together. + */ + public static ICharacterStats Multiply(this ICharacterStats a, ICharacterStats b) { + return new CharacterStats{ + MaxHP = a.MaxHP * b.MaxHP, + Damage = a.Damage * b.Damage, + MoveSpeed = a.MoveSpeed * b.MoveSpeed, + Knockback = a.Knockback * b.Knockback, + Range = a.Range * b.Range, + AttackSpeed = a.AttackSpeed * b.AttackSpeed, + }; + } + + + /* + Modifies the first stat object by the second one. + Ex.: if the second is 20% hp, the result will be the first one, but with 20% more hp. + */ + public static ICharacterStats Modify(this ICharacterStats a, ICharacterStats b) { + return a.Multiply(b.Add(IDENTITY)); + } + + } +} \ No newline at end of file diff --git a/MrBigsock/Assets/Code/Core/ICharacterStats.cs.meta b/MrBigsock/Assets/Code/Core/ICharacterStats.cs.meta new file mode 100644 index 00000000..48fb6263 --- /dev/null +++ b/MrBigsock/Assets/Code/Core/ICharacterStats.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d67cdc4f8a1fd31439d31116ad4821b7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MrBigsock/Assets/Code/Item.meta b/MrBigsock/Assets/Code/Item.meta new file mode 100644 index 00000000..fa111966 --- /dev/null +++ b/MrBigsock/Assets/Code/Item.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 023fe0779d2abeb44ad4470ad4e5642a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MrBigsock/Assets/Code/Item/Base.meta b/MrBigsock/Assets/Code/Item/Base.meta new file mode 100644 index 00000000..0b806ae6 --- /dev/null +++ b/MrBigsock/Assets/Code/Item/Base.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fdc1d36c8d53fe54898d8cccff53b536 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MrBigsock/Assets/Code/Item/Base/ConditionalItemBase.cs b/MrBigsock/Assets/Code/Item/Base/ConditionalItemBase.cs new file mode 100644 index 00000000..95612893 --- /dev/null +++ b/MrBigsock/Assets/Code/Item/Base/ConditionalItemBase.cs @@ -0,0 +1,25 @@ +using System.Collections; +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.InputSystem; + + +namespace BigSock.Item { + + /* + A class that represents an item that an effect when a condition is meet. + */ + public abstract class ConditionalItemBase : ItemBase { + /* + The type of trigger this item uses. + */ + public TriggerType Trigger { get; set; } + + /* + The handler to activate when the condition is triggered. + */ + public Action<ICharEventParams> Handler { get; set; } + + } +} \ No newline at end of file diff --git a/MrBigsock/Assets/Code/Item/Base/ConditionalItemBase.cs.meta b/MrBigsock/Assets/Code/Item/Base/ConditionalItemBase.cs.meta new file mode 100644 index 00000000..ec5d9564 --- /dev/null +++ b/MrBigsock/Assets/Code/Item/Base/ConditionalItemBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 15064819886e52a4a85b803e26467c05 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MrBigsock/Assets/Code/Item/Base/IItem.cs b/MrBigsock/Assets/Code/Item/Base/IItem.cs new file mode 100644 index 00000000..720fa112 --- /dev/null +++ b/MrBigsock/Assets/Code/Item/Base/IItem.cs @@ -0,0 +1,30 @@ +using System.Collections; +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.InputSystem; + + +namespace BigSock.Item { + + /* + An interface representing a generic item. + */ + public interface IItem { + /* + The name of the item. + */ + string Name { get; } + + /* + The description of the item. + */ + string Description { get; } + + /* + The id of the item. + */ + ulong Id { get; } + + } +} \ No newline at end of file diff --git a/MrBigsock/Assets/Code/Item/Base/IItem.cs.meta b/MrBigsock/Assets/Code/Item/Base/IItem.cs.meta new file mode 100644 index 00000000..7c3c5385 --- /dev/null +++ b/MrBigsock/Assets/Code/Item/Base/IItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0a4fa79a9560deb45976fa4bebd5d1ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MrBigsock/Assets/Code/Item/Base/ItemBase.cs b/MrBigsock/Assets/Code/Item/Base/ItemBase.cs new file mode 100644 index 00000000..bd74fdd3 --- /dev/null +++ b/MrBigsock/Assets/Code/Item/Base/ItemBase.cs @@ -0,0 +1,30 @@ +using System.Collections; +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.InputSystem; + + +namespace BigSock.Item { + + /* + A class that represents the root of all items. + */ + public abstract class ItemBase : IItem { + /* + The name of the item. + */ + public string Name { get; protected set; } + + /* + The description of the item. + */ + public string Description { get; protected set; } + + /* + The id of the item. + */ + public ulong Id { get; protected set; } + + } +} \ No newline at end of file diff --git a/MrBigsock/Assets/Code/Item/Base/ItemBase.cs.meta b/MrBigsock/Assets/Code/Item/Base/ItemBase.cs.meta new file mode 100644 index 00000000..fa7b4531 --- /dev/null +++ b/MrBigsock/Assets/Code/Item/Base/ItemBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e99afc192b85f3d43a7159cbbd68a39c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MrBigsock/Assets/Code/Item/Base/PassiveItemBase.cs b/MrBigsock/Assets/Code/Item/Base/PassiveItemBase.cs new file mode 100644 index 00000000..1b09c3b4 --- /dev/null +++ b/MrBigsock/Assets/Code/Item/Base/PassiveItemBase.cs @@ -0,0 +1,21 @@ +using System.Collections; +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.InputSystem; + + +namespace BigSock.Item { + + /* + A class that represents an item that provides passive stat boosts. + */ + public abstract class PassiveItemBase : ItemBase { + /* + The modifier of the item. + */ + public ICharacterStats Modifier { get; set; } + + + } +} \ No newline at end of file diff --git a/MrBigsock/Assets/Code/Item/Base/PassiveItemBase.cs.meta b/MrBigsock/Assets/Code/Item/Base/PassiveItemBase.cs.meta new file mode 100644 index 00000000..d264b9a2 --- /dev/null +++ b/MrBigsock/Assets/Code/Item/Base/PassiveItemBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 779b8b8f25258cf4983c1ac9d442cb8c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MrBigsock/Assets/Code/Item/Base/TriggerType.cs b/MrBigsock/Assets/Code/Item/Base/TriggerType.cs new file mode 100644 index 00000000..5ea86686 --- /dev/null +++ b/MrBigsock/Assets/Code/Item/Base/TriggerType.cs @@ -0,0 +1,20 @@ +using System.Collections; +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.InputSystem; + + +namespace BigSock.Item { + + /* + The type of trigger that activates the item's effect. + */ + public enum TriggerType { + None, + OnKill, + OnAttack, + OnHit, + OnDamage, + } +} \ No newline at end of file diff --git a/MrBigsock/Assets/Code/Item/Base/TriggerType.cs.meta b/MrBigsock/Assets/Code/Item/Base/TriggerType.cs.meta new file mode 100644 index 00000000..de080a71 --- /dev/null +++ b/MrBigsock/Assets/Code/Item/Base/TriggerType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 39ba995ac8dbf00498eb995c98f71402 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MrBigsock/Assets/Code/Item/EventParams.meta b/MrBigsock/Assets/Code/Item/EventParams.meta new file mode 100644 index 00000000..ed6be0ca --- /dev/null +++ b/MrBigsock/Assets/Code/Item/EventParams.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9b2c87c112ffd1a4dbacf0405214b30b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MrBigsock/Assets/Code/Item/EventParams/CharEventParams.cs b/MrBigsock/Assets/Code/Item/EventParams/CharEventParams.cs new file mode 100644 index 00000000..fa52874e --- /dev/null +++ b/MrBigsock/Assets/Code/Item/EventParams/CharEventParams.cs @@ -0,0 +1,27 @@ +using System.Collections; +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.InputSystem; + + +namespace BigSock { + + /* + Class that represents the parameters of a generic character event. + */ + public class CharEventParams : ICharEventParams { + /* + The character that own's the event. + */ + public Character Source { get; set; } + + /* + The character that triggered the event. (If any) + ex.: OnKill -> the killed enemy. OnDamage -> Enemy that dealt the damage. + */ + public Character Target { get; set; } + + + } +} \ No newline at end of file diff --git a/MrBigsock/Assets/Code/Item/EventParams/CharEventParams.cs.meta b/MrBigsock/Assets/Code/Item/EventParams/CharEventParams.cs.meta new file mode 100644 index 00000000..d594b12a --- /dev/null +++ b/MrBigsock/Assets/Code/Item/EventParams/CharEventParams.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 69465ff2019a5bb428771fa1c74e4f41 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MrBigsock/Assets/Code/Item/EventParams/ICharEventParms.cs b/MrBigsock/Assets/Code/Item/EventParams/ICharEventParms.cs new file mode 100644 index 00000000..8204f89e --- /dev/null +++ b/MrBigsock/Assets/Code/Item/EventParams/ICharEventParms.cs @@ -0,0 +1,27 @@ +using System.Collections; +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.InputSystem; + + +namespace BigSock { + + /* + Interface that represents the parameters of a generic character event. + */ + public interface ICharEventParams { + /* + The character that own's the event. + */ + Character Source { get; } + + /* + The character that triggered the event. (If any) + ex.: OnKill -> the killed enemy. OnDamage -> Enemy that dealt the damage. + */ + Character Target { get; } + + + } +} \ No newline at end of file diff --git a/MrBigsock/Assets/Code/Item/EventParams/ICharEventParms.cs.meta b/MrBigsock/Assets/Code/Item/EventParams/ICharEventParms.cs.meta new file mode 100644 index 00000000..1161d2b5 --- /dev/null +++ b/MrBigsock/Assets/Code/Item/EventParams/ICharEventParms.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f392d99fa5161e04791a522b7becc933 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MrBigsock/Assets/Code/Item/Inventory.cs b/MrBigsock/Assets/Code/Item/Inventory.cs new file mode 100644 index 00000000..26c46568 --- /dev/null +++ b/MrBigsock/Assets/Code/Item/Inventory.cs @@ -0,0 +1,49 @@ +using System.Collections; +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.InputSystem; + + +namespace BigSock.Item { + + /* + An inventory of a character. + */ + public class Inventory { + /* + The items in the inventory. + */ + public List<IItem> Items { get; protected set; } = new List<IItem>(); + + /* + The modifier from all the passives. + */ + public ICharacterStats Modifier { get; protected set; } = new CharacterStats(); + + + /* + The max number of items the inventory can hold. + */ + public int Cap { get; set; } = 3; + + + /* + Adds an item to the inventory and manages changes. + */ + public bool AddItem(IItem item) { + if(Items.Count >= Cap) return false; + + Items.Add(item); + + // Add the passive effects to the modifier. + if(item is PassiveItemBase passive) { + Modifier = Modifier.Add(passive.Modifier); + } + //! Add ifs to handle the other 2 types of items. + + return true; + } + + } +} \ No newline at end of file diff --git a/MrBigsock/Assets/Code/Item/Inventory.cs.meta b/MrBigsock/Assets/Code/Item/Inventory.cs.meta new file mode 100644 index 00000000..f35fc65d --- /dev/null +++ b/MrBigsock/Assets/Code/Item/Inventory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 91c4ea7605d846e4a8ea5208d2217072 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MrBigsock/Assets/Code/Item/Items.meta b/MrBigsock/Assets/Code/Item/Items.meta new file mode 100644 index 00000000..0970a19e --- /dev/null +++ b/MrBigsock/Assets/Code/Item/Items.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dbcc22c9f61379c4e9676afbe7eb8feb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MrBigsock/Assets/Code/Item/Items/RunningShoes.cs b/MrBigsock/Assets/Code/Item/Items/RunningShoes.cs new file mode 100644 index 00000000..618fdef6 --- /dev/null +++ b/MrBigsock/Assets/Code/Item/Items/RunningShoes.cs @@ -0,0 +1,24 @@ +using System.Collections; +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.InputSystem; + + +namespace BigSock.Item { + + /* + A passive item that increases user's running speed by 50%. + */ + public class RunningShoes : PassiveItemBase { + public RunningShoes() { + Id = 101; + Name = "Running Shoes"; + Description = "Increases movement speed by 50%"; + Modifier = new CharacterStats{ + MoveSpeed = 0.5f, + }; + } + + } +} \ No newline at end of file diff --git a/MrBigsock/Assets/Code/Item/Items/RunningShoes.cs.meta b/MrBigsock/Assets/Code/Item/Items/RunningShoes.cs.meta new file mode 100644 index 00000000..791c93b1 --- /dev/null +++ b/MrBigsock/Assets/Code/Item/Items/RunningShoes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 12406fa4fcf374142ad545946396cbde +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MrBigsock/Assets/Code/Item/Root.meta b/MrBigsock/Assets/Code/Item/Root.meta new file mode 100644 index 00000000..ebb11903 --- /dev/null +++ b/MrBigsock/Assets/Code/Item/Root.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fad9ca94bd85fe14da5644defaaf3820 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MrBigsock/Assets/Code/PlayerController.cs b/MrBigsock/Assets/Code/PlayerController.cs index 0711143f..dea96a53 100644 --- a/MrBigsock/Assets/Code/PlayerController.cs +++ b/MrBigsock/Assets/Code/PlayerController.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using UnityEngine; using UnityEngine.InputSystem; using BigSock.UI; +using BigSock.Item; namespace BigSock { @@ -36,13 +37,13 @@ namespace BigSock { // Start is called before the first frame update - void Start() + protected override void Start() { - rb = GetComponent<Rigidbody2D>(); - animator = GetComponent<Animator>(); - spriteRenderer = GetComponent<SpriteRenderer>(); - hpBar.SetMaxHealth(Convert.ToInt32(MaxHP)); - hpBar.SetHealth(Convert.ToInt32(HP)); + base.Start(); + animator = GetComponent<Animator>(); + spriteRenderer = GetComponent<SpriteRenderer>(); + hpBar.SetMaxHealth(Convert.ToInt32(MaxHP)); + hpBar.SetHealth(Convert.ToInt32(HP)); } @@ -102,6 +103,11 @@ namespace BigSock { } + + //!! Code for testing the new item stuff. + if(Input.GetKeyDown(KeyCode.Space)) { + TryPickUpItem(new RunningShoes()); + } } diff --git a/MrBigsock/Assets/Code/orc/EnemyController.cs b/MrBigsock/Assets/Code/orc/EnemyController.cs index d6e7282d..5e286172 100644 --- a/MrBigsock/Assets/Code/orc/EnemyController.cs +++ b/MrBigsock/Assets/Code/orc/EnemyController.cs @@ -28,8 +28,8 @@ namespace BigSock { // private Collider2D_Proxy secondCollider; - protected virtual void Start(){ - rb = GetComponent<Rigidbody2D>(); + protected override void Start() { + base.Start(); m_Animator = gameObject.GetComponent<Animator>(); -- GitLab