From 2be10a3b137d7bcc75b02884ddbe72608f85f9b0 Mon Sep 17 00:00:00 2001 From: colin Date: Mon, 20 Feb 2023 17:49:42 -0800 Subject: Refactor: to use render protocol --- queries.lisp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'queries.lisp') diff --git a/queries.lisp b/queries.lisp index 329ecb2..4538c75 100644 --- a/queries.lisp +++ b/queries.lisp @@ -5,3 +5,22 @@ (defun all-heroes () (db:store-objects-with-class 'hero)) +(defun player-campaigns (player) + "Return a list of campaigns that that player is involved in." + (remove nil (mapcar #'hero-campaign (player-heroes player)))) + +(defun campaign-heros (campaign &key (activep t)) + "All the heros actively involved in this CAMPAIGN. If ACTIVEP, then +only the active quest(s) are considered, otherwise all quests are considered." + (remove-duplicates + (mapcan #'heroes-on-quest + (if activep + (remove-if-not #'quest-startedp (quests-in-campaign campaign)) + (quests-in-campaign campaign))))) + +(defun fetch-comrades (player &key (activep t)) + "Returns all the heroes in any one of the player's campaigns. If +ACTIVEP, then only heroes involved in active quests are returned." + (remove-duplicates + (loop :for campaign :in (player-campaigns player) + :nconc (campaign-heros campaign :activep activep)))) -- cgit v1.2.3