Files
gitea-docker/desktop/src-common/advent/steam.clj
2015-11-18 23:13:46 -08:00

45 lines
1.6 KiB
Clojure

(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)))