///<summary> /// Update the display order of the elements based on what the player /// currently knowns about them. Order is atomic number, alphabetical</summary> private void UpdateKnown() { // Only the elements that are known to exist are visible KnownElements = m_elements.Where(x => (x.KnownProperties & EElemProp.Existence) != 0).Cast <IElementKnown>().ToList(); KnownElements.Sort((lhs, rhs) => { var elhs = (Element)lhs; var erhs = (Element)rhs; bool al = (elhs.KnownProperties & EElemProp.AtomicNumber) != 0; bool ar = (erhs.KnownProperties & EElemProp.AtomicNumber) != 0; if (al != ar) { return(al ? -1 : 1); } if (al) { return(lhs.AtomicNumber.CompareTo(rhs.AtomicNumber)); } return(string.Compare(elhs.Name.Fullname, erhs.Name.Fullname, StringComparison.Ordinal)); }); // Only materials that have been discovered are visible KnownMaterials = m_compounds.Where(x => x.Discovered).ToList(); KnownMaterials.Sort((lhs, rhs) => { return(string.Compare(lhs.Fullname, rhs.Fullname, StringComparison.Ordinal)); }); }