├── 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 | 2 | 3 | @back 4 | 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 | 2 | 3 | @back 4 |
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 | 2 | <:each control="$controls"> 3 | 4 | 5 | @{control} 6 | 7 | 8 | 9 | @back 10 | 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 | 2 | 3 | <:loop times="$playersAmount"> 4 | 5 | @edit 6 | @switch 7 | 8 |
9 | 10 | @back 11 |
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 | 2 | 5 | 6 | 7 | <:setting name="@music"> 8 | @musicVolume 9 | 10 | 12 | @toggleMusic 13 | 14 | 15 | <:setting name="@sound"> 16 | @soundVolume 17 | 18 | 20 | @toggleSound 21 | 22 | 23 | <:setting name="@locale"> 24 | 27 | <:each locale="{locales}"> 28 | <:if test="{locale} != {currentLocale}"> 29 | @{locale} 30 | 31 | 32 | 33 | 34 | <:if test="!$isMobile"> 35 | <:setting name="@gui"> 36 | @fullscreen 37 | 38 | 40 | <:each mode="$displayModes"> 41 | {mode} 42 | <:if test="{each:index}%2=1"><:row/> 43 | 44 | @reset 45 |
46 | 47 | 48 |
49 | 50 | @back 51 |
52 | -------------------------------------------------------------------------------- /src/main/resources/generator/templates/autumn/box2d/dialogs/edit.lml: -------------------------------------------------------------------------------- 1 | global.lml 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 12 |
13 | 14 |
15 | <:assign key="width" value="120"/> 16 | <:assign key="height" value="60"/> 17 | 18 | <:cell /> 19 | 20 | <:cell row=true /> 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 |
29 | <:cell /> 30 | 31 | <:cell row=true /> 32 | 33 | 34 | 35 | 36 |
37 | 38 | @invertX 39 | @invertY 40 | @invertXY 41 |
42 | 43 | 44 | @back 45 |
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 | --------------------------------------------------------------------------------