using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; // takie same jak w bonusach itemow public enum ItemBonusEnum { None, Strenght, Enduration, Vitality, Inteligence, Speed } public abstract class PlayerPramCalcullator { protected virtual List EQUIPMENT_TYPE => new List(); protected virtual ItemBonusEnum BONUS_TYPE => ItemBonusEnum.None; public virtual float Calculate(int itemValue) { var skillPoints = GetSkillPoints(); var bonusSum = CalculateBonusByType(); return Pattern(itemValue, skillPoints, bonusSum); } public virtual float CalculateWithoutItem() { var skillPoints = GetSkillPoints(); var bonusSum = CalculateBonusByType(); return WithoutItemPattern(skillPoints, bonusSum); } protected abstract float Pattern(int itemValue, int SkillPoints, int BonusSum); protected abstract float WithoutItemPattern(int SkillPoints, int BonusSum); public abstract int GetSkillPoints(); public int CalculateBonusByType() { var bonusSum = 0; if (EquipmentUIManager.Instance.GetList().Count() == 0) return bonusSum; // Every equipped item by player with mached type foreach(var equipmentType in EQUIPMENT_TYPE) { var machedEquippedItems = EquipmentUIManager .Instance .GetList() .Where(slot => (slot.Value != null && slot.Value.EquipmentType == equipmentType)) .Select(slot => slot.Value) .ToList() ; foreach(var equippedItem in machedEquippedItems) { bonusSum += GetBonusFromItem(equippedItem, BONUS_TYPE); } } return bonusSum; } protected int GetBonusFromItem(EquippableItem item, ItemBonusEnum itemBonus) { switch(itemBonus) { case ItemBonusEnum.Strenght: { return item.StrengthBonus; } case ItemBonusEnum.Enduration: { return item.EnduranceBonus; } case ItemBonusEnum.Vitality: { return item.VitalityBonus; } case ItemBonusEnum.Inteligence: { return item.InteligenceBonus; } case ItemBonusEnum.Speed: { return item.SpeedBonus; } default: { return 0; } } } }