protected float LookupEquipmentParamOn(
string fname, LookupType type,
Character ccontext, Formula f,
SkillDef scontext
)
{
if(ccontext != null) {
var equips = ccontext.Equipment.Where(eq => eq.Matches(f.equipmentSlots, f.equipmentCategories) && eq.HasParam(fname));
if(equips.Count() == 0) {
Debug.LogError("No equipment with param "+fname);
return float.NaN;
}
var results = equips.Select(eq => eq.GetParam(fname, scontext));
switch(f.mergeMode) {
case FormulaMergeMode.Sum:
return results.Sum();
case FormulaMergeMode.Mean:
return results.Average(x => x);
case FormulaMergeMode.Min:
return results.Min(x => x);
case FormulaMergeMode.Max:
return results.Max(x => x);
case FormulaMergeMode.First:
return results.First();
case FormulaMergeMode.Last:
return results.Last();
case FormulaMergeMode.Nth:
return results.ElementAt(f.mergeNth);
default:
Debug.LogError("Unrecognized merge mode "+f.mergeMode);
return float.NaN;
}
}
Debug.LogError("No ccontext "+ccontext+" given scontext "+scontext+"; Cannot find matching equipment to get param "+fname);
return float.NaN;
}