From b0bf0746c0b5e5fec56a399cb95c1b4dbcc8efbb Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Sat, 4 May 2013 00:18:42 -0400 Subject: [PATCH] add assoc-in-entity / update-in-entity --- src/hottub/gs.clj | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/hottub/gs.clj b/src/hottub/gs.clj index 37832ec..9fdb92f 100644 --- a/src/hottub/gs.clj +++ b/src/hottub/gs.clj @@ -43,7 +43,7 @@ (assoc-in @*gamestate* [:indices indextype] index))))) (defn remove-id-from-index [index id key] - (if-let [idsbefore (get index key)] + (if-let [idsbefore (get index key)] (let [idsafter (disj idsbefore id)] (if (empty? idsafter) (dissoc index key) @@ -54,10 +54,10 @@ (if-let [idsbefore (get index key)] (assoc index key (conj idsbefore id)) (if key - (assoc index key #{id}) + (assoc index key #{id}) index))) -(defn update-id-index-by-key [key indexold id entityold entitynew] +(defn update-id-index-by-key [key indexold id entityold entitynew] (-> indexold (remove-id-from-index id (get entityold key)) (add-id-to-index id (get entitynew key)))) @@ -65,7 +65,7 @@ (defn set-entity [id value] (let [value (if value (assoc value ::id id) nil)] (update-indices id (entity id) value) - (let [gsnew + (let [gsnew (if (= value nil) (assoc @*gamestate* :entities (dissoc (get @*gamestate* :entities) id)) (assoc-in @*gamestate* [:entities id] value))] @@ -75,6 +75,12 @@ (defn update-entity [value] (set-entity (::id value) value)) +(defn assoc-in-entity [id keys value] + (set-entity id (assoc-in (entity id) keys value))) + +(defn update-in-entity [id keys fn] + (set-entity id (update-in (entity id) keys fn))) + (defn remove-entity [value] (set-entity (::id value) nil)) @@ -92,7 +98,7 @@ (defn define-id-index [indextype & [key]] (let [key (or key indextype)] - (defmethod update-index indextype [indextype indexold id entityold entitynew] + (defmethod update-index indextype [indextype indexold id entityold entitynew] (update-id-index-by-key key indexold id entityold entitynew)) (defmethod query-index indextype [indextype index query] (or (get index query) #{}))))