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

21 lines
917 B
Plaintext

(load "../Lib.kiss")
(prop :Map<String,Map<String,Bool>> entriesByName (new Map))
// Stores a case-insensitive map of named entries, for instant lookup by name
(defNew []
(super
"NameSystem"
->[archive e] (hasComponent e Name)
->[archive e &opt ui] (let [name (readComponent e Name)]
(if (entriesByName.exists (name.toLowerCase))
(dictSet (dictGet entriesByName (name.toLowerCase)) e.id true)
(dictSet entriesByName (name.toLowerCase) [=>e.id true]))
// Because the if statement doesn't unify by type :(
null)))
(method :Array<Entry> getEntries [:nat.Archive archive name]
(let [entries (dictGet entriesByName (name.toLowerCase))]
(if entries
(for id (entries.keys) (dictGet archive.entries id))
[])))