bffdd52
Branches > main > bffdd52 > files
Add broadcast effect
Commit: bffdd524aa10d2e55c9f71d7666eb891e50d5af8
Parent: 12188fa
1 changed file:
src/net/bowmap/server/logic.clj view file
@@ -18,23 +18,33 @@ (commute server/players update uuid merge p)) [])) -; Want this to be pure, which means you need a way to encode that state change as data?+; TODO this is asymmetric+(defmethod handle-event ::event/player-joining [{:keys! [::player/uuid ::player/username] :as p}]+ (dosync+ (if (@server/players uuid)+ (throw (Exception. "Player tried to join with an existing UUID"))+ (commute server/players update uuid merge p))+ []))+ (defmethod handle-event ::event/player-joined [{:keys! [::player/uuid ::player/player]}] (dosync (commute server/players update uuid merge player)- (for [[recpient-uuid] @server/players]- {::effect/id ::effect/send-chat-message- ::player/uuid recpient-uuid- :message {:text (str (or (::player/username (server/player uuid)) "Unknown Player") " Joined!")}})))+ [{::event/id ::event/broadcast+ :message {:text (str (or (::player/username (server/player uuid)) "Unknown Player") " Joined!")}}])) (defmethod handle-event ::event/player-left [{:keys! [::player/uuid]}] (dosync (let [username (::player/username (server/player uuid))] (commute server/players dissoc uuid)- (for [[recipient] @server/players]- {::effect/id ::effect/send-chat-message- ::player/uuid recipient- :message {:text (str (or username "Unknown Player") " Left.")}}))))+ [{::event/id ::event/broadcast+ :message {:text (str (or username "Unknown Player") " Left.")}}])))++(defmethod handle-event ::event/broadcast [{:keys! [message]}]+ (dosync+ (for [[recipient] @server/players]+ {::effect/id ::effect/send-chat-message+ ::player/uuid recipient+ :message message}))) (defmethod handle-event ::event/updated-player-movement [{:keys! [::player/uuid ::position/position] :as e}] (dosync