private int CalculateLife(Unit unit, Idol guest)
{
if(unit==null)
{
return 0;
}
var life = 0;
var centerEffect = unit.Center?.CenterEffect is CenterEffect.LifeUp ? (CenterEffect.LifeUp)unit.Center.CenterEffect : null;
var guestCenterEffect = guest?.CenterEffect is CenterEffect.LifeUp ? (CenterEffect.LifeUp)guest.CenterEffect : null;
foreach (var idol in unit.Slots.Cast<IIdol>().Concat(Enumerable.Repeat(guest,1)))
{
if (idol == null) continue;
var rate = 1.0;
if (centerEffect!=null && centerEffect.Targets.HasFlag(idol.Category) == true)
{
rate += centerEffect.Rate;
}
if (guestCenterEffect != null && guestCenterEffect.Targets.HasFlag(idol.Category) == true)
{
rate += guestCenterEffect.Rate;
}
life += (int)Math.Ceiling(Math.Round(idol.Life * rate, 3));
}
return life;
}