Files
play-clj/template/src/leiningen/new/play_clj.clj
2014-01-19 20:49:44 -05:00

100 lines
4.8 KiB
Clojure

(ns leiningen.new.play-clj
(:require [clojure.java.io :as io]
[leiningen.core.main :as main]
[leiningen.droid.new :as droid-new]
[leiningen.new.templates :as t]))
(defn play-clj
[name & [package-name]]
(when (contains? #{"game" "main-screen"} name)
(main/abort "Choose a more creative name than that, silly!"))
(let [render (t/renderer "play-clj")
lein-droid-render (droid-new/renderer "templates")
desktop-class-name "desktop-launcher"
android-class-name "AndroidLauncher"
ios-class-name "IOSLauncher"
package-name (t/sanitize (t/multi-segment (or package-name name)))
package-prefix (->> (.lastIndexOf package-name ".")
(subs package-name 0))
main-ns (t/sanitize-ns package-name)
desktop-ns (str main-ns "." desktop-class-name)
android-ns (str package-name "." android-class-name)
ios-ns (str package-name "." ios-class-name)
data {:app-name name
:name (t/project-name name)
:package package-name
:package-sanitized package-name
:package-prefix package-prefix
:desktop-class-name desktop-class-name
:android-class-name android-class-name
:ios-class-name ios-class-name
:activity android-class-name
:namespace main-ns
:desktop-namespace desktop-ns
:android-namespace android-ns
:ios-namespace ios-ns
:path (t/name-to-path main-ns)
:desktop-path (t/name-to-path desktop-ns)
:android-path (t/name-to-path android-ns)
:ios-path (t/name-to-path ios-ns)
:year (t/year)
:target-sdk "15"}]
(t/->files data
; main
["README.md" (render "README.md" data)]
[".gitignore" (render "gitignore" data)]
; desktop
["desktop/project.clj" (render "desktop-project.clj" data)]
["desktop/src-common/{{path}}.clj" (render "core.clj" data)]
["desktop/src/{{desktop-path}}.clj"
(render "desktop-launcher.clj" data)]
"desktop/src-common"
"desktop/src"
"desktop/resources"
; android
["android/project.clj"
(render "android-project.clj" data)]
["android/src/java/{{android-path}}.java"
(render "AndroidLauncher.java" data)]
"android/src/clojure"
["android/AndroidManifest.xml"
(lein-droid-render "AndroidManifest.xml" data)]
["android/res/drawable-hdpi/ic_launcher.png"
(lein-droid-render "ic_launcher_hdpi.png")]
["android/res/drawable-mdpi/ic_launcher.png"
(lein-droid-render "ic_launcher_mdpi.png")]
["android/res/drawable-ldpi/ic_launcher.png"
(lein-droid-render "ic_launcher_ldpi.png")]
["android/res/values/strings.xml"
(lein-droid-render "strings.xml" data)]
["android/res/drawable-hdpi/splash_circle.png"
(lein-droid-render "splash_circle.png")]
["android/res/drawable-hdpi/splash_droid.png"
(lein-droid-render "splash_droid.png")]
["android/res/drawable-hdpi/splash_hands.png"
(lein-droid-render "splash_hands.png")]
["android/res/drawable/splash_background.xml"
(lein-droid-render "splash_background.xml")]
["android/res/anim/splash_rotation.xml"
(lein-droid-render "splash_rotation.xml")]
["android/res/layout/splashscreen.xml"
(lein-droid-render "splashscreen.xml")]
["android/src/java/{{path}}/SplashActivity.java"
(lein-droid-render "SplashActivity.java" data)]
["android/libs/armeabi/libgdx.so"
(-> (io/resource "armeabi-libgdx.so") io/input-stream)]
["android/libs/armeabi-v7a/libgdx.so"
(-> (io/resource "armeabi-v7a-libgdx.so") io/input-stream)]
["android/libs/x86/libgdx.so"
(-> (io/resource "x86-libgdx.so") io/input-stream)]
; ios
["ios/project.clj" (render "ios-project.clj" data)]
["ios/Info.plist.xml" (render "Info.plist.xml" data)]
"ios/src/clojure"
["ios/src/java/{{ios-path}}.java"
(render "IOSLauncher.java" data)]
["ios/libs/libObjectAL.a"
(-> (io/resource "libObjectAL.a") io/input-stream)]
["ios/libs/libgdx.a"
(-> (io/resource "libgdx.a") io/input-stream)])))