summaryrefslogtreecommitdiff
path: root/src/queries.lisp
blob: 1816c5ce00f7048fda91eb875a1cacc833adb53f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
;;;; queries.lisp -- query the database

(in-package :dnd)

(defun all-heroes ()
  (db:store-objects-with-class 'hero))

(defun player-quests (player)
  "Return all quests in which one of player's heroes is engaged."
  (remove nil (mapcar #'quest (player-heroes player))))

(defun player-campaigns (player)
  "Return a list of campaigns one of the players' heroes is involved in."
  (mapcar #'campaign (player-quests 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))))