using System.Collections;
using System.Collections.Generic;
public static void Main()
var weapon = new Item(new WeaponSO());
var armor = new Item(new HeadSO());
var potion = new Item(new HealthPotionSO());
Console.WriteLine(weapon.so.GetType());
Console.WriteLine(potion.so.GetType());
Console.WriteLine("HP:"+u.hp);
Console.WriteLine("HP:"+u.hp);
Console.WriteLine("ATK:"+u.atk);
Console.WriteLine("DEF:"+u.def);
Console.WriteLine("ATK:"+u.atk);
Console.WriteLine("DEF:"+u.def);
Console.WriteLine("Current Equipement:");
foreach(var e in u.equipment){
Console.WriteLine("Current Equipement:");
foreach(var e in u.equipment){
Console.WriteLine("ATK:"+u.atk);
public Dictionary<EquipmentSlotType, Item> equipment = new Dictionary<EquipmentSlotType, Item>(9){
{ EquipmentSlotType.HeadSlot, null },
{ EquipmentSlotType.ChestSlot, null },
{ EquipmentSlotType.PantsSlot, null },
{ EquipmentSlotType.BootsSlot, null },
{ EquipmentSlotType.WeaponSlot, null },
{ EquipmentSlotType.Weapon2HSlot, null }
public Inventory inventory = new Inventory();
public void AddItem(Item item){
public void RemoveItem(Item item){
inventory.RemoveItem(item);
public void UseItem(int index){
inventory.Use(index, this);
public void EquipItem(int index){
inventory.Equip(index, this);
public void UnEquip(int index){
inventory.UnEquip(index, this);
List<Item> items = new List<Item>(32);
public void AddItem(Item item) { items.Add(item); }
public void RemoveItem(Item item) {
public void Equip(int index, Unit u){
Item item = items[index];
EquipmentSlotType itemType = EquipmentSlotType.None;
if(item.so is WeaponSO) {
itemType = ((WeaponSO)item.so).slotType;
if(item.so is EquipmentSO){
itemType = ((EquipmentSO)item.so).slotType;
u.equipment[itemType] = item;
public void UnEquip(int index, Unit u){
Item item = items[index];
if(item.so is WeaponSO || item.so is EquipmentSO) {
u.equipment[((WeaponSO)item.so).slotType] = null;
public void Use(int index, Unit u){
public ItemSO so {get; set;}
public bool isEquipped = false;
public Item(ItemSO so) { this.so = so; }
public void Use(Unit u){ so.Use(u); }
public void UnUse(Unit u){ so.UnUse(u); }
public enum EquipmentSlotType {
public class ItemSO : Object {
public virtual void Use(Unit u){}
public virtual void UnUse(Unit u){}
public class WeaponSO: ItemSO {
public EquipmentSlotType slotType = EquipmentSlotType.WeaponSlot;
public override void Use(Unit u) {
Console.WriteLine("Equiped weapon");
public override void UnUse(Unit u){
public class SwordSO: WeaponSO {
public override void Use(Unit u) {
public override void UnUse(Unit u){
public class EquipmentSO: ItemSO {
public EquipmentSlotType slotType = EquipmentSlotType.None;
public override void Use(Unit u) {
Console.WriteLine("Equiped Item with def: " + def);
public override void UnUse(Unit u){
public class HeadSO: EquipmentSO {
public class ConsumableSO: ItemSO {
public override void Use(Unit u) { Console.WriteLine("Consume"); }
public class HealthPotionSO: ConsumableSO {
public override void Use(Unit u) { u.hp += value; }
public class StamPotionSO: ConsumableSO {
public override void Use(Unit u) { u.stam += value; }