; SPDX-FileCopyrightText: 2023 Jummit
;
; SPDX-License-Identifier: GPL-3.0-or-later
(fn get-start-cells-for [world player]
(icollect [_ entity (ipairs world)]
(match entity {:cell {:start-for player}} entity)))
(fn is-online [card]
(or (= card.kind :link) (= card.kind :virus)))
(fn get-online-of [world player]
(icollect [_ entity (ipairs world)]
(match entity
(where {:card {:owner player}} (is-online entity.card)) entity)))
(fn get-cards-on [world x y]
(icollect [_ entity (ipairs world)]
(if (and entity.card (= entity.circuit-x x) (= entity.circuit-y y)) entity)))
(fn get-cell [world x y]
(var cell nil)
(each [_ entity (ipairs world)]
(match entity
(where {:circuit-x x :circuit-y y} entity.cell) (set cell entity)))
cell)
{: get-start-cells-for : get-online-of : is-online : get-cards-on : get-cell}