name system tracks a map of entry names
This commit is contained in:
8
projects/nat-archive-tool/src/nat/systems/NameSystem.hx
Normal file
8
projects/nat-archive-tool/src/nat/systems/NameSystem.hx
Normal file
@@ -0,0 +1,8 @@
|
||||
package nat.systems;
|
||||
|
||||
import kiss.Prelude;
|
||||
import kiss.List;
|
||||
import nat.System;
|
||||
|
||||
@:build(kiss.Kiss.build())
|
||||
class NameSystem extends System {}
|
||||
17
projects/nat-archive-tool/src/nat/systems/NameSystem.kiss
Normal file
17
projects/nat-archive-tool/src/nat/systems/NameSystem.kiss
Normal file
@@ -0,0 +1,17 @@
|
||||
(load "../Lib.kiss")
|
||||
|
||||
(prop :Map<String,Array<Entry>> entriesByName (new Map))
|
||||
|
||||
// Stores a 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)
|
||||
(.push (dictGet entriesByName name) e)
|
||||
(dictSet entriesByName name [e]))
|
||||
// Because the if statement doesn't unify by type :(
|
||||
null)))
|
||||
|
||||
(method :Array<Entry> getEntries [name]
|
||||
(or (dictGet entriesByName name) []))
|
||||
Reference in New Issue
Block a user