Scriptum/Assets/Scripts/REFACTORING/Application/Player/Skills/Calculator/PlayerPramCalcullator.cs

106 lines
2.6 KiB
C#
Raw Normal View History

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<EquipmentTypeEnum> EQUIPMENT_TYPE => new List<EquipmentTypeEnum>();
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;
}
}
}
}