(ns advent.iap (:import [com.badlogic.gdx Gdx Application]) (:require [clojure.core.async :as a] [advent.utils :as utils])) (def purchase-chan (a/chan 1)) (def has-purchased? (atom false)) (def can-purchase? (atom false)) (defn set-purchase-pref [val] (println "setting preference purchased:" val) (let [prefs (.getPreferences (Gdx/app) "purchases")] (.putBoolean prefs "has-purchased?" val) (.flush prefs)) (reset! has-purchased? val) (a/go (a/>! purchase-chan val))) (defn check-purchase-pref [] (let [prefs (.getPreferences (Gdx/app) "purchases")] (if (.contains prefs "has-purchased?") (.getBoolean prefs "has-purchased?") false))) (defn use-pref [] (swap! has-purchased? #(or % (check-purchase-pref) (= "desktop" (System/getProperty "platform")))) (println "preferences purchased:" @has-purchased?)) (defn start-purchase [] (utils/platformify (do (require '[advent.ios]) (@(resolve 'advent.ios/start-purchase)) ) (.triggerPurchase (Gdx/app)) (set-purchase-pref true)))