Files
kiss-vscode/projects/nat-archive-tool/src/nat/systems/NameSystem.kiss

17 lines
738 B
Plaintext

(load "../Lib.kiss")
(prop :Map<String,Array<Entry>> 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<Entry> getEntries [name]
(or (dictGet entriesByName (name.toLowerCase)) []))