(ns advent.steam) (def has-steam? (try (import '[com.codedisaster.steamworks SteamUserStats SteamUserStatsCallback SteamAPI]) true (catch Exception e false))) (defn init [] (when has-steam? (eval `(SteamAPI/init)))) (defn update [] (when (and has-steam? (eval `(SteamAPI/isSteamRunning))) (eval `(SteamAPI/runCallbacks)))) (defn achievement-fn [f achievement] (when has-steam? (eval `(let [stats# (atom nil)] (reset! stats# (SteamUserStats. (reify SteamUserStatsCallback (onUserStatsReceived [this# game-id# steam-user-id# result#] (~f @stats# ~achievement) ) (onUserStatsStored [this# gameId# result#] ) (onUserAchievementStored [_ _ _ _ _ _] )))) (.requestCurrentStats @stats#))))) (def set-achievement (partial achievement-fn (fn [stats achievement] (.setAchievement stats achievement) (.storeStats stats)))) (def clear-achievement (partial achievement-fn (fn [stats achievement] (.clearAchievement stats achievement) (.storeStats stats)))) (def all-achievements ["MASTER_SLEUTH"]) (defn clear-all-achievements [] (doall (map clear-achievement all-achievements)))