diff --git a/android/project.clj b/android/project.clj
index 634d8c10..6d20945e 100644
--- a/android/project.clj
+++ b/android/project.clj
@@ -1,5 +1,7 @@
-(defproject advent "1.3.16-SNAPSHOT"
+(def version (str "2.0." (clojure.string/trim-newline (slurp "../desktop/last-release")) "-snapshot"))
+(defproject advent version
:description "FIXME: write description"
+ :manifest {"Implementation-Version" version}
:dependencies [[com.badlogicgames.gdx/gdx "1.9.3" :use-resources true]
[com.badlogicgames.gdx/gdx-backend-lwjgl "1.9.3"]
@@ -38,6 +40,7 @@
;; key you want to sign APKs with.
;; :keystore-path "ticks-talkes-release.jks"
;; :key-alias "ticks-tales-release"
+ :jvm-opts ["-Dplatform=android"]
:build-type :release
:aot :all-with-unused
:aot-exclude-ns [cljs.core.async.macros cljs.core.impl-ioc-macros cljs.core.impl.ioc_macros]}}}
diff --git a/android/src/clojure/advent/android.clj b/android/src/clojure/advent/android.clj
index bdd27e1e..03d2cfa7 100644
--- a/android/src/clojure/advent/android.clj
+++ b/android/src/clojure/advent/android.clj
@@ -1,22 +1,22 @@
(ns advent.android
- (:import [com.android.billingclient.api PurchasesUpdatedListener PurchaseHistoryResponseListener Purchase$PurchasesResult])
- (:require [clojure.core.async :as a]))
-
-(def purchase-chan (a/chan))
+ (:import [com.android.billingclient.api PurchasesUpdatedListener PurchaseHistoryResponseListener Purchase$PurchasesResult]
+ [com.badlogic.gdx Gdx Application])
+ (:require [clojure.core.async :as a]
+ [advent.iap :as iap]))
(def listener
(reify PurchasesUpdatedListener
(onPurchasesUpdated [this response-code purchases]
(println response-code purchases)
(let [result (and purchases (> (.size purchases) 0))]
- (reset! @(resolve 'advent.core/has-purchased?) (if result true false))
- (a/go (a/>! purchase-chan (if result true false)))))) )
+ (println "purchase response" result)
+ (iap/set-purchase-pref (if result true false))))) )
(def history-listener
(reify PurchaseHistoryResponseListener
(onPurchaseHistoryResponse [this purchases-result]
- (println "got history")
+ (reset! iap/can-purchase? true)
(let [result (and purchases-result (.getPurchasesList purchases-result) (> (.size (.getPurchasesList purchases-result)) 0))]
- (reset! @(resolve 'advent.core/has-purchased?) (if result true false))
- (a/go (a/>! purchase-chan (if result true false)))))) )
+ (println "purchase history" result)
+ (iap/set-purchase-pref (if result true false))))) )
diff --git a/android/src/java/advent/core/MainActivity.java b/android/src/java/advent/core/MainActivity.java
index 0f95830d..1756951c 100644
--- a/android/src/java/advent/core/MainActivity.java
+++ b/android/src/java/advent/core/MainActivity.java
@@ -13,6 +13,7 @@ import com.android.billingclient.api.BillingClient.SkuType;
import com.android.billingclient.api.SkuDetails.SkuDetailsResult;
import com.android.billingclient.api.BillingFlowParams;
import com.android.billingclient.api.BillingFlowParams.Builder;
+import android.content.pm.*;
public class MainActivity extends AndroidApplication {
public boolean triggerPurchase() {
@@ -26,10 +27,19 @@ public class MainActivity extends AndroidApplication {
public void onCreate (android.os.Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+
try {
RT.var("clojure.core", "require").invoke(Symbol.intern("clojure.core.async"));
RT.var("clojure.core", "require").invoke(Symbol.intern("advent.core"));
RT.var("clojure.core", "require").invoke(Symbol.intern("advent.android"));
+
+ try {
+ PackageInfo pInfo = this.getPackageManager().getPackageInfo(this.getPackageName(), 0);
+ String version = pInfo.versionName;
+ RT.var("advent.version", "version-override").bindRoot(version);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
} catch (Exception e) {
System.out.println("Importing failed");
e.printStackTrace();
diff --git a/desktop/last-release b/desktop/last-release
index b8626c4c..1e8b3149 100644
--- a/desktop/last-release
+++ b/desktop/last-release
@@ -1 +1 @@
-4
+6
diff --git a/desktop/project.clj b/desktop/project.clj
index 645f2f0d..eba9df10 100644
--- a/desktop/project.clj
+++ b/desktop/project.clj
@@ -37,12 +37,12 @@
"script" ["run" "-m" "advent.analyze/dump-speech"]}
:profiles {
:uberjar {
- :jvm-opts ["-Duse-repl=false" "-Dui_scale=1.0" "-Dno-steam=true" "-Dclojure.compiler.direct-linking=true" "-Dis-desktop=true"]
+ :jvm-opts ["-Duse-repl=false" "-Dui_scale=1.0" "-Dno-steam=true" "-Dclojure.compiler.direct-linking=true" "-Dis-desktop=true" "-Dplatform=desktop"]
:aot :all
}
:dev {
:source-paths ["src" "src-common" "src-dev"]
- :jvm-opts ["-Duse-repl=true" "-Dui_scale=1.0" "-Dno-steam=true" "-Dclojure.compiler.direct-linking=true" "-Dis-desktop=true"]
+ :jvm-opts ["-Duse-repl=true" "-Dui_scale=1.0" "-Dno-steam=true" "-Dclojure.compiler.direct-linking=true" "-Dis-desktop=true" "-Dplatform=desktop"]
:dependencies [[com.badlogicgames.gdx/gdx-tools "1.5.3"]
[org.clojure/tools.nrepl "0.2.12"]
[play-clj-nrepl "0.1.0" :exclusions [play-clj]]
@@ -52,7 +52,7 @@
:warn-on-reflection true}
:mobile-dev {
:source-paths ["src" "src-common" "src-dev"]
- :jvm-opts ["-Duse-repl=true" "-Dui_scale=1.5" "-Dno-steam=true" "-Dclojure.compiler.direct-linking=true" "-Dis-desktop=true"]
+ :jvm-opts ["-Duse-repl=true" "-Dui_scale=1.5" "-Dno-steam=true" "-Dclojure.compiler.direct-linking=true" "-Dis-desktop=true" "-Dplatform=desktop"]
:dependencies [[com.badlogicgames.gdx/gdx-tools "1.5.3"]
[org.clojure/tools.nrepl "0.2.12"]
[play-clj-nrepl "0.1.0" :exclusions [play-clj]]
@@ -62,16 +62,16 @@
#_#_:warn-on-reflection true}
:app-store {
:source-paths ["src" "src-common" "src-dev"]
- :jvm-opts ["-Dapp-store=true" "-Dui_scale=1.0" "-Dno-steam=true" "-Dis-desktop=true"]
+ :jvm-opts ["-Dapp-store=true" "-Dui_scale=1.0" "-Dno-steam=true" "-Dis-desktop=true" "-Dplatform=desktop"]
:aot :all
:warn-on-reflection true}
:steam {:dependencies [[com.code-disaster.steamworks4j/steamworks4j "1.2.2"]]
- :jvm-opts ["-Dis-desktop=true" "-Dui_scale=1.0" ]}
+ :jvm-opts ["-Dis-desktop=true" "-Dui_scale=1.0" "-Dplatform=desktop"]}
:steam-dev {
:source-paths ["src" "src-common" "src-dev"]
- :jvm-opts ["-Duse-repl=true" "-Dui_scale=1.0" "-Dis-desktop=true"]
+ :jvm-opts ["-Duse-repl=true" "-Dui_scale=1.0" "-Dis-desktop=true" "-Dplatform=desktop"]
:dependencies [[com.badlogicgames.gdx/gdx-tools "1.5.3"]
[org.clojure/tools.nrepl "0.2.7"]
[play-clj-nrepl "0.1.0" :exclusions [play-clj]]
diff --git a/desktop/src-common/advent/core.clj b/desktop/src-common/advent/core.clj
index f8920298..40ecbd21 100644
--- a/desktop/src-common/advent/core.clj
+++ b/desktop/src-common/advent/core.clj
@@ -14,6 +14,7 @@
[advent.screens.safe :as safe]
[advent.screens.fade :as fade]
[advent.steam :as steam]
+ [advent.iap :as iap]
[advent.pathfind])
(:import [com.badlogic.gdx.graphics Pixmap Pixmap$Filter Texture Texture$TextureFilter]
@@ -21,12 +22,13 @@
[com.badlogic.gdx Gdx Application]
[java.io FileOutputStream File PrintStream]))
-(def has-purchased? (atom false))
-
(defonce am (asset-manager))
+
(set-asset-manager! am)
(defn create-game [advent]
+ (iap/use-pref)
+
(set-screen-wrapper! (fn [screen screen-fn]
(try (screen-fn)
(catch Exception e
diff --git a/desktop/src-common/advent/screens/rooms/dream.clj b/desktop/src-common/advent/screens/rooms/dream.clj
index 8879a92d..d355da2f 100644
--- a/desktop/src-common/advent/screens/rooms/dream.clj
+++ b/desktop/src-common/advent/screens/rooms/dream.clj
@@ -16,7 +16,9 @@
[play-clj.math :refer :all]
[play-clj.ui :refer :all]
[play-clj.utils :refer :all]
- [play-clj.g2d :refer :all])
+ [play-clj.g2d :refer :all]
+ [advent.iap :as iap]
+ [advent.ios :as ios])
(:import [com.badlogic.gdx.graphics Color]
[com.badlogic.gdx Application Gdx]))
@@ -378,15 +380,10 @@
:label "Pit of destiny"
:cursor :look
:script (actions/get-script entities
- (println "billing purchased before" @@(resolve 'advent.core/has-purchased?))
- (when-not @@(resolve 'advent.core/has-purchased?)
- (.triggerPurchase (Gdx/app))
- (a/CFBundleSignature
????
CFBundleVersion
- 126
+ 135
+ CFBundleIconName
+ AppIcon
MinimumOSVersion
8.0
LSRequiresIPhoneOS
@@ -56,20 +58,6 @@
UIInterfaceOrientationLandscapeLeft
UIInterfaceOrientationLandscapeRight
- CFBundleIcons
-
- CFBundlePrimaryIcon
-
- CFBundleIconFiles
-
- iTunesArtwork
- Icon
- Icon-60
- Icon-76
- Icon-83.5
-
-
-
ITSAppUsesNonExemptEncryption
diff --git a/ios/project.clj b/ios/project.clj
index 92c61bef..8936b674 100644
--- a/ios/project.clj
+++ b/ios/project.clj
@@ -1,4 +1,5 @@
-(defproject advent "advent-2.0.4"
+(def version (str "2.0." (clojure.string/trim-newline (slurp "../desktop/last-release")) "-snapshot"))
+(defproject advent version
:description "FIXME: write description"
:dependencies [[com.badlogicgames.gdx/gdx "1.9.4"]
[com.badlogicgames.gdx/gdx-backend-robovm "1.9.4"]
@@ -10,12 +11,13 @@
[com.mobidevelop.robovm/robovm-rt "2.3.0"]
[play-clj "0.4.6-BRYCE" :exclusions [com.badlogicgames.gdx/gdx-box2d com.badlogicgames.gdx/gdx-bullet]]]
:source-paths ["src/clojure" "../desktop/src-common"]
+
:java-source-paths ["src/java"]
:plugins [[lein-fruit "0.2.4-SNAPSHOT"]
- [org.skummet/lein-skummet "0.2.2"]
]
:javac-options ["-target" "1.7" "-source" "1.7" "-Xlint:-options"]
- :jvm-opts ["-Dno-steam=true" "-Dclojure.compiler.direct-linking=true" "-Dclojure.compiler.elide-meta=[:doc :file :line :added]"]
+ :jvm-opts ["-Dno-steam=true" "-Dclojure.compiler.direct-linking=true" "-Dclojure.compiler.elide-meta=[:doc :file :line :added]"
+ "-Dplatform=ios"]
:ios {:robovm-opts ["-config" "robovm.xml"]
:robovm-path "/Users/brycecovert/.robovm-sdks/robovm-2.3.0"
:version 2.1}
diff --git a/ios/resources/Icon-83.5@2x.png b/ios/resources/Icon-83.5@2x.png
index c973b9e2..9860c609 100644
Binary files a/ios/resources/Icon-83.5@2x.png and b/ios/resources/Icon-83.5@2x.png differ
diff --git a/ios/robovm.xml b/ios/robovm.xml
index a6dabfa0..4ba40e05 100644
--- a/ios/robovm.xml
+++ b/ios/robovm.xml
@@ -27,6 +27,8 @@
+
+ org.robovm.apple.storekit.**
advent.**
clojure.genclass*
clojure.gvec*
@@ -98,5 +100,6 @@
OpenAL
AudioToolbox
AVFoundation
+ StoreKit
diff --git a/ios/src/java/advent/core/IOSLauncher.java b/ios/src/java/advent/core/IOSLauncher.java
index 525bdeca..7368892f 100644
--- a/ios/src/java/advent/core/IOSLauncher.java
+++ b/ios/src/java/advent/core/IOSLauncher.java
@@ -1,18 +1,35 @@
package advent.core;
+import java.util.*;
import clojure.lang.RT;
import clojure.lang.Symbol;
+// import advent.ios.*;
import com.badlogic.gdx.*;
import com.badlogic.gdx.backends.iosrobovm.*;
import org.robovm.apple.foundation.*;
-import org.robovm.apple.uikit.UIApplication;
+import org.robovm.apple.uikit.*;
import org.robovm.apple.glkit.GLKViewDrawableColorFormat;
import org.robovm.apple.glkit.GLKViewDrawableDepthFormat;
+import org.robovm.apple.storekit.*;
public class IOSLauncher extends IOSApplication.Delegate {
- protected IOSApplication createApplication() {
+ TransactionObserver transactionObserver;
+ @Override
+ public boolean didFinishLaunching (UIApplication application, UIApplicationLaunchOptions launchOptions) {
+ transactionObserver = new TransactionObserver();
+ SKPaymentQueue.getDefaultQueue().addTransactionObserver(transactionObserver);
+ return super.didFinishLaunching(application, launchOptions);
+ }
+
+ @Override
+ public void willTerminate(UIApplication application) {
+ SKPaymentQueue.getDefaultQueue().removeTransactionObserver(transactionObserver);
+ super.willTerminate(application);
+ }
+
+ protected IOSApplication createApplication() {
IOSApplicationConfiguration config = new IOSApplicationConfiguration();
// config.colorFormat = GLKViewDrawableColorFormat.SRGBA8888;
// config.depthFormat = GLKViewDrawableDepthFormat._24;
@@ -22,8 +39,14 @@ public class IOSLauncher extends IOSApplication.Delegate {
config.useAccelerometer=false;
config.useCompass=false;
System.out.println("application created.");
+ HashSet products = new HashSet();
+ products.add("fullgame");
+ SKProductsRequest request = new SKProductsRequest(products);
+ request.setDelegate(new ProductDelegate());
+ request.start();
RT.var("clojure.core", "require").invoke(Symbol.intern("advent.core"));
+ RT.var("clojure.core", "require").invoke(Symbol.intern("advent.ios"));
System.out.println("clojure loaded");
try {
NSDictionary infoDictionary = NSBundle.getMainBundle().getInfoDictionary();