├── etc
├── TexturePacker
│ └── .gitkeep
├── gdx-liftoff-VERSION.bat
├── EarlierAssets
│ └── default.png
├── CHANGE_THIS
│ ├── CHANGE_THIS_16.png
│ ├── CHANGE_THIS_24.png
│ ├── CHANGE_THIS_32.png
│ ├── CHANGE_THIS_48.png
│ ├── CHANGE_THIS_64.png
│ ├── CHANGE_THIS_72.png
│ ├── CHANGE_THIS_96.png
│ ├── CHANGE_THIS_128.png
│ ├── CHANGE_THIS_144.png
│ ├── CHANGE_THIS_192.png
│ ├── CHANGE_THIS_256.png
│ └── CHANGE_THIS_512.png
├── gdx-liftoff-non-a-z-name-VERSION.bat
└── tinted.tpproj
├── version.txt
├── .gitattributes
├── icons
├── logo.ico
├── logo.png
├── logo.icns
└── gdx-liftoff.png
├── raw
├── libgdx.png
├── t-dot.png
├── cursor.9.png
├── default.png
├── icon-star.png
├── t-base.9.png
├── t-check.png
├── t-hknob.png
├── t-hline.png
├── t-hslider.png
├── t-radio.png
├── t-vknob.png
├── t-vline.png
├── t-vslider.png
├── gdx-liftoff.png
├── icon-close.png
├── icon-drive.png
├── icon-folder.png
├── icon-minus.png
├── icon-trash.png
├── t-border.9.png
├── t-select-up.png
├── t-select.9.png
├── t-tree-plus.png
├── t-window.9.png
├── icon-arrow-up.png
├── icon-file-pdf.png
├── icon-file-text.png
├── icon-refresh.png
├── t-check-tick.png
├── t-radio-tick.png
├── t-select-down.png
├── t-tree-minus.png
├── icon-arrow-down.png
├── icon-arrow-left.png
├── icon-arrow-right.png
├── icon-file-audio.png
├── icon-file-image.png
├── icon-folder-new.png
├── icon-folder-star.png
├── t-border-circle.png
├── color-picker-cross.png
├── icon-folder-parent.png
├── icon-list-settings.png
├── icon-star-outline.png
├── t-window-border.9.png
├── t-window-resize.9.png
├── color-picker-bar-selector.png
├── color-picker-selector-vertical.png
├── color-picker-selector-horizontal.png
└── pack.json
├── src
└── main
│ ├── resources
│ ├── generator
│ │ ├── html
│ │ │ ├── webapp
│ │ │ │ ├── soundmanager2-setup.js
│ │ │ │ ├── WEB-INF
│ │ │ │ │ └── web.xml
│ │ │ │ ├── refresh.png
│ │ │ │ ├── index.html
│ │ │ │ ├── styles.css
│ │ │ │ └── index_old.html
│ │ │ └── jsr305.gwt.xml
│ │ ├── gitattributes
│ │ ├── raw
│ │ │ └── ui
│ │ │ │ ├── dot.png
│ │ │ │ ├── font.png
│ │ │ │ ├── list.png
│ │ │ │ ├── rect.png
│ │ │ │ ├── check.png
│ │ │ │ ├── knob-h.png
│ │ │ │ ├── knob-v.png
│ │ │ │ ├── line-h.png
│ │ │ │ ├── line-v.png
│ │ │ │ ├── list.9.png
│ │ │ │ ├── radio.png
│ │ │ │ ├── slider.png
│ │ │ │ ├── square.png
│ │ │ │ ├── white.png
│ │ │ │ ├── window.png
│ │ │ │ ├── check-on.png
│ │ │ │ ├── checkbox.png
│ │ │ │ ├── font-list.png
│ │ │ │ ├── scrollbar.png
│ │ │ │ ├── select.9.png
│ │ │ │ ├── selection.png
│ │ │ │ ├── textfield.png
│ │ │ │ ├── tree-plus.png
│ │ │ │ ├── window.9.png
│ │ │ │ ├── font-window.png
│ │ │ │ ├── progress-bar.png
│ │ │ │ ├── radio-over.png
│ │ │ │ ├── scrollbar.9.png
│ │ │ │ ├── select-box.9.png
│ │ │ │ ├── select-box.png
│ │ │ │ ├── selection.9.png
│ │ │ │ ├── slider-knob.png
│ │ │ │ ├── spinner-down.png
│ │ │ │ ├── spinner-up.png
│ │ │ │ ├── textfield.9.png
│ │ │ │ ├── tree-minus.png
│ │ │ │ ├── button-normal.png
│ │ │ │ ├── checkbox-over.png
│ │ │ │ ├── font-subtitle.png
│ │ │ │ ├── radio-selected.png
│ │ │ │ ├── button-normal.9.png
│ │ │ │ ├── checkbox-selected.png
│ │ │ │ ├── progress-bar-knob.png
│ │ │ │ ├── select-box-open.9.png
│ │ │ │ ├── select-box-open.png
│ │ │ │ ├── slider-knob-over.png
│ │ │ │ ├── spinner-down-over.png
│ │ │ │ ├── spinner-textfield.png
│ │ │ │ ├── spinner-up-over.png
│ │ │ │ ├── window-border.9.png
│ │ │ │ ├── window-resize.9.png
│ │ │ │ ├── button-normal-over.png
│ │ │ │ ├── progress-bar-square.png
│ │ │ │ ├── radio-selected-over.png
│ │ │ │ ├── spinner-textfield.9.png
│ │ │ │ ├── spinner-up-pressed.png
│ │ │ │ ├── textfield-selected.png
│ │ │ │ ├── button-normal-over.9.png
│ │ │ │ ├── button-normal-pressed.png
│ │ │ │ ├── checkbox-selected-over.png
│ │ │ │ ├── progress-bar-square.9.png
│ │ │ │ ├── spinner-down-pressed.png
│ │ │ │ ├── textfield-selected.9.png
│ │ │ │ ├── button-normal-pressed.9.png
│ │ │ │ ├── pack.json
│ │ │ │ ├── progress-bar-square-knob.png
│ │ │ │ ├── progress-bar-square-knob.9.png
│ │ │ │ ├── spinner-textfield-selected.png
│ │ │ │ └── spinner-textfield-selected.9.png
│ │ ├── assets
│ │ │ ├── lights.png
│ │ │ ├── ui
│ │ │ │ └── uiskin.png
│ │ │ ├── .gitkeep
│ │ │ └── lights.atlas
│ │ ├── ios
│ │ │ ├── data
│ │ │ │ ├── Media.xcassets
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── Logo.imageset
│ │ │ │ │ │ ├── libgdx@1x.png
│ │ │ │ │ │ ├── libgdx@2x.png
│ │ │ │ │ │ ├── libgdx@3x.png
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ │ │ ├── ipad-app-icon-76@1x.png
│ │ │ │ │ │ ├── ipad-app-icon-76@2x.png
│ │ │ │ │ │ ├── iphone-app-icon-60@2x.png
│ │ │ │ │ │ ├── iphone-app-icon-60@3x.png
│ │ │ │ │ │ ├── app-store-icon-1024@1x.png
│ │ │ │ │ │ ├── ipad-pro-app-icon-83.5@2x.png
│ │ │ │ │ │ ├── ipad-settings-icon-29@1x.png
│ │ │ │ │ │ ├── ipad-settings-icon-29@2x.png
│ │ │ │ │ │ ├── ipad-spotlight-icon-40@1x.png
│ │ │ │ │ │ ├── ipad-spotlight-icon-40@2x.png
│ │ │ │ │ │ ├── iphone-spotlight-icon-40@2x.png
│ │ │ │ │ │ ├── iphone-spotlight-icon-40@3x.png
│ │ │ │ │ │ ├── ipad-notifications-icon-20@1x.png
│ │ │ │ │ │ ├── ipad-notifications-icon-20@2x.png
│ │ │ │ │ │ ├── iphone-notification-icon-20@2x.png
│ │ │ │ │ │ ├── iphone-notification-icon-20@3x.png
│ │ │ │ │ │ ├── iphone-spotlight-settings-icon-29@2x.png
│ │ │ │ │ │ ├── iphone-spotlight-settings-icon-29@3x.png
│ │ │ │ │ │ └── Contents.json
│ │ │ │ ├── PrivacyInfo.xcprivacy
│ │ │ │ └── Base.lproj
│ │ │ │ │ └── LaunchScreen.storyboard
│ │ │ └── Info.plist.xml
│ │ ├── templates
│ │ │ ├── libgdx.png
│ │ │ ├── ktx
│ │ │ │ └── ktx.png
│ │ │ ├── autumn
│ │ │ │ ├── theme.ogg
│ │ │ │ ├── box2d
│ │ │ │ │ ├── dialogs
│ │ │ │ │ │ ├── inactive.lml
│ │ │ │ │ │ ├── switch.lml
│ │ │ │ │ │ ├── controls.lml
│ │ │ │ │ │ ├── settings.lml
│ │ │ │ │ │ └── edit.lml
│ │ │ │ │ ├── game.lml
│ │ │ │ │ ├── loading.lml
│ │ │ │ │ ├── macros
│ │ │ │ │ │ └── global.lml
│ │ │ │ │ ├── menu.lml
│ │ │ │ │ ├── bundle.properties
│ │ │ │ │ ├── bundle_en.properties
│ │ │ │ │ └── bundle_pl.properties
│ │ │ │ ├── bundle.properties
│ │ │ │ ├── bundle_en.properties
│ │ │ │ └── bundle_pl.properties
│ │ │ ├── super-koalio
│ │ │ │ ├── koalio.png
│ │ │ │ ├── tileSet.png
│ │ │ │ └── koalio-single.png
│ │ │ └── isometric-voxel
│ │ │ │ ├── isometric-trpg.png
│ │ │ │ ├── Komiku - Road 4 Fight.ogg
│ │ │ │ ├── isometric-trpg-License.txt
│ │ │ │ └── Cozette-License.txt
│ │ ├── ios-moe
│ │ │ └── xcode
│ │ │ │ ├── ios-moe
│ │ │ │ ├── Media.xcassets
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ │ │ ├── ipad-app-icon-76@1x.png
│ │ │ │ │ │ ├── ipad-app-icon-76@2x.png
│ │ │ │ │ │ ├── app-store-icon-1024@1x.png
│ │ │ │ │ │ ├── iphone-app-icon-60@2x.png
│ │ │ │ │ │ ├── iphone-app-icon-60@3x.png
│ │ │ │ │ │ ├── ipad-pro-app-icon-83.5@2x.png
│ │ │ │ │ │ ├── ipad-settings-icon-29@1x.png
│ │ │ │ │ │ ├── ipad-settings-icon-29@2x.png
│ │ │ │ │ │ ├── ipad-spotlight-icon-40@1x.png
│ │ │ │ │ │ ├── ipad-spotlight-icon-40@2x.png
│ │ │ │ │ │ ├── iphone-spotlight-icon-40@2x.png
│ │ │ │ │ │ ├── iphone-spotlight-icon-40@3x.png
│ │ │ │ │ │ ├── ipad-notifications-icon-20@1x.png
│ │ │ │ │ │ ├── ipad-notifications-icon-20@2x.png
│ │ │ │ │ │ ├── iphone-notification-icon-20@2x.png
│ │ │ │ │ │ ├── iphone-notification-icon-20@3x.png
│ │ │ │ │ │ ├── iphone-spotlight-settings-icon-29@2x.png
│ │ │ │ │ │ ├── iphone-spotlight-settings-icon-29@3x.png
│ │ │ │ │ │ └── Contents.json
│ │ │ │ ├── main.cpp
│ │ │ │ ├── Default.png
│ │ │ │ ├── Default@2x.png
│ │ │ │ ├── Default~ipad.png
│ │ │ │ ├── Default-568h@2x.png
│ │ │ │ ├── Default@2x~ipad.png
│ │ │ │ ├── Default-375w-667h@2x.png
│ │ │ │ ├── Default-375w-812h@3x.png
│ │ │ │ ├── Default-414w-736h@3x.png
│ │ │ │ ├── Default-1024w-1366h@2x~ipad.png
│ │ │ │ └── Info.plist
│ │ │ │ └── ios-moe-Test
│ │ │ │ ├── main.cpp
│ │ │ │ └── Info.plist
│ │ ├── android
│ │ │ ├── ic_launcher-web.png
│ │ │ ├── res
│ │ │ │ ├── drawable-hdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── drawable-mdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── drawable-xhdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── drawable-xxhdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── drawable-xxxhdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── values
│ │ │ │ │ ├── color.xml
│ │ │ │ │ └── styles.xml
│ │ │ │ └── drawable-anydpi-v26
│ │ │ │ │ └── ic_launcher.xml
│ │ │ ├── project.properties
│ │ │ └── proguard-rules.pro
│ │ ├── gradle
│ │ │ ├── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ │ └── gradle-daemon-jvm.properties
│ │ ├── gradlew.bat
│ │ └── gitignore
│ ├── icons
│ │ ├── logo.icns
│ │ ├── logo.ico
│ │ ├── logo.png
│ │ ├── libgdx16.png
│ │ ├── libgdx32.png
│ │ ├── libgdx64.png
│ │ └── libgdx128.png
│ ├── ui-skin
│ │ └── skin.png
│ └── ui-data
│ │ └── defaults.properties
│ ├── kotlin
│ └── gdx
│ │ └── liftoff
│ │ ├── data
│ │ ├── libraries
│ │ │ └── Utilities.kt
│ │ ├── languages
│ │ │ ├── Java.kt
│ │ │ ├── Language.kt
│ │ │ ├── Groovy.kt
│ │ │ ├── Scala.kt
│ │ │ └── Kotlin.kt
│ │ ├── platforms
│ │ │ ├── Assets.kt
│ │ │ ├── Core.kt
│ │ │ ├── Shared.kt
│ │ │ ├── Platform.kt
│ │ │ ├── TeaVM.kt
│ │ │ ├── Server.kt
│ │ │ └── Headless.kt
│ │ ├── templates
│ │ │ ├── official
│ │ │ │ ├── EmptyTemplate.kt
│ │ │ │ ├── ApplicationAdapterTemplate.kt
│ │ │ │ ├── KotlinBasicTemplate.kt
│ │ │ │ ├── KotlinClassicTemplate.kt
│ │ │ │ ├── ClassicTemplate.kt
│ │ │ │ ├── InputProcessorTemplate.kt
│ │ │ │ ├── ApplicationListenerTemplate.kt
│ │ │ │ └── GameTemplate.kt
│ │ │ └── unofficial
│ │ │ │ ├── KtxTemplate.kt
│ │ │ │ └── KiwiTemplate.kt
│ │ └── files
│ │ │ └── gradle
│ │ │ └── GradleFile.kt
│ │ ├── views
│ │ ├── GdxPlatform.kt
│ │ ├── JvmLanguage.kt
│ │ ├── Extension.kt
│ │ └── ProjectTemplate.kt
│ │ └── config
│ │ ├── Configuration.kt
│ │ ├── GdxVersion.kt
│ │ └── LiftoffVersion.kt
│ └── java
│ └── gdx
│ └── liftoff
│ └── ui
│ ├── panels
│ ├── Panel.java
│ ├── GeneratingPanel.java
│ ├── CompletePanel.java
│ └── SocialPanel.java
│ ├── liftofftables
│ ├── LiftoffTable.java
│ ├── AddOnsTable.java
│ ├── ThirdPartyTable.java
│ ├── CompleteTable.java
│ └── SettingsTable.java
│ ├── UserData.java
│ ├── LogoWidget.java
│ ├── dialogs
│ ├── ConfirmDeleteProjectFolder.java
│ ├── ConfirmResetUserData.java
│ └── GradleDialog.java
│ └── OverlayTable.java
├── .github
├── screenshot.png
└── workflows
│ ├── build.yml
│ └── publish-demos.yml
├── gradle
├── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
└── gradle-daemon-jvm.properties
├── settings.gradle
├── .git-blame-ignore-revs
├── .editorconfig
├── gradle.properties
├── .gitignore
└── gradlew.bat
/etc/TexturePacker/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/version.txt:
--------------------------------------------------------------------------------
1 | 1.14.0.3
2 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto eol=lf
2 | *.bat text=auto eol=crlf
3 |
--------------------------------------------------------------------------------
/etc/gdx-liftoff-VERSION.bat:
--------------------------------------------------------------------------------
1 | @echo OFF
2 | START javaw -jar gdx-liftoff-VERSION.jar
--------------------------------------------------------------------------------
/icons/logo.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/icons/logo.ico
--------------------------------------------------------------------------------
/icons/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/icons/logo.png
--------------------------------------------------------------------------------
/raw/libgdx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/libgdx.png
--------------------------------------------------------------------------------
/raw/t-dot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-dot.png
--------------------------------------------------------------------------------
/icons/logo.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/icons/logo.icns
--------------------------------------------------------------------------------
/raw/cursor.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/cursor.9.png
--------------------------------------------------------------------------------
/raw/default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/default.png
--------------------------------------------------------------------------------
/raw/icon-star.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/icon-star.png
--------------------------------------------------------------------------------
/raw/t-base.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-base.9.png
--------------------------------------------------------------------------------
/raw/t-check.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-check.png
--------------------------------------------------------------------------------
/raw/t-hknob.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-hknob.png
--------------------------------------------------------------------------------
/raw/t-hline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-hline.png
--------------------------------------------------------------------------------
/raw/t-hslider.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-hslider.png
--------------------------------------------------------------------------------
/raw/t-radio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-radio.png
--------------------------------------------------------------------------------
/raw/t-vknob.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-vknob.png
--------------------------------------------------------------------------------
/raw/t-vline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-vline.png
--------------------------------------------------------------------------------
/raw/t-vslider.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-vslider.png
--------------------------------------------------------------------------------
/src/main/resources/generator/html/webapp/soundmanager2-setup.js:
--------------------------------------------------------------------------------
1 | window.SM2_DEFER = true;
--------------------------------------------------------------------------------
/raw/gdx-liftoff.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/gdx-liftoff.png
--------------------------------------------------------------------------------
/raw/icon-close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/icon-close.png
--------------------------------------------------------------------------------
/raw/icon-drive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/icon-drive.png
--------------------------------------------------------------------------------
/raw/icon-folder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/icon-folder.png
--------------------------------------------------------------------------------
/raw/icon-minus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/icon-minus.png
--------------------------------------------------------------------------------
/raw/icon-trash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/icon-trash.png
--------------------------------------------------------------------------------
/raw/t-border.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-border.9.png
--------------------------------------------------------------------------------
/raw/t-select-up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-select-up.png
--------------------------------------------------------------------------------
/raw/t-select.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-select.9.png
--------------------------------------------------------------------------------
/raw/t-tree-plus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-tree-plus.png
--------------------------------------------------------------------------------
/raw/t-window.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-window.9.png
--------------------------------------------------------------------------------
/.github/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/.github/screenshot.png
--------------------------------------------------------------------------------
/icons/gdx-liftoff.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/icons/gdx-liftoff.png
--------------------------------------------------------------------------------
/raw/icon-arrow-up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/icon-arrow-up.png
--------------------------------------------------------------------------------
/raw/icon-file-pdf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/icon-file-pdf.png
--------------------------------------------------------------------------------
/raw/icon-file-text.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/icon-file-text.png
--------------------------------------------------------------------------------
/raw/icon-refresh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/icon-refresh.png
--------------------------------------------------------------------------------
/raw/t-check-tick.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-check-tick.png
--------------------------------------------------------------------------------
/raw/t-radio-tick.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-radio-tick.png
--------------------------------------------------------------------------------
/raw/t-select-down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-select-down.png
--------------------------------------------------------------------------------
/raw/t-tree-minus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-tree-minus.png
--------------------------------------------------------------------------------
/src/main/resources/generator/gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto eol=lf
2 | *.bat text=auto eol=crlf
3 |
--------------------------------------------------------------------------------
/raw/icon-arrow-down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/icon-arrow-down.png
--------------------------------------------------------------------------------
/raw/icon-arrow-left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/icon-arrow-left.png
--------------------------------------------------------------------------------
/raw/icon-arrow-right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/icon-arrow-right.png
--------------------------------------------------------------------------------
/raw/icon-file-audio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/icon-file-audio.png
--------------------------------------------------------------------------------
/raw/icon-file-image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/icon-file-image.png
--------------------------------------------------------------------------------
/raw/icon-folder-new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/icon-folder-new.png
--------------------------------------------------------------------------------
/raw/icon-folder-star.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/icon-folder-star.png
--------------------------------------------------------------------------------
/raw/t-border-circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-border-circle.png
--------------------------------------------------------------------------------
/raw/color-picker-cross.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/color-picker-cross.png
--------------------------------------------------------------------------------
/raw/icon-folder-parent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/icon-folder-parent.png
--------------------------------------------------------------------------------
/raw/icon-list-settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/icon-list-settings.png
--------------------------------------------------------------------------------
/raw/icon-star-outline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/icon-star-outline.png
--------------------------------------------------------------------------------
/raw/t-window-border.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-window-border.9.png
--------------------------------------------------------------------------------
/raw/t-window-resize.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/t-window-resize.9.png
--------------------------------------------------------------------------------
/src/main/resources/generator/html/webapp/WEB-INF/web.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/etc/EarlierAssets/default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/etc/EarlierAssets/default.png
--------------------------------------------------------------------------------
/etc/CHANGE_THIS/CHANGE_THIS_16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/etc/CHANGE_THIS/CHANGE_THIS_16.png
--------------------------------------------------------------------------------
/etc/CHANGE_THIS/CHANGE_THIS_24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/etc/CHANGE_THIS/CHANGE_THIS_24.png
--------------------------------------------------------------------------------
/etc/CHANGE_THIS/CHANGE_THIS_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/etc/CHANGE_THIS/CHANGE_THIS_32.png
--------------------------------------------------------------------------------
/etc/CHANGE_THIS/CHANGE_THIS_48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/etc/CHANGE_THIS/CHANGE_THIS_48.png
--------------------------------------------------------------------------------
/etc/CHANGE_THIS/CHANGE_THIS_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/etc/CHANGE_THIS/CHANGE_THIS_64.png
--------------------------------------------------------------------------------
/etc/CHANGE_THIS/CHANGE_THIS_72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/etc/CHANGE_THIS/CHANGE_THIS_72.png
--------------------------------------------------------------------------------
/etc/CHANGE_THIS/CHANGE_THIS_96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/etc/CHANGE_THIS/CHANGE_THIS_96.png
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/raw/color-picker-bar-selector.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/color-picker-bar-selector.png
--------------------------------------------------------------------------------
/src/main/resources/icons/logo.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/icons/logo.icns
--------------------------------------------------------------------------------
/src/main/resources/icons/logo.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/icons/logo.ico
--------------------------------------------------------------------------------
/src/main/resources/icons/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/icons/logo.png
--------------------------------------------------------------------------------
/etc/CHANGE_THIS/CHANGE_THIS_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/etc/CHANGE_THIS/CHANGE_THIS_128.png
--------------------------------------------------------------------------------
/etc/CHANGE_THIS/CHANGE_THIS_144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/etc/CHANGE_THIS/CHANGE_THIS_144.png
--------------------------------------------------------------------------------
/etc/CHANGE_THIS/CHANGE_THIS_192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/etc/CHANGE_THIS/CHANGE_THIS_192.png
--------------------------------------------------------------------------------
/etc/CHANGE_THIS/CHANGE_THIS_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/etc/CHANGE_THIS/CHANGE_THIS_256.png
--------------------------------------------------------------------------------
/etc/CHANGE_THIS/CHANGE_THIS_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/etc/CHANGE_THIS/CHANGE_THIS_512.png
--------------------------------------------------------------------------------
/src/main/resources/icons/libgdx16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/icons/libgdx16.png
--------------------------------------------------------------------------------
/src/main/resources/icons/libgdx32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/icons/libgdx32.png
--------------------------------------------------------------------------------
/src/main/resources/icons/libgdx64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/icons/libgdx64.png
--------------------------------------------------------------------------------
/src/main/resources/ui-skin/skin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/ui-skin/skin.png
--------------------------------------------------------------------------------
/raw/color-picker-selector-vertical.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/color-picker-selector-vertical.png
--------------------------------------------------------------------------------
/src/main/resources/icons/libgdx128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/icons/libgdx128.png
--------------------------------------------------------------------------------
/raw/color-picker-selector-horizontal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/raw/color-picker-selector-horizontal.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/dot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/dot.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/font.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/font.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/list.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/list.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/rect.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/rect.png
--------------------------------------------------------------------------------
/raw/pack.json:
--------------------------------------------------------------------------------
1 | {
2 | duplicatePadding: false,
3 | paddingX: 1,
4 | paddingY: 1,
5 | stripWhitespaceX: true,
6 | stripWhitespaceY: true
7 | }
--------------------------------------------------------------------------------
/src/main/resources/generator/assets/lights.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/assets/lights.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/check.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/check.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/knob-h.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/knob-h.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/knob-v.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/knob-v.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/line-h.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/line-h.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/line-v.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/line-v.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/list.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/list.9.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/radio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/radio.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/slider.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/slider.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/square.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/square.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/white.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/window.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/window.png
--------------------------------------------------------------------------------
/src/main/resources/generator/assets/ui/uiskin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/assets/ui/uiskin.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/check-on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/check-on.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/checkbox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/checkbox.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/font-list.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/font-list.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/scrollbar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/scrollbar.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/select.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/select.9.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/selection.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/selection.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/textfield.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/textfield.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/tree-plus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/tree-plus.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/window.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/window.9.png
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/libgdx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/templates/libgdx.png
--------------------------------------------------------------------------------
/src/main/resources/generator/html/webapp/refresh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/html/webapp/refresh.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/font-window.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/font-window.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/progress-bar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/progress-bar.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/radio-over.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/radio-over.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/scrollbar.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/scrollbar.9.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/select-box.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/select-box.9.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/select-box.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/select-box.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/selection.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/selection.9.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/slider-knob.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/slider-knob.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/spinner-down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/spinner-down.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/spinner-up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/spinner-up.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/textfield.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/textfield.9.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/tree-minus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/tree-minus.png
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/ktx/ktx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/templates/ktx/ktx.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/button-normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/button-normal.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/checkbox-over.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/checkbox-over.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/font-subtitle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/font-subtitle.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/radio-selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/radio-selected.png
--------------------------------------------------------------------------------
/src/main/resources/generator/android/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/android/ic_launcher-web.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/main.cpp:
--------------------------------------------------------------------------------
1 | #include
2 |
3 | int main(int argc, char *argv[]) {
4 | return moevm(argc, argv);
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/button-normal.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/button-normal.9.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/checkbox-selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/checkbox-selected.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/progress-bar-knob.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/progress-bar-knob.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/select-box-open.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/select-box-open.9.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/select-box-open.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/select-box-open.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/slider-knob-over.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/slider-knob-over.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/spinner-down-over.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/spinner-down-over.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/spinner-textfield.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/spinner-textfield.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/spinner-up-over.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/spinner-up-over.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/window-border.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/window-border.9.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/window-resize.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/window-resize.9.png
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/autumn/theme.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/templates/autumn/theme.ogg
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe-Test/main.cpp:
--------------------------------------------------------------------------------
1 | #include
2 |
3 | int main(int argc, char *argv[]) {
4 | return moevm(argc, argv);
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/button-normal-over.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/button-normal-over.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/progress-bar-square.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/progress-bar-square.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/radio-selected-over.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/radio-selected-over.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/spinner-textfield.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/spinner-textfield.9.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/spinner-up-pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/spinner-up-pressed.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/textfield-selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/textfield-selected.png
--------------------------------------------------------------------------------
/src/main/resources/generator/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Default.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/button-normal-over.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/button-normal-over.9.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/button-normal-pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/button-normal-pressed.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/checkbox-selected-over.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/checkbox-selected-over.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/progress-bar-square.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/progress-bar-square.9.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/spinner-down-pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/spinner-down-pressed.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/textfield-selected.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/textfield-selected.9.png
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/super-koalio/koalio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/templates/super-koalio/koalio.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/button-normal-pressed.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/button-normal-pressed.9.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/pack.json:
--------------------------------------------------------------------------------
1 | {
2 | duplicatePadding: false,
3 | paddingX: 1,
4 | paddingY: 1,
5 | stripWhitespaceX: true,
6 | stripWhitespaceY: true
7 | }
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/progress-bar-square-knob.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/progress-bar-square-knob.png
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/super-koalio/tileSet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/templates/super-koalio/tileSet.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Default@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Default@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Default~ipad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Default~ipad.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/progress-bar-square-knob.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/progress-bar-square-knob.9.png
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/spinner-textfield-selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/spinner-textfield-selected.png
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | // Apply the foojay-resolver plugin to allow automatic download of JDKs
3 | id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0"
4 | }
5 |
--------------------------------------------------------------------------------
/src/main/resources/generator/raw/ui/spinner-textfield-selected.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/raw/ui/spinner-textfield-selected.9.png
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/super-koalio/koalio-single.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/templates/super-koalio/koalio-single.png
--------------------------------------------------------------------------------
/src/main/resources/generator/android/res/drawable-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/android/res/drawable-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/src/main/resources/generator/android/res/drawable-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/android/res/drawable-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/src/main/resources/generator/android/res/drawable-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/android/res/drawable-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/src/main/resources/generator/android/res/drawable-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/android/res/drawable-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Default-568h@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Default-568h@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Default@2x~ipad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Default@2x~ipad.png
--------------------------------------------------------------------------------
/src/main/resources/generator/android/res/drawable-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/android/res/drawable-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/isometric-voxel/isometric-trpg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/templates/isometric-voxel/isometric-trpg.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Default-375w-667h@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Default-375w-667h@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Default-375w-812h@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Default-375w-812h@3x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Default-414w-736h@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Default-414w-736h@3x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Default-1024w-1366h@2x~ipad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Default-1024w-1366h@2x~ipad.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/Logo.imageset/libgdx@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios/data/Media.xcassets/Logo.imageset/libgdx@1x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/Logo.imageset/libgdx@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios/data/Media.xcassets/Logo.imageset/libgdx@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/Logo.imageset/libgdx@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios/data/Media.xcassets/Logo.imageset/libgdx@3x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/isometric-voxel/Komiku - Road 4 Fight.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/templates/isometric-voxel/Komiku - Road 4 Fight.ogg
--------------------------------------------------------------------------------
/src/main/resources/generator/assets/.gitkeep:
--------------------------------------------------------------------------------
1 | This file can be deleted if there are any other files present in this folder.
2 | It is only here to ensure this folder is added to Git, instead of being
3 | ignored because it is empty.
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/libraries/Utilities.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.libraries
2 |
3 | private val camelCase = Regex("(.)(\\p{Upper})")
4 |
5 | fun String.camelCaseToKebabCase(): String = replace(camelCase, "$1-$2").lowercase()
6 |
--------------------------------------------------------------------------------
/src/main/resources/generator/android/res/values/color.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #F5A623FF
4 | #FFFFFFFF
5 |
6 |
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/ipad-app-icon-76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/ipad-app-icon-76@1x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/ipad-app-icon-76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/ipad-app-icon-76@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/iphone-app-icon-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/iphone-app-icon-60@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/iphone-app-icon-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/iphone-app-icon-60@3x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/app-store-icon-1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/app-store-icon-1024@1x.png
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/views/GdxPlatform.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.views
2 |
3 | /**
4 | * Should annotate all libGDX platforms.
5 | */
6 | @Target(AnnotationTarget.CLASS)
7 | @Retention(AnnotationRetention.RUNTIME)
8 | annotation class GdxPlatform
9 |
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/ipad-pro-app-icon-83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/ipad-pro-app-icon-83.5@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/ipad-settings-icon-29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/ipad-settings-icon-29@1x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/ipad-settings-icon-29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/ipad-settings-icon-29@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/ipad-spotlight-icon-40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/ipad-spotlight-icon-40@1x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/ipad-spotlight-icon-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/ipad-spotlight-icon-40@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/iphone-spotlight-icon-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/iphone-spotlight-icon-40@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/iphone-spotlight-icon-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/iphone-spotlight-icon-40@3x.png
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/views/JvmLanguage.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.views
2 |
3 | /**
4 | * Should annotate all additional JVM languages.
5 | */
6 | @Target(AnnotationTarget.CLASS)
7 | @Retention(AnnotationRetention.RUNTIME)
8 | annotation class JvmLanguage
9 |
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/ipad-notifications-icon-20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/ipad-notifications-icon-20@1x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/ipad-notifications-icon-20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/ipad-notifications-icon-20@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/iphone-notification-icon-20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/iphone-notification-icon-20@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/iphone-notification-icon-20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/iphone-notification-icon-20@3x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/ipad-app-icon-76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/ipad-app-icon-76@1x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/ipad-app-icon-76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/ipad-app-icon-76@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/autumn/box2d/dialogs/inactive.lml:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/main/resources/generator/android/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/app-store-icon-1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/app-store-icon-1024@1x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/iphone-app-icon-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/iphone-app-icon-60@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/iphone-app-icon-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/iphone-app-icon-60@3x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/iphone-spotlight-settings-icon-29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/iphone-spotlight-settings-icon-29@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/iphone-spotlight-settings-icon-29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/iphone-spotlight-settings-icon-29@3x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/ipad-pro-app-icon-83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/ipad-pro-app-icon-83.5@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/ipad-settings-icon-29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/ipad-settings-icon-29@1x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/ipad-settings-icon-29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/ipad-settings-icon-29@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/ipad-spotlight-icon-40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/ipad-spotlight-icon-40@1x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/ipad-spotlight-icon-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/ipad-spotlight-icon-40@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/autumn/box2d/game.lml:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/iphone-spotlight-icon-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/iphone-spotlight-icon-40@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/iphone-spotlight-icon-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/iphone-spotlight-icon-40@3x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/ipad-notifications-icon-20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/ipad-notifications-icon-20@1x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/ipad-notifications-icon-20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/ipad-notifications-icon-20@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/iphone-notification-icon-20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/iphone-notification-icon-20@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/iphone-notification-icon-20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/iphone-notification-icon-20@3x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/iphone-spotlight-settings-icon-29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/iphone-spotlight-settings-icon-29@2x.png
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/iphone-spotlight-settings-icon-29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libgdx/gdx-liftoff/HEAD/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/iphone-spotlight-settings-icon-29@3x.png
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/views/Extension.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.views
2 |
3 | /**
4 | * Should annotate all third-party extensions.
5 | */
6 | @Target(AnnotationTarget.CLASS)
7 | @Retention(AnnotationRetention.RUNTIME)
8 | annotation class Extension(
9 | val official: Boolean = false,
10 | )
11 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/autumn/bundle.properties:
--------------------------------------------------------------------------------
1 | # loading.lml
2 | loadingTitle=
3 |
4 | # menu.lml
5 | settings=
6 | exit=
7 |
8 | # settings.lml
9 | music=
10 | musicVolume=
11 | toggleMusic=
12 | sound=
13 | soundVolume=
14 | toggleSound=
15 | locale=
16 | en=English
17 | gui=
18 | scale=
19 |
--------------------------------------------------------------------------------
/etc/gdx-liftoff-non-a-z-name-VERSION.bat:
--------------------------------------------------------------------------------
1 | @echo OFF
2 | (IF NOT EXIST "%ProgramData%/gdx-liftoff/temp" MKDIR "%ProgramData%/gdx-liftoff/temp") && SET TMP=temp && copy gdx-liftoff-VERSION.jar "%ProgramData%/gdx-liftoff\gdx-liftoff-VERSION.jar" && (START /D "%ProgramData%/gdx-liftoff" javaw -jar gdx-liftoff-VERSION.jar)
3 |
--------------------------------------------------------------------------------
/src/main/resources/generator/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/views/ProjectTemplate.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.views
2 |
3 | /**
4 | * Should annotate all project templates. Marks if the template is official.
5 | */
6 | @Target(AnnotationTarget.CLASS)
7 | @Retention(AnnotationRetention.RUNTIME)
8 | annotation class ProjectTemplate(
9 | val official: Boolean = false,
10 | )
11 |
--------------------------------------------------------------------------------
/src/main/java/gdx/liftoff/ui/panels/Panel.java:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.ui.panels;
2 |
3 | /**
4 | * Tables can implement this interface to cue the root table to trigger a keyboard focus change when there is a
5 | * transition
6 | */
7 | public interface Panel {
8 | void captureKeyboardFocus();
9 |
10 | void populate(boolean fullscreen);
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/resources/generator/android/res/drawable-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/main/resources/generator/assets/lights.atlas:
--------------------------------------------------------------------------------
1 | lights.png
2 | size:512,512
3 | filter:Linear,Linear
4 | repeat:none
5 | light1
6 | bounds:2,124,128,128
7 | light2
8 | bounds:132,149,80,103
9 | light3
10 | bounds:2,2,120,120
11 | light4
12 | bounds:376,374,44,127
13 | light5
14 | bounds:250,378,124,123
15 | light6
16 | bounds:250,270,119,106
17 | light7
18 | bounds:2,254,246,247
19 |
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/autumn/bundle_en.properties:
--------------------------------------------------------------------------------
1 | # loading.lml
2 | loadingTitle=Loading
3 |
4 | # menu.lml
5 | settings=Settings
6 | exit=Exit
7 |
8 | # settings.lml
9 | music=Music
10 | musicVolume=Music volume:
11 | toggleMusic=Music ON
12 | sound=Sounds
13 | soundVolume=Sounds volume:
14 | toggleSound=Sound ON
15 | locale=Locale
16 | #en=
17 | gui=GUI
18 | scale=Scale:
19 |
--------------------------------------------------------------------------------
/.git-blame-ignore-revs:
--------------------------------------------------------------------------------
1 | # .git-blame-ignore-revs
2 | # Indents in generated sources.
3 | ca745e24aec00712d818835b401cc0ab4b91216e
4 | # Changed tabs to spaces, ran ktlint.
5 | d106b0e1682c527580b947e255f8d76f2a407505
6 | # Unified whitespaces.
7 | bff7d70cfe453d23d888212524dbb0a208d2260a
8 | # Added ktlint.
9 | 01d4cec8e6cff07b4a124b05940a9ec2b16ac5f6
10 | # Update ktlint; lots of changes.
11 | 88f693e90f984d6149dacf7017a16618c284bac5
12 |
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/isometric-voxel/isometric-trpg-License.txt:
--------------------------------------------------------------------------------
1 | Creditting is not required but deeply appreciated!
2 | Use Gustavo Vituri for creditting.
3 | You are free to use all sprites in both personal and commercial projects.
4 | You are free to modify all sprites.
5 | Please do not redistribute this asset.
6 | Do NOT mint NFT's using this asset.
7 |
8 | Accessed on February 10, 2025 from https://gvituri.itch.io/isometric-trpg
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # https://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | indent_style = space
6 | end_of_line = lf
7 | charset = utf-8
8 | trim_trailing_whitespace = true
9 | insert_final_newline = true
10 | indent_size = 4
11 |
12 | [*.{kt,kts,gradle,lml}]
13 | indent_size = 2
14 | max_line_length = 200
15 | # noinspection EditorConfigKeyCorrectness
16 | ktlint_standard_no-wildcard-imports = disabled
17 |
18 | [*.md]
19 | trim_trailing_whitespace = false
20 |
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/autumn/box2d/loading.lml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/autumn/bundle_pl.properties:
--------------------------------------------------------------------------------
1 | # loading.lml
2 | loadingTitle=\u0141adowanie
3 |
4 | # menu.lml
5 | settings=Ustawienia
6 | exit=Zamknij
7 |
8 | # settings.lml
9 | music=Muzyka
10 | musicVolume=G\u0142o\u015Bno\u015B\u0107 muzyki:
11 | toggleMusic=W\u0142\u0105cz
12 | sound=D\u017Awi\u0119k
13 | soundVolume=G\u0142o\u015Bno\u015B\u0107 d\u017Awi\u0119ku:
14 | toggleSound=W\u0142\u0105cz
15 | locale=J\u0119zyk
16 | #en=
17 | gui=GUI
18 | scale=Skala:
19 |
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/autumn/box2d/dialogs/switch.lml:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/Logo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "libgdx@1x.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "libgdx@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "libgdx@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/autumn/box2d/macros/global.lml:
--------------------------------------------------------------------------------
1 |
3 | <:macro alias="setting" replace="content" name="">
4 |
5 |
7 |
8 | {content}
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/main/resources/generator/html/jsr305.gwt.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/autumn/box2d/dialogs/controls.lml:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/languages/Java.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.languages
2 |
3 | import gdx.liftoff.data.files.SourceDirectory
4 | import gdx.liftoff.data.files.path
5 | import gdx.liftoff.data.project.Project
6 |
7 | /**
8 | * Adds Java support to the project.
9 | */
10 | class Java : Language {
11 | override val id = "java-library"
12 | override val version = "11"
13 |
14 | override fun initiate(project: Project) {
15 | project.rootGradle.plugins.add(id)
16 | project.platforms.values.forEach { project.files.add(SourceDirectory(it.id, path("src", "main", "java"))) }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/resources/generator/android/project.properties:
--------------------------------------------------------------------------------
1 | # This file is automatically generated by Android Tools.
2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
3 | #
4 | # This file must be checked in Version Control Systems.
5 | #
6 | # To customize properties used by the Ant build system edit
7 | # "ant.properties", and override values to adapt the script to your
8 | # project structure.
9 | #
10 | # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
11 | #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-rules.pro
12 |
13 | # Project target.
14 | target=android-21
15 |
--------------------------------------------------------------------------------
/src/main/java/gdx/liftoff/ui/liftofftables/LiftoffTable.java:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.ui.liftofftables;
2 |
3 | import com.badlogic.gdx.scenes.scene2d.ui.Table;
4 |
5 | /**
6 | * LiftoffTables are used in the normal workflow of the app. These participate in the animations initiated in the
7 | * RootTable. The abstract methods allow the tables to respond to requests to capture the keyboard focus and to finish
8 | * any internal animations early.
9 | */
10 | public abstract class LiftoffTable extends Table {
11 | public abstract void captureKeyboardFocus();
12 |
13 | public abstract void finishAnimation();
14 |
15 | public abstract void populate();
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/autumn/box2d/menu.lml:
--------------------------------------------------------------------------------
1 |
2 | @play
3 |
4 | @settings
5 |
6 | @controls
7 |
8 | @exit
9 |
10 |
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/autumn/box2d/bundle.properties:
--------------------------------------------------------------------------------
1 | # loading.lml
2 | loadingTitle=
3 |
4 | # menu.lml
5 | menu=
6 | play=
7 | settings=
8 | controls=
9 | exit=
10 |
11 | # settings.lml
12 | music=
13 | musicVolume=
14 | toggleMusic=
15 | sound=
16 | soundVolume=
17 | toggleSound=
18 | locale=
19 | en=English
20 | gui=
21 | fullscreen=
22 | reset=
23 | back=
24 |
25 | # controls.lml
26 | player0=
27 | player1=
28 | player2=
29 | edit=
30 | switch=
31 |
32 | # inactive.lml
33 | error=
34 | notEnoughPlayersPrompt=
35 |
36 | # switch.lml
37 | switchControls=
38 | TOUCH=
39 | KEYBOARD=
40 | PAD=
41 | INACTIVE=
42 |
43 | # edit.lml
44 | editControls=
45 | editControlsPrompt=
46 | touchControlsPrompt=
47 | invertX=
48 | invertY=
49 | invertXY=
50 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/config/Configuration.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.config
2 |
3 | import java.lang.NumberFormatException
4 |
5 | /**
6 | * Configures Autumn MVC application.
7 | */
8 | @Suppress("unused") // Fields accessed via reflection.
9 | class Configuration {
10 | companion object {
11 | const val VERSION = "1.14.0.4-SNAPSHOT"
12 | const val WIDTH = 600
13 | const val HEIGHT = 700
14 | const val PREFERENCES_PATH = "gdx-liftoff-prefs"
15 |
16 | fun parseJavaVersion(version: String): Double {
17 | val d =
18 | try {
19 | version.removePrefix("1.").removeSuffix(".0").toDouble()
20 | } catch (nfe: NumberFormatException) {
21 | 8.0
22 | }
23 | return d
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/resources/ui-data/defaults.properties:
--------------------------------------------------------------------------------
1 | liftoffVersion=1.14.0.4-SNAPSHOT
2 | projectNameDefault=YourProjectName
3 | packageNameDefault=io.github.some_example_name
4 | mainClassNameDefault=Main
5 | platformsDefaultNames=core,lwjgl3
6 | qp_platformsDefaultNames=core,lwjgl3,android,ios,html
7 | languagesDefaultNames=
8 | languagesDefaultVersions=
9 | extensionsDefaultNames=
10 | thirdPartyDefaultNames=
11 | templateDefaultName=classic
12 | groovyDefaultVersion=5.0.1
13 | kotlinDefaultVersion=2.2.21
14 | scalaDefaultVersion=3.7.3
15 | libgdxDefaultVersion=1.14.0
16 | javaDefaultVersion=8
17 | appDefaultVersion=1.0.0
18 | gwtPluginDefaultVersion=2.2.7
19 | addGuiAssetsDefault=false
20 | addReadmeDefault=true
21 | gradleTasksDefault=
22 | projectPathDefault=
23 | androidPathDefault=
24 |
--------------------------------------------------------------------------------
/.github/workflows/build.yml:
--------------------------------------------------------------------------------
1 | name: build
2 |
3 | on:
4 | push:
5 | branches: [ master, develop ]
6 | pull_request:
7 | branches: [ master, develop ]
8 |
9 | jobs:
10 | build:
11 | runs-on: ubuntu-latest
12 | strategy:
13 | matrix:
14 | java-version: [17, 21]
15 |
16 | steps:
17 | - name: Repository checkout
18 | uses: actions/checkout@v4
19 | - name: JDK setup
20 | uses: actions/setup-java@v4
21 | with:
22 | java-version: ${{ matrix.java-version }}
23 | distribution: temurin
24 | - name: Gradle setup
25 | uses: gradle/actions/setup-gradle@v5
26 | - name: Build
27 | run: ./gradlew build check
28 | - name: Generate sample project
29 | run: ./gradlew sample
30 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/platforms/Assets.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.platforms
2 |
3 | import gdx.liftoff.data.files.gradle.GradleFile
4 | import gdx.liftoff.data.project.Project
5 |
6 | /**
7 | * Mock-up platform. Represents the `assets/` folder.
8 | */
9 | class Assets : Platform {
10 | companion object {
11 | const val ID = "assets"
12 | }
13 |
14 | override val id = ID
15 | override val order = -1
16 | override val description = ""
17 | override val isStandard = false
18 |
19 | override fun createGradleFile(project: Project): GradleFile = throw UnsupportedOperationException("This is a mock-up project with no Gradle file.")
20 |
21 | override fun initiate(project: Project) = throw UnsupportedOperationException("This is a mock-up project which should not be initiated.")
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/config/GdxVersion.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.config
2 |
3 | /**
4 | * Used to represent and compare libGDX versions using major.minor.revision schema.
5 | */
6 | data class GdxVersion(
7 | val major: Int,
8 | val minor: Int,
9 | val revision: Int,
10 | ) : Comparable {
11 | override operator fun compareTo(other: GdxVersion) = compareValuesBy(this, other, { it.major }, { it.minor }, { it.revision })
12 |
13 | companion object {
14 | fun parseGdxVersion(version: String): GdxVersion? {
15 | val trimmed = version.trim().removeSuffix("-SNAPSHOT")
16 | val parts = trimmed.split('.')
17 | return if (parts.size < 3 || parts.any { it.toIntOrNull() == null }) {
18 | null
19 | } else {
20 | GdxVersion(parts[0].toInt(), parts[1].toInt(), parts[2].toInt())
21 | }
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/languages/Language.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.languages
2 |
3 | import gdx.liftoff.data.platforms.Core
4 | import gdx.liftoff.data.platforms.Shared
5 | import gdx.liftoff.data.project.Project
6 |
7 | /**
8 | * Common interface for additional JVM languages. If the language is optional, its class should be annotated with
9 | * JvmLanguage.
10 | */
11 | interface Language {
12 | val id: String
13 | val version: String
14 |
15 | /**
16 | * Adds language-specific dependencies and plugins.
17 | * @param project is being generated.
18 | */
19 | fun initiate(project: Project)
20 |
21 | fun addDependency(
22 | project: Project,
23 | dependency: String,
24 | ) {
25 | project.getGradleFile(Core.ID).addDependency(dependency)
26 | if (project.hasPlatform(Shared.ID)) {
27 | project.getGradleFile(Shared.ID).addDependency(dependency)
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/config/LiftoffVersion.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.config
2 |
3 | /**
4 | * Used to represent and compare gdx-liftoff versions using major.minor.revision.liftoff schema.
5 | */
6 | data class LiftoffVersion(
7 | val major: Int,
8 | val minor: Int,
9 | val revision: Int,
10 | val liftoff: Int,
11 | ) : Comparable {
12 | override operator fun compareTo(other: LiftoffVersion) = compareValuesBy(this, other, { it.major }, { it.minor }, { it.revision }, { it.liftoff })
13 |
14 | companion object {
15 | fun parseLiftoffVersion(version: String): LiftoffVersion? {
16 | val trimmed = version.trim().removeSuffix("-SNAPSHOT")
17 | val parts = trimmed.split('.')
18 | return if (parts.size < 4 || parts.any { it.toIntOrNull() == null }) {
19 | null
20 | } else {
21 | LiftoffVersion(parts[0].toInt(), parts[1].toInt(), parts[2].toInt(), parts[3].toInt())
22 | }
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/languages/Groovy.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.languages
2 |
3 | import gdx.liftoff.data.files.SourceDirectory
4 | import gdx.liftoff.data.files.path
5 | import gdx.liftoff.data.platforms.Android
6 | import gdx.liftoff.data.platforms.AndroidGradleFile
7 | import gdx.liftoff.data.project.Project
8 | import gdx.liftoff.views.JvmLanguage
9 |
10 | /**
11 | * Adds Groovy support to the project.
12 | */
13 | @JvmLanguage
14 | @Suppress("unused") // Class accessed via reflection.
15 | class Groovy : Language {
16 | override val id = "groovy"
17 | override val version = "5.0.1"
18 |
19 | override fun initiate(project: Project) {
20 | project.rootGradle.plugins.add(id)
21 | project.platforms.values.forEach { project.files.add(SourceDirectory(it.id, path("src", "main", "groovy"))) }
22 | if (project.hasPlatform(Android.ID)) {
23 | val gradleFile = project.getGradleFile(Android.ID) as AndroidGradleFile
24 | gradleFile.srcFolders.add("'src/main/groovy'")
25 | }
26 | addDependency(project, "org.apache.groovy:groovy-all:\$groovyVersion")
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/languages/Scala.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.languages
2 |
3 | import gdx.liftoff.data.files.SourceDirectory
4 | import gdx.liftoff.data.files.path
5 | import gdx.liftoff.data.platforms.Android
6 | import gdx.liftoff.data.platforms.AndroidGradleFile
7 | import gdx.liftoff.data.project.Project
8 | import gdx.liftoff.views.JvmLanguage
9 |
10 | /**
11 | * Adds Scala support to the project.
12 | */
13 | @JvmLanguage
14 | @Suppress("unused") // Class accessed via reflection.
15 | class Scala : Language {
16 | override val id = "scala"
17 | override val version = "3.7.3"
18 |
19 | override fun initiate(project: Project) {
20 | project.rootGradle.plugins.add(id)
21 | project.platforms.values.forEach { project.files.add(SourceDirectory(it.id, path("src", "main", "scala"))) }
22 | if (project.hasPlatform(Android.ID)) {
23 | val gradleFile = project.getGradleFile(Android.ID) as AndroidGradleFile
24 | gradleFile.srcFolders.add("'src/main/scala'")
25 | }
26 | addDependency(project, "org.scala-lang:scala3-library_3:\$scalaVersion")
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/templates/official/EmptyTemplate.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.templates.official
2 |
3 | import gdx.liftoff.data.files.CopiedFile
4 | import gdx.liftoff.data.files.path
5 | import gdx.liftoff.data.platforms.Assets
6 | import gdx.liftoff.data.project.Project
7 | import gdx.liftoff.data.templates.Template
8 | import gdx.liftoff.views.ProjectTemplate
9 |
10 | /**
11 | * Generates no source files.
12 | */
13 | @ProjectTemplate(official = true)
14 | @Suppress("unused") // Referenced via reflection.
15 | class EmptyTemplate : Template {
16 | override val id = "emptyTemplate"
17 | override val description: String
18 | get() = "This project was generated without an `ApplicationListener` implementation."
19 |
20 | override fun apply(project: Project) {
21 | super.apply(project)
22 | project.files.add(
23 | CopiedFile(
24 | projectName = Assets.ID,
25 | original = path("generator", "assets", ".gitkeep"),
26 | path = ".gitkeep",
27 | ),
28 | )
29 | }
30 |
31 | override fun getApplicationListenerContent(project: Project): String = ""
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/autumn/box2d/bundle_en.properties:
--------------------------------------------------------------------------------
1 | # loading.lml
2 | loadingTitle=Loading
3 |
4 | # menu.lml
5 | menu=Main menu
6 | play=Play!
7 | settings=Settings
8 | controls=Controls
9 | exit=Exit
10 |
11 | # settings.lml
12 | music=Music
13 | musicVolume=Music volume:
14 | toggleMusic=Music ON
15 | sound=Sounds
16 | soundVolume=Sounds volume:
17 | toggleSound=Sound ON
18 | locale=Locale
19 | #en=
20 | gui=GUI
21 | fullscreen=Set fullscreen:
22 | reset=Reset
23 | back=Back
24 |
25 | # controls.lml
26 | player0=Player 1: Square
27 | player1=Player 2: Hex
28 | player2=Player 3: Triangle
29 | edit=Edit
30 | switch=Switch
31 |
32 | # inactive.lml
33 | error=Error
34 | notEnoughPlayersPrompt=There are no active players.\nChange player controls.
35 |
36 | # switch.lml
37 | switchControls=Switch controls
38 | TOUCH=Touch/mouse
39 | KEYBOARD=Keyboard
40 | PAD=Joystick/Game pad
41 | INACTIVE=Inactive
42 |
43 | # edit.lml
44 | editControls=Edit controls
45 | editControlsPrompt=Test your controls:
46 | touchControlsPrompt=Tap to jump. Hold to move.
47 | invertX=Invert X
48 | invertY=Invert Y
49 | invertXY=Invert X with Y
50 |
--------------------------------------------------------------------------------
/gradle/gradle-daemon-jvm.properties:
--------------------------------------------------------------------------------
1 | #This file is generated by updateDaemonJvm
2 | toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/73c462e34475aeb6509ab7ba3eda218f/redirect
3 | toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/54001d0b636ad500b432d20ef3d580d0/redirect
4 | toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/73c462e34475aeb6509ab7ba3eda218f/redirect
5 | toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/54001d0b636ad500b432d20ef3d580d0/redirect
6 | toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/29c55e6bad8a0049163f0184625cecd9/redirect
7 | toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/3ac7a5361c25c0b23d933f44bdb0abd9/redirect
8 | toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/73c462e34475aeb6509ab7ba3eda218f/redirect
9 | toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/54001d0b636ad500b432d20ef3d580d0/redirect
10 | toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/28937bb8a7f83f57de92429a9a11c04e/redirect
11 | toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/52fa104f4f641439587f75dd68b31bc2/redirect
12 | toolchainVersion=17
13 |
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/isometric-voxel/Cozette-License.txt:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020, Slavfox
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/main/resources/generator/gradle/gradle-daemon-jvm.properties:
--------------------------------------------------------------------------------
1 | #This file is generated by updateDaemonJvm
2 | toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/73c462e34475aeb6509ab7ba3eda218f/redirect
3 | toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/54001d0b636ad500b432d20ef3d580d0/redirect
4 | toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/73c462e34475aeb6509ab7ba3eda218f/redirect
5 | toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/54001d0b636ad500b432d20ef3d580d0/redirect
6 | toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/29c55e6bad8a0049163f0184625cecd9/redirect
7 | toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/3ac7a5361c25c0b23d933f44bdb0abd9/redirect
8 | toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/73c462e34475aeb6509ab7ba3eda218f/redirect
9 | toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/54001d0b636ad500b432d20ef3d580d0/redirect
10 | toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/28937bb8a7f83f57de92429a9a11c04e/redirect
11 | toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/52fa104f4f641439587f75dd68b31bc2/redirect
12 | toolchainVersion=17
13 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/languages/Kotlin.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.languages
2 |
3 | import gdx.liftoff.data.files.SourceDirectory
4 | import gdx.liftoff.data.files.path
5 | import gdx.liftoff.data.platforms.Android
6 | import gdx.liftoff.data.platforms.AndroidGradleFile
7 | import gdx.liftoff.data.project.Project
8 | import gdx.liftoff.views.JvmLanguage
9 |
10 | /**
11 | * Adds Kotlin support to the project.
12 | */
13 | @JvmLanguage
14 | @Suppress("unused") // Class accessed via reflection.
15 | class Kotlin : Language {
16 | override val id = "kotlin"
17 | override val version = "2.2.21"
18 |
19 | override fun initiate(project: Project) {
20 | project.rootGradle.buildDependencies.add("\"org.jetbrains.kotlin:kotlin-gradle-plugin:\$kotlinVersion\"")
21 | project.rootGradle.plugins.add(id)
22 | project.platforms.values.forEach { project.files.add(SourceDirectory(it.id, path("src", "main", "kotlin"))) }
23 | if (project.hasPlatform(Android.ID)) {
24 | val gradleFile = project.getGradleFile(Android.ID) as AndroidGradleFile
25 | gradleFile.insertLatePlugin()
26 | gradleFile.srcFolders.add("'src/main/kotlin'")
27 | }
28 | addDependency(project, "org.jetbrains.kotlin:kotlin-stdlib:\$kotlinVersion")
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/PrivacyInfo.xcprivacy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | NSPrivacyAccessedAPITypes
6 |
7 |
8 | NSPrivacyAccessedAPIType
9 | NSPrivacyAccessedAPICategoryDiskSpace
10 | NSPrivacyAccessedAPITypeReasons
11 |
12 | E174.1
13 |
14 |
15 |
16 | NSPrivacyAccessedAPIType
17 | NSPrivacyAccessedAPICategoryFileTimestamp
18 | NSPrivacyAccessedAPITypeReasons
19 |
20 | C617.1
21 |
22 |
23 |
24 | NSPrivacyAccessedAPIType
25 | NSPrivacyAccessedAPICategorySystemBootTime
26 | NSPrivacyAccessedAPITypeReasons
27 |
28 | 35F9.1
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/autumn/box2d/bundle_pl.properties:
--------------------------------------------------------------------------------
1 | # loading.lml
2 | loadingTitle=\u0141adowanie
3 |
4 | # menu.lml
5 | menu=Menu g\u0142\u00F3wne
6 | play=Zagraj!
7 | settings=Ustawienia
8 | controls=Sterowanie
9 | exit=Zamknij
10 |
11 | # settings.lml
12 | music=Muzyka
13 | musicVolume=G\u0142o\u015Bno\u015B\u0107 muzyki:
14 | toggleMusic=W\u0142\u0105cz
15 | sound=D\u017Awi\u0119k
16 | soundVolume=G\u0142o\u015Bno\u015B\u0107 d\u017Awi\u0119ku:
17 | toggleSound=W\u0142\u0105cz
18 | locale=J\u0119zyk
19 | #en=
20 | gui=GUI
21 | fullscreen=Ustaw pe\u0142ny ekran:
22 | reset=Przywr\u00F3\u0107
23 | back=Powr\u00F3t
24 |
25 | # controls.lml
26 | player0=Gracz 1: Kwadrat
27 | player1=Gracz 2: Heks
28 | player2=Gracz 3: Tr\u00F3k\u0105t
29 | edit=Edytuj
30 | switch=Zmie\u0144
31 |
32 | # inactive.lml
33 | error=B\u0142\u0105d
34 | notEnoughPlayersPrompt=Brak aktywnych graczy.\nZmie\u0144 sterowanie graczy.
35 |
36 | # switch.lml
37 | switchControls=Zmie\u0144 sterowanie
38 | TOUCH=Dotyk/myszka
39 | KEYBOARD=Klawiatura
40 | PAD=Joystick/Game pad
41 | INACTIVE=Nieaktywny
42 |
43 | # edit.lml
44 | editControls=Edytuj sterowanie
45 | editControlsPrompt=Przetestuj sterowanie:
46 | touchControlsPrompt=Kliknij, by podskoczy\u0107.\nPrzytrzymaj, by si\u0119 porusza\u0107.
47 | invertX=Odwr\u00F3\u0107 X
48 | invertY=Odwr\u00F3\u0107 Y
49 | invertXY=Zamie\u0144 X z Y
50 |
--------------------------------------------------------------------------------
/src/main/java/gdx/liftoff/ui/UserData.java:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.ui;
2 |
3 | import java.util.ArrayList;
4 | import java.util.LinkedHashMap;
5 | import java.util.LinkedHashSet;
6 |
7 | public class UserData {
8 | public static String projectName;
9 | public static String packageName;
10 | public static String mainClassName;
11 | public static ArrayList platforms;
12 | public static LinkedHashSet languages;
13 | public static LinkedHashMap languageVersions;
14 | public static ArrayList extensions;
15 | public static String template;
16 | public static LinkedHashSet thirdPartyLibs;
17 | public static String libgdxVersion;
18 | public static String javaVersion;
19 | public static String appVersion;
20 | public static String gwtPluginVersion;
21 | public static boolean addGuiAssets;
22 | public static boolean addReadme;
23 | public static String gradleTasks;
24 | public static String projectPath;
25 | public static String androidPath;
26 | public static String log;
27 |
28 | public static ArrayList getLanguages() {
29 | ArrayList returnValue = new ArrayList<>();
30 | for (String language : languages) {
31 | returnValue.add(language + " " + languageVersions.get(language));
32 | }
33 | return returnValue;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/main/resources/generator/html/webapp/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | @@libGDX application@@
5 |
6 |
7 |
8 |
9 |
10 |
11 | ↻
12 |
13 |
14 |
15 |
16 |
31 |
32 |
--------------------------------------------------------------------------------
/src/main/resources/generator/html/webapp/styles.css:
--------------------------------------------------------------------------------
1 | canvas {
2 | cursor: default;
3 | outline: none;
4 | }
5 |
6 | body {
7 | background-color: #222222;
8 | margin: 0px;
9 | }
10 |
11 | p {
12 | text-align: center;
13 | color: #eeeeee;
14 | }
15 |
16 | a {
17 | text-align: center;
18 | color: #bbbbff;
19 | }
20 |
21 | .superdev {
22 | color: rgb(37,37,37);
23 | text-shadow: 0px 1px 1px rgba(250,250,250,0.1);
24 | font-size: 50pt;
25 | display: block;
26 | position: relative;
27 | text-decoration: none;
28 | background-color: rgb(83,87,93);
29 | box-shadow: 0px 3px 0px 0px rgb(34,34,34),
30 | 0px 7px 10px 0px rgb(17,17,17),
31 | inset 0px 1px 1px 0px rgba(250, 250, 250, .2),
32 | inset 0px -12px 35px 0px rgba(0, 0, 0, .5);
33 | width: 70px;
34 | height: 70px;
35 | border: 0;
36 | border-radius: 35px;
37 | text-align: center;
38 | line-height: 68px;
39 | }
40 |
41 | .superdev:active {
42 | box-shadow: 0px 0px 0px 0px rgb(34,34,34),
43 | 0px 3px 7px 0px rgb(17,17,17),
44 | inset 0px 1px 1px 0px rgba(250, 250, 250, .2),
45 | inset 0px -10px 35px 5px rgba(0, 0, 0, .5);
46 | background-color: rgb(83,87,93);
47 | top: 3px;
48 | color: #fff;
49 | text-shadow: 0px 0px 3px rgb(250,250,250);
50 | }
51 |
52 | .superdev:hover {
53 | background-color: rgb(100,100,100);
54 | }
55 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/templates/official/ApplicationAdapterTemplate.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.templates.official
2 |
3 | import gdx.liftoff.data.files.CopiedFile
4 | import gdx.liftoff.data.files.path
5 | import gdx.liftoff.data.platforms.Assets
6 | import gdx.liftoff.data.project.Project
7 | import gdx.liftoff.data.templates.Template
8 | import gdx.liftoff.views.ProjectTemplate
9 |
10 | /**
11 | * Extends ApplicationAdapter, overriding no methods. Application does nothing.
12 | */
13 | @ProjectTemplate(official = true)
14 | @Suppress("unused") // Referenced via reflection.
15 | class ApplicationAdapterTemplate : Template {
16 | override val id = "applicationAdapter"
17 | override val description: String
18 | get() =
19 | "This project was generated with a template including simple application launchers and an empty " +
20 | "`ApplicationAdapter` extension."
21 |
22 | override fun apply(project: Project) {
23 | super.apply(project)
24 | project.files.add(
25 | CopiedFile(
26 | projectName = Assets.ID,
27 | original = path("generator", "assets", ".gitkeep"),
28 | path = ".gitkeep",
29 | ),
30 | )
31 | }
32 |
33 | override fun getApplicationListenerContent(project: Project): String =
34 | """package ${project.basic.rootPackage};
35 |
36 | import com.badlogic.gdx.ApplicationAdapter;
37 |
38 | /** {@link com.badlogic.gdx.ApplicationListener} implementation shared by all platforms. */
39 | public class ${project.basic.mainClass} extends ApplicationAdapter {
40 | }"""
41 | }
42 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/platforms/Core.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.platforms
2 |
3 | import gdx.liftoff.data.files.gradle.GradleFile
4 | import gdx.liftoff.data.project.Project
5 | import gdx.liftoff.views.GdxPlatform
6 |
7 | /**
8 | * Represents core application's project, used by all backends.
9 | */
10 | @GdxPlatform
11 | class Core : Platform {
12 | companion object {
13 | const val ID = "core"
14 | const val ORDER = 0
15 | }
16 |
17 | override val id = ID
18 | override val description = "Main module with the application logic shared by all platforms."
19 | override val order = ORDER
20 | override val isStandard = false
21 |
22 | override fun createGradleFile(project: Project): GradleFile = CoreGradleFile()
23 |
24 | override fun initiate(project: Project) {
25 | project.properties["enableGraalNative"] = "false"
26 | // Core has no external dependencies by default.
27 | }
28 | }
29 |
30 | /**
31 | * Gradle file of the core project. Should contain all multi-platform dependencies, like "gdx" itself.
32 | */
33 | class CoreGradleFile : GradleFile(Core.ID) {
34 | init {
35 | addDependency("com.badlogicgames.gdx:gdx:\$gdxVersion")
36 | }
37 |
38 | override fun getContent(): String =
39 | """[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
40 | eclipse.project.name = appName + '-core'
41 |
42 | dependencies {
43 | ${joinDependencies(dependencies, "api")}
44 | if(enableGraalNative == 'true') {
45 | implementation "io.github.berstanio:gdx-svmhelper-annotations:${'$'}graalHelperVersion"
46 | }
47 | }
48 | """
49 | }
50 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/templates/official/KotlinBasicTemplate.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.templates.official
2 |
3 | import gdx.liftoff.data.files.CopiedFile
4 | import gdx.liftoff.data.files.path
5 | import gdx.liftoff.data.platforms.Assets
6 | import gdx.liftoff.data.project.Project
7 | import gdx.liftoff.data.templates.KotlinTemplate
8 | import gdx.liftoff.views.ProjectTemplate
9 |
10 | /**
11 | * Written in Kotlin. Includes Kotlin launchers for each platform.
12 | * Extends ApplicationAdapter, overriding no methods. Application does nothing.
13 | */
14 | @ProjectTemplate(official = true)
15 | @Suppress("unused") // Referenced via reflection.
16 | class KotlinBasicTemplate : KotlinTemplate {
17 | override val id = "kotlinTemplate"
18 | override val description =
19 | "This project was generated with a template that includes Kotlin application " +
20 | "launchers and an empty `ApplicationAdapter` implemented in Kotlin."
21 |
22 | override fun apply(project: Project) {
23 | super.apply(project)
24 | project.files.add(
25 | CopiedFile(
26 | projectName = Assets.ID,
27 | original = path("generator", "assets", ".gitkeep"),
28 | path = ".gitkeep",
29 | ),
30 | )
31 | }
32 |
33 | override fun getApplicationListenerContent(project: Project): String =
34 | """package ${project.basic.rootPackage}
35 |
36 | import com.badlogic.gdx.ApplicationAdapter
37 |
38 | /** [com.badlogic.gdx.ApplicationListener] implementation shared by all platforms. */
39 | class ${project.basic.mainClass} : ApplicationAdapter()
40 | """
41 | }
42 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # This doesn't need to be false, and some projects may be able to take advantage of setting daemon to true.
2 | # We set it to false by default in order to avoid too many daemons from being created and persisting; each needs RAM.
3 | org.gradle.daemon=false
4 | # Sets starting memory usage to 512MB, maximum memory usage to 1GB, and tries to set as much to use Unicode as we can.
5 | org.gradle.jvmargs=-Xms512M -Xmx1G -Dfile.encoding=UTF-8 -Dconsole.encoding=UTF-8
6 | # "Configure on-demand" must be false because it breaks projects that have Android modules. The default is also false.
7 | org.gradle.configureondemand=false
8 | # The logging level determines which messages get shown about how Gradle itself is working, such as if build.gradle
9 | # files are fully future-proof (which they never are, because Gradle constantly deprecates working APIs).
10 | # You can change 'quiet' below to 'lifecycle' to use Gradle's default behavior, which shows some confusing messages.
11 | # You could instead change 'quiet' below to 'info' to see info that's important mainly while debugging build files.
12 | # Note that if you want to use Gradle Build Scans, you should set the below logging level to 'lifecycle', otherwise
13 | # the link to the scan won't get shown at all.
14 | # Documented at: https://docs.gradle.org/current/userguide/command_line_interface.html#sec:command_line_logging
15 | org.gradle.logging.level=lifecycle
16 | liftoffVersion=1.14.0.4-SNAPSHOT
17 | kotlinVersion=2.2.21
18 | gdxVersion=1.14.0
19 | visUiVersion=1.5.7
20 | commonsExecVersion=1.3
21 | lwjgl3Version=3.3.3
22 | nfdVersion=3.3.1
23 |
--------------------------------------------------------------------------------
/src/main/java/gdx/liftoff/ui/panels/GeneratingPanel.java:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.ui.panels;
2 |
3 | import com.badlogic.gdx.scenes.scene2d.ui.Image;
4 | import com.badlogic.gdx.scenes.scene2d.ui.Label;
5 | import com.badlogic.gdx.scenes.scene2d.ui.Table;
6 | import com.badlogic.gdx.utils.Align;
7 | import com.ray3k.stripe.CollapsibleGroup;
8 | import com.ray3k.stripe.CollapsibleGroup.CollapseType;
9 |
10 | import static gdx.liftoff.Main.*;
11 |
12 | /**
13 | * The loading animation displayed before the project is generated
14 | */
15 | public class GeneratingPanel extends Table implements Panel {
16 | public GeneratingPanel(boolean fullscreen) {
17 | populate(fullscreen);
18 | }
19 |
20 | @Override
21 | public void populate(boolean fullscreen) {
22 | //animation image
23 | Image image = new Image(skin, "loading-anim");
24 | add(image);
25 |
26 | row();
27 | CollapsibleGroup collapsibleGroup = new CollapsibleGroup(CollapseType.HORIZONTAL);
28 | add(collapsibleGroup).growX().spaceTop(SPACE_HUGE);
29 |
30 | //generating text big
31 | Label label = new Label(prop.getProperty("generating"), skin, "button-big");
32 | label.setAlignment(Align.center);
33 | collapsibleGroup.addActor(label);
34 |
35 | //generating text small
36 | label = new Label(prop.getProperty("generating"), skin, "button-mid");
37 | label.setAlignment(Align.center);
38 | collapsibleGroup.addActor(label);
39 | }
40 |
41 | @Override
42 | public void captureKeyboardFocus() {
43 |
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | MOE.Main.Class
24 | %PACKAGE%.IOSLauncher
25 | UIApplicationExitsOnSuspend
26 |
27 | UIRequiredDeviceCapabilities
28 |
29 | opengles-2
30 | arm64
31 |
32 | UIRequiresFullScreen
33 |
34 | UISupportedInterfaceOrientations
35 |
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 | UISupportedInterfaceOrientations~ipad
40 |
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe-Test/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | MOE.Main.Class
24 | org.moe.mdt.junit.MoeRemoteTestRunner
25 | UIRequiredDeviceCapabilities
26 |
27 | opengles-2
28 | arm64
29 |
30 | UISupportedInterfaceOrientations
31 |
32 | UIInterfaceOrientationPortrait
33 | UIInterfaceOrientationLandscapeLeft
34 | UIInterfaceOrientationLandscapeRight
35 |
36 | UISupportedInterfaceOrientations~ipad
37 |
38 | UIInterfaceOrientationPortrait
39 | UIInterfaceOrientationPortraitUpsideDown
40 | UIInterfaceOrientationLandscapeLeft
41 | UIInterfaceOrientationLandscapeRight
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/platforms/Shared.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.platforms
2 |
3 | import gdx.liftoff.data.files.gradle.GradleFile
4 | import gdx.liftoff.data.project.Project
5 | import gdx.liftoff.views.GdxPlatform
6 |
7 | /**
8 | * Represents shared project, accessible by both client and server application.
9 | */
10 | @GdxPlatform
11 | class Shared : Platform {
12 | companion object {
13 | const val ID = "shared"
14 | const val ORDER = Server.ORDER + 1
15 | }
16 |
17 | override val id = ID
18 | override val order = ORDER
19 | override val description = "A common module shared by `core` and `server` platforms."
20 | override val isStandard = false
21 |
22 | override fun createGradleFile(project: Project): GradleFile = SharedGradleFile(project)
23 |
24 | override fun initiate(project: Project) {
25 | project.getGradleFile(Core.ID).dependencies.add("project(':$id')")
26 | if (project.hasPlatform(Server.ID)) {
27 | project.getGradleFile(Server.ID).dependencies.add("project(':$id')")
28 | }
29 | if (project.hasPlatform(GWT.ID)) {
30 | // Including shared project sources in GWT platform:
31 | project.getGradleFile(GWT.ID).buildDependencies.add("project(':$id')")
32 | }
33 | }
34 | }
35 |
36 | /**
37 | * Represents shared project Gradle file. Should include dependencies that should be available for both server and
38 | * client applications.
39 | */
40 | class SharedGradleFile(
41 | val project: Project,
42 | ) : GradleFile(Shared.ID) {
43 | override fun getContent(): String =
44 | """eclipse.project.name = appName + '-shared'
45 |
46 | dependencies {
47 | ${joinDependencies(dependencies)}}
48 | """
49 | }
50 |
--------------------------------------------------------------------------------
/.github/workflows/publish-demos.yml:
--------------------------------------------------------------------------------
1 | name: publish-demos
2 | on:
3 | push:
4 | tags:
5 | - '**'
6 | workflow_dispatch:
7 |
8 | jobs:
9 | publish:
10 | runs-on: ubuntu-latest
11 |
12 | steps:
13 | - name: Repository checkout
14 | uses: actions/checkout@v4
15 | - name: JDK setup
16 | uses: actions/setup-java@v4
17 | with:
18 | java-version: 17
19 | distribution: temurin
20 | - name: Gradle setup
21 | uses: gradle/actions/setup-gradle@v5
22 | - name: Generate sample
23 | run: ./gradlew sample --args="default"
24 | - name: Save gdx-liftoff version
25 | run: echo "LIFTOFF_VERSION=$(cat version.txt)" >> $GITHUB_ENV
26 | - name: Publish default sample
27 | uses: JamesIves/github-pages-deploy-action@ec9c88baef04b842ca6f0a132fd61c762aa6c1b0
28 | with:
29 | token: ${{ secrets.DEMO_PUSH }}
30 | branch: main
31 | folder: build/dist/sample
32 | repository-name: libgdx/gdx-liftoff-demo
33 | commit-message: 'Automatic deployment: gdx-liftoff ${{ env.LIFTOFF_VERSION }}.'
34 | - name: Clean basic sample
35 | run: rm -rf build/dist/sample
36 | - name: Generate Kotlin sample
37 | run: ./gradlew sample --args="kotlin"
38 | - name: Publish Kotlin sample
39 | uses: JamesIves/github-pages-deploy-action@ec9c88baef04b842ca6f0a132fd61c762aa6c1b0
40 | with:
41 | token: ${{ secrets.DEMO_PUSH }}
42 | branch: main
43 | folder: build/dist/sample
44 | repository-name: libgdx/gdx-liftoff-demo-kotlin
45 | commit-message: 'Automatic deployment: gdx-liftoff ${{ env.LIFTOFF_VERSION }}.'
46 |
--------------------------------------------------------------------------------
/src/main/resources/generator/html/webapp/index_old.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | libGDX application
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | ↻
14 |
15 |
16 |
17 |
18 |
39 |
40 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/platforms/Platform.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.platforms
2 |
3 | import gdx.liftoff.data.files.CopiedFile
4 | import gdx.liftoff.data.files.gradle.GradleFile
5 | import gdx.liftoff.data.files.path
6 | import gdx.liftoff.data.project.Project
7 |
8 | /**
9 | * Common interface for all supported platforms. Implementation should be annotated with GdxPlatform.
10 | */
11 | interface Platform {
12 | /**
13 | * Unique ID of the platform.
14 | */
15 | val id: String
16 |
17 | /**
18 | * Description of the platform as it appears in the generated project README files.
19 | */
20 | val description: String
21 |
22 | /**
23 | * Display order of the platform within the application.
24 | */
25 | val order: Int
26 |
27 | /**
28 | * This value is set to true if the platform is a standard graphical libGDX backend. False otherwise.
29 | */
30 | val isStandard: Boolean
31 | get() = true
32 |
33 | /**
34 | * Creates a new gradle file used to manage this project's dependencies.
35 | * @param project requests the creation of file.
36 | */
37 | fun createGradleFile(project: Project): GradleFile
38 |
39 | /**
40 | * This method is used to resolve additional dependencies in other projects.
41 | * @param project contains the platform.
42 | */
43 | fun initiate(project: Project)
44 |
45 | fun addCopiedFile(
46 | project: Project,
47 | vararg file: String,
48 | ) {
49 | val originalFile = arrayOf("generator", id) + file
50 | project.files.add(CopiedFile(projectName = id, original = path(*originalFile), path = path(*file)))
51 | }
52 |
53 | fun addGradleTaskDescription(
54 | project: Project,
55 | task: String,
56 | description: String,
57 | ) {
58 | project.addGradleTaskDescription("$id:$task", description)
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/files/gradle/GradleFile.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.files.gradle
2 |
3 | import com.badlogic.gdx.files.FileHandle
4 | import gdx.liftoff.data.files.ProjectFile
5 | import java.io.File
6 |
7 | abstract class GradleFile private constructor(
8 | override val path: String,
9 | ) : ProjectFile {
10 | val buildDependencies = mutableSetOf()
11 | val dependencies = mutableSetOf()
12 | val specialDependencies = mutableSetOf()
13 |
14 | constructor(projectName: String, fileName: String = "build.gradle") : this(
15 | if (projectName.isNotEmpty()) {
16 | projectName + File.separator
17 | } else {
18 | ""
19 | } + fileName,
20 | )
21 |
22 | fun joinDependencies(
23 | dependencies: Collection,
24 | type: String = "implementation",
25 | indent: String = " ",
26 | ): String =
27 | (
28 | if (dependencies.isEmpty()) {
29 | "\n"
30 | } else {
31 | dependencies.sorted().joinToString(prefix = "$indent$type ", separator = "\n$indent$type ", postfix = "\n")
32 | }
33 | ) + (
34 | if (specialDependencies.isEmpty()) {
35 | ""
36 | } else {
37 | specialDependencies.sorted().joinToString(prefix = indent, separator = "\n$indent", postfix = "\n")
38 | }
39 | )
40 |
41 | /**
42 | * @param dependency will be added as an "implementation" or "api" dependency, quoted.
43 | */
44 | fun addDependency(dependency: String) = dependencies.add("\"$dependency\"")
45 |
46 | /**
47 | * @param dependency should have the dependency type specified, and the full dependency vector quoted.
48 | */
49 | fun addSpecialDependency(dependency: String) = specialDependencies.add(dependency)
50 |
51 | override fun save(destination: FileHandle) {
52 | destination.child(path).writeString(getContent(), false, "UTF-8")
53 | }
54 |
55 | abstract fun getContent(): String
56 | }
57 |
--------------------------------------------------------------------------------
/src/main/java/gdx/liftoff/ui/liftofftables/AddOnsTable.java:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.ui.liftofftables;
2 |
3 | import com.badlogic.gdx.scenes.scene2d.ui.Table;
4 | import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
5 | import com.badlogic.gdx.utils.Align;
6 | import gdx.liftoff.ui.panels.AddOnsPanel;
7 |
8 | import static gdx.liftoff.Main.*;
9 |
10 | /**
11 | * This table displays the AddOnsPanel for display in the normal view
12 | */
13 | public class AddOnsTable extends LiftoffTable {
14 | public AddOnsTable() {
15 | populate();
16 | }
17 |
18 | @Override
19 | public void populate() {
20 | clearChildren();
21 | setBackground(skin.getDrawable("black"));
22 | pad(SPACE_LARGE).padLeft(SPACE_HUGE).padRight(SPACE_HUGE);
23 |
24 | //add-ons panel
25 | defaults().space(SPACE_HUGE);
26 | AddOnsPanel addOnsPanel = new AddOnsPanel(false);
27 | add(addOnsPanel).grow().spaceTop(0).maxHeight(500);
28 |
29 | row();
30 | Table table = new Table();
31 | add(table).bottom().growX();
32 |
33 | //previous button
34 | TextButton textButton = new TextButton(prop.getProperty("previous"), skin);
35 | table.add(textButton).uniformX().fillX();
36 | addHandListener(textButton);
37 | addTooltip(textButton, Align.top, prop.getProperty("previousTip"));
38 | onChange(textButton, () -> root.previousTable());
39 |
40 | //an empty space between the cells
41 | table.add().growX().space(SPACE_SMALL);
42 |
43 | //next button
44 | textButton = new TextButton(prop.getProperty("next"), skin);
45 | table.add(textButton).uniformX().fillX();
46 | addHandListener(textButton);
47 | addTooltip(textButton, Align.top, prop.getProperty("nextTip"));
48 | onChange(textButton, () -> root.nextTable());
49 | }
50 |
51 | @Override
52 | public void captureKeyboardFocus() {
53 |
54 | }
55 |
56 | @Override
57 | public void finishAnimation() {
58 |
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/Info.plist.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleDisplayName
8 | ${app.name}
9 | CFBundleExecutable
10 | ${app.executable}
11 | CFBundleIdentifier
12 | ${app.id}
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | ${app.name}
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | ${app.version}
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | ${app.build}
25 | LSRequiresIPhoneOS
26 |
27 | UIViewControllerBasedStatusBarAppearance
28 |
29 | UIStatusBarHidden
30 |
31 | MinimumOSVersion
32 | 12.0
33 | UIDeviceFamily
34 |
35 | 1
36 | 2
37 |
38 | UIRequiredDeviceCapabilities
39 |
40 | opengles-2
41 | arm64
42 |
43 | UISupportedInterfaceOrientations
44 |
45 | UIInterfaceOrientationPortrait
46 | UIInterfaceOrientationPortraitUpsideDown
47 | UIInterfaceOrientationLandscapeLeft
48 | UIInterfaceOrientationLandscapeRight
49 |
50 | UILaunchStoryboardName
51 | LaunchScreen
52 | CFBundleIconName
53 | AppIcon
54 | UIRequiresFullScreen
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/src/main/java/gdx/liftoff/ui/liftofftables/ThirdPartyTable.java:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.ui.liftofftables;
2 |
3 | import com.badlogic.gdx.scenes.scene2d.ui.Table;
4 | import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
5 | import com.badlogic.gdx.utils.Align;
6 | import gdx.liftoff.ui.panels.ThirdPartyPanel;
7 |
8 | import static gdx.liftoff.Main.*;
9 |
10 | /**
11 | * This table displays the third party panel in the normal workflow.
12 | */
13 | public class ThirdPartyTable extends LiftoffTable {
14 | private ThirdPartyPanel thirdPartyPanel;
15 |
16 | public ThirdPartyTable() {
17 | populate();
18 | }
19 |
20 | public void populate() {
21 | clearChildren();
22 | setBackground(skin.getDrawable("black"));
23 | pad(SPACE_LARGE).padLeft(SPACE_HUGE).padRight(SPACE_HUGE);
24 |
25 | //third party panel
26 | defaults().space(SPACE_HUGE);
27 | thirdPartyPanel = new ThirdPartyPanel(false);
28 | add(thirdPartyPanel).grow().spaceTop(0).maxHeight(550);
29 |
30 | row();
31 | Table table = new Table();
32 | add(table).bottom().growX();
33 |
34 | //previous button
35 | TextButton textButton = new TextButton(prop.getProperty("previous"), skin);
36 | table.add(textButton).uniformX().fillX();
37 | addHandListener(textButton);
38 | addTooltip(textButton, Align.top, prop.getProperty("previousTip"));
39 | onChange(textButton, () -> root.previousTable());
40 |
41 | //empty space between the buttons
42 | table.add().growX().space(SPACE_SMALL);
43 |
44 | //next button
45 | textButton = new TextButton(prop.getProperty("next"), skin);
46 | table.add(textButton).uniformX().fillX();
47 | addHandListener(textButton);
48 | addTooltip(textButton, Align.top, prop.getProperty("nextTip"));
49 | onChange(textButton, () -> root.nextTable());
50 | }
51 |
52 | @Override
53 | public void captureKeyboardFocus() {
54 | thirdPartyPanel.captureKeyboardFocus();
55 | }
56 |
57 | @Override
58 | public void finishAnimation() {
59 |
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/src/main/java/gdx/liftoff/ui/panels/CompletePanel.java:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.ui.panels;
2 |
3 | import com.badlogic.gdx.scenes.scene2d.actions.Actions;
4 | import com.badlogic.gdx.scenes.scene2d.ui.Label;
5 | import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
6 | import com.badlogic.gdx.scenes.scene2d.ui.Table;
7 | import com.badlogic.gdx.utils.Align;
8 | import gdx.liftoff.ui.LogoWidget;
9 | import gdx.liftoff.ui.UserData;
10 |
11 | import static gdx.liftoff.Main.*;
12 |
13 | /**
14 | * The panel that displays the result of project generation
15 | */
16 | public class CompletePanel extends Table implements Panel {
17 | public CompletePanel(boolean fullscreen) {
18 | populate(fullscreen);
19 | }
20 |
21 | @Override
22 | public void populate(boolean fullscreen) {
23 | clearChildren();
24 | //logo
25 | defaults().space(SPACE_MEDIUM);
26 | LogoWidget logo = new LogoWidget(true);
27 | add(logo);
28 |
29 | //title
30 | row();
31 | Label label = new Label(prop.getProperty("complete"), skin, "header");
32 | add(label);
33 |
34 | //scrollable area includes the output label only
35 | row();
36 | Table scrollTable = new Table();
37 | scrollTable.pad(SPACE_SMALL);
38 | ScrollPane scrollPane = new ScrollPane(scrollTable, skin);
39 | scrollPane.setFadeScrollBars(false);
40 | scrollPane.setFlickScroll(false);
41 | scrollPane.setScrollingDisabled(true, false);
42 | add(scrollPane).growX().maxWidth(350).maxHeight(300);
43 | addScrollFocusListener(scrollPane);
44 |
45 | //output label
46 | Label outputLabel = new Label(UserData.log, skin, "descriptionWithMarkup");
47 | outputLabel.setWrap(true);
48 | outputLabel.setAlignment(Align.center, Align.center);
49 | scrollTable.add(outputLabel).grow();
50 |
51 | //scroll to the bottom
52 | addAction(Actions.delay(.3f, Actions.run(() -> {
53 | scrollPane.setScrollPercentY(1);
54 | })));
55 | }
56 |
57 | @Override
58 | public void captureKeyboardFocus() {
59 |
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/templates/official/KotlinClassicTemplate.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.templates.official
2 |
3 | import gdx.liftoff.data.files.CopiedFile
4 | import gdx.liftoff.data.files.path
5 | import gdx.liftoff.data.platforms.Assets
6 | import gdx.liftoff.data.project.Project
7 | import gdx.liftoff.data.templates.KotlinTemplate
8 | import gdx.liftoff.views.ProjectTemplate
9 |
10 | /**
11 | * Written in Kotlin. Includes Kotlin launchers for each platform.
12 | * Extends ApplicationAdapter, overriding no methods. Application does nothing.
13 | */
14 | @ProjectTemplate(official = true)
15 | @Suppress("unused") // Referenced via reflection.
16 | class KotlinClassicTemplate : KotlinTemplate {
17 | override val id = "kotlinClassicTemplate"
18 | override val description =
19 | "This project was generated with a template that includes Kotlin application " +
20 | "launchers and draws the libGDX logo within the application listener."
21 |
22 | override fun apply(project: Project) {
23 | super.apply(project)
24 | project.files.add(
25 | CopiedFile(
26 | projectName = Assets.ID,
27 | original = path("generator", "templates", "libgdx.png"),
28 | path = "libgdx.png",
29 | ),
30 | )
31 | }
32 |
33 | override fun getApplicationListenerContent(project: Project): String =
34 | """package ${project.basic.rootPackage}
35 |
36 | import com.badlogic.gdx.ApplicationAdapter
37 | import com.badlogic.gdx.graphics.Texture
38 | import com.badlogic.gdx.graphics.g2d.SpriteBatch
39 | import com.badlogic.gdx.utils.ScreenUtils
40 |
41 | /** [com.badlogic.gdx.ApplicationListener] implementation shared by all platforms. */
42 | class ${project.basic.mainClass} : ApplicationAdapter() {
43 | private val batch by lazy { SpriteBatch() }
44 | private val image by lazy { Texture("libgdx.png") }
45 |
46 | override fun render() {
47 | ScreenUtils.clear(0.15f, 0.15f, 0.2f, 1f)
48 | batch.begin()
49 | batch.draw(image, 140f, 210f)
50 | batch.end()
51 | }
52 |
53 | override fun dispose() {
54 | batch.dispose()
55 | image.dispose()
56 | }
57 | }
58 | """
59 | }
60 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/templates/official/ClassicTemplate.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.templates.official
2 |
3 | import gdx.liftoff.data.files.CopiedFile
4 | import gdx.liftoff.data.files.path
5 | import gdx.liftoff.data.platforms.Assets
6 | import gdx.liftoff.data.project.Project
7 | import gdx.liftoff.data.templates.Template
8 | import gdx.liftoff.views.ProjectTemplate
9 |
10 | /**
11 | * Draws libGDX logo at the center of the screen.
12 | */
13 | @ProjectTemplate(official = true)
14 | open class ClassicTemplate : Template {
15 | override val id = "classic"
16 | override val description: String
17 | get() =
18 | "This project was generated with a template including simple application launchers and an " +
19 | "`ApplicationAdapter` extension that draws libGDX logo."
20 |
21 | override fun apply(project: Project) {
22 | super.apply(project)
23 | project.files.add(
24 | CopiedFile(
25 | projectName = Assets.ID,
26 | original = path("generator", "templates", "libgdx.png"),
27 | path = "libgdx.png",
28 | ),
29 | )
30 | }
31 |
32 | override fun getApplicationListenerContent(project: Project): String =
33 | """package ${project.basic.rootPackage};
34 |
35 | import com.badlogic.gdx.ApplicationAdapter;
36 | import com.badlogic.gdx.graphics.Texture;
37 | import com.badlogic.gdx.graphics.g2d.SpriteBatch;
38 | import com.badlogic.gdx.utils.ScreenUtils;
39 |
40 | /** {@link com.badlogic.gdx.ApplicationListener} implementation shared by all platforms. */
41 | public class ${project.basic.mainClass} extends ApplicationAdapter {
42 | private SpriteBatch batch;
43 | private Texture image;
44 |
45 | @Override
46 | public void create() {
47 | batch = new SpriteBatch();
48 | image = new Texture("libgdx.png");
49 | }
50 |
51 | @Override
52 | public void render() {
53 | ScreenUtils.clear(0.15f, 0.15f, 0.2f, 1f);
54 | batch.begin();
55 | batch.draw(image, 140, 210);
56 | batch.end();
57 | }
58 |
59 | @Override
60 | public void dispose() {
61 | batch.dispose();
62 | image.dispose();
63 | }
64 | }
65 | """
66 | }
67 |
--------------------------------------------------------------------------------
/src/main/java/gdx/liftoff/ui/panels/SocialPanel.java:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.ui.panels;
2 |
3 | import com.badlogic.gdx.Gdx;
4 | import com.badlogic.gdx.scenes.scene2d.ui.Table;
5 | import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
6 | import com.badlogic.gdx.utils.Align;
7 |
8 | import static gdx.liftoff.Main.*;
9 |
10 | /**
11 | * A table to display libGDX related links including libgdx.com, Discord, the wiki, and a recommended JDK.
12 | */
13 | public class SocialPanel extends Table implements Panel {
14 | public SocialPanel(boolean fullscreen) {
15 | populate(fullscreen);
16 | }
17 |
18 | @Override
19 | public void populate(boolean fullscreen) {
20 | defaults().space(SPACE_MEDIUM);
21 |
22 | //libgdx.com
23 | TextButton textButton = new TextButton(prop.getProperty("libgdxButton"), skin, "link");
24 | add(textButton);
25 | addHandListener(textButton);
26 | addTooltip(textButton, Align.top, prop.getProperty("libgdxTip"));
27 | onChange(textButton, () -> Gdx.net.openURI(prop.getProperty("libgdxUrl")));
28 |
29 | //discord
30 | textButton = new TextButton(prop.getProperty("discordButton"), skin, "link");
31 | add(textButton);
32 | addHandListener(textButton);
33 | addTooltip(textButton, Align.top, prop.getProperty("discordTip"));
34 | onChange(textButton, () -> Gdx.net.openURI(prop.getProperty("discordUrl")));
35 |
36 | //wiki
37 | textButton = new TextButton(prop.getProperty("wikiButton"), skin, "link");
38 | add(textButton);
39 | addHandListener(textButton);
40 | addTooltip(textButton, Align.top, prop.getProperty("wikiTip"));
41 | onChange(textButton, () -> Gdx.net.openURI(prop.getProperty("wikiUrl")));
42 |
43 | //jdk
44 | textButton = new TextButton(prop.getProperty("jdkButton"), skin, "link");
45 | add(textButton);
46 | addHandListener(textButton);
47 | addTooltip(textButton, Align.top, prop.getProperty("jdkTip"));
48 | onChange(textButton, () -> Gdx.net.openURI(prop.getProperty("jdkUrl")));
49 | }
50 |
51 | @Override
52 | public void captureKeyboardFocus() {
53 |
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/src/main/java/gdx/liftoff/ui/LogoWidget.java:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.ui;
2 |
3 | import com.badlogic.gdx.scenes.scene2d.Actor;
4 | import com.badlogic.gdx.scenes.scene2d.ui.Container;
5 | import com.badlogic.gdx.scenes.scene2d.ui.Image;
6 | import com.badlogic.gdx.scenes.scene2d.ui.Label;
7 | import com.badlogic.gdx.scenes.scene2d.ui.Table;
8 | import com.badlogic.gdx.utils.Align;
9 | import com.badlogic.gdx.utils.Scaling;
10 | import com.ray3k.stripe.CollapsibleGroup;
11 | import com.ray3k.stripe.CollapsibleGroup.CollapseType;
12 |
13 | import static gdx.liftoff.Main.*;
14 |
15 | /**
16 | * A table containing the logo image and version. It is resizable, hiding elements as necessary to fit in smaller
17 | * spaces.
18 | */
19 | public class LogoWidget extends Table {
20 | public LogoWidget(boolean showVersion) {
21 | CollapsibleGroup verticalCollapsibleGroup = new CollapsibleGroup(CollapseType.VERTICAL);
22 | add(verticalCollapsibleGroup).minHeight(0);
23 |
24 | Container container = new Container<>();
25 | container.minSize(260, 25).maxSize(300, 35).prefWidth(300);
26 | verticalCollapsibleGroup.addActor(container);
27 |
28 | //logo
29 | Image logoImage = new Image(skin, "title-small");
30 | logoImage.setScaling(Scaling.fit);
31 | container.setActor(logoImage);
32 | addTooltip(logoImage, Align.top, prop.getProperty("logoTip"));
33 |
34 | container = new Container<>();
35 | verticalCollapsibleGroup.addActor(container);
36 |
37 | row();
38 | verticalCollapsibleGroup = new CollapsibleGroup(CollapseType.VERTICAL);
39 | add(verticalCollapsibleGroup).minWidth(0).right();
40 |
41 | container = new Container<>();
42 | container.padTop(SPACE_MEDIUM);
43 | verticalCollapsibleGroup.addActor(container);
44 |
45 | if (showVersion) {
46 | //version
47 | Label label = new Label("v" + prop.getProperty("liftoffVersion"), skin);
48 | label.setEllipsis("...");
49 | container.setActor(label);
50 |
51 | container = new Container<>();
52 | verticalCollapsibleGroup.addActor(container);
53 | }
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/src/main/resources/generator/android/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # To enable ProGuard in your project, edit project.properties
2 | # to define the proguard.config property as described in that file.
3 | #
4 | # Add project specific ProGuard rules here.
5 | # By default, the flags in this file are appended to flags specified
6 | # in ${sdk.dir}/tools/proguard/proguard-android.txt
7 | # You can edit the include path and order by changing the ProGuard
8 | # include property in project.properties.
9 | #
10 | # For more details, see
11 | # https://developer.android.com/guide/developing/tools/proguard.html
12 |
13 | # Add any project specific keep options here:
14 |
15 | # If your project uses WebView with JS, uncomment the following
16 | # and specify the fully qualified class name to the JavaScript interface
17 | # class:
18 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
19 | # public *;
20 | #}
21 |
22 | -verbose
23 |
24 | -dontwarn android.support.**
25 | -dontwarn com.badlogic.gdx.backends.android.AndroidFragmentApplication
26 |
27 | # Needed by the gdx-controllers official extension.
28 | -keep class com.badlogic.gdx.controllers.android.AndroidControllers
29 |
30 | # Needed by the Box2D official extension.
31 | -keepclassmembers class com.badlogic.gdx.physics.box2d.World {
32 | boolean contactFilter(long, long);
33 | boolean getUseDefaultContactFilter();
34 | void beginContact(long);
35 | void endContact(long);
36 | void preSolve(long, long);
37 | void postSolve(long, long);
38 | boolean reportFixture(long);
39 | float reportRayFixture(long, float, float, float, float, float);
40 | }
41 |
42 | # You will need the next three lines if you use scene2d for UI or gameplay.
43 | # If you don't use scene2d at all, you can remove or comment out the next line:
44 | -keep public class com.badlogic.gdx.scenes.scene2d.** { *; }
45 | # You will need the next two lines if you use BitmapFont or any scene2d.ui text:
46 | -keep public class com.badlogic.gdx.graphics.g2d.BitmapFont { *; }
47 | # You will probably need this line in most cases:
48 | -keep public class com.badlogic.gdx.graphics.Color { *; }
49 |
50 | # These two lines are used with mapping files; see https://developer.android.com/build/shrink-code#retracing
51 | -keepattributes LineNumberTable,SourceFile
52 | -renamesourcefileattribute SourceFile
53 |
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/autumn/box2d/dialogs/settings.lml:
--------------------------------------------------------------------------------
1 |
52 |
--------------------------------------------------------------------------------
/src/main/resources/generator/templates/autumn/box2d/dialogs/edit.lml:
--------------------------------------------------------------------------------
1 | global.lml
46 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/templates/official/InputProcessorTemplate.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.templates.official
2 |
3 | import gdx.liftoff.data.files.CopiedFile
4 | import gdx.liftoff.data.files.path
5 | import gdx.liftoff.data.platforms.Assets
6 | import gdx.liftoff.data.project.Project
7 | import gdx.liftoff.data.templates.Template
8 | import gdx.liftoff.views.ProjectTemplate
9 |
10 | /**
11 | * Extends InputAdapter, overriding no methods. Sets itself as the input processor.
12 | */
13 | @ProjectTemplate(official = true)
14 | @Suppress("unused") // Referenced via reflection.
15 | class InputProcessorTemplate : Template {
16 | override val id = "inputProcessor"
17 | override val description: String
18 | get() =
19 | "This project was generated with a template including simple application launchers and " +
20 | "an `ApplicationListener` implementation that listens to user input."
21 |
22 | override fun apply(project: Project) {
23 | super.apply(project)
24 | project.files.add(
25 | CopiedFile(
26 | projectName = Assets.ID,
27 | original = path("generator", "assets", ".gitkeep"),
28 | path = ".gitkeep",
29 | ),
30 | )
31 | }
32 |
33 | override fun getApplicationListenerContent(project: Project): String =
34 | """package ${project.basic.rootPackage};
35 |
36 | import com.badlogic.gdx.ApplicationListener;
37 | import com.badlogic.gdx.Gdx;
38 | import com.badlogic.gdx.InputAdapter;
39 |
40 | /** {@link com.badlogic.gdx.ApplicationListener} implementation shared by all platforms. Listens to user input. */
41 | public class ${project.basic.mainClass} extends InputAdapter implements ApplicationListener {
42 | @Override
43 | public void create() {
44 | Gdx.input.setInputProcessor(this);
45 | }
46 |
47 | @Override
48 | public void resize(int width, int height) {
49 | // If the window is minimized on a desktop (LWJGL3) platform, width and height are 0, which causes problems.
50 | // In that case, we don't resize anything, and wait for the window to be a normal size before updating.
51 | if(width <= 0 || height <= 0) return;
52 |
53 | // Resize your screen here. The parameters represent the new window size.
54 | }
55 |
56 | @Override
57 | public void render() {
58 | }
59 |
60 | @Override
61 | public void pause() {
62 | }
63 |
64 | @Override
65 | public void resume() {
66 | }
67 |
68 | @Override
69 | public void dispose() {
70 | }
71 |
72 | // Note: you can override methods from InputAdapter API to handle user's input.
73 | }"""
74 | }
75 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/templates/official/ApplicationListenerTemplate.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.templates.official
2 |
3 | import gdx.liftoff.data.files.CopiedFile
4 | import gdx.liftoff.data.files.path
5 | import gdx.liftoff.data.platforms.Assets
6 | import gdx.liftoff.data.project.Project
7 | import gdx.liftoff.data.templates.Template
8 | import gdx.liftoff.views.ProjectTemplate
9 |
10 | /**
11 | * Adds empty implementation of all ApplicationListener methods. Application does nothing.
12 | */
13 | @ProjectTemplate(official = true)
14 | @Suppress("unused") // Referenced via reflection.
15 | class ApplicationListenerTemplate : Template {
16 | override val id = "applicationListener"
17 | override val description: String
18 | get() =
19 | "This project was generated with a template including simple application launchers and an empty " +
20 | "`ApplicationListener` implementation."
21 |
22 | override fun apply(project: Project) {
23 | super.apply(project)
24 | project.files.add(
25 | CopiedFile(
26 | projectName = Assets.ID,
27 | original = path("generator", "assets", ".gitkeep"),
28 | path = ".gitkeep",
29 | ),
30 | )
31 | }
32 |
33 | override fun getApplicationListenerContent(project: Project): String =
34 | """package ${project.basic.rootPackage};
35 |
36 | import com.badlogic.gdx.ApplicationListener;
37 |
38 | /** {@link com.badlogic.gdx.ApplicationListener} implementation shared by all platforms. */
39 | public class ${project.basic.mainClass} implements ApplicationListener {
40 | @Override
41 | public void create() {
42 | // Prepare your application here.
43 | }
44 |
45 | @Override
46 | public void resize(int width, int height) {
47 | // If the window is minimized on a desktop (LWJGL3) platform, width and height are 0, which causes problems.
48 | // In that case, we don't resize anything, and wait for the window to be a normal size before updating.
49 | if(width <= 0 || height <= 0) return;
50 |
51 | // Resize your application here. The parameters represent the new window size.
52 | }
53 |
54 | @Override
55 | public void render() {
56 | // Draw your application here.
57 | }
58 |
59 | @Override
60 | public void pause() {
61 | // Invoked when your application is paused.
62 | }
63 |
64 | @Override
65 | public void resume() {
66 | // Invoked when your application is resumed after pause.
67 | }
68 |
69 | @Override
70 | public void dispose() {
71 | // Destroy application's resources here.
72 | }
73 | }"""
74 | }
75 |
--------------------------------------------------------------------------------
/src/main/java/gdx/liftoff/ui/dialogs/ConfirmDeleteProjectFolder.java:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.ui.dialogs;
2 |
3 | import com.badlogic.gdx.Gdx;
4 | import com.badlogic.gdx.Input.Keys;
5 | import com.badlogic.gdx.files.FileHandle;
6 | import com.badlogic.gdx.scenes.scene2d.ui.Label;
7 | import com.badlogic.gdx.scenes.scene2d.ui.Table;
8 | import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
9 | import com.badlogic.gdx.scenes.scene2d.ui.Window.WindowStyle;
10 | import com.badlogic.gdx.utils.Align;
11 | import com.ray3k.stripe.PopTable;
12 | import gdx.liftoff.ui.UserData;
13 |
14 | import static gdx.liftoff.Main.*;
15 | import static gdx.liftoff.ui.dialogs.FullscreenDialog.*;
16 |
17 | public class ConfirmDeleteProjectFolder extends PopTable {
18 | public ConfirmDeleteProjectFolder() {
19 | setStyle(skin.get("dialog", WindowStyle.class));
20 | setKeepCenteredInWindow(true);
21 | setHideOnUnfocus(true);
22 | pad(SPACE_LARGE);
23 |
24 | defaults().space(SPACE_LARGE);
25 | Label label = new Label(prop.getProperty("deleteFolderConfirmation"), skin);
26 | label.setWrap(true);
27 | add(label).growX();
28 |
29 | row();
30 | label = new Label("[RED]" + UserData.projectPath + "[]", skin, "descriptionWithMarkup");
31 | label.setWrap(true);
32 | label.setAlignment(Align.center);
33 | add(label).growX().minWidth(300);
34 |
35 | row();
36 | Table table = new Table();
37 | add(table);
38 |
39 | table.defaults().space(SPACE_HUGE);
40 | TextButton deleteButton = new TextButton(prop.getProperty("delete"), skin);
41 | table.add(deleteButton).uniformX().fillX();
42 | addHandListener(deleteButton);
43 | onChange(deleteButton, this::deleteFolderContents);
44 | key(Keys.ENTER, this::deleteFolderContents);
45 |
46 | TextButton cancelButton = new TextButton(prop.getProperty("quickCancel"), skin);
47 | table.add(cancelButton).uniformX().fillX();
48 | addHandListener(cancelButton);
49 | onChange(cancelButton, this::hide);
50 | key(Keys.ESCAPE, this::hide);
51 | }
52 |
53 | private void deleteFolderContents() {
54 | FileHandle fileHandle = Gdx.files.absolute(UserData.projectPath);
55 | for (FileHandle child : fileHandle.list()) {
56 | child.deleteDirectory();
57 | }
58 | Gdx.app.postRunnable(() -> root.settingsTable.updateError());
59 | if (fullscreenDialog != null) fullscreenDialog.updatePathsError();
60 | hide();
61 | }
62 |
63 | public static void showDialog() {
64 | ConfirmDeleteProjectFolder pop = new ConfirmDeleteProjectFolder();
65 | pop.show(stage);
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/platforms/TeaVM.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.platforms
2 |
3 | import gdx.liftoff.data.files.gradle.GradleFile
4 | import gdx.liftoff.data.project.Project
5 | import gdx.liftoff.views.GdxPlatform
6 |
7 | /**
8 | * Represents the unofficial TeaVM web backend created by xpenatan.
9 | */
10 | @GdxPlatform
11 | class TeaVM : Platform {
12 | companion object {
13 | const val ID = "teavm"
14 | const val ORDER = Headless.ORDER + 1
15 | }
16 |
17 | override val id = ID
18 | override val description = "Web backend that supports most JVM languages."
19 | override val order = ORDER
20 | override val isStandard = false
21 |
22 | override fun createGradleFile(project: Project) = TeaVMGradleFile(project)
23 |
24 | override fun initiate(project: Project) {
25 | project.properties["gdxTeaVMVersion"] = project.advanced.gdxTeaVMVersion
26 | addGradleTaskDescription(
27 | project,
28 | "run",
29 | "serves the JavaScript application at http://localhost:8080 via a local Jetty server.",
30 | )
31 | addGradleTaskDescription(
32 | project,
33 | "build",
34 | "builds the JavaScript application into the build/dist/webapp folder.",
35 | )
36 | }
37 | }
38 |
39 | class TeaVMGradleFile(
40 | val project: Project,
41 | ) : GradleFile(TeaVM.ID) {
42 | init {
43 | dependencies.add("project(':${Core.ID}')")
44 |
45 | addDependency("com.github.xpenatan.gdx-teavm:backend-teavm:\$gdxTeaVMVersion")
46 | }
47 |
48 | override fun getContent() =
49 | """plugins {
50 | id 'java'
51 | id 'org.gretty' version "${project.advanced.grettyVersion}"
52 | }
53 |
54 | gretty {
55 | contextPath = '/'
56 | extraResourceBase 'build/dist/webapp'
57 | }
58 |
59 | sourceSets.main.resources.srcDirs += [ rootProject.file('assets').path ]
60 | project.ext.mainClassName = "${project.basic.rootPackage}.teavm.TeaVMBuilder"
61 | eclipse.project.name = appName + "-teavm"
62 |
63 | // This must be at least 11, and no higher than the JDK version this project is built with.
64 | java.targetCompatibility = "${project.advanced.javaVersion}"
65 | // This should probably be equal to targetCompatibility, above. This only affects the TeaVM module.
66 | java.sourceCompatibility = "${project.advanced.javaVersion}"
67 |
68 |
69 | dependencies {
70 | ${joinDependencies(dependencies)}
71 | }
72 |
73 | tasks.register("buildJavaScript", JavaExec) {
74 | dependsOn classes
75 | setDescription("Transpile bytecode to JavaScript via TeaVM")
76 | mainClass.set(project.mainClassName)
77 | setClasspath(sourceSets.main.runtimeClasspath)
78 | }
79 | build.dependsOn buildJavaScript
80 |
81 | tasks.register("run") {
82 | description = "Run the JavaScript application hosted via a local Jetty server at http://localhost:8080/"
83 | dependsOn(buildJavaScript, tasks.named("jettyRun"))
84 | }
85 | """
86 | }
87 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Gradle:
2 | .gradle/
3 | gradle-app.setting
4 | /build/
5 | /android/build/
6 | /core/build/
7 | /lwjgl2/build/
8 | /lwjgl3/build/
9 | /html/build/
10 | /ios/build/
11 | /ios-moe/build/
12 | /headless/build/
13 | /server/build/
14 | /shared/build/
15 | /teavm/build/
16 |
17 | ## Java:
18 | *.class
19 | *.war
20 | *.ear
21 | hs_err_pid*
22 | .attach_pid*
23 |
24 | ## Android:
25 | /android/libs/armeabi-v7a/
26 | /android/libs/arm64-v8a/
27 | /android/libs/x86/
28 | /android/libs/x86_64/
29 | /android/gen/
30 | /android/out/
31 | local.properties
32 | com_crashlytics_export_strings.xml
33 |
34 | ## Robovm:
35 | /ios/robovm-build/
36 | /ios/IOSLauncher.app
37 | /ios/IOSLauncher.app.dSYM
38 |
39 | ## iOS:
40 | /ios-moe/xcode/*.xcodeproj/*
41 | !/ios-moe/xcode/*.xcodeproj/xcshareddata
42 | !/ios-moe/xcode/*.xcodeproj/project.pbxproj
43 | /ios-moe/xcode/native/
44 | /ios-moe/IOSLauncher.app
45 | /ios-moe/IOSLauncher.app.dSYM
46 |
47 | ## GWT:
48 | /html/war/
49 | /html/gwt-unitCache/
50 | .apt_generated/
51 | /html/war/WEB-INF/deploy/
52 | /html/war/WEB-INF/classes/
53 | .gwt/
54 | gwt-unitCache/
55 | www-test/
56 | .gwt-tmp/
57 |
58 | ## TeaVM:
59 | /teavm/webapp/
60 |
61 | ## IntelliJ, Android Studio:
62 | .idea/
63 | *.ipr
64 | *.iws
65 | *.iml
66 |
67 | ## Eclipse:
68 | .classpath
69 | .project
70 | .metadata/
71 | /android/bin/
72 | /core/bin/
73 | /lwjgl2/bin/
74 | /lwjgl3/bin/
75 | /html/bin/
76 | /ios/bin/
77 | /ios-moe/bin/
78 | /headless/bin/
79 | /server/bin/
80 | /shared/bin/
81 | *.tmp
82 | *.bak
83 | *.swp
84 | *~.nib
85 | .settings/
86 | .loadpath
87 | .externalToolBuilders/
88 | *.launch
89 |
90 |
91 | ## NetBeans:
92 |
93 | /nbproject/private/
94 | /android/nbproject/private/
95 | /core/nbproject/private/
96 | /lwjgl2/nbproject/private/
97 | /lwjgl3/nbproject/private/
98 | /html/nbproject/private/
99 | /ios/nbproject/private/
100 | /ios-moe/nbproject/private/
101 | /headless/nbproject/private/
102 | /server/nbproject/private/
103 | /shared/nbproject/private/
104 |
105 | /nbbuild/
106 | /android/nbbuild/
107 | /core/nbbuild/
108 | /lwjgl2/nbbuild/
109 | /lwjgl3/nbbuild/
110 | /html/nbbuild/
111 | /ios/nbbuild/
112 | /ios-moe/nbbuild/
113 | /headless/nbbuild/
114 | /server/nbbuild/
115 | /shared/nbbuild/
116 |
117 | /dist/
118 | /android/dist/
119 | /core/dist/
120 | /lwjgl2/dist/
121 | /lwjgl3/dist/
122 | /html/dist/
123 | /ios/dist/
124 | /ios-moe/dist/
125 | /headless/dist/
126 | /server/dist/
127 | /shared/dist/
128 |
129 | /nbdist/
130 | /android/nbdist/
131 | /core/nbdist/
132 | /lwjgl2/nbdist/
133 | /lwjgl3/nbdist/
134 | /html/nbdist/
135 | /ios/nbdist/
136 | /ios-moe/nbdist/
137 | /headless/nbdist/
138 | /server/nbdist/
139 | /shared/nbdist/
140 |
141 | nbactions.xml
142 | nb-configuration.xml
143 |
144 | ## OS-Specific:
145 | .DS_Store
146 | Thumbs.db
147 |
148 | ## Miscellaneous:
149 | *~
150 | *.*#
151 | *#*#
152 |
153 | /.kotlin/
154 |
--------------------------------------------------------------------------------
/src/main/java/gdx/liftoff/ui/liftofftables/CompleteTable.java:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.ui.liftofftables;
2 |
3 | import com.badlogic.gdx.graphics.Color;
4 | import com.badlogic.gdx.scenes.scene2d.Action;
5 | import com.badlogic.gdx.scenes.scene2d.Touchable;
6 | import com.badlogic.gdx.scenes.scene2d.ui.Table;
7 | import gdx.liftoff.ui.panels.CompleteButtonsPanel;
8 | import gdx.liftoff.ui.panels.CompletePanel;
9 | import gdx.liftoff.ui.panels.GeneratingPanel;
10 |
11 | import static com.badlogic.gdx.scenes.scene2d.actions.Actions.*;
12 | import static gdx.liftoff.Main.*;
13 |
14 | /**
15 | * The final table in the workflow. An animation begins by showing the generating panel first. Then it displays the
16 | * complete and complete buttons panels.
17 | */
18 | public class CompleteTable extends LiftoffTable {
19 | private GeneratingPanel generatingPanel;
20 | private Table completeTable;
21 | private CompletePanel completePanel;
22 |
23 | public CompleteTable() {
24 | populate();
25 | }
26 |
27 | @Override
28 | public void populate() {
29 | clearChildren();
30 | setBackground(skin.getDrawable("black"));
31 | pad(SPACE_LARGE).padLeft(SPACE_HUGE).padRight(SPACE_HUGE);
32 |
33 | //generating panel
34 | generatingPanel = new GeneratingPanel(false);
35 |
36 | completeTable = new Table();
37 | stack(generatingPanel, completeTable);
38 |
39 | //complete panel
40 | completeTable.defaults().space(SPACE_MEDIUM);
41 | completePanel = new CompletePanel(false);
42 | completeTable.add(completePanel);
43 |
44 | //complete buttons panel
45 | completeTable.row();
46 | CompleteButtonsPanel completeButtonsPanel = new CompleteButtonsPanel(false);
47 | completeTable.add(completeButtonsPanel);
48 |
49 | //animation initial setup
50 | completeTable.setColor(CLEAR_WHITE);
51 | completeTable.setTouchable(Touchable.disabled);
52 |
53 | //animation
54 | addAction(sequence(
55 | delay(1f),
56 | new Action() {
57 | @Override
58 | public boolean act(float v) {
59 | if (generatingProject) return false;
60 | else {
61 | completePanel.populate(false);
62 | return true;
63 | }
64 | }
65 | },
66 | targeting(generatingPanel, fadeOut(.3f)),
67 | targeting(completeTable, fadeIn(.3f)),
68 | targeting(completeTable, touchable(Touchable.enabled))
69 | ));
70 | }
71 |
72 | @Override
73 | public void captureKeyboardFocus() {
74 |
75 | }
76 |
77 | @Override
78 | public void finishAnimation() {
79 |
80 | }
81 |
82 | public void showCompletePanel() {
83 | clearActions();
84 | completePanel.populate(false);
85 | generatingPanel.setColor(CLEAR_WHITE);
86 | completeTable.setColor(Color.WHITE);
87 | completeTable.setTouchable(Touchable.enabled);
88 | }
89 | }
90 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/templates/unofficial/KtxTemplate.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.templates.unofficial
2 |
3 | import gdx.liftoff.data.files.CopiedFile
4 | import gdx.liftoff.data.files.path
5 | import gdx.liftoff.data.libraries.unofficial.KtxApp
6 | import gdx.liftoff.data.libraries.unofficial.KtxAssets
7 | import gdx.liftoff.data.libraries.unofficial.KtxAssetsAsync
8 | import gdx.liftoff.data.libraries.unofficial.KtxAsync
9 | import gdx.liftoff.data.libraries.unofficial.KtxFreetypeAsync
10 | import gdx.liftoff.data.libraries.unofficial.KtxGraphics
11 | import gdx.liftoff.data.platforms.Assets
12 | import gdx.liftoff.data.project.Project
13 | import gdx.liftoff.data.templates.KotlinTemplate
14 | import gdx.liftoff.views.ProjectTemplate
15 |
16 | /**
17 | * Basic KTX template. Written in Kotlin. Uses KTX utilities to draw KTX logo.
18 | */
19 | @ProjectTemplate
20 | @Suppress("unused") // Referenced via reflection.
21 | class KtxTemplate : KotlinTemplate {
22 | override val id = "ktxTemplate"
23 | override val description =
24 | "This project was generated with a Kotlin project template that includes Kotlin " +
25 | "application launchers and [KTX](https://libktx.github.io/) utilities."
26 |
27 | override fun apply(project: Project) {
28 | super.apply(project)
29 |
30 | KtxApp().initiate(project)
31 | KtxGraphics().initiate(project)
32 | KtxAssets().initiate(project)
33 |
34 | project.files.add(
35 | CopiedFile(
36 | projectName = Assets.ID,
37 | original = path("generator", "templates", "ktx", "ktx.png"),
38 | path = "logo.png",
39 | ),
40 | )
41 | }
42 |
43 | private val Project.isUsingAsync: Boolean
44 | get() = listOf(KtxAsync(), KtxAssetsAsync(), KtxFreetypeAsync()).map { it.id }.any(extensions::isSelected)
45 |
46 | override fun getApplicationListenerContent(project: Project): String =
47 | """package ${project.basic.rootPackage}
48 |
49 | import com.badlogic.gdx.graphics.Texture
50 | import com.badlogic.gdx.graphics.Texture.TextureFilter.Linear
51 | import com.badlogic.gdx.graphics.g2d.SpriteBatch
52 | import ktx.app.KtxGame
53 | import ktx.app.KtxScreen
54 | import ktx.app.clearScreen
55 | import ktx.assets.disposeSafely
56 | import ktx.assets.toInternalFile${
57 | if (project.isUsingAsync) "\nimport ktx.async.KtxAsync" else ""
58 | }
59 | import ktx.graphics.use
60 |
61 | class ${project.basic.mainClass} : KtxGame() {
62 | override fun create() {${
63 | if (project.isUsingAsync) "\n KtxAsync.initiate()\n" else ""
64 | }
65 | addScreen(FirstScreen())
66 | setScreen()
67 | }
68 | }
69 |
70 | class FirstScreen : KtxScreen {
71 | private val image = Texture("logo.png".toInternalFile(), true).apply { setFilter(Linear, Linear) }
72 | private val batch = SpriteBatch()
73 |
74 | override fun render(delta: Float) {
75 | clearScreen(red = 0.7f, green = 0.7f, blue = 0.7f)
76 | batch.use {
77 | it.draw(image, 100f, 160f)
78 | }
79 | }
80 |
81 | override fun dispose() {
82 | image.disposeSafely()
83 | batch.disposeSafely()
84 | }
85 | }
86 | """
87 | }
88 |
--------------------------------------------------------------------------------
/src/main/java/gdx/liftoff/ui/OverlayTable.java:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.ui;
2 |
3 | import com.badlogic.gdx.Gdx;
4 | import com.badlogic.gdx.scenes.scene2d.Actor;
5 | import com.badlogic.gdx.scenes.scene2d.actions.Actions;
6 | import com.badlogic.gdx.scenes.scene2d.ui.Button;
7 | import com.badlogic.gdx.scenes.scene2d.ui.Container;
8 | import com.badlogic.gdx.scenes.scene2d.ui.Label;
9 | import com.badlogic.gdx.scenes.scene2d.ui.Table;
10 | import com.badlogic.gdx.utils.Align;
11 | import com.ray3k.stripe.CollapsibleGroup;
12 | import com.ray3k.stripe.CollapsibleGroup.CollapseType;
13 | import gdx.liftoff.Main;
14 | import gdx.liftoff.ui.dialogs.ConfirmResetUserData;
15 |
16 | import static gdx.liftoff.Main.*;
17 |
18 | /**
19 | * A simple table to overlay the rest of the UI. This contains the maximize button and version. It implements a reactive
20 | * layout which only display the widgets if the window is large enough to show the root table at its preferred size with
21 | * some padding.
22 | */
23 | public class OverlayTable extends Table {
24 | public OverlayTable() {
25 | pad(SPACE_MEDIUM);
26 |
27 | CollapsibleGroup dualCollapsibleGroup = new CollapsibleGroup(CollapseType.BOTH);
28 | add(dualCollapsibleGroup).grow();
29 |
30 | //a content container that only cares about the minHeight
31 | Container container = new Container<>();
32 | container.minSize(0, ROOT_TABLE_PREF_HEIGHT + 70);
33 | container.fill();
34 | dualCollapsibleGroup.addActor(container);
35 | container.setActor(createContentTable());
36 |
37 | //a content container that only cares about the minWidth
38 | container = new Container<>();
39 | container.minSize(ROOT_TABLE_PREF_WIDTH + 140, 0);
40 | container.fill();
41 | dualCollapsibleGroup.addActor(container);
42 | container.setActor(createContentTable());
43 |
44 | dualCollapsibleGroup.addActor(createMinimalistTable());
45 | }
46 |
47 | private Table createContentTable() {
48 | Table table = new Table();
49 |
50 | Button button = new Button(skin, "reload");
51 | table.add(button).expand().top().right();
52 | addTooltip(button, Align.left, prop.getProperty("reset"));
53 | addHandListener(button);
54 | onChange(button, ConfirmResetUserData::showDialog);
55 |
56 | //version
57 | table.row();
58 | Label label = new Label("v" + prop.getProperty("liftoffVersion"), skin);
59 | table.add(label).expand().bottom().right();
60 |
61 | return table;
62 | }
63 |
64 | private Table createMinimalistTable() {
65 | Table table = new Table();
66 |
67 | Button button = new Button(skin, "reload");
68 | table.add(button).expand().top().right();
69 | addTooltip(button, Align.left, prop.getProperty("reset"));
70 | addHandListener(button);
71 | onChange(button, ConfirmResetUserData::showDialog);
72 | return table;
73 | }
74 |
75 | public void fadeOut() {
76 | addAction(Actions.fadeOut(.5f));
77 | }
78 |
79 | public void fadeIn() {
80 | addAction(Actions.fadeIn(.5f));
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/src/main/java/gdx/liftoff/ui/dialogs/ConfirmResetUserData.java:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.ui.dialogs;
2 |
3 | import com.badlogic.gdx.Gdx;
4 | import com.badlogic.gdx.Input.Keys;
5 | import com.badlogic.gdx.scenes.scene2d.Action;
6 | import com.badlogic.gdx.scenes.scene2d.actions.Actions;
7 | import com.badlogic.gdx.scenes.scene2d.ui.Label;
8 | import com.badlogic.gdx.scenes.scene2d.ui.Table;
9 | import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
10 | import com.badlogic.gdx.scenes.scene2d.ui.Window.WindowStyle;
11 | import com.ray3k.stripe.PopTable;
12 | import gdx.liftoff.Main;
13 |
14 | import static com.badlogic.gdx.scenes.scene2d.actions.Actions.*;
15 | import static gdx.liftoff.Main.*;
16 | import static gdx.liftoff.ui.dialogs.FullscreenCompleteDialog.*;
17 | import static gdx.liftoff.ui.dialogs.FullscreenDialog.*;
18 |
19 | public class ConfirmResetUserData extends PopTable {
20 | public ConfirmResetUserData() {
21 | setStyle(skin.get("dialog", WindowStyle.class));
22 | setKeepCenteredInWindow(true);
23 | setHideOnUnfocus(true);
24 | pad(SPACE_LARGE);
25 |
26 | defaults().space(SPACE_LARGE);
27 | Label label = new Label(prop.getProperty("resetConfirmation"), skin);
28 | label.setWrap(true);
29 | add(label).growX();
30 |
31 | row();
32 | Table table = new Table();
33 | add(table);
34 |
35 | table.defaults().space(SPACE_HUGE);
36 | TextButton resetButton = new TextButton(prop.getProperty("resetButton"), skin);
37 | table.add(resetButton).uniformX().fillX();
38 | addHandListener(resetButton);
39 | onChange(resetButton, this::resetConfirmed);
40 | key(Keys.ENTER, this::resetConfirmed);
41 |
42 | TextButton cancelButton = new TextButton(prop.getProperty("quickCancel"), skin);
43 | table.add(cancelButton).uniformX().fillX();
44 | addHandListener(cancelButton);
45 | onChange(cancelButton, this::cancel);
46 | key(Keys.ESCAPE, this::cancel);
47 | }
48 |
49 | private void resetConfirmed() {
50 | hide();
51 | resetUserData();
52 |
53 | if (fullscreenDialog != null) {
54 | Action action = sequence(alpha(0), Actions.run(() -> fullscreenDialog.populate()), fadeIn(.2f));
55 | fullscreenDialog.addAction(action);
56 | } else if (fullscreenCompleteDialog != null) {
57 | fullscreenCompleteDialog.hide();
58 | FullscreenDialog.show();
59 | } else if (root.getCurrentTable() == root.completeTable) {
60 | root.transitionTable(root.landingTable, true);
61 | } else {
62 | root.getCurrentTable().populate();
63 | root.getCurrentTable().setColor(1, 1, 1, 0);
64 | Gdx.app.postRunnable(() -> root.fadeInTable());
65 | root.getCurrentTable().captureKeyboardFocus();
66 | }
67 | }
68 |
69 | private void cancel() {
70 | hide();
71 | root.getCurrentTable().captureKeyboardFocus();
72 | }
73 |
74 | public static void showDialog() {
75 | stage.setKeyboardFocus(null);
76 | ConfirmResetUserData pop = new ConfirmResetUserData();
77 | pop.show(stage);
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/src/main/resources/generator/ios/data/Media.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "iphone-notification-icon-20@2x.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "iphone-notification-icon-20@3x.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "iphone-spotlight-settings-icon-29@2x.png",
19 | "scale" : "2x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "iphone-spotlight-settings-icon-29@3x.png",
25 | "scale" : "3x"
26 | },
27 | {
28 | "size" : "40x40",
29 | "idiom" : "iphone",
30 | "filename" : "iphone-spotlight-icon-40@2x.png",
31 | "scale" : "2x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "iphone-spotlight-icon-40@3x.png",
37 | "scale" : "3x"
38 | },
39 | {
40 | "size" : "60x60",
41 | "idiom" : "iphone",
42 | "filename" : "iphone-app-icon-60@2x.png",
43 | "scale" : "2x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "iphone-app-icon-60@3x.png",
49 | "scale" : "3x"
50 | },
51 | {
52 | "size" : "20x20",
53 | "idiom" : "ipad",
54 | "filename" : "ipad-notifications-icon-20@1x.png",
55 | "scale" : "1x"
56 | },
57 | {
58 | "size" : "20x20",
59 | "idiom" : "ipad",
60 | "filename" : "ipad-notifications-icon-20@2x.png",
61 | "scale" : "2x"
62 | },
63 | {
64 | "size" : "29x29",
65 | "idiom" : "ipad",
66 | "filename" : "ipad-settings-icon-29@1x.png",
67 | "scale" : "1x"
68 | },
69 | {
70 | "size" : "29x29",
71 | "idiom" : "ipad",
72 | "filename" : "ipad-settings-icon-29@2x.png",
73 | "scale" : "2x"
74 | },
75 | {
76 | "size" : "40x40",
77 | "idiom" : "ipad",
78 | "filename" : "ipad-spotlight-icon-40@1x.png",
79 | "scale" : "1x"
80 | },
81 | {
82 | "size" : "40x40",
83 | "idiom" : "ipad",
84 | "filename" : "ipad-spotlight-icon-40@2x.png",
85 | "scale" : "2x"
86 | },
87 | {
88 | "size" : "76x76",
89 | "idiom" : "ipad",
90 | "filename" : "ipad-app-icon-76@1x.png",
91 | "scale" : "1x"
92 | },
93 | {
94 | "size" : "76x76",
95 | "idiom" : "ipad",
96 | "filename" : "ipad-app-icon-76@2x.png",
97 | "scale" : "2x"
98 | },
99 | {
100 | "size" : "83.5x83.5",
101 | "idiom" : "ipad",
102 | "filename" : "ipad-pro-app-icon-83.5@2x.png",
103 | "scale" : "2x"
104 | },
105 | {
106 | "size" : "1024x1024",
107 | "idiom" : "ios-marketing",
108 | "filename" : "app-store-icon-1024@1x.png",
109 | "scale" : "1x"
110 | }
111 | ],
112 | "info" : {
113 | "version" : 1,
114 | "author" : "xcode"
115 | }
116 | }
--------------------------------------------------------------------------------
/src/main/resources/generator/ios-moe/xcode/ios-moe/Media.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "iphone-notification-icon-20@2x.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "iphone-notification-icon-20@3x.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "iphone-spotlight-settings-icon-29@2x.png",
19 | "scale" : "2x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "iphone-spotlight-settings-icon-29@3x.png",
25 | "scale" : "3x"
26 | },
27 | {
28 | "size" : "40x40",
29 | "idiom" : "iphone",
30 | "filename" : "iphone-spotlight-icon-40@2x.png",
31 | "scale" : "2x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "iphone-spotlight-icon-40@3x.png",
37 | "scale" : "3x"
38 | },
39 | {
40 | "size" : "60x60",
41 | "idiom" : "iphone",
42 | "filename" : "iphone-app-icon-60@2x.png",
43 | "scale" : "2x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "iphone-app-icon-60@3x.png",
49 | "scale" : "3x"
50 | },
51 | {
52 | "size" : "20x20",
53 | "idiom" : "ipad",
54 | "filename" : "ipad-notifications-icon-20@1x.png",
55 | "scale" : "1x"
56 | },
57 | {
58 | "size" : "20x20",
59 | "idiom" : "ipad",
60 | "filename" : "ipad-notifications-icon-20@2x.png",
61 | "scale" : "2x"
62 | },
63 | {
64 | "size" : "29x29",
65 | "idiom" : "ipad",
66 | "filename" : "ipad-settings-icon-29@1x.png",
67 | "scale" : "1x"
68 | },
69 | {
70 | "size" : "29x29",
71 | "idiom" : "ipad",
72 | "filename" : "ipad-settings-icon-29@2x.png",
73 | "scale" : "2x"
74 | },
75 | {
76 | "size" : "40x40",
77 | "idiom" : "ipad",
78 | "filename" : "ipad-spotlight-icon-40@1x.png",
79 | "scale" : "1x"
80 | },
81 | {
82 | "size" : "40x40",
83 | "idiom" : "ipad",
84 | "filename" : "ipad-spotlight-icon-40@2x.png",
85 | "scale" : "2x"
86 | },
87 | {
88 | "size" : "76x76",
89 | "idiom" : "ipad",
90 | "filename" : "ipad-app-icon-76@1x.png",
91 | "scale" : "1x"
92 | },
93 | {
94 | "size" : "76x76",
95 | "idiom" : "ipad",
96 | "filename" : "ipad-app-icon-76@2x.png",
97 | "scale" : "2x"
98 | },
99 | {
100 | "size" : "83.5x83.5",
101 | "idiom" : "ipad",
102 | "filename" : "ipad-pro-app-icon-83.5@2x.png",
103 | "scale" : "2x"
104 | },
105 | {
106 | "size" : "1024x1024",
107 | "idiom" : "ios-marketing",
108 | "filename" : "app-store-icon-1024@1x.png",
109 | "scale" : "1x"
110 | }
111 | ],
112 | "info" : {
113 | "version" : 1,
114 | "author" : "xcode"
115 | }
116 | }
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem
2 | @rem Copyright 2015 the original author or authors.
3 | @rem
4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
5 | @rem you may not use this file except in compliance with the License.
6 | @rem You may obtain a copy of the License at
7 | @rem
8 | @rem https://www.apache.org/licenses/LICENSE-2.0
9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 | @rem SPDX-License-Identifier: Apache-2.0
17 | @rem
18 |
19 | @if "%DEBUG%"=="" @echo off
20 | @rem ##########################################################################
21 | @rem
22 | @rem Gradle startup script for Windows
23 | @rem
24 | @rem ##########################################################################
25 |
26 | @rem Set local scope for the variables with windows NT shell
27 | if "%OS%"=="Windows_NT" setlocal
28 |
29 | set DIRNAME=%~dp0
30 | if "%DIRNAME%"=="" set DIRNAME=.
31 | @rem This is normally unused
32 | set APP_BASE_NAME=%~n0
33 | set APP_HOME=%DIRNAME%
34 |
35 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
36 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
37 |
38 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
39 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
40 |
41 | @rem Find java.exe
42 | if defined JAVA_HOME goto findJavaFromJavaHome
43 |
44 | set JAVA_EXE=java.exe
45 | %JAVA_EXE% -version >NUL 2>&1
46 | if %ERRORLEVEL% equ 0 goto execute
47 |
48 | echo. 1>&2
49 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
50 | echo. 1>&2
51 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2
52 | echo location of your Java installation. 1>&2
53 |
54 | goto fail
55 |
56 | :findJavaFromJavaHome
57 | set JAVA_HOME=%JAVA_HOME:"=%
58 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
59 |
60 | if exist "%JAVA_EXE%" goto execute
61 |
62 | echo. 1>&2
63 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
64 | echo. 1>&2
65 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2
66 | echo location of your Java installation. 1>&2
67 |
68 | goto fail
69 |
70 | :execute
71 | @rem Setup the command line
72 |
73 |
74 |
75 | @rem Execute Gradle
76 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
77 |
78 | :end
79 | @rem End local scope for the variables with windows NT shell
80 | if %ERRORLEVEL% equ 0 goto mainEnd
81 |
82 | :fail
83 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
84 | rem the _cmd.exe /c_ return code!
85 | set EXIT_CODE=%ERRORLEVEL%
86 | if %EXIT_CODE% equ 0 set EXIT_CODE=1
87 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
88 | exit /b %EXIT_CODE%
89 |
90 | :mainEnd
91 | if "%OS%"=="Windows_NT" endlocal
92 |
93 | :omega
94 |
--------------------------------------------------------------------------------
/src/main/resources/generator/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem
2 | @rem Copyright 2015 the original author or authors.
3 | @rem
4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
5 | @rem you may not use this file except in compliance with the License.
6 | @rem You may obtain a copy of the License at
7 | @rem
8 | @rem https://www.apache.org/licenses/LICENSE-2.0
9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 | @rem SPDX-License-Identifier: Apache-2.0
17 | @rem
18 |
19 | @if "%DEBUG%"=="" @echo off
20 | @rem ##########################################################################
21 | @rem
22 | @rem Gradle startup script for Windows
23 | @rem
24 | @rem ##########################################################################
25 |
26 | @rem Set local scope for the variables with windows NT shell
27 | if "%OS%"=="Windows_NT" setlocal
28 |
29 | set DIRNAME=%~dp0
30 | if "%DIRNAME%"=="" set DIRNAME=.
31 | @rem This is normally unused
32 | set APP_BASE_NAME=%~n0
33 | set APP_HOME=%DIRNAME%
34 |
35 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
36 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
37 |
38 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
39 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
40 |
41 | @rem Find java.exe
42 | if defined JAVA_HOME goto findJavaFromJavaHome
43 |
44 | set JAVA_EXE=java.exe
45 | %JAVA_EXE% -version >NUL 2>&1
46 | if %ERRORLEVEL% equ 0 goto execute
47 |
48 | echo. 1>&2
49 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
50 | echo. 1>&2
51 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2
52 | echo location of your Java installation. 1>&2
53 |
54 | goto fail
55 |
56 | :findJavaFromJavaHome
57 | set JAVA_HOME=%JAVA_HOME:"=%
58 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
59 |
60 | if exist "%JAVA_EXE%" goto execute
61 |
62 | echo. 1>&2
63 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
64 | echo. 1>&2
65 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2
66 | echo location of your Java installation. 1>&2
67 |
68 | goto fail
69 |
70 | :execute
71 | @rem Setup the command line
72 |
73 |
74 |
75 | @rem Execute Gradle
76 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
77 |
78 | :end
79 | @rem End local scope for the variables with windows NT shell
80 | if %ERRORLEVEL% equ 0 goto mainEnd
81 |
82 | :fail
83 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
84 | rem the _cmd.exe /c_ return code!
85 | set EXIT_CODE=%ERRORLEVEL%
86 | if %EXIT_CODE% equ 0 set EXIT_CODE=1
87 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
88 | exit /b %EXIT_CODE%
89 |
90 | :mainEnd
91 | if "%OS%"=="Windows_NT" endlocal
92 |
93 | :omega
94 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/templates/unofficial/KiwiTemplate.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.templates.unofficial
2 |
3 | import gdx.liftoff.data.libraries.unofficial.Kiwi
4 | import gdx.liftoff.data.project.Project
5 | import gdx.liftoff.data.templates.official.ClassicTemplate
6 | import gdx.liftoff.views.ProjectTemplate
7 |
8 | /**
9 | * Classic project template using Kiwi utilities.
10 | */
11 | @ProjectTemplate
12 | @Suppress("unused") // Referenced via reflection.
13 | class KiwiTemplate : ClassicTemplate() {
14 | override val id = "lmlKiwiTemplate"
15 | private lateinit var mainClass: String
16 | override val width: String
17 | get() = "$mainClass.WIDTH"
18 | override val height: String
19 | get() = "$mainClass.HEIGHT"
20 | override val description: String
21 | get() =
22 | "Project template included simple launchers and an `AbstractApplicationListener` extension " +
23 | "(from [Kiwi](https://github.com/crashinvaders/gdx-lml/tree/master/kiwi) library) that draws libGDX logo."
24 |
25 | override fun apply(project: Project) {
26 | mainClass = project.basic.mainClass
27 | super.apply(project)
28 | // Adding gdx-kiwi dependency:
29 | Kiwi().initiate(project)
30 | }
31 |
32 | override fun getApplicationListenerContent(project: Project): String =
33 | """package ${project.basic.rootPackage};
34 |
35 | import com.badlogic.gdx.graphics.Texture;
36 | import com.badlogic.gdx.scenes.scene2d.Stage;
37 | import com.badlogic.gdx.scenes.scene2d.ui.Image;
38 | import com.badlogic.gdx.utils.viewport.ScreenViewport;
39 | import com.github.czyzby.kiwi.util.gdx.AbstractApplicationListener;
40 | import com.github.czyzby.kiwi.util.gdx.asset.Disposables;
41 | import com.github.czyzby.kiwi.util.gdx.scene2d.Actors;
42 | import com.github.czyzby.kiwi.util.gdx.viewport.Viewports;
43 |
44 | /** {@link com.badlogic.gdx.ApplicationListener} implementation shared by all platforms. */
45 | public class ${project.basic.mainClass} extends AbstractApplicationListener {
46 | /** Default application size. */
47 | public static final int WIDTH = 640, HEIGHT = 480;
48 |
49 | private Stage stage;
50 | private Texture texture;
51 | private Image image;
52 |
53 | @Override
54 | public void create() {
55 | stage = new Stage();
56 | texture = new Texture("libgdx.png");
57 | image = new Image(texture);
58 | stage.addActor(image);
59 | Actors.centerActor(image);
60 | }
61 |
62 | @Override
63 | public void resize(int width, int height) {
64 | // If the window is minimized on a desktop (LWJGL3) platform, width and height are 0, which causes problems.
65 | // In that case, we don't resize anything, and wait for the window to be a normal size before updating.
66 | if(width <= 0 || height <= 0) return;
67 |
68 | Viewports.update(stage);
69 | Actors.centerActor(image);
70 | }
71 |
72 | @Override
73 | public void render(float deltaTime) {
74 | // AbstractApplicationListener automatically clears the screen with black color.
75 | stage.act(deltaTime);
76 | stage.draw();
77 | }
78 |
79 | @Override
80 | public void dispose() {
81 | // Null-safe disposing utility method:
82 | Disposables.disposeOf(stage, texture);
83 | }
84 | }"""
85 | }
86 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/templates/official/GameTemplate.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.templates.official
2 |
3 | import gdx.liftoff.data.files.CopiedFile
4 | import gdx.liftoff.data.files.path
5 | import gdx.liftoff.data.platforms.Assets
6 | import gdx.liftoff.data.platforms.Core
7 | import gdx.liftoff.data.project.Project
8 | import gdx.liftoff.data.templates.Template
9 | import gdx.liftoff.views.ProjectTemplate
10 |
11 | /**
12 | * Uses Game as ApplicationListener. Provides an example (empty) Screen implementation.
13 | */
14 | @ProjectTemplate(official = true)
15 | @Suppress("unused") // Referenced via reflection.
16 | class GameTemplate : Template {
17 | override val id = "gameTemplate"
18 | override val description: String
19 | get() =
20 | "This project was generated with a template including simple application launchers and " +
21 | "a main class extending `Game` that sets the first screen."
22 |
23 | override fun getApplicationListenerContent(project: Project): String =
24 | """package ${project.basic.rootPackage};
25 |
26 | import com.badlogic.gdx.Game;
27 |
28 | /** {@link com.badlogic.gdx.ApplicationListener} implementation shared by all platforms. */
29 | public class ${project.basic.mainClass} extends Game {
30 | @Override
31 | public void create() {
32 | setScreen(new FirstScreen());
33 | }
34 | }"""
35 |
36 | override fun apply(project: Project) {
37 | super.apply(project)
38 | project.files.add(
39 | CopiedFile(
40 | projectName = Assets.ID,
41 | original = path("generator", "assets", ".gitkeep"),
42 | path = ".gitkeep",
43 | ),
44 | )
45 | addSourceFile(
46 | project = project,
47 | platform = Core.ID,
48 | packageName = project.basic.rootPackage,
49 | fileName = "FirstScreen.java",
50 | content = """package ${project.basic.rootPackage};
51 |
52 | import com.badlogic.gdx.Screen;
53 |
54 | /** First screen of the application. Displayed after the application is created. */
55 | public class FirstScreen implements Screen {
56 | @Override
57 | public void show() {
58 | // Prepare your screen here.
59 | }
60 |
61 | @Override
62 | public void render(float delta) {
63 | // Draw your screen here. "delta" is the time since last render in seconds.
64 | }
65 |
66 | @Override
67 | public void resize(int width, int height) {
68 | // If the window is minimized on a desktop (LWJGL3) platform, width and height are 0, which causes problems.
69 | // In that case, we don't resize anything, and wait for the window to be a normal size before updating.
70 | if(width <= 0 || height <= 0) return;
71 |
72 | // Resize your screen here. The parameters represent the new window size.
73 | }
74 |
75 | @Override
76 | public void pause() {
77 | // Invoked when your application is paused.
78 | }
79 |
80 | @Override
81 | public void resume() {
82 | // Invoked when your application is resumed after pause.
83 | }
84 |
85 | @Override
86 | public void hide() {
87 | // This method is called when another screen replaces this one.
88 | }
89 |
90 | @Override
91 | public void dispose() {
92 | // Destroy screen's assets here.
93 | }
94 | }""",
95 | )
96 | }
97 | }
98 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/platforms/Server.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.platforms
2 |
3 | import gdx.liftoff.data.files.gradle.GradleFile
4 | import gdx.liftoff.data.project.Project
5 | import gdx.liftoff.views.GdxPlatform
6 |
7 | /**
8 | * Represents server application project.
9 | */
10 | @GdxPlatform
11 | class Server : Platform {
12 | companion object {
13 | const val ID = "server"
14 | const val ORDER = Lwjgl2.ORDER + 1
15 | }
16 |
17 | override val id = ID
18 | override val description = "A separate application without access to the `core` module."
19 | override val order = ORDER
20 | override val isStandard = false
21 |
22 | override fun createGradleFile(project: Project): GradleFile = ServerGradleFile(project)
23 |
24 | override fun initiate(project: Project) {
25 | // Server project has no additional dependencies.
26 |
27 | addGradleTaskDescription(project, "run", "runs the $id application.")
28 | }
29 | }
30 |
31 | /**
32 | * Represents the Gradle file of server project. Allows to set up a different Java version and launch the application
33 | * with "run" task.
34 | */
35 | class ServerGradleFile(
36 | val project: Project,
37 | ) : GradleFile(Server.ID) {
38 | override fun getContent(): String =
39 | """apply plugin: 'application'
40 | ${if (project.rootGradle.plugins.contains("kotlin")) "apply plugin: 'org.jetbrains.kotlin.jvm'\n" else ""}
41 |
42 | java.sourceCompatibility = ${project.advanced.serverJavaVersion}
43 | java.targetCompatibility = ${project.advanced.serverJavaVersion}
44 | if (JavaVersion.current().isJava9Compatible()) {
45 | compileJava.options.release.set(${project.advanced.serverJavaVersion})
46 | }
47 | ${if (project.rootGradle.plugins.contains(
48 | "kotlin",
49 | )
50 | ) {
51 | "kotlin.compilerOptions.jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_" + (if (project.advanced.serverJavaVersion == "8") "1_8" else project.advanced.serverJavaVersion) + ")\n"
52 | } else {
53 | ""
54 | }}
55 | application.mainClass = '${project.basic.rootPackage}.server.ServerLauncher'
56 | eclipse.project.name = appName + '-server'
57 |
58 | dependencies {
59 | ${joinDependencies(dependencies)}}
60 |
61 | jar {
62 | archiveBaseName.set(appName)
63 | // the duplicatesStrategy matters starting in Gradle 7.0; this setting works.
64 | duplicatesStrategy = DuplicatesStrategy.EXCLUDE
65 | dependsOn configurations.runtimeClasspath
66 | from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
67 | // these "exclude" lines remove some unnecessary duplicate files in the output JAR.
68 | exclude('META-INF/INDEX.LIST', 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA')
69 | dependencies {
70 | exclude('META-INF/INDEX.LIST', 'META-INF/maven/**')
71 | }
72 | // setting the manifest makes the JAR runnable.
73 | // enabling native access helps avoid a warning when Java 24 or later runs the JAR.
74 | manifest {
75 | attributes 'Main-Class': application.mainClass, 'Enable-Native-Access': 'ALL-UNNAMED'
76 | }
77 | // this last step may help on some OSes that need extra instruction to make runnable JARs.
78 | doLast {
79 | file(archiveFile).setExecutable(true, false)
80 | }
81 | }
82 |
83 | // Equivalent to the jar task; here for compatibility with gdx-setup.
84 | task dist(dependsOn: [jar]) {
85 | }
86 | """
87 | }
88 |
--------------------------------------------------------------------------------
/src/main/java/gdx/liftoff/ui/liftofftables/SettingsTable.java:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.ui.liftofftables;
2 |
3 | import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
4 | import com.badlogic.gdx.scenes.scene2d.ui.Table;
5 | import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
6 | import com.badlogic.gdx.utils.Align;
7 | import gdx.liftoff.Main;
8 | import gdx.liftoff.ui.panels.PathsPanel;
9 | import gdx.liftoff.ui.panels.SettingsPanel;
10 |
11 | import static gdx.liftoff.Main.*;
12 |
13 | /**
14 | * The final table displayed before the user generates the project in the normal workflow. It includes the settings and
15 | * paths panels.
16 | */
17 | public class SettingsTable extends LiftoffTable {
18 | private SettingsPanel settingsPanel;
19 | private TextButton generateButton;
20 | private PathsPanel pathsPanel;
21 |
22 | public SettingsTable() {
23 | populate();
24 | }
25 |
26 | public void populate() {
27 | clearChildren();
28 | setBackground(skin.getDrawable("black"));
29 | pad(SPACE_LARGE).padLeft(SPACE_HUGE).padRight(SPACE_HUGE);
30 |
31 | //The scrollable area includs the settings and paths panels
32 | Table scrollTable = new Table();
33 | scrollTable.pad(SPACE_SMALL);
34 | ScrollPane scrollPane = new ScrollPane(scrollTable, skin);
35 | scrollPane.setFadeScrollBars(false);
36 | scrollPane.setScrollingDisabled(true, false);
37 | add(scrollPane).grow();
38 | addScrollFocusListener(scrollPane);
39 |
40 | //settings panel
41 | scrollTable.defaults().space(SPACE_LARGE);
42 | settingsPanel = new SettingsPanel(false);
43 | scrollTable.add(settingsPanel).growX().spaceTop(0).maxHeight(500);
44 |
45 | //paths panel
46 | scrollTable.row();
47 | pathsPanel = new PathsPanel(false);
48 | scrollTable.add(pathsPanel).growX().spaceTop(SPACE_HUGE);
49 |
50 | row();
51 | Table table = new Table();
52 | add(table).bottom().growX();
53 |
54 | //previous button
55 | TextButton textButton = new TextButton(prop.getProperty("previous"), skin);
56 | table.add(textButton).uniformX().fillX();
57 | addHandListener(textButton);
58 | addTooltip(textButton, Align.top, prop.getProperty("previousTip"));
59 | onChange(textButton, () -> root.previousTable());
60 |
61 | //empty space between buttons
62 | table.add().growX().space(SPACE_SMALL);
63 |
64 | //generate button
65 | generateButton = new TextButton(prop.getProperty("generate"), skin);
66 | generateButton.setDisabled(!validateUserData());
67 | table.add(generateButton).uniformX().fillX();
68 | addHandListener(generateButton);
69 | addTooltip(generateButton, Align.top, prop.getProperty("generateTip"));
70 | onChange(generateButton, () -> {
71 | Main.generateProject();
72 | root.nextTable();
73 | });
74 | }
75 |
76 | @Override
77 | public void captureKeyboardFocus() {
78 | settingsPanel.captureKeyboardFocus();
79 | }
80 |
81 | @Override
82 | public void finishAnimation() {
83 |
84 | }
85 |
86 | public void updateGenerateButton() {
87 | generateButton.setDisabled(!validateUserData());
88 | }
89 |
90 | public void updateError() {
91 | pathsPanel.updateError();
92 | }
93 | }
94 |
--------------------------------------------------------------------------------
/src/main/kotlin/gdx/liftoff/data/platforms/Headless.kt:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.data.platforms
2 |
3 | import gdx.liftoff.data.files.gradle.GradleFile
4 | import gdx.liftoff.data.project.Project
5 | import gdx.liftoff.views.GdxPlatform
6 |
7 | /**
8 | * Represents headless application project.
9 | */
10 | @GdxPlatform
11 | class Headless : Platform {
12 | companion object {
13 | const val ID = "headless"
14 | const val ORDER = GWT.ORDER + 1
15 | }
16 |
17 | override val id = ID
18 | override val order = ORDER
19 | override val description = "Desktop platform without a graphical interface."
20 | override val isStandard = false
21 |
22 | override fun createGradleFile(project: Project): GradleFile = HeadlessGradleFile(project)
23 |
24 | override fun initiate(project: Project) {
25 | // Headless project has no additional dependencies.
26 | addGradleTaskDescription(
27 | project,
28 | "run",
29 | "starts the $id application. " +
30 | "Note: if $id sources were not modified - " +
31 | "and the application still creates `ApplicationListener` from `core` project - " +
32 | "this task might fail due to no graphics support.",
33 | )
34 | }
35 | }
36 |
37 | /**
38 | * Represents the Gradle file of the headless project. Allows to set up a different Java version and launch the application
39 | * with "run" task.
40 | */
41 | class HeadlessGradleFile(
42 | val project: Project,
43 | ) : GradleFile(Headless.ID) {
44 | init {
45 | dependencies.add("project(':${Core.ID}')")
46 | addDependency("com.badlogicgames.gdx:gdx-backend-headless:\$gdxVersion")
47 | addDependency("com.badlogicgames.gdx:gdx-platform:\$gdxVersion:natives-desktop")
48 | }
49 |
50 | override fun getContent(): String =
51 | """apply plugin: 'application'
52 | ${if (project.rootGradle.plugins.contains("kotlin")) "apply plugin: 'org.jetbrains.kotlin.jvm'\n" else ""}
53 |
54 | java.sourceCompatibility = ${project.advanced.serverJavaVersion}
55 | java.targetCompatibility = ${project.advanced.serverJavaVersion}
56 | if (JavaVersion.current().isJava9Compatible()) {
57 | compileJava.options.release.set(${project.advanced.serverJavaVersion})
58 | }
59 | ${if (project.rootGradle.plugins.contains(
60 | "kotlin",
61 | )
62 | ) {
63 | "kotlin.compilerOptions.jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_" + (if (project.advanced.serverJavaVersion == "8") "1_8" else project.advanced.serverJavaVersion) + ")\n"
64 | } else {
65 | ""
66 | }}
67 | application.mainClass = "${project.basic.rootPackage}.headless.HeadlessLauncher"
68 | eclipse.project.name = appName + '-headless'
69 |
70 | dependencies {
71 | ${joinDependencies(dependencies)}}
72 |
73 | jar {
74 | archiveBaseName.set(appName)
75 | duplicatesStrategy = DuplicatesStrategy.EXCLUDE
76 | dependsOn configurations.runtimeClasspath
77 | from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
78 | // setting the manifest makes the JAR runnable.
79 | // enabling native access helps avoid a warning when Java 24 or later runs the JAR.
80 | manifest {
81 | attributes 'Main-Class': application.mainClass, 'Enable-Native-Access': 'ALL-UNNAMED'
82 | }
83 | doLast {
84 | file(archiveFile).setExecutable(true, false)
85 | }
86 | }
87 |
88 | // Equivalent to the jar task; here for compatibility with gdx-setup.
89 | tasks.register('dist') {
90 | dependsOn 'jar'
91 | }
92 | """
93 | }
94 |
--------------------------------------------------------------------------------
/src/main/resources/generator/gitignore:
--------------------------------------------------------------------------------
1 | ## Gradle:
2 | .gradle/
3 | gradle-app.setting
4 | /build/
5 | /android/build/
6 | /core/build/
7 | /lwjgl2/build/
8 | /lwjgl3/build/
9 | /html/build/
10 | /teavm/build/
11 | /ios/build/
12 | /ios-moe/build/
13 | /headless/build/
14 | /server/build/
15 | /shared/build/
16 |
17 | ## Java:
18 | *.class
19 | *.war
20 | *.ear
21 | hs_err_pid*
22 | .attach_pid*
23 |
24 | ## Android:
25 | /android/libs/armeabi-v7a/
26 | /android/libs/arm64-v8a/
27 | /android/libs/x86/
28 | /android/libs/x86_64/
29 | /android/gen/
30 | /android/out/
31 | local.properties
32 | com_crashlytics_export_strings.xml
33 |
34 | ## Robovm:
35 | /ios/robovm-build/
36 |
37 | ## iOS:
38 | /ios/xcode/*.xcodeproj/*
39 | !/ios/xcode/*.xcodeproj/xcshareddata
40 | !/ios/xcode/*.xcodeproj/project.pbxproj
41 | /ios/xcode/native/
42 | /ios/IOSLauncher.app
43 | /ios/IOSLauncher.app.dSYM
44 |
45 | ## GWT:
46 | /html/war/
47 | /html/gwt-unitCache/
48 | .apt_generated/
49 | /html/war/WEB-INF/deploy/
50 | /html/war/WEB-INF/classes/
51 | .gwt/
52 | gwt-unitCache/
53 | www-test/
54 | .gwt-tmp/
55 |
56 | ## TeaVM:
57 | # Not sure yet...
58 |
59 | ## IntelliJ, Android Studio:
60 | .idea/
61 | *.ipr
62 | *.iws
63 | *.iml
64 |
65 | ## Eclipse:
66 | .classpath
67 | .project
68 | .metadata/
69 | /android/bin/
70 | /core/bin/
71 | /lwjgl2/bin/
72 | /lwjgl3/bin/
73 | /html/bin/
74 | /teavm/bin/
75 | /ios/bin/
76 | /ios-moe/bin/
77 | /headless/bin/
78 | /server/bin/
79 | /shared/bin/
80 | *.tmp
81 | *.bak
82 | *.swp
83 | *~.nib
84 | .settings/
85 | .loadpath
86 | .externalToolBuilders/
87 | *.launch
88 |
89 |
90 | ## NetBeans:
91 |
92 | /nbproject/private/
93 | /android/nbproject/private/
94 | /core/nbproject/private/
95 | /lwjgl2/nbproject/private/
96 | /lwjgl3/nbproject/private/
97 | /html/nbproject/private/
98 | /teavm/nbproject/private/
99 | /ios/nbproject/private/
100 | /ios-moe/nbproject/private/
101 | /headless/nbproject/private/
102 | /server/nbproject/private/
103 | /shared/nbproject/private/
104 |
105 | /nbbuild/
106 | /android/nbbuild/
107 | /core/nbbuild/
108 | /lwjgl2/nbbuild/
109 | /lwjgl3/nbbuild/
110 | /html/nbbuild/
111 | /teavm/nbbuild/
112 | /ios/nbbuild/
113 | /ios-moe/nbbuild/
114 | /headless/nbbuild/
115 | /server/nbbuild/
116 | /shared/nbbuild/
117 |
118 | /dist/
119 | /android/dist/
120 | /core/dist/
121 | /lwjgl2/dist/
122 | /lwjgl3/dist/
123 | /html/dist/
124 | /teavm/dist/
125 | /ios/dist/
126 | /ios-moe/dist/
127 | /headless/dist/
128 | /server/dist/
129 | /shared/dist/
130 |
131 | /nbdist/
132 | /android/nbdist/
133 | /core/nbdist/
134 | /lwjgl2/nbdist/
135 | /lwjgl3/nbdist/
136 | /html/nbdist/
137 | /teavm/nbdist/
138 | /ios/nbdist/
139 | /ios-moe/nbdist/
140 | /headless/nbdist/
141 | /server/nbdist/
142 | /shared/nbdist/
143 |
144 | nbactions.xml
145 | nb-configuration.xml
146 |
147 | ## OS-Specific:
148 | .DS_Store
149 | Thumbs.db
150 |
151 | ## Miscellaneous:
152 | *~
153 | *.*#
154 | *#*#
155 | /.kotlin/
156 | /assets/assets.txt
157 |
158 | ## Special cases:
159 |
160 | ## There is a resource-config.json file generated by nativeimage.gradle if you use Graal Native Image.
161 | ## Some usage may need extra resource configuration in a different file with the same name.
162 | ## You could also add that configuration to the text in nativeimage.gradle .
163 | ## You should delete or comment out the next line if you have configuration in a different resource-config.json .
164 | **/resource-config.json
165 |
--------------------------------------------------------------------------------
/src/main/java/gdx/liftoff/ui/dialogs/GradleDialog.java:
--------------------------------------------------------------------------------
1 | package gdx.liftoff.ui.dialogs;
2 |
3 | import com.badlogic.gdx.Input.Keys;
4 | import com.badlogic.gdx.scenes.scene2d.ui.*;
5 | import com.badlogic.gdx.scenes.scene2d.ui.Window.WindowStyle;
6 | import com.badlogic.gdx.utils.Scaling;
7 | import com.ray3k.stripe.CollapsibleGroup;
8 | import com.ray3k.stripe.CollapsibleGroup.CollapseType;
9 | import com.ray3k.stripe.PopTable;
10 | import com.ray3k.stripe.ScaleContainer;
11 | import gdx.liftoff.ui.UserData;
12 |
13 | import static gdx.liftoff.Main.*;
14 |
15 | /**
16 | * Dialog displayed when users click the "Add Gradle Tasks" button in the settings panel
17 | */
18 | public class GradleDialog extends PopTable {
19 | public GradleDialog(boolean fullscreen) {
20 | setStyle(skin.get("dialog", WindowStyle.class));
21 | setKeepCenteredInWindow(true);
22 | setHideOnUnfocus(true);
23 |
24 | if (fullscreen) {
25 | CollapsibleGroup collapsibleGroup = new CollapsibleGroup(CollapseType.BOTH);
26 | add(collapsibleGroup).grow();
27 |
28 | Table contentTable = new Table();
29 | populate(contentTable);
30 |
31 | Container container = new Container<>(contentTable);
32 | container.minSize(0, 0);
33 | collapsibleGroup.addActor(container);
34 |
35 | contentTable = new Table();
36 | populate(contentTable);
37 |
38 | ScaleContainer scaleContainer = new ScaleContainer(Scaling.fit, contentTable);
39 | scaleContainer.setMinSize(1920, 1080);
40 | scaleContainer.setPrefSize(1920, 1080);
41 | collapsibleGroup.addActor(scaleContainer);
42 | } else {
43 | Table contentTable = new Table();
44 | add(contentTable);
45 | populate(contentTable);
46 | }
47 | }
48 |
49 | private void populate(Table contentTable) {
50 | contentTable.pad(SPACE_LARGE).padTop(SPACE_HUGE).padBottom(SPACE_HUGE);
51 |
52 | //title
53 | Label label = new Label(prop.getProperty("gradleTasksPrompt"), skin, "field");
54 | label.setWrap(true);
55 | contentTable.add(label).growX();
56 |
57 | //explanation
58 | contentTable.row();
59 | label = new Label(prop.getProperty("gradleTasksTip"), skin, "description");
60 | label.setWrap(true);
61 | contentTable.add(label).growX().spaceTop(SPACE_LARGE);
62 |
63 | //gradle commands textfield
64 | contentTable.row();
65 | TextField textField = new TextField("", skin);
66 | contentTable.add(textField).width(350);
67 | addIbeamListener(textField);
68 | stage.setKeyboardFocus(textField);
69 | onChange(textField, () -> {
70 | UserData.gradleTasks = textField.getText();
71 | pref.putString("GradleTasks", textField.getText());
72 | flushPref();
73 | });
74 |
75 | //ok button
76 | contentTable.row();
77 | TextButton textButton = new TextButton("OK", skin);
78 | contentTable.add(textButton).prefWidth(140).spaceTop(SPACE_LARGE);
79 | addHandListener(textButton);
80 | onChange(textButton, this::hide);
81 | key(Keys.ENTER, this::hide);
82 | key(Keys.ESCAPE, this::hide);
83 | }
84 |
85 | public static PopTable show(boolean fullscreen) {
86 | GradleDialog dialog = new GradleDialog(fullscreen);
87 | dialog.setFillParent(fullscreen);
88 | dialog.show(stage);
89 | return dialog;
90 | }
91 | }
92 |
--------------------------------------------------------------------------------
/etc/tinted.tpproj:
--------------------------------------------------------------------------------
1 | name=tinted
2 | filename=
3 | output=TexturePacker
4 |
5 | alias=true
6 | alphaThreshold=0
7 | debug=false
8 | duplicatePadding=true
9 | edgePadding=true
10 | fast=false
11 | filterMag=Linear
12 | filterMin=Linear
13 | ignoreBlankImages=true
14 | maxHeight=2048
15 | maxWidth=1024
16 | minHeight=16
17 | minWidth=1024
18 | paddingX=2
19 | paddingY=2
20 | pot=true
21 | mof=false
22 | rotation=false
23 | stripWhitespaceX=true
24 | stripWhitespaceY=true
25 | wrapX=ClampToEdge
26 | wrapY=ClampToEdge
27 | premultiplyAlpha=false
28 | grid=false
29 | square=false
30 | bleed=true
31 | limitMemory=true
32 | useIndexes=true
33 | prettyPrint=false
34 | legacyOutput=false
35 |
36 | scaleFactors=[{suffix:"",factor:1,resampling:bicubic}]
37 | inputFiles=[{path:../raw/icon-arrow-left.png,type:Input,regionName:null},{path:../raw/color-picker-bar-selector.png,type:Input,regionName:null},{path:../raw/color-picker-cross.png,type:Input,regionName:null},{path:../raw/color-picker-selector-horizontal.png,type:Input,regionName:null},{path:../raw/color-picker-selector-vertical.png,type:Input,regionName:null},{path:../raw/cursor.9.png,type:Input,regionName:null},{path:../raw/default.png,type:Input,regionName:null},{path:../raw/gdx-liftoff.png,type:Input,regionName:null},{path:../raw/icon-arrow-down.png,type:Input,regionName:null},{path:../raw/icon-arrow-right.png,type:Input,regionName:null},{path:../raw/icon-arrow-up.png,type:Input,regionName:null},{path:../raw/icon-close.png,type:Input,regionName:null},{path:../raw/icon-drive.png,type:Input,regionName:null},{path:../raw/icon-file-audio.png,type:Input,regionName:null},{path:../raw/icon-file-image.png,type:Input,regionName:null},{path:../raw/icon-file-pdf.png,type:Input,regionName:null},{path:../raw/icon-file-text.png,type:Input,regionName:null},{path:../raw/icon-folder-new.png,type:Input,regionName:null},{path:../raw/icon-folder-parent.png,type:Input,regionName:null},{path:../raw/icon-folder-star.png,type:Input,regionName:null},{path:../raw/icon-folder.png,type:Input,regionName:null},{path:../raw/icon-list-settings.png,type:Input,regionName:null},{path:../raw/icon-minus.png,type:Input,regionName:null},{path:../raw/icon-refresh.png,type:Input,regionName:null},{path:../raw/icon-star-outline.png,type:Input,regionName:null},{path:../raw/icon-star.png,type:Input,regionName:null},{path:../raw/icon-trash.png,type:Input,regionName:null},{path:../raw/libgdx.png,type:Input,regionName:null},{path:../raw/t-base.9.png,type:Input,regionName:null},{path:../raw/t-border-circle.png,type:Input,regionName:null},{path:../raw/t-border.9.png,type:Input,regionName:null},{path:../raw/t-check-tick.png,type:Input,regionName:null},{path:../raw/t-check.png,type:Input,regionName:null},{path:../raw/t-dot.png,type:Input,regionName:null},{path:../raw/t-hknob.png,type:Input,regionName:null},{path:../raw/t-hline.png,type:Input,regionName:null},{path:../raw/t-hslider.png,type:Input,regionName:null},{path:../raw/t-radio-tick.png,type:Input,regionName:null},{path:../raw/t-radio.png,type:Input,regionName:null},{path:../raw/t-select-down.png,type:Input,regionName:null},{path:../raw/t-select-up.png,type:Input,regionName:null},{path:../raw/t-select.9.png,type:Input,regionName:null},{path:../raw/t-tree-minus.png,type:Input,regionName:null},{path:../raw/t-tree-plus.png,type:Input,regionName:null},{path:../raw/t-vknob.png,type:Input,regionName:null},{path:../raw/t-vline.png,type:Input,regionName:null},{path:../raw/t-vslider.png,type:Input,regionName:null},{path:../raw/t-window-border.9.png,type:Input,regionName:null},{path:../raw/t-window-resize.9.png,type:Input,regionName:null},{path:../raw/t-window.9.png,type:Input,regionName:null}]
38 | keepInputFileExtensions=false
39 |
40 |
41 | -PROJ-
42 |
43 | version=4.13.0
44 | fileTypeType=png
45 | fileTypeData={encoding:RGBA8888}
46 | previewBackgroundColor=ffffffff
47 | projectSettings={inputFiles:{}}
48 |
--------------------------------------------------------------------------------