45 lines
1.6 KiB
Clojure
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)))
|