add connections in NAT playground

This commit is contained in:
2022-09-08 01:17:00 +00:00
parent d328bc8227
commit 8e5fde91fb
5 changed files with 32 additions and 6 deletions

View File

@@ -336,8 +336,11 @@
(archive.changePlaygrounds ->:Void [:DynamicAccess<Dynamic> p] (dictSet p "default" name)) (archive.changePlaygrounds ->:Void [:DynamicAccess<Dynamic> p] (dictSet p "default" name))
(when playgroundSystem (playgroundSystem.switchPlaygroundKey name))) (when playgroundSystem (playgroundSystem.switchPlaygroundKey name)))
(defCommand RemoveFromPlayground [entries (SelectedEntries 1 null)] (defCommand AddConnections [entries (SelectedEntries 1 null) entriesToConnect (Entries 1 null)]
(for e entries (for e entries
(when (hasComponent e Positions) (addConnections archive e entriesToConnect)))
(withWritableComponents archive e [positions Positions]
(positions.remove (dictGet archive.playgrounds "default")))) e))) (defCommand RemoveConnections [entries (SelectedEntries 1 null) entriesToRemove (Entries 1 null)]
(for e entries
(addConnections archive e entriesToRemove)))
)

View File

@@ -130,4 +130,15 @@
(nth i2.imageScales i2.pinnedImageIndex)) (nth i2.imageScales i2.pinnedImageIndex))
(if (hasComponent e Scale) (if (hasComponent e Scale)
(readComponent e Scale) (readComponent e Scale)
1.0))) 1.0)))
(function addConnections [:nat.Archive archive :nat.Entry e :Array<Entry> entriesToConnect]
(if (hasComponent e Connections)
(withWritableComponents archive e [conn Connections]
(doFor e2 entriesToConnect (dictSet conn e2.id 1)))
(addComponent archive e Connections (for e2 entriesToConnect =>e2.id 1))))
(function removeConnections [:nat.Archive archive :nat.Entry e :Array<Entry> entriesToRemove]
(when (hasComponent e Connections)
(withWritableComponents archive e [conn Connections]
(doFor e2 entriesToRemove (conn.remove e2.id)))))

View File

@@ -0,0 +1,3 @@
package nat.components;
typedef Connections = Map<EntryRef,Int>;

View File

@@ -9,6 +9,8 @@
[&mut :Bool selected false [&mut :Bool selected false
&mut :Bool isCircle false] &mut :Bool isCircle false]
(super position.x position.y) (super position.x position.y)
(enableMouseClicks false)
(set mousePressedCallback ->:Void [_ _ _] null)
(cond (cond
((hasComponent e Images2) ((hasComponent e Images2)
(let [images (readComponent e Images2)] (let [images (readComponent e Images2)]

View File

@@ -240,12 +240,19 @@
Math.POSITIVE_INFINITY)) Math.POSITIVE_INFINITY))
(method :Void chooseEntry [prompt :Archive archive resolve] (method :Void chooseEntry [prompt :Archive archive resolve]
(resolve null)) (entryGroup.forEach ->s
(set s.mousePressedCallback ->:Void [s _ _] {
(entryGroup.forEach ->s
(set s.mousePressedCallback ->:Void [_ _ _] null))
(resolve .e (cast s EntrySprite))
})))
(method :Void chooseEntries [prompt archive resolve min max] (method :Void chooseEntries [prompt archive resolve min max]
(_chooseEntries prompt archive resolve min max [])) (_chooseEntries prompt archive resolve min max []))
// TODO is it possible to resolve with less than max? // TODO is it possible to resolve with less than max?
// TODO this version that just delegates to (chooseEntry) should be reusable, which is tricky because ArchiveUI is an interface
// It also needs a way to resolve with less than the maximum, which may be infinity
(method :Void _chooseEntries [prompt archive resolve min max :Array<Entry> collectedEntries] (method :Void _chooseEntries [prompt archive resolve min max :Array<Entry> collectedEntries]
(let [&mut :Void->Void chooseNextEntry (let [&mut :Void->Void chooseNextEntry
null null