Formulae.LookupEquipmentParamOn C# (CSharp) Method

LookupEquipmentParamOn() protected method

protected LookupEquipmentParamOn ( string fname, LookupType type, Character, ccontext, Formula, f, SkillDef, scontext ) : float
fname string
type LookupType
ccontext Character,
f Formula,
scontext SkillDef,
return float
    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;
    }