; SPDX-FileCopyrightText: 2023 Jummit
;
; SPDX-License-Identifier: GPL-3.0-or-later
(var handled false)
(fn select-with-mouse [world]
(let [(mx my) (_G.mouse)]
(each [_ entity (ipairs world)]
(case entity
(where {: y : x : w : h} entity.on-select)
(set entity.selected (and (< x mx (+ x w)) (< y my (+ y h))))
(where {: y : x : w : h} entity.selected)
(set entity.selected nil)))))
(fn perform-select [world]
(let [(_ _ pressed) (_G.mouse)]
(if (not pressed)
(set handled false)
(each [_ entity (ipairs world)]
(when (not handled)
(case entity
{: on-select :selected true}
(do
(set handled true)
(on-select))))))))
{: select-with-mouse : perform-select}