(load "../Lib.kiss") (prop :Map> entriesByName (new Map)) // Stores a case-insensitive map of named entries, for instant lookup by name (defNew [] (super ->[archive e] (hasComponent e Name) ->[archive e] (let [name (readComponent archive e Name)] (if (entriesByName.exists (name.toLowerCase)) (.push (dictGet entriesByName (name.toLowerCase)) e) (dictSet entriesByName (name.toLowerCase) [e])) // Because the if statement doesn't unify by type :( null))) (method :Array getEntries [name] (let [entries (dictGet entriesByName (name.toLowerCase))] (if entries entries [])))