From 547c2b90257a113c65f4e65e28870d95948d668d Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 29 Jun 2017 00:54:10 -0400 Subject: [PATCH] Implemented Android support --- android/AndroidManifest.xml | 26 ++++ {core => android}/assets/maps/canyon.png | Bin {core => android}/assets/maps/delta.png | Bin {core => android}/assets/maps/map.png | Bin {core => android}/assets/maps/maze.png | Bin {core => android}/assets/maps/pit.png | Bin {core => android}/assets/maps/test.png | Bin {core => android}/assets/music/1.mp3 | Bin {core => android}/assets/music/2.mp3 | Bin {core => android}/assets/music/3.mp3 | Bin {core => android}/assets/music/place.wav | Bin {core => android}/assets/music/shoot.wav | Bin {core => android}/assets/sounds/bloop.wav | Bin {core => android}/assets/sounds/break.wav | Bin .../assets/sounds/corexplode.wav | Bin {core => android}/assets/sounds/die.wav | Bin .../assets/sounds/enemyshoot.wav | Bin {core => android}/assets/sounds/explosion.wav | Bin {core => android}/assets/sounds/flame.wav | Bin {core => android}/assets/sounds/flame2.wav | Bin {core => android}/assets/sounds/missile.wav | Bin {core => android}/assets/sounds/place.wav | Bin {core => android}/assets/sounds/purchase.wav | Bin {core => android}/assets/sounds/resonate.wav | Bin {core => android}/assets/sounds/respawn.wav | Bin {core => android}/assets/sounds/shoot.wav | Bin {core => android}/assets/sounds/spawn.wav | Bin {core => android}/assets/sprites/back.png | Bin {core => android}/assets/sprites/conveyor.png | Bin .../assets/sprites/conveyort.png | Bin .../assets/sprites/mindustry.atlas | 0 .../assets/sprites/mindustry.png | Bin .../assets/ui/backup/uiskin.atlas | 0 {core => android}/assets/ui/backup/uiskin.png | Bin {core => android}/assets/ui/out/blank.png | Bin .../assets/ui/out/border-circle-error.png | Bin .../assets/ui/out/border-circle.png | Bin .../assets/ui/out/border-dark-blue.9.png | Bin .../assets/ui/out/border-error.9.png | Bin .../assets/ui/out/border-white.9.png | Bin {core => android}/assets/ui/out/border.9.png | Bin {core => android}/assets/ui/out/bump.9.png | Bin .../assets/ui/out/button-blue-down.9.png | Bin .../assets/ui/out/button-blue-over.9.png | Bin .../assets/ui/out/button-blue.9.png | Bin .../assets/ui/out/button-down.9.png | Bin .../assets/ui/out/button-gray-over.9.png | Bin .../assets/ui/out/button-gray.9.png | Bin .../assets/ui/out/button-map-down.9.png | Bin .../assets/ui/out/button-map-over.9.png | Bin .../assets/ui/out/button-map.9.png | Bin .../assets/ui/out/button-over.9.png | Bin .../assets/ui/out/button-red.9.png | Bin .../assets/ui/out/button-select.9.png | Bin .../assets/ui/out/button-window-bg.9.png | Bin .../assets/ui/out/button-window-over.9.png | Bin {core => android}/assets/ui/out/button.9.png | Bin {core => android}/assets/ui/out/check-off.png | Bin {core => android}/assets/ui/out/check-on.png | Bin .../assets/ui/out/check-over.png | Bin {core => android}/assets/ui/out/clear.png | Bin .../ui/out/color-picker-bar-selector.png | Bin .../assets/ui/out/color-picker-cross.png | Bin .../out/color-picker-selector-horizontal.png | Bin .../ui/out/color-picker-selector-vertical.png | Bin .../assets/ui/out/cursor-normal.png | Bin {core => android}/assets/ui/out/cursor.png | Bin .../ui/out/default-pane-no-border.9.png | Bin .../assets/ui/out/default-pane.9.png | Bin .../ui/out/default-select-selection.9.png | Bin .../assets/ui/out/default-select.9.png | Bin {core => android}/assets/ui/out/grey.png | Bin android/assets/ui/out/icon-cancel.png | Bin 0 -> 265 bytes android/assets/ui/out/icon-check.png | Bin 0 -> 252 bytes .../assets/ui/out/icon-close-down.png | Bin .../assets/ui/out/icon-close-over.png | Bin .../assets/ui/out/icon-close.png | Bin .../assets/ui/out/icon-defense.png | Bin .../assets/ui/out/icon-distribution.png | Bin .../assets/ui/out/icon-production.png | Bin android/assets/ui/out/icon-rotate.png | Bin 0 -> 256 bytes .../assets/ui/out/list-selection.png | Bin {core => android}/assets/ui/out/menu-bg.png | Bin .../assets/ui/out/padded-list-selection.9.png | Bin .../ui/out/progressbar-filled-vertical.png | Bin .../assets/ui/out/progressbar-filled.png | Bin .../assets/ui/out/progressbar-vertical.png | Bin .../assets/ui/out/progressbar.png | Bin {core => android}/assets/ui/out/radio-off.png | Bin {core => android}/assets/ui/out/radio-on.png | Bin .../assets/ui/out/scroll-horizontal.9.png | Bin .../ui/out/scroll-knob-horizontal.9.png | Bin .../assets/ui/out/scroll-knob-vertical.9.png | Bin {core => android}/assets/ui/out/scroll.9.png | Bin .../assets/ui/out/select-box-list-bg.png | Bin .../assets/ui/out/select-down.png | Bin {core => android}/assets/ui/out/select-up.png | Bin {core => android}/assets/ui/out/selection.png | Bin .../assets/ui/out/separator-menu.png | Bin {core => android}/assets/ui/out/separator.png | Bin .../assets/ui/out/slider-knob-disabled.png | Bin .../assets/ui/out/slider-knob-down.png | Bin .../assets/ui/out/slider-knob-over.png | Bin .../assets/ui/out/slider-knob.png | Bin .../assets/ui/out/slider-vertical.png | Bin {core => android}/assets/ui/out/slider.png | Bin {core => android}/assets/ui/out/slot.9.png | Bin .../assets/ui/out/splitpane-over.png | Bin .../assets/ui/out/splitpane-vertical-over.png | Bin .../assets/ui/out/splitpane-vertical.png | Bin {core => android}/assets/ui/out/splitpane.png | Bin {core => android}/assets/ui/out/sub-menu.png | Bin .../assets/ui/out/textfield-over.9.png | Bin .../assets/ui/out/textfield.9.png | Bin .../assets/ui/out/tooltip-bg.9.png | Bin .../assets/ui/out/touchpad-knob.png | Bin .../assets/ui/out/tree-minus.png | Bin {core => android}/assets/ui/out/tree-over.png | Bin {core => android}/assets/ui/out/tree-plus.png | Bin .../assets/ui/out/tree-selection.9.png | Bin {core => android}/assets/ui/out/white.png | Bin {core => android}/assets/ui/out/window-bg.png | Bin .../assets/ui/out/window-border-bg.9.png | Bin .../assets/ui/out/window-gray.9.png | Bin .../assets/ui/out/window-noborder.9.png | Bin .../assets/ui/out/window-resizable.9.png | Bin {core => android}/assets/ui/out/window.9.png | Bin {core => android}/assets/ui/prose.fnt | 0 {core => android}/assets/ui/prose.png | Bin {core => android}/assets/ui/uiskin.atlas | 35 ++++- {core => android}/assets/ui/uiskin.json | 0 android/assets/ui/uiskin.png | Bin 0 -> 12205 bytes android/build.gradle | 135 ++++++++++++++++++ android/ic_launcher-web.png | Bin 0 -> 22030 bytes android/proguard-project.txt | 45 ++++++ android/project.properties | 14 ++ android/res/drawable-hdpi/ic_launcher.png | Bin 0 -> 3430 bytes android/res/drawable-mdpi/ic_launcher.png | Bin 0 -> 1931 bytes android/res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 4373 bytes android/res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 8265 bytes android/res/drawable-xxxhdpi/ic_launcher.png | Bin 0 -> 19448 bytes android/res/values/strings.xml | 6 + android/res/values/styles.xml | 12 ++ .../io/anuke/mindustry/AndroidLauncher.java | 16 +++ build.gradle | 21 ++- core/assets/ui/uiskin.png | Bin 11990 -> 0 bytes core/src/io/anuke/mindustry/Control.java | 50 ++++++- core/src/io/anuke/mindustry/GameState.java | 7 +- core/src/io/anuke/mindustry/Renderer.java | 36 ++++- core/src/io/anuke/mindustry/UI.java | 63 ++++++-- core/src/io/anuke/mindustry/Vars.java | 24 +++- core/src/io/anuke/mindustry/World.java | 2 +- .../io/anuke/mindustry/entities/Player.java | 1 + .../anuke/mindustry/input/AndroidInput.java | 121 ++++++++++++++++ .../anuke/mindustry/input/GestureHandler.java | 99 +++++++++++++ .../io/anuke/mindustry/{ => input}/Input.java | 4 +- .../io/anuke/mindustry/ui/TutorialDialog.java | 2 +- .../io/anuke/mindustry/ui/UpgradeDialog.java | 7 +- core/src/io/anuke/mindustry/world/Block.java | 6 +- .../anuke/ucore/function/ActionProvider.java | 7 + .../anuke/ucore/function/ButtonTweaker.java | 7 + .../src/io/anuke/ucore/function/Callable.java | 5 + .../anuke/ucore/function/CheckListenable.java | 5 + .../anuke/ucore/function/ColorListenable.java | 7 + .../src/io/anuke/ucore/function/Consumer.java | 5 + .../anuke/ucore/function/EffectRenderer.java | 7 + .../anuke/ucore/function/FieldListenable.java | 5 + .../anuke/ucore/function/KeyListenable.java | 5 + .../io/anuke/ucore/function/Listenable.java | 6 + .../ucore/function/PositionConsumer.java | 5 + .../io/anuke/ucore/function/Predicate.java | 5 + .../anuke/ucore/function/StringProcessor.java | 5 + .../anuke/ucore/function/StringSupplier.java | 5 + .../io/anuke/ucore/function/TileCollider.java | 6 + .../ucore/function/TileHitboxProvider.java | 7 + .../ucore/function/TypingListenable.java | 5 + .../ucore/function/VisibilityProvider.java | 5 + gradle.properties | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 +- settings.gradle | 2 +- ui/blank.png | Bin 0 -> 85 bytes ui/border-circle-error.png | Bin 0 -> 995 bytes ui/border-circle.png | Bin 0 -> 1189 bytes ui/border-dark-blue.9.png | Bin 0 -> 86 bytes ui/border-error.9.png | Bin 0 -> 87 bytes ui/border-white.9.png | Bin 0 -> 176 bytes ui/border.9.png | Bin 0 -> 178 bytes ui/bump.9.png | Bin 0 -> 381 bytes ui/button-blue-down.9.png | Bin 0 -> 124 bytes ui/button-blue-over.9.png | Bin 0 -> 125 bytes ui/button-blue.9.png | Bin 0 -> 127 bytes ui/button-down.9.png | Bin 0 -> 212 bytes ui/button-gray-over.9.png | Bin 0 -> 200 bytes ui/button-gray.9.png | Bin 0 -> 222 bytes ui/button-map-down.9.png | Bin 0 -> 213 bytes ui/button-map-over.9.png | Bin 0 -> 212 bytes ui/button-map.9.png | Bin 0 -> 205 bytes ui/button-over.9.png | Bin 0 -> 212 bytes ui/button-red.9.png | Bin 0 -> 126 bytes ui/button-select.9.png | Bin 0 -> 175 bytes ui/button-window-bg.9.png | Bin 0 -> 200 bytes ui/button-window-over.9.png | Bin 0 -> 199 bytes ui/button.9.png | Bin 0 -> 206 bytes ui/check-off.png | Bin 0 -> 194 bytes ui/check-on.png | Bin 0 -> 210 bytes ui/check-over.png | Bin 0 -> 197 bytes ui/clear.png | Bin 0 -> 149 bytes ui/color-picker-bar-selector.png | Bin 0 -> 309 bytes ui/color-picker-cross.png | Bin 0 -> 104 bytes ui/color-picker-selector-horizontal.png | Bin 0 -> 74 bytes ui/color-picker-selector-vertical.png | Bin 0 -> 76 bytes ui/cursor-normal.png | Bin 0 -> 103 bytes ui/cursor.png | Bin 0 -> 143 bytes ui/default-pane-no-border.9.png | Bin 0 -> 78 bytes ui/default-pane.9.png | Bin 0 -> 88 bytes ui/default-select-selection.9.png | Bin 0 -> 86 bytes ui/default-select.9.png | Bin 0 -> 303 bytes ui/grey.png | Bin 0 -> 70 bytes ui/icon-cancel.png | Bin 0 -> 265 bytes ui/icon-check.png | Bin 0 -> 258 bytes ui/icon-close-down.png | Bin 0 -> 321 bytes ui/icon-close-over.png | Bin 0 -> 316 bytes ui/icon-close.png | Bin 0 -> 319 bytes ui/icon-defense.png | Bin 0 -> 200 bytes ui/icon-distribution.png | Bin 0 -> 161 bytes ui/icon-production.png | Bin 0 -> 164 bytes ui/icon-rotate.png | Bin 0 -> 237 bytes ui/list-selection.png | Bin 0 -> 70 bytes ui/menu-bg.png | Bin 0 -> 70 bytes ui/padded-list-selection.9.png | Bin 0 -> 82 bytes ui/progressbar-filled-vertical.png | Bin 0 -> 72 bytes ui/progressbar-filled.png | Bin 0 -> 73 bytes ui/progressbar-vertical.png | Bin 0 -> 72 bytes ui/progressbar.png | Bin 0 -> 73 bytes ui/radio-off.png | Bin 0 -> 591 bytes ui/radio-on.png | Bin 0 -> 743 bytes ui/scroll-horizontal.9.png | Bin 0 -> 98 bytes ui/scroll-knob-horizontal.9.png | Bin 0 -> 122 bytes ui/scroll-knob-vertical.9.png | Bin 0 -> 102 bytes ui/scroll.9.png | Bin 0 -> 95 bytes ui/select-box-list-bg.png | Bin 0 -> 70 bytes ui/select-down.png | Bin 0 -> 254 bytes ui/select-up.png | Bin 0 -> 262 bytes ui/selection.png | Bin 0 -> 128 bytes ui/separator-menu.png | Bin 0 -> 70 bytes ui/separator.png | Bin 0 -> 70 bytes ui/slider-knob-disabled.png | Bin 0 -> 102 bytes ui/slider-knob-down.png | Bin 0 -> 173 bytes ui/slider-knob-over.png | Bin 0 -> 173 bytes ui/slider-knob.png | Bin 0 -> 175 bytes ui/slider-vertical.png | Bin 0 -> 131 bytes ui/slider.png | Bin 0 -> 117 bytes ui/slot.9.png | Bin 0 -> 366 bytes ui/splitpane-over.png | Bin 0 -> 72 bytes ui/splitpane-vertical-over.png | Bin 0 -> 73 bytes ui/splitpane-vertical.png | Bin 0 -> 73 bytes ui/splitpane.png | Bin 0 -> 72 bytes ui/sub-menu.png | Bin 0 -> 247 bytes ui/textfield-over.9.png | Bin 0 -> 116 bytes ui/textfield.9.png | Bin 0 -> 185 bytes ui/tooltip-bg.9.png | Bin 0 -> 90 bytes ui/touchpad-knob.png | Bin 0 -> 1127 bytes ui/tree-minus.png | Bin 0 -> 133 bytes ui/tree-over.png | Bin 0 -> 70 bytes ui/tree-plus.png | Bin 0 -> 359 bytes ui/tree-selection.9.png | Bin 0 -> 86 bytes ui/white.png | Bin 0 -> 71 bytes ui/window-bg.png | Bin 0 -> 70 bytes ui/window-border-bg.9.png | Bin 0 -> 90 bytes ui/window-gray.9.png | Bin 0 -> 280 bytes ui/window-noborder.9.png | Bin 0 -> 127 bytes ui/window-resizable.9.png | Bin 0 -> 187 bytes ui/window.9.png | Bin 0 -> 243 bytes 273 files changed, 792 insertions(+), 50 deletions(-) create mode 100644 android/AndroidManifest.xml rename {core => android}/assets/maps/canyon.png (100%) rename {core => android}/assets/maps/delta.png (100%) rename {core => android}/assets/maps/map.png (100%) rename {core => android}/assets/maps/maze.png (100%) rename {core => android}/assets/maps/pit.png (100%) rename {core => android}/assets/maps/test.png (100%) rename {core => android}/assets/music/1.mp3 (100%) rename {core => android}/assets/music/2.mp3 (100%) rename {core => android}/assets/music/3.mp3 (100%) rename {core => android}/assets/music/place.wav (100%) rename {core => android}/assets/music/shoot.wav (100%) rename {core => android}/assets/sounds/bloop.wav (100%) rename {core => android}/assets/sounds/break.wav (100%) rename {core => android}/assets/sounds/corexplode.wav (100%) rename {core => android}/assets/sounds/die.wav (100%) rename {core => android}/assets/sounds/enemyshoot.wav (100%) rename {core => android}/assets/sounds/explosion.wav (100%) rename {core => android}/assets/sounds/flame.wav (100%) rename {core => android}/assets/sounds/flame2.wav (100%) rename {core => android}/assets/sounds/missile.wav (100%) rename {core => android}/assets/sounds/place.wav (100%) rename {core => android}/assets/sounds/purchase.wav (100%) rename {core => android}/assets/sounds/resonate.wav (100%) rename {core => android}/assets/sounds/respawn.wav (100%) rename {core => android}/assets/sounds/shoot.wav (100%) rename {core => android}/assets/sounds/spawn.wav (100%) rename {core => android}/assets/sprites/back.png (100%) rename {core => android}/assets/sprites/conveyor.png (100%) rename {core => android}/assets/sprites/conveyort.png (100%) rename {core => android}/assets/sprites/mindustry.atlas (100%) rename {core => android}/assets/sprites/mindustry.png (100%) rename {core => android}/assets/ui/backup/uiskin.atlas (100%) rename {core => android}/assets/ui/backup/uiskin.png (100%) rename {core => android}/assets/ui/out/blank.png (100%) rename {core => android}/assets/ui/out/border-circle-error.png (100%) rename {core => android}/assets/ui/out/border-circle.png (100%) rename {core => android}/assets/ui/out/border-dark-blue.9.png (100%) rename {core => android}/assets/ui/out/border-error.9.png (100%) rename {core => android}/assets/ui/out/border-white.9.png (100%) rename {core => android}/assets/ui/out/border.9.png (100%) rename {core => android}/assets/ui/out/bump.9.png (100%) rename {core => android}/assets/ui/out/button-blue-down.9.png (100%) rename {core => android}/assets/ui/out/button-blue-over.9.png (100%) rename {core => android}/assets/ui/out/button-blue.9.png (100%) rename {core => android}/assets/ui/out/button-down.9.png (100%) rename {core => android}/assets/ui/out/button-gray-over.9.png (100%) rename {core => android}/assets/ui/out/button-gray.9.png (100%) rename {core => android}/assets/ui/out/button-map-down.9.png (100%) rename {core => android}/assets/ui/out/button-map-over.9.png (100%) rename {core => android}/assets/ui/out/button-map.9.png (100%) rename {core => android}/assets/ui/out/button-over.9.png (100%) rename {core => android}/assets/ui/out/button-red.9.png (100%) rename {core => android}/assets/ui/out/button-select.9.png (100%) rename {core => android}/assets/ui/out/button-window-bg.9.png (100%) rename {core => android}/assets/ui/out/button-window-over.9.png (100%) rename {core => android}/assets/ui/out/button.9.png (100%) rename {core => android}/assets/ui/out/check-off.png (100%) rename {core => android}/assets/ui/out/check-on.png (100%) rename {core => android}/assets/ui/out/check-over.png (100%) rename {core => android}/assets/ui/out/clear.png (100%) rename {core => android}/assets/ui/out/color-picker-bar-selector.png (100%) rename {core => android}/assets/ui/out/color-picker-cross.png (100%) rename {core => android}/assets/ui/out/color-picker-selector-horizontal.png (100%) rename {core => android}/assets/ui/out/color-picker-selector-vertical.png (100%) rename {core => android}/assets/ui/out/cursor-normal.png (100%) rename {core => android}/assets/ui/out/cursor.png (100%) rename {core => android}/assets/ui/out/default-pane-no-border.9.png (100%) rename {core => android}/assets/ui/out/default-pane.9.png (100%) rename {core => android}/assets/ui/out/default-select-selection.9.png (100%) rename {core => android}/assets/ui/out/default-select.9.png (100%) rename {core => android}/assets/ui/out/grey.png (100%) create mode 100644 android/assets/ui/out/icon-cancel.png create mode 100644 android/assets/ui/out/icon-check.png rename {core => android}/assets/ui/out/icon-close-down.png (100%) rename {core => android}/assets/ui/out/icon-close-over.png (100%) rename {core => android}/assets/ui/out/icon-close.png (100%) rename {core => android}/assets/ui/out/icon-defense.png (100%) rename {core => android}/assets/ui/out/icon-distribution.png (100%) rename {core => android}/assets/ui/out/icon-production.png (100%) create mode 100644 android/assets/ui/out/icon-rotate.png rename {core => android}/assets/ui/out/list-selection.png (100%) rename {core => android}/assets/ui/out/menu-bg.png (100%) rename {core => android}/assets/ui/out/padded-list-selection.9.png (100%) rename {core => android}/assets/ui/out/progressbar-filled-vertical.png (100%) rename {core => android}/assets/ui/out/progressbar-filled.png (100%) rename {core => android}/assets/ui/out/progressbar-vertical.png (100%) rename {core => android}/assets/ui/out/progressbar.png (100%) rename {core => android}/assets/ui/out/radio-off.png (100%) rename {core => android}/assets/ui/out/radio-on.png (100%) rename {core => android}/assets/ui/out/scroll-horizontal.9.png (100%) rename {core => android}/assets/ui/out/scroll-knob-horizontal.9.png (100%) rename {core => android}/assets/ui/out/scroll-knob-vertical.9.png (100%) rename {core => android}/assets/ui/out/scroll.9.png (100%) rename {core => android}/assets/ui/out/select-box-list-bg.png (100%) rename {core => android}/assets/ui/out/select-down.png (100%) rename {core => android}/assets/ui/out/select-up.png (100%) rename {core => android}/assets/ui/out/selection.png (100%) rename {core => android}/assets/ui/out/separator-menu.png (100%) rename {core => android}/assets/ui/out/separator.png (100%) rename {core => android}/assets/ui/out/slider-knob-disabled.png (100%) rename {core => android}/assets/ui/out/slider-knob-down.png (100%) rename {core => android}/assets/ui/out/slider-knob-over.png (100%) rename {core => android}/assets/ui/out/slider-knob.png (100%) rename {core => android}/assets/ui/out/slider-vertical.png (100%) rename {core => android}/assets/ui/out/slider.png (100%) rename {core => android}/assets/ui/out/slot.9.png (100%) rename {core => android}/assets/ui/out/splitpane-over.png (100%) rename {core => android}/assets/ui/out/splitpane-vertical-over.png (100%) rename {core => android}/assets/ui/out/splitpane-vertical.png (100%) rename {core => android}/assets/ui/out/splitpane.png (100%) rename {core => android}/assets/ui/out/sub-menu.png (100%) rename {core => android}/assets/ui/out/textfield-over.9.png (100%) rename {core => android}/assets/ui/out/textfield.9.png (100%) rename {core => android}/assets/ui/out/tooltip-bg.9.png (100%) rename {core => android}/assets/ui/out/touchpad-knob.png (100%) rename {core => android}/assets/ui/out/tree-minus.png (100%) rename {core => android}/assets/ui/out/tree-over.png (100%) rename {core => android}/assets/ui/out/tree-plus.png (100%) rename {core => android}/assets/ui/out/tree-selection.9.png (100%) rename {core => android}/assets/ui/out/white.png (100%) rename {core => android}/assets/ui/out/window-bg.png (100%) rename {core => android}/assets/ui/out/window-border-bg.9.png (100%) rename {core => android}/assets/ui/out/window-gray.9.png (100%) rename {core => android}/assets/ui/out/window-noborder.9.png (100%) rename {core => android}/assets/ui/out/window-resizable.9.png (100%) rename {core => android}/assets/ui/out/window.9.png (100%) rename {core => android}/assets/ui/prose.fnt (100%) rename {core => android}/assets/ui/prose.png (100%) rename {core => android}/assets/ui/uiskin.atlas (96%) rename {core => android}/assets/ui/uiskin.json (100%) create mode 100644 android/assets/ui/uiskin.png create mode 100644 android/build.gradle create mode 100644 android/ic_launcher-web.png create mode 100644 android/proguard-project.txt create mode 100644 android/project.properties create mode 100644 android/res/drawable-hdpi/ic_launcher.png create mode 100644 android/res/drawable-mdpi/ic_launcher.png create mode 100644 android/res/drawable-xhdpi/ic_launcher.png create mode 100644 android/res/drawable-xxhdpi/ic_launcher.png create mode 100644 android/res/drawable-xxxhdpi/ic_launcher.png create mode 100644 android/res/values/strings.xml create mode 100644 android/res/values/styles.xml create mode 100644 android/src/io/anuke/mindustry/AndroidLauncher.java delete mode 100644 core/assets/ui/uiskin.png create mode 100644 core/src/io/anuke/mindustry/input/AndroidInput.java create mode 100644 core/src/io/anuke/mindustry/input/GestureHandler.java rename core/src/io/anuke/mindustry/{ => input}/Input.java (96%) create mode 100644 core/src/io/anuke/ucore/function/ActionProvider.java create mode 100644 core/src/io/anuke/ucore/function/ButtonTweaker.java create mode 100644 core/src/io/anuke/ucore/function/Callable.java create mode 100644 core/src/io/anuke/ucore/function/CheckListenable.java create mode 100644 core/src/io/anuke/ucore/function/ColorListenable.java create mode 100644 core/src/io/anuke/ucore/function/Consumer.java create mode 100644 core/src/io/anuke/ucore/function/EffectRenderer.java create mode 100644 core/src/io/anuke/ucore/function/FieldListenable.java create mode 100644 core/src/io/anuke/ucore/function/KeyListenable.java create mode 100644 core/src/io/anuke/ucore/function/Listenable.java create mode 100644 core/src/io/anuke/ucore/function/PositionConsumer.java create mode 100644 core/src/io/anuke/ucore/function/Predicate.java create mode 100644 core/src/io/anuke/ucore/function/StringProcessor.java create mode 100644 core/src/io/anuke/ucore/function/StringSupplier.java create mode 100644 core/src/io/anuke/ucore/function/TileCollider.java create mode 100644 core/src/io/anuke/ucore/function/TileHitboxProvider.java create mode 100644 core/src/io/anuke/ucore/function/TypingListenable.java create mode 100644 core/src/io/anuke/ucore/function/VisibilityProvider.java create mode 100644 ui/blank.png create mode 100644 ui/border-circle-error.png create mode 100644 ui/border-circle.png create mode 100644 ui/border-dark-blue.9.png create mode 100644 ui/border-error.9.png create mode 100644 ui/border-white.9.png create mode 100644 ui/border.9.png create mode 100644 ui/bump.9.png create mode 100644 ui/button-blue-down.9.png create mode 100644 ui/button-blue-over.9.png create mode 100644 ui/button-blue.9.png create mode 100644 ui/button-down.9.png create mode 100644 ui/button-gray-over.9.png create mode 100644 ui/button-gray.9.png create mode 100644 ui/button-map-down.9.png create mode 100644 ui/button-map-over.9.png create mode 100644 ui/button-map.9.png create mode 100644 ui/button-over.9.png create mode 100644 ui/button-red.9.png create mode 100644 ui/button-select.9.png create mode 100644 ui/button-window-bg.9.png create mode 100644 ui/button-window-over.9.png create mode 100644 ui/button.9.png create mode 100644 ui/check-off.png create mode 100644 ui/check-on.png create mode 100644 ui/check-over.png create mode 100644 ui/clear.png create mode 100644 ui/color-picker-bar-selector.png create mode 100644 ui/color-picker-cross.png create mode 100644 ui/color-picker-selector-horizontal.png create mode 100644 ui/color-picker-selector-vertical.png create mode 100644 ui/cursor-normal.png create mode 100644 ui/cursor.png create mode 100644 ui/default-pane-no-border.9.png create mode 100644 ui/default-pane.9.png create mode 100644 ui/default-select-selection.9.png create mode 100644 ui/default-select.9.png create mode 100644 ui/grey.png create mode 100644 ui/icon-cancel.png create mode 100644 ui/icon-check.png create mode 100644 ui/icon-close-down.png create mode 100644 ui/icon-close-over.png create mode 100644 ui/icon-close.png create mode 100644 ui/icon-defense.png create mode 100644 ui/icon-distribution.png create mode 100644 ui/icon-production.png create mode 100644 ui/icon-rotate.png create mode 100644 ui/list-selection.png create mode 100644 ui/menu-bg.png create mode 100644 ui/padded-list-selection.9.png create mode 100644 ui/progressbar-filled-vertical.png create mode 100644 ui/progressbar-filled.png create mode 100644 ui/progressbar-vertical.png create mode 100644 ui/progressbar.png create mode 100644 ui/radio-off.png create mode 100644 ui/radio-on.png create mode 100644 ui/scroll-horizontal.9.png create mode 100644 ui/scroll-knob-horizontal.9.png create mode 100644 ui/scroll-knob-vertical.9.png create mode 100644 ui/scroll.9.png create mode 100644 ui/select-box-list-bg.png create mode 100644 ui/select-down.png create mode 100644 ui/select-up.png create mode 100644 ui/selection.png create mode 100644 ui/separator-menu.png create mode 100644 ui/separator.png create mode 100644 ui/slider-knob-disabled.png create mode 100644 ui/slider-knob-down.png create mode 100644 ui/slider-knob-over.png create mode 100644 ui/slider-knob.png create mode 100644 ui/slider-vertical.png create mode 100644 ui/slider.png create mode 100644 ui/slot.9.png create mode 100644 ui/splitpane-over.png create mode 100644 ui/splitpane-vertical-over.png create mode 100644 ui/splitpane-vertical.png create mode 100644 ui/splitpane.png create mode 100644 ui/sub-menu.png create mode 100644 ui/textfield-over.9.png create mode 100644 ui/textfield.9.png create mode 100644 ui/tooltip-bg.9.png create mode 100644 ui/touchpad-knob.png create mode 100644 ui/tree-minus.png create mode 100644 ui/tree-over.png create mode 100644 ui/tree-plus.png create mode 100644 ui/tree-selection.9.png create mode 100644 ui/white.png create mode 100644 ui/window-bg.png create mode 100644 ui/window-border-bg.9.png create mode 100644 ui/window-gray.9.png create mode 100644 ui/window-noborder.9.png create mode 100644 ui/window-resizable.9.png create mode 100644 ui/window.9.png diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml new file mode 100644 index 0000000000..08ad3a55e6 --- /dev/null +++ b/android/AndroidManifest.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + diff --git a/core/assets/maps/canyon.png b/android/assets/maps/canyon.png similarity index 100% rename from core/assets/maps/canyon.png rename to android/assets/maps/canyon.png diff --git a/core/assets/maps/delta.png b/android/assets/maps/delta.png similarity index 100% rename from core/assets/maps/delta.png rename to android/assets/maps/delta.png diff --git a/core/assets/maps/map.png b/android/assets/maps/map.png similarity index 100% rename from core/assets/maps/map.png rename to android/assets/maps/map.png diff --git a/core/assets/maps/maze.png b/android/assets/maps/maze.png similarity index 100% rename from core/assets/maps/maze.png rename to android/assets/maps/maze.png diff --git a/core/assets/maps/pit.png b/android/assets/maps/pit.png similarity index 100% rename from core/assets/maps/pit.png rename to android/assets/maps/pit.png diff --git a/core/assets/maps/test.png b/android/assets/maps/test.png similarity index 100% rename from core/assets/maps/test.png rename to android/assets/maps/test.png diff --git a/core/assets/music/1.mp3 b/android/assets/music/1.mp3 similarity index 100% rename from core/assets/music/1.mp3 rename to android/assets/music/1.mp3 diff --git a/core/assets/music/2.mp3 b/android/assets/music/2.mp3 similarity index 100% rename from core/assets/music/2.mp3 rename to android/assets/music/2.mp3 diff --git a/core/assets/music/3.mp3 b/android/assets/music/3.mp3 similarity index 100% rename from core/assets/music/3.mp3 rename to android/assets/music/3.mp3 diff --git a/core/assets/music/place.wav b/android/assets/music/place.wav similarity index 100% rename from core/assets/music/place.wav rename to android/assets/music/place.wav diff --git a/core/assets/music/shoot.wav b/android/assets/music/shoot.wav similarity index 100% rename from core/assets/music/shoot.wav rename to android/assets/music/shoot.wav diff --git a/core/assets/sounds/bloop.wav b/android/assets/sounds/bloop.wav similarity index 100% rename from core/assets/sounds/bloop.wav rename to android/assets/sounds/bloop.wav diff --git a/core/assets/sounds/break.wav b/android/assets/sounds/break.wav similarity index 100% rename from core/assets/sounds/break.wav rename to android/assets/sounds/break.wav diff --git a/core/assets/sounds/corexplode.wav b/android/assets/sounds/corexplode.wav similarity index 100% rename from core/assets/sounds/corexplode.wav rename to android/assets/sounds/corexplode.wav diff --git a/core/assets/sounds/die.wav b/android/assets/sounds/die.wav similarity index 100% rename from core/assets/sounds/die.wav rename to android/assets/sounds/die.wav diff --git a/core/assets/sounds/enemyshoot.wav b/android/assets/sounds/enemyshoot.wav similarity index 100% rename from core/assets/sounds/enemyshoot.wav rename to android/assets/sounds/enemyshoot.wav diff --git a/core/assets/sounds/explosion.wav b/android/assets/sounds/explosion.wav similarity index 100% rename from core/assets/sounds/explosion.wav rename to android/assets/sounds/explosion.wav diff --git a/core/assets/sounds/flame.wav b/android/assets/sounds/flame.wav similarity index 100% rename from core/assets/sounds/flame.wav rename to android/assets/sounds/flame.wav diff --git a/core/assets/sounds/flame2.wav b/android/assets/sounds/flame2.wav similarity index 100% rename from core/assets/sounds/flame2.wav rename to android/assets/sounds/flame2.wav diff --git a/core/assets/sounds/missile.wav b/android/assets/sounds/missile.wav similarity index 100% rename from core/assets/sounds/missile.wav rename to android/assets/sounds/missile.wav diff --git a/core/assets/sounds/place.wav b/android/assets/sounds/place.wav similarity index 100% rename from core/assets/sounds/place.wav rename to android/assets/sounds/place.wav diff --git a/core/assets/sounds/purchase.wav b/android/assets/sounds/purchase.wav similarity index 100% rename from core/assets/sounds/purchase.wav rename to android/assets/sounds/purchase.wav diff --git a/core/assets/sounds/resonate.wav b/android/assets/sounds/resonate.wav similarity index 100% rename from core/assets/sounds/resonate.wav rename to android/assets/sounds/resonate.wav diff --git a/core/assets/sounds/respawn.wav b/android/assets/sounds/respawn.wav similarity index 100% rename from core/assets/sounds/respawn.wav rename to android/assets/sounds/respawn.wav diff --git a/core/assets/sounds/shoot.wav b/android/assets/sounds/shoot.wav similarity index 100% rename from core/assets/sounds/shoot.wav rename to android/assets/sounds/shoot.wav diff --git a/core/assets/sounds/spawn.wav b/android/assets/sounds/spawn.wav similarity index 100% rename from core/assets/sounds/spawn.wav rename to android/assets/sounds/spawn.wav diff --git a/core/assets/sprites/back.png b/android/assets/sprites/back.png similarity index 100% rename from core/assets/sprites/back.png rename to android/assets/sprites/back.png diff --git a/core/assets/sprites/conveyor.png b/android/assets/sprites/conveyor.png similarity index 100% rename from core/assets/sprites/conveyor.png rename to android/assets/sprites/conveyor.png diff --git a/core/assets/sprites/conveyort.png b/android/assets/sprites/conveyort.png similarity index 100% rename from core/assets/sprites/conveyort.png rename to android/assets/sprites/conveyort.png diff --git a/core/assets/sprites/mindustry.atlas b/android/assets/sprites/mindustry.atlas similarity index 100% rename from core/assets/sprites/mindustry.atlas rename to android/assets/sprites/mindustry.atlas diff --git a/core/assets/sprites/mindustry.png b/android/assets/sprites/mindustry.png similarity index 100% rename from core/assets/sprites/mindustry.png rename to android/assets/sprites/mindustry.png diff --git a/core/assets/ui/backup/uiskin.atlas b/android/assets/ui/backup/uiskin.atlas similarity index 100% rename from core/assets/ui/backup/uiskin.atlas rename to android/assets/ui/backup/uiskin.atlas diff --git a/core/assets/ui/backup/uiskin.png b/android/assets/ui/backup/uiskin.png similarity index 100% rename from core/assets/ui/backup/uiskin.png rename to android/assets/ui/backup/uiskin.png diff --git a/core/assets/ui/out/blank.png b/android/assets/ui/out/blank.png similarity index 100% rename from core/assets/ui/out/blank.png rename to android/assets/ui/out/blank.png diff --git a/core/assets/ui/out/border-circle-error.png b/android/assets/ui/out/border-circle-error.png similarity index 100% rename from core/assets/ui/out/border-circle-error.png rename to android/assets/ui/out/border-circle-error.png diff --git a/core/assets/ui/out/border-circle.png b/android/assets/ui/out/border-circle.png similarity index 100% rename from core/assets/ui/out/border-circle.png rename to android/assets/ui/out/border-circle.png diff --git a/core/assets/ui/out/border-dark-blue.9.png b/android/assets/ui/out/border-dark-blue.9.png similarity index 100% rename from core/assets/ui/out/border-dark-blue.9.png rename to android/assets/ui/out/border-dark-blue.9.png diff --git a/core/assets/ui/out/border-error.9.png b/android/assets/ui/out/border-error.9.png similarity index 100% rename from core/assets/ui/out/border-error.9.png rename to android/assets/ui/out/border-error.9.png diff --git a/core/assets/ui/out/border-white.9.png b/android/assets/ui/out/border-white.9.png similarity index 100% rename from core/assets/ui/out/border-white.9.png rename to android/assets/ui/out/border-white.9.png diff --git a/core/assets/ui/out/border.9.png b/android/assets/ui/out/border.9.png similarity index 100% rename from core/assets/ui/out/border.9.png rename to android/assets/ui/out/border.9.png diff --git a/core/assets/ui/out/bump.9.png b/android/assets/ui/out/bump.9.png similarity index 100% rename from core/assets/ui/out/bump.9.png rename to android/assets/ui/out/bump.9.png diff --git a/core/assets/ui/out/button-blue-down.9.png b/android/assets/ui/out/button-blue-down.9.png similarity index 100% rename from core/assets/ui/out/button-blue-down.9.png rename to android/assets/ui/out/button-blue-down.9.png diff --git a/core/assets/ui/out/button-blue-over.9.png b/android/assets/ui/out/button-blue-over.9.png similarity index 100% rename from core/assets/ui/out/button-blue-over.9.png rename to android/assets/ui/out/button-blue-over.9.png diff --git a/core/assets/ui/out/button-blue.9.png b/android/assets/ui/out/button-blue.9.png similarity index 100% rename from core/assets/ui/out/button-blue.9.png rename to android/assets/ui/out/button-blue.9.png diff --git a/core/assets/ui/out/button-down.9.png b/android/assets/ui/out/button-down.9.png similarity index 100% rename from core/assets/ui/out/button-down.9.png rename to android/assets/ui/out/button-down.9.png diff --git a/core/assets/ui/out/button-gray-over.9.png b/android/assets/ui/out/button-gray-over.9.png similarity index 100% rename from core/assets/ui/out/button-gray-over.9.png rename to android/assets/ui/out/button-gray-over.9.png diff --git a/core/assets/ui/out/button-gray.9.png b/android/assets/ui/out/button-gray.9.png similarity index 100% rename from core/assets/ui/out/button-gray.9.png rename to android/assets/ui/out/button-gray.9.png diff --git a/core/assets/ui/out/button-map-down.9.png b/android/assets/ui/out/button-map-down.9.png similarity index 100% rename from core/assets/ui/out/button-map-down.9.png rename to android/assets/ui/out/button-map-down.9.png diff --git a/core/assets/ui/out/button-map-over.9.png b/android/assets/ui/out/button-map-over.9.png similarity index 100% rename from core/assets/ui/out/button-map-over.9.png rename to android/assets/ui/out/button-map-over.9.png diff --git a/core/assets/ui/out/button-map.9.png b/android/assets/ui/out/button-map.9.png similarity index 100% rename from core/assets/ui/out/button-map.9.png rename to android/assets/ui/out/button-map.9.png diff --git a/core/assets/ui/out/button-over.9.png b/android/assets/ui/out/button-over.9.png similarity index 100% rename from core/assets/ui/out/button-over.9.png rename to android/assets/ui/out/button-over.9.png diff --git a/core/assets/ui/out/button-red.9.png b/android/assets/ui/out/button-red.9.png similarity index 100% rename from core/assets/ui/out/button-red.9.png rename to android/assets/ui/out/button-red.9.png diff --git a/core/assets/ui/out/button-select.9.png b/android/assets/ui/out/button-select.9.png similarity index 100% rename from core/assets/ui/out/button-select.9.png rename to android/assets/ui/out/button-select.9.png diff --git a/core/assets/ui/out/button-window-bg.9.png b/android/assets/ui/out/button-window-bg.9.png similarity index 100% rename from core/assets/ui/out/button-window-bg.9.png rename to android/assets/ui/out/button-window-bg.9.png diff --git a/core/assets/ui/out/button-window-over.9.png b/android/assets/ui/out/button-window-over.9.png similarity index 100% rename from core/assets/ui/out/button-window-over.9.png rename to android/assets/ui/out/button-window-over.9.png diff --git a/core/assets/ui/out/button.9.png b/android/assets/ui/out/button.9.png similarity index 100% rename from core/assets/ui/out/button.9.png rename to android/assets/ui/out/button.9.png diff --git a/core/assets/ui/out/check-off.png b/android/assets/ui/out/check-off.png similarity index 100% rename from core/assets/ui/out/check-off.png rename to android/assets/ui/out/check-off.png diff --git a/core/assets/ui/out/check-on.png b/android/assets/ui/out/check-on.png similarity index 100% rename from core/assets/ui/out/check-on.png rename to android/assets/ui/out/check-on.png diff --git a/core/assets/ui/out/check-over.png b/android/assets/ui/out/check-over.png similarity index 100% rename from core/assets/ui/out/check-over.png rename to android/assets/ui/out/check-over.png diff --git a/core/assets/ui/out/clear.png b/android/assets/ui/out/clear.png similarity index 100% rename from core/assets/ui/out/clear.png rename to android/assets/ui/out/clear.png diff --git a/core/assets/ui/out/color-picker-bar-selector.png b/android/assets/ui/out/color-picker-bar-selector.png similarity index 100% rename from core/assets/ui/out/color-picker-bar-selector.png rename to android/assets/ui/out/color-picker-bar-selector.png diff --git a/core/assets/ui/out/color-picker-cross.png b/android/assets/ui/out/color-picker-cross.png similarity index 100% rename from core/assets/ui/out/color-picker-cross.png rename to android/assets/ui/out/color-picker-cross.png diff --git a/core/assets/ui/out/color-picker-selector-horizontal.png b/android/assets/ui/out/color-picker-selector-horizontal.png similarity index 100% rename from core/assets/ui/out/color-picker-selector-horizontal.png rename to android/assets/ui/out/color-picker-selector-horizontal.png diff --git a/core/assets/ui/out/color-picker-selector-vertical.png b/android/assets/ui/out/color-picker-selector-vertical.png similarity index 100% rename from core/assets/ui/out/color-picker-selector-vertical.png rename to android/assets/ui/out/color-picker-selector-vertical.png diff --git a/core/assets/ui/out/cursor-normal.png b/android/assets/ui/out/cursor-normal.png similarity index 100% rename from core/assets/ui/out/cursor-normal.png rename to android/assets/ui/out/cursor-normal.png diff --git a/core/assets/ui/out/cursor.png b/android/assets/ui/out/cursor.png similarity index 100% rename from core/assets/ui/out/cursor.png rename to android/assets/ui/out/cursor.png diff --git a/core/assets/ui/out/default-pane-no-border.9.png b/android/assets/ui/out/default-pane-no-border.9.png similarity index 100% rename from core/assets/ui/out/default-pane-no-border.9.png rename to android/assets/ui/out/default-pane-no-border.9.png diff --git a/core/assets/ui/out/default-pane.9.png b/android/assets/ui/out/default-pane.9.png similarity index 100% rename from core/assets/ui/out/default-pane.9.png rename to android/assets/ui/out/default-pane.9.png diff --git a/core/assets/ui/out/default-select-selection.9.png b/android/assets/ui/out/default-select-selection.9.png similarity index 100% rename from core/assets/ui/out/default-select-selection.9.png rename to android/assets/ui/out/default-select-selection.9.png diff --git a/core/assets/ui/out/default-select.9.png b/android/assets/ui/out/default-select.9.png similarity index 100% rename from core/assets/ui/out/default-select.9.png rename to android/assets/ui/out/default-select.9.png diff --git a/core/assets/ui/out/grey.png b/android/assets/ui/out/grey.png similarity index 100% rename from core/assets/ui/out/grey.png rename to android/assets/ui/out/grey.png diff --git a/android/assets/ui/out/icon-cancel.png b/android/assets/ui/out/icon-cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..bf4c7ed9a0e88083f34a1b1be3ff61685bd3dd78 GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`26+$Niwq15oCO|{#S9GG!XV7ZFl&wk z0|NtliKnkC`$INaCUy4eTd&VDFfgp}ba4#PI6rs7MczXOJTCK@okNl&A{ysU6Wt}C z9rCnY^prt|X4lUJo^!8E6i|;WI=9REY0A7PCBDZq)64I_Vc31Sm*?}9MXNGr)h&40 z-qZc;BdgQaPUR!Qx{d1_&N!(1A z^L~Hdsrf?bRfWQ*m6oVY>q^y1TDaAQrMTpFbeS~6fqiNPT@ydeuYbs#$y05%^vH+P Q3=9kmp00i_>zopr0E1Ctp8x;= literal 0 HcmV?d00001 diff --git a/android/assets/ui/out/icon-check.png b/android/assets/ui/out/icon-check.png new file mode 100644 index 0000000000000000000000000000000000000000..67bd7b09cdc5f86eb4f73bccb32b00bed7b14c80 GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`26+$Niwq15oCO|{#S9GG!XV7ZFl&wk z0|NtliKnkC`$INaCMli0eNn~?3=Fe9T^vI+&d;52k@t`RkIQ^!=a3|cT}<}6+9ir% zD^B@`YaCWsrtwU@aaZQ7j>$T%(?8EGHS*_WT>kLTX4%E&2Nv#2Ht^?N^=s~`*DH73 zD~Jg{^ZP}%2(??&-=jqZc>$crQyN|1_lNOPgg&ebxsLQ E0Ii!|vH$=8 literal 0 HcmV?d00001 diff --git a/core/assets/ui/out/icon-close-down.png b/android/assets/ui/out/icon-close-down.png similarity index 100% rename from core/assets/ui/out/icon-close-down.png rename to android/assets/ui/out/icon-close-down.png diff --git a/core/assets/ui/out/icon-close-over.png b/android/assets/ui/out/icon-close-over.png similarity index 100% rename from core/assets/ui/out/icon-close-over.png rename to android/assets/ui/out/icon-close-over.png diff --git a/core/assets/ui/out/icon-close.png b/android/assets/ui/out/icon-close.png similarity index 100% rename from core/assets/ui/out/icon-close.png rename to android/assets/ui/out/icon-close.png diff --git a/core/assets/ui/out/icon-defense.png b/android/assets/ui/out/icon-defense.png similarity index 100% rename from core/assets/ui/out/icon-defense.png rename to android/assets/ui/out/icon-defense.png diff --git a/core/assets/ui/out/icon-distribution.png b/android/assets/ui/out/icon-distribution.png similarity index 100% rename from core/assets/ui/out/icon-distribution.png rename to android/assets/ui/out/icon-distribution.png diff --git a/core/assets/ui/out/icon-production.png b/android/assets/ui/out/icon-production.png similarity index 100% rename from core/assets/ui/out/icon-production.png rename to android/assets/ui/out/icon-production.png diff --git a/android/assets/ui/out/icon-rotate.png b/android/assets/ui/out/icon-rotate.png new file mode 100644 index 0000000000000000000000000000000000000000..77ed4bb76d05c8f2f532d5c410658466b4a5499f GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`26+$Niwq15oCO|{#S9GG!XV7ZFl&wk z0|NtliKnkC`$INaCK-iCNgL-eFfh#bba4#PI6rsNUEV_mJT33JoI{c%!(MnF=8EkQ z)v8ErEt5DR^7f;X)91$vK6y@)Ihj7+@1fDx4|DQl=e?Wwm7&1mzTie5Tb0(VcEPs> zPL_#m3{on4)`?53sJgh~MbXDajLy#Qgwp=#F8Q9*a?nJkZjagPHyh5ao0stK*hlv_ zM$TNq@uyd*z79@R@;a)Mr;xn5ZnjF^A%}xg&wh)aR>2(orPe;l0|SGntDnm{ Hr-UW|9qC`n literal 0 HcmV?d00001 diff --git a/core/assets/ui/out/list-selection.png b/android/assets/ui/out/list-selection.png similarity index 100% rename from core/assets/ui/out/list-selection.png rename to android/assets/ui/out/list-selection.png diff --git a/core/assets/ui/out/menu-bg.png b/android/assets/ui/out/menu-bg.png similarity index 100% rename from core/assets/ui/out/menu-bg.png rename to android/assets/ui/out/menu-bg.png diff --git a/core/assets/ui/out/padded-list-selection.9.png b/android/assets/ui/out/padded-list-selection.9.png similarity index 100% rename from core/assets/ui/out/padded-list-selection.9.png rename to android/assets/ui/out/padded-list-selection.9.png diff --git a/core/assets/ui/out/progressbar-filled-vertical.png b/android/assets/ui/out/progressbar-filled-vertical.png similarity index 100% rename from core/assets/ui/out/progressbar-filled-vertical.png rename to android/assets/ui/out/progressbar-filled-vertical.png diff --git a/core/assets/ui/out/progressbar-filled.png b/android/assets/ui/out/progressbar-filled.png similarity index 100% rename from core/assets/ui/out/progressbar-filled.png rename to android/assets/ui/out/progressbar-filled.png diff --git a/core/assets/ui/out/progressbar-vertical.png b/android/assets/ui/out/progressbar-vertical.png similarity index 100% rename from core/assets/ui/out/progressbar-vertical.png rename to android/assets/ui/out/progressbar-vertical.png diff --git a/core/assets/ui/out/progressbar.png b/android/assets/ui/out/progressbar.png similarity index 100% rename from core/assets/ui/out/progressbar.png rename to android/assets/ui/out/progressbar.png diff --git a/core/assets/ui/out/radio-off.png b/android/assets/ui/out/radio-off.png similarity index 100% rename from core/assets/ui/out/radio-off.png rename to android/assets/ui/out/radio-off.png diff --git a/core/assets/ui/out/radio-on.png b/android/assets/ui/out/radio-on.png similarity index 100% rename from core/assets/ui/out/radio-on.png rename to android/assets/ui/out/radio-on.png diff --git a/core/assets/ui/out/scroll-horizontal.9.png b/android/assets/ui/out/scroll-horizontal.9.png similarity index 100% rename from core/assets/ui/out/scroll-horizontal.9.png rename to android/assets/ui/out/scroll-horizontal.9.png diff --git a/core/assets/ui/out/scroll-knob-horizontal.9.png b/android/assets/ui/out/scroll-knob-horizontal.9.png similarity index 100% rename from core/assets/ui/out/scroll-knob-horizontal.9.png rename to android/assets/ui/out/scroll-knob-horizontal.9.png diff --git a/core/assets/ui/out/scroll-knob-vertical.9.png b/android/assets/ui/out/scroll-knob-vertical.9.png similarity index 100% rename from core/assets/ui/out/scroll-knob-vertical.9.png rename to android/assets/ui/out/scroll-knob-vertical.9.png diff --git a/core/assets/ui/out/scroll.9.png b/android/assets/ui/out/scroll.9.png similarity index 100% rename from core/assets/ui/out/scroll.9.png rename to android/assets/ui/out/scroll.9.png diff --git a/core/assets/ui/out/select-box-list-bg.png b/android/assets/ui/out/select-box-list-bg.png similarity index 100% rename from core/assets/ui/out/select-box-list-bg.png rename to android/assets/ui/out/select-box-list-bg.png diff --git a/core/assets/ui/out/select-down.png b/android/assets/ui/out/select-down.png similarity index 100% rename from core/assets/ui/out/select-down.png rename to android/assets/ui/out/select-down.png diff --git a/core/assets/ui/out/select-up.png b/android/assets/ui/out/select-up.png similarity index 100% rename from core/assets/ui/out/select-up.png rename to android/assets/ui/out/select-up.png diff --git a/core/assets/ui/out/selection.png b/android/assets/ui/out/selection.png similarity index 100% rename from core/assets/ui/out/selection.png rename to android/assets/ui/out/selection.png diff --git a/core/assets/ui/out/separator-menu.png b/android/assets/ui/out/separator-menu.png similarity index 100% rename from core/assets/ui/out/separator-menu.png rename to android/assets/ui/out/separator-menu.png diff --git a/core/assets/ui/out/separator.png b/android/assets/ui/out/separator.png similarity index 100% rename from core/assets/ui/out/separator.png rename to android/assets/ui/out/separator.png diff --git a/core/assets/ui/out/slider-knob-disabled.png b/android/assets/ui/out/slider-knob-disabled.png similarity index 100% rename from core/assets/ui/out/slider-knob-disabled.png rename to android/assets/ui/out/slider-knob-disabled.png diff --git a/core/assets/ui/out/slider-knob-down.png b/android/assets/ui/out/slider-knob-down.png similarity index 100% rename from core/assets/ui/out/slider-knob-down.png rename to android/assets/ui/out/slider-knob-down.png diff --git a/core/assets/ui/out/slider-knob-over.png b/android/assets/ui/out/slider-knob-over.png similarity index 100% rename from core/assets/ui/out/slider-knob-over.png rename to android/assets/ui/out/slider-knob-over.png diff --git a/core/assets/ui/out/slider-knob.png b/android/assets/ui/out/slider-knob.png similarity index 100% rename from core/assets/ui/out/slider-knob.png rename to android/assets/ui/out/slider-knob.png diff --git a/core/assets/ui/out/slider-vertical.png b/android/assets/ui/out/slider-vertical.png similarity index 100% rename from core/assets/ui/out/slider-vertical.png rename to android/assets/ui/out/slider-vertical.png diff --git a/core/assets/ui/out/slider.png b/android/assets/ui/out/slider.png similarity index 100% rename from core/assets/ui/out/slider.png rename to android/assets/ui/out/slider.png diff --git a/core/assets/ui/out/slot.9.png b/android/assets/ui/out/slot.9.png similarity index 100% rename from core/assets/ui/out/slot.9.png rename to android/assets/ui/out/slot.9.png diff --git a/core/assets/ui/out/splitpane-over.png b/android/assets/ui/out/splitpane-over.png similarity index 100% rename from core/assets/ui/out/splitpane-over.png rename to android/assets/ui/out/splitpane-over.png diff --git a/core/assets/ui/out/splitpane-vertical-over.png b/android/assets/ui/out/splitpane-vertical-over.png similarity index 100% rename from core/assets/ui/out/splitpane-vertical-over.png rename to android/assets/ui/out/splitpane-vertical-over.png diff --git a/core/assets/ui/out/splitpane-vertical.png b/android/assets/ui/out/splitpane-vertical.png similarity index 100% rename from core/assets/ui/out/splitpane-vertical.png rename to android/assets/ui/out/splitpane-vertical.png diff --git a/core/assets/ui/out/splitpane.png b/android/assets/ui/out/splitpane.png similarity index 100% rename from core/assets/ui/out/splitpane.png rename to android/assets/ui/out/splitpane.png diff --git a/core/assets/ui/out/sub-menu.png b/android/assets/ui/out/sub-menu.png similarity index 100% rename from core/assets/ui/out/sub-menu.png rename to android/assets/ui/out/sub-menu.png diff --git a/core/assets/ui/out/textfield-over.9.png b/android/assets/ui/out/textfield-over.9.png similarity index 100% rename from core/assets/ui/out/textfield-over.9.png rename to android/assets/ui/out/textfield-over.9.png diff --git a/core/assets/ui/out/textfield.9.png b/android/assets/ui/out/textfield.9.png similarity index 100% rename from core/assets/ui/out/textfield.9.png rename to android/assets/ui/out/textfield.9.png diff --git a/core/assets/ui/out/tooltip-bg.9.png b/android/assets/ui/out/tooltip-bg.9.png similarity index 100% rename from core/assets/ui/out/tooltip-bg.9.png rename to android/assets/ui/out/tooltip-bg.9.png diff --git a/core/assets/ui/out/touchpad-knob.png b/android/assets/ui/out/touchpad-knob.png similarity index 100% rename from core/assets/ui/out/touchpad-knob.png rename to android/assets/ui/out/touchpad-knob.png diff --git a/core/assets/ui/out/tree-minus.png b/android/assets/ui/out/tree-minus.png similarity index 100% rename from core/assets/ui/out/tree-minus.png rename to android/assets/ui/out/tree-minus.png diff --git a/core/assets/ui/out/tree-over.png b/android/assets/ui/out/tree-over.png similarity index 100% rename from core/assets/ui/out/tree-over.png rename to android/assets/ui/out/tree-over.png diff --git a/core/assets/ui/out/tree-plus.png b/android/assets/ui/out/tree-plus.png similarity index 100% rename from core/assets/ui/out/tree-plus.png rename to android/assets/ui/out/tree-plus.png diff --git a/core/assets/ui/out/tree-selection.9.png b/android/assets/ui/out/tree-selection.9.png similarity index 100% rename from core/assets/ui/out/tree-selection.9.png rename to android/assets/ui/out/tree-selection.9.png diff --git a/core/assets/ui/out/white.png b/android/assets/ui/out/white.png similarity index 100% rename from core/assets/ui/out/white.png rename to android/assets/ui/out/white.png diff --git a/core/assets/ui/out/window-bg.png b/android/assets/ui/out/window-bg.png similarity index 100% rename from core/assets/ui/out/window-bg.png rename to android/assets/ui/out/window-bg.png diff --git a/core/assets/ui/out/window-border-bg.9.png b/android/assets/ui/out/window-border-bg.9.png similarity index 100% rename from core/assets/ui/out/window-border-bg.9.png rename to android/assets/ui/out/window-border-bg.9.png diff --git a/core/assets/ui/out/window-gray.9.png b/android/assets/ui/out/window-gray.9.png similarity index 100% rename from core/assets/ui/out/window-gray.9.png rename to android/assets/ui/out/window-gray.9.png diff --git a/core/assets/ui/out/window-noborder.9.png b/android/assets/ui/out/window-noborder.9.png similarity index 100% rename from core/assets/ui/out/window-noborder.9.png rename to android/assets/ui/out/window-noborder.9.png diff --git a/core/assets/ui/out/window-resizable.9.png b/android/assets/ui/out/window-resizable.9.png similarity index 100% rename from core/assets/ui/out/window-resizable.9.png rename to android/assets/ui/out/window-resizable.9.png diff --git a/core/assets/ui/out/window.9.png b/android/assets/ui/out/window.9.png similarity index 100% rename from core/assets/ui/out/window.9.png rename to android/assets/ui/out/window.9.png diff --git a/core/assets/ui/prose.fnt b/android/assets/ui/prose.fnt similarity index 100% rename from core/assets/ui/prose.fnt rename to android/assets/ui/prose.fnt diff --git a/core/assets/ui/prose.png b/android/assets/ui/prose.png similarity index 100% rename from core/assets/ui/prose.png rename to android/assets/ui/prose.png diff --git a/core/assets/ui/uiskin.atlas b/android/assets/ui/uiskin.atlas similarity index 96% rename from core/assets/ui/uiskin.atlas rename to android/assets/ui/uiskin.atlas index e041fb39c8..d9da6fe185 100644 --- a/core/assets/ui/uiskin.atlas +++ b/android/assets/ui/uiskin.atlas @@ -51,7 +51,7 @@ border-error index: -1 border-white rotate: false - xy: 367, 6 + xy: 421, 17 size: 12, 12 split: 4, 4, 4, 4 orig: 12, 12 @@ -251,7 +251,7 @@ color-picker-selector-vertical index: -1 cursor rotate: false - xy: 136, 56 + xy: 383, 14 size: 4, 4 orig: 4, 4 offset: 0, 0 @@ -309,6 +309,20 @@ menu-bg orig: 1, 1 offset: 0, 0 index: -1 +icon-cancel + rotate: false + xy: 367, 4 + size: 14, 14 + orig: 14, 14 + offset: 0, 0 + index: -1 +icon-check + rotate: false + xy: 389, 15 + size: 14, 14 + orig: 14, 14 + offset: 0, 0 + index: -1 icon-close rotate: false xy: 217, 86 @@ -346,11 +360,18 @@ icon-distribution index: -1 icon-production rotate: false - xy: 389, 19 + xy: 383, 2 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 +icon-rotate + rotate: false + xy: 405, 15 + size: 14, 14 + orig: 14, 14 + offset: 0, 0 + index: -1 list-selection rotate: false xy: 220, 3 @@ -616,7 +637,7 @@ touchpad-knob index: -1 tree-minus rotate: false - xy: 401, 19 + xy: 395, 2 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -630,7 +651,7 @@ tree-plus index: -1 tree-selection rotate: false - xy: 430, 69 + xy: 136, 57 size: 3, 3 split: 1, 1, 1, 1 orig: 3, 3 @@ -638,7 +659,7 @@ tree-selection index: -1 white rotate: false - xy: 473, 17 + xy: 430, 69 size: 3, 3 orig: 3, 3 offset: 0, 0 @@ -653,7 +674,7 @@ window index: -1 window-border-bg rotate: false - xy: 136, 7 + xy: 473, 17 size: 3, 3 split: 1, 1, 1, 1 orig: 3, 3 diff --git a/core/assets/ui/uiskin.json b/android/assets/ui/uiskin.json similarity index 100% rename from core/assets/ui/uiskin.json rename to android/assets/ui/uiskin.json diff --git a/android/assets/ui/uiskin.png b/android/assets/ui/uiskin.png new file mode 100644 index 0000000000000000000000000000000000000000..35af9648711c3d56251812b281e3a8b73341e81d GIT binary patch literal 12205 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 e##x);kNg#pe-@2l2VR0!<9oXLxvX + def outputDir = null + if (jar.name.endsWith("natives-arm64-v8a.jar")) outputDir = file("libs/arm64-v8a") + if (jar.name.endsWith("natives-armeabi-v7a.jar")) outputDir = file("libs/armeabi-v7a") + if (jar.name.endsWith("natives-armeabi.jar")) outputDir = file("libs/armeabi") + if (jar.name.endsWith("natives-x86_64.jar")) outputDir = file("libs/x86_64") + if (jar.name.endsWith("natives-x86.jar")) outputDir = file("libs/x86") + if (outputDir != null) { + copy { + from zipTree(jar) + into outputDir + include "*.so" + } + } + } +} +task run(type: Exec) { + def path + def localProperties = project.file("../local.properties") + if (localProperties.exists()) { + Properties properties = new Properties() + localProperties.withInputStream { instr -> + properties.load(instr) + } + def sdkDir = properties.getProperty('sdk.dir') + if (sdkDir) { + path = sdkDir + } else { + path = "$System.env.ANDROID_HOME" + } + } else { + path = "$System.env.ANDROID_HOME" + } + + def adb = path + "/platform-tools/adb" + commandLine "$adb", 'shell', 'am', 'start', '-n', 'io.anuke.mindustry/io.anuke.mindustry.AndroidLauncher' +} +// sets up the Android Eclipse project, using the old Ant based build. +eclipse { + // need to specify Java source sets explicitly, SpringSource Gradle Eclipse plugin + // ignores any nodes added in classpath.file.withXml + sourceSets { + main { + java.srcDirs "src", 'gen' + } + } + + jdt { + sourceCompatibility = 1.7 + targetCompatibility = 1.7 + } + + classpath { + plusConfigurations += [project.configurations.compile] + containers 'com.android.ide.eclipse.adt.ANDROID_FRAMEWORK', 'com.android.ide.eclipse.adt.LIBRARIES' + } + + project { + name = appName + "-android" + natures 'com.android.ide.eclipse.adt.AndroidNature' + buildCommands.clear(); + buildCommand "com.android.ide.eclipse.adt.ResourceManagerBuilder" + buildCommand "com.android.ide.eclipse.adt.PreCompilerBuilder" + buildCommand "org.eclipse.jdt.core.javabuilder" + buildCommand "com.android.ide.eclipse.adt.ApkBuilder" + } +} +// sets up the Android Idea project, using the old Ant based build. +idea { + module { + sourceDirs += file("src"); + scopes = [COMPILE: [plus: [project.configurations.compile]]] + + iml { + withXml { + def node = it.asNode() + def builder = NodeBuilder.newInstance(); + builder.current = node; + builder.component(name: "FacetManager") { + facet(type: "android", name: "Android") { + configuration { + option(name: "UPDATE_PROPERTY_FILES", value: "true") + } + } + } + } + } + } +} +dependencies { +} \ No newline at end of file diff --git a/android/ic_launcher-web.png b/android/ic_launcher-web.png new file mode 100644 index 0000000000000000000000000000000000000000..ebd65987eeb1ddb1243f7eadb3e7c9eee78efb2f GIT binary patch literal 22030 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 literal 0 HcmV?d00001 diff --git a/android/proguard-project.txt b/android/proguard-project.txt new file mode 100644 index 0000000000..b166b1e81c --- /dev/null +++ b/android/proguard-project.txt @@ -0,0 +1,45 @@ +# To enable ProGuard in your project, edit project.properties +# to define the proguard.config property as described in that file. +# +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in ${sdk.dir}/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the ProGuard +# include property in project.properties. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +-verbose + +-dontwarn android.support.** +-dontwarn com.badlogic.gdx.backends.android.AndroidFragmentApplication +-dontwarn com.badlogic.gdx.utils.GdxBuild +-dontwarn com.badlogic.gdx.physics.box2d.utils.Box2DBuild +-dontwarn com.badlogic.gdx.jnigen.BuildTarget* +-dontwarn com.badlogic.gdx.graphics.g2d.freetype.FreetypeBuild + +-keep class com.badlogic.gdx.controllers.android.AndroidControllers + +-keepclassmembers class com.badlogic.gdx.backends.android.AndroidInput* { + (com.badlogic.gdx.Application, android.content.Context, java.lang.Object, com.badlogic.gdx.backends.android.AndroidApplicationConfiguration); +} + +-keepclassmembers class com.badlogic.gdx.physics.box2d.World { + boolean contactFilter(long, long); + void beginContact(long); + void endContact(long); + void preSolve(long, long); + void postSolve(long, long); + boolean reportFixture(long); + float reportRayFixture(long, float, float, float, float, float); +} diff --git a/android/project.properties b/android/project.properties new file mode 100644 index 0000000000..4ab125693c --- /dev/null +++ b/android/project.properties @@ -0,0 +1,14 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system edit +# "ant.properties", and override values to adapt the script to your +# project structure. +# +# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): +#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt + +# Project target. +target=android-19 diff --git a/android/res/drawable-hdpi/ic_launcher.png b/android/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..b6b1472561d949d26a75d0a002fd9fbb44731ada GIT binary patch literal 3430 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 U@JZeY3=9kmp00i_>zopr06^@GtN;K2 literal 0 HcmV?d00001 diff --git a/android/res/drawable-mdpi/ic_launcher.png b/android/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..1ce160b9a72758305b25856280a527caa530d645 GIT binary patch literal 1931 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 CcSV~3 literal 0 HcmV?d00001 diff --git a/android/res/drawable-xxhdpi/ic_launcher.png b/android/res/drawable-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..6dc9073e0f57ec0c510dd6c3407ded6461dc0afd GIT binary patch literal 8265 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 z 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 I>zopr09xRSr~m)} literal 0 HcmV?d00001 diff --git a/android/res/drawable-xxxhdpi/ic_launcher.png b/android/res/drawable-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d1099464ab0b61e3efe7b19f6a376e2c9c33eea0 GIT binary patch literal 19448 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 + + + Mindustry + + diff --git a/android/res/values/styles.xml b/android/res/values/styles.xml new file mode 100644 index 0000000000..3f00fc5ac7 --- /dev/null +++ b/android/res/values/styles.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/android/src/io/anuke/mindustry/AndroidLauncher.java b/android/src/io/anuke/mindustry/AndroidLauncher.java new file mode 100644 index 0000000000..e01156c389 --- /dev/null +++ b/android/src/io/anuke/mindustry/AndroidLauncher.java @@ -0,0 +1,16 @@ +package io.anuke.mindustry; + +import com.badlogic.gdx.backends.android.AndroidApplication; +import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration; + +import android.os.Bundle; + +public class AndroidLauncher extends AndroidApplication { + @Override + protected void onCreate (Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); + config.useImmersiveMode = true; + initialize(new Mindustry(), config); + } +} diff --git a/build.gradle b/build.gradle index b4e088bfc4..75c7c71038 100644 --- a/build.gradle +++ b/build.gradle @@ -7,6 +7,7 @@ buildscript { } dependencies { classpath 'de.richsource.gradle.plugins:gwt-gradle-plugin:0.6' + classpath 'com.android.tools.build:gradle:2.2.0' } } @@ -26,6 +27,7 @@ allprojects { mavenCentral() maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } maven { url "https://oss.sonatype.org/content/repositories/releases/" } + maven { url 'https://jitpack.io' } } } @@ -54,11 +56,28 @@ project(":html") { } } +project(":android") { + apply plugin: "android" + + configurations { natives } + + dependencies { + compile project(":core") + compile "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion" + natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi" + natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a" + natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-arm64-v8a" + natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86" + natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86_64" + compile "com.badlogicgames.gdx:gdx-ai:$aiVersion" + } +} + project(":core") { apply plugin: "java" dependencies { - // compile fileTree(dir: '../core/lib', include: '*.jar') + compile 'com.github.Anuken:ucore:07fe3a5394' compile "com.badlogicgames.gdx:gdx:$gdxVersion" compile "com.badlogicgames.gdx:gdx-ai:1.8.1" } diff --git a/core/assets/ui/uiskin.png b/core/assets/ui/uiskin.png deleted file mode 100644 index dd65603f7f1a6b6b8acdd79aa8b3ef5829617980..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11990 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 diff --git a/core/src/io/anuke/mindustry/Control.java b/core/src/io/anuke/mindustry/Control.java index e81f16e0d6..671093f7d8 100644 --- a/core/src/io/anuke/mindustry/Control.java +++ b/core/src/io/anuke/mindustry/Control.java @@ -2,26 +2,41 @@ package io.anuke.mindustry; import static io.anuke.mindustry.Vars.*; +import com.badlogic.gdx.Application.ApplicationType; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input.Keys; +import com.badlogic.gdx.input.GestureDetector; import io.anuke.mindustry.entities.Player; +import io.anuke.mindustry.input.AndroidInput; +import io.anuke.mindustry.input.GestureHandler; +import io.anuke.mindustry.input.Input; import io.anuke.mindustry.world.Generator; import io.anuke.mindustry.world.blocks.ProductionBlocks; import io.anuke.ucore.core.*; import io.anuke.ucore.entities.Entities; import io.anuke.ucore.graphics.Atlas; import io.anuke.ucore.modules.RendererModule; +import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Timers; public class Control extends RendererModule{ public int rangex = 10, rangey = 10; + public float targetzoom = 1f; + private float targetx, targety; //GifRecorder recoder = new GifRecorder(batch); public Control(){ cameraScale = 4; pixelate(); + Gdx.input.setCatchBackKey(true); + + if(android){ + Inputs.addProcessor(new GestureDetector(20, 0.5f, 2, 0.15f, new GestureHandler())); + Inputs.addProcessor(new AndroidInput()); + } + Draw.addSurface("shadow", cameraScale); atlas = new Atlas("mindustry.atlas"); @@ -39,7 +54,7 @@ public class Control extends RendererModule{ "down", Keys.S, "right", Keys.D, "rotate", Keys.R, - "menu", Keys.ESCAPE + "menu", Gdx.app.getType() == ApplicationType.Android ? Keys.BACK : Keys.ESCAPE ); Settings.loadAll("io.anuke.moment"); @@ -65,12 +80,19 @@ public class Control extends RendererModule{ EffectLoader.create(); } + public void clampZoom(){ + targetzoom = Mathf.clamp(targetzoom, 0.5f, 2f); + camera.zoom = Mathf.clamp(camera.zoom, 0.5f, 2f); + } + @Override public void update(){ if(Inputs.keyUp(Keys.ESCAPE) && debug) Gdx.app.exit(); + //camera.zoom = MathUtils.lerp(camera.zoom, targetzoom, 0.5f*delta()); + if(Inputs.keyUp(Keys.SPACE) && debug) Effects.sound("shoot", core.worldx(), core.worldy()); @@ -110,17 +132,26 @@ public class Control extends RendererModule{ } Entities.update(); - - Input.doInput(); + + if(!android){ + Input.doInput(); + }else{ + AndroidInput.doInput(); + } + } - if(core.block() == ProductionBlocks.core) - camera.position.set(player.x, player.y, 0f); - else - camera.position.set(core.worldx(), core.worldy(), 0f); + if(core.block() == ProductionBlocks.core){ + smoothCamera(player.x, player.y, 0.3f); + }else{ + smoothCamera(core.worldx(), core.worldy(), 0.4f); + } updateShake(); clampCamera(-tilesize / 2f, -tilesize / 2f, pixsize - tilesize / 2f, pixsize - tilesize / 2f); + + float lastx = camera.position.x, lasty = camera.position.y; + camera.position.set((int)camera.position.x, (int)camera.position.y, 0); drawDefault(); @@ -129,6 +160,8 @@ public class Control extends RendererModule{ Renderer.renderOverlay(); batch.end(); + camera.position.set(lastx, lasty, 0); + //recoder.update(); } @@ -151,5 +184,8 @@ public class Control extends RendererModule{ rangex = (int) (width / tilesize / cameraScale/2)+2; rangey = (int) (height / tilesize / cameraScale/2)+2; + + AndroidInput.mousex = Gdx.graphics.getWidth()/2; + AndroidInput.mousey = Gdx.graphics.getHeight()/2; } } diff --git a/core/src/io/anuke/mindustry/GameState.java b/core/src/io/anuke/mindustry/GameState.java index 7278fac4d8..204007fb21 100644 --- a/core/src/io/anuke/mindustry/GameState.java +++ b/core/src/io/anuke/mindustry/GameState.java @@ -25,7 +25,10 @@ public class GameState{ wavetime = waveSpacing(); Entities.clear(); enemies = 0; - player.add(); + + if(!android) + player.add(); + player.heal(); Inventory.clearItems(); spawnpoints.clear(); @@ -40,6 +43,8 @@ public class GameState{ player.x = core.worldx(); player.y = core.worldy()-8; + control.camera.position.set(player.x, player.y, 0); + wavetime = waveSpacing(); if(showedTutorial || !Settings.getBool("tutorial")){ diff --git a/core/src/io/anuke/mindustry/Renderer.java b/core/src/io/anuke/mindustry/Renderer.java index 29c3fac154..09fa10f05e 100644 --- a/core/src/io/anuke/mindustry/Renderer.java +++ b/core/src/io/anuke/mindustry/Renderer.java @@ -6,8 +6,10 @@ import com.badlogic.gdx.Input.Buttons; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Vector2; import io.anuke.mindustry.entities.TileEntity; +import io.anuke.mindustry.input.AndroidInput; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.Blocks; import io.anuke.mindustry.world.blocks.ProductionBlocks; @@ -104,11 +106,27 @@ public class Renderer{ public static void renderPixelOverlay(){ - if(recipe != null && !ui.hasMouse()){ - float x = Mathf.round2(Graphics.mouseWorld().x, tilesize); - float y = Mathf.round2(Graphics.mouseWorld().y, tilesize); + if(recipe != null && (!ui.hasMouse() || android)){ + float x = 0; + float y = 0; + + int tilex = 0; + int tiley = 0; + + if(android){ + Vector2 vec = Graphics.world(AndroidInput.mousex, AndroidInput.mousey); + x = Mathf.round2(vec.x, tilesize); + y = Mathf.round2(vec.y, tilesize); + tilex = Mathf.scl2(vec.x, tilesize); + tiley = Mathf.scl2(vec.y, tilesize); + }else{ + x = Mathf.round2(Graphics.mouseWorld().x, tilesize); + y = Mathf.round2(Graphics.mouseWorld().y, tilesize); + tilex = World.tilex(); + tiley = World.tiley(); + } - boolean valid = World.validPlace(World.tilex(), World.tiley(), recipe.result); + boolean valid = World.validPlace(tilex, tiley, recipe.result); Draw.color(valid ? Color.PURPLE : Color.SCARLET); Draw.thickness(2f); @@ -143,6 +161,16 @@ public class Renderer{ Draw.reset(); } } + + if(android && breaktime > 0){ + Tile tile = AndroidInput.selected(); + if(tile.breakable() && tile.block() != ProductionBlocks.core){ + float fract = breaktime / tile.block().breaktime; + Draw.color(Color.YELLOW, Color.SCARLET, fract); + Draw.circle(tile.worldx(), tile.worldy(), 4 + (1f-fract)*26); + Draw.reset(); + } + } if(recipe == null && !ui.hasMouse()){ Tile tile = World.cursorTile(); diff --git a/core/src/io/anuke/mindustry/UI.java b/core/src/io/anuke/mindustry/UI.java index 3a17400b77..d7b7dfd3bf 100644 --- a/core/src/io/anuke/mindustry/UI.java +++ b/core/src/io/anuke/mindustry/UI.java @@ -12,10 +12,12 @@ import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.entities.Weapon; +import io.anuke.mindustry.input.AndroidInput; import io.anuke.mindustry.resource.*; import io.anuke.mindustry.ui.*; import io.anuke.ucore.core.Draw; import io.anuke.ucore.core.Settings; +import io.anuke.ucore.function.Listenable; import io.anuke.ucore.function.VisibilityProvider; import io.anuke.ucore.graphics.Hue; import io.anuke.ucore.graphics.Textures; @@ -30,7 +32,7 @@ import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.util.Timers; public class UI extends SceneModule{ - Table itemtable, weapontable; + Table itemtable, weapontable, tools; SettingsDialog prefs; KeybindDialog keys; Dialog about, menu, restart, tutorial, levels, upgrades; @@ -164,6 +166,10 @@ public class UI extends SceneModule{ weapontable.bottom(); weapontable.setVisible(play); + if(android){ + weapontable.remove(); + } + build.begin(scene); new table(){{ @@ -229,7 +235,7 @@ public class UI extends SceneModule{ Table tiptable = new Table(); - Runnable run = ()->{ + Listenable run = ()->{ tiptable.clearChildren(); String description = r.result.description(); @@ -253,7 +259,7 @@ public class UI extends SceneModule{ tiptable.pad(10f); }; - run.run(); + run.listen(); Tooltip tip = new Tooltip(tiptable, run); @@ -288,10 +294,11 @@ public class UI extends SceneModule{ row(); - new button("Upgrades", ()->{ - upgrades.show(); - }).uniformX().fillX(); - + if(!android){ + new button("Upgrades", ()->{ + upgrades.show(); + }).uniformX().fillX(); + } get().setVisible(play); }}.end(); @@ -344,7 +351,8 @@ public class UI extends SceneModule{ }}.end(); - //+- table + //if(Gdx.app.getType() != ApplicationType.Android){ + //+- table new table(){{ aleft(); abottom(); @@ -368,6 +376,7 @@ public class UI extends SceneModule{ get().setVisible(play); }}.end(); + //} //menu table new table(){{ @@ -385,12 +394,14 @@ public class UI extends SceneModule{ }).width(w); row(); - - new button("Controls", () -> { - keys.show(scene); - }).width(w); - - row(); + + if(!android){ + new button("Controls", () -> { + keys.show(scene); + }).width(w); + + row(); + } new button("About", () -> { about.show(scene); @@ -427,6 +438,30 @@ public class UI extends SceneModule{ }); }}; }}.end(); + + tools = new Table(); + tools.addIButton("icon-cancel", 42, ()->{ + recipe = null; + }); + tools.addIButton("icon-rotate", 42, ()->{ + rotation++; + + rotation %= 4; + }); + tools.addIButton("icon-check", 42, ()->{ + AndroidInput.place(); + }); + + + scene.add(tools); + + tools.setVisible(()->{ + return playing && android && recipe != null; + }); + + tools.update(()->{ + tools.setPosition(AndroidInput.mousex, Gdx.graphics.getHeight()-AndroidInput.mousey-60, Align.top); + }); updateItems(); diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/io/anuke/mindustry/Vars.java index d68def2fde..7f608907b7 100644 --- a/core/src/io/anuke/mindustry/Vars.java +++ b/core/src/io/anuke/mindustry/Vars.java @@ -1,5 +1,7 @@ package io.anuke.mindustry; +import com.badlogic.gdx.Application.ApplicationType; +import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.math.Vector2; @@ -14,9 +16,11 @@ import io.anuke.mindustry.world.Tile; /**ick, global state*/ public class Vars{ + public static final boolean android = (Gdx.app.getType() == ApplicationType.Android); + public static final float placerange = 66; public static final float respawnduration = 60*4; - public static final float wavespace = 20*60; + public static final float wavespace = 20*60*(android ? 2 : 1); public static final float enemyspawnspace = 65; public static boolean debug = false; @@ -77,7 +81,23 @@ public class Vars{ "[YELLOW][[L-MOUSE][] to shoot.", "[yellow][[scrollwheel] to switch weapons.", "", - "[GOLD]Every 20 seconds, a new wave will appear.", + "[GOLD]Every "+wavespace/60+" seconds, a new wave will appear.", + "Build turrets to defend the core.", + "If the core is destroyed, you lose the game.", + "", + "[LIME]To collect building resources, move them into the core with conveyors.", + "[LIME]Place [ORANGE]drills[] on the right material,they will automatically mine material", + "and dump it to nearby conveyors or turrets.", + "", + "[SCARLET]To produce steel, feed coal and iron into a smelter." + }; + + public static String[] androidTutorialText = { + "[GREEN]Default Controls:", + "[WHITE]Use [YELLOW]one finger[] to pan the camera, or two while placing blocks.", + "[YELLOW]Hold and tap[] to destroy blocks.", + "", + "[GOLD]Every "+wavespace/60+" seconds, a new wave will appear.", "Build turrets to defend the core.", "If the core is destroyed, you lose the game.", "", diff --git a/core/src/io/anuke/mindustry/World.java b/core/src/io/anuke/mindustry/World.java index bfa44ba4e6..af1c521fcf 100644 --- a/core/src/io/anuke/mindustry/World.java +++ b/core/src/io/anuke/mindustry/World.java @@ -105,7 +105,7 @@ public class World{ public static boolean validPlace(int x, int y, Block type){ - if(!cursorNear()) + if(!cursorNear() && !android) return false; for(Tile spawn : spawnpoints){ diff --git a/core/src/io/anuke/mindustry/entities/Player.java b/core/src/io/anuke/mindustry/entities/Player.java index d7b513dc20..408c51c8a7 100644 --- a/core/src/io/anuke/mindustry/entities/Player.java +++ b/core/src/io/anuke/mindustry/entities/Player.java @@ -42,6 +42,7 @@ public class Player extends DestructibleEntity{ @Override public void update(){ + float speed = this.speed; if(Vars.debug) diff --git a/core/src/io/anuke/mindustry/input/AndroidInput.java b/core/src/io/anuke/mindustry/input/AndroidInput.java new file mode 100644 index 0000000000..b24d88e24f --- /dev/null +++ b/core/src/io/anuke/mindustry/input/AndroidInput.java @@ -0,0 +1,121 @@ +package io.anuke.mindustry.input; + +import static io.anuke.mindustry.Vars.*; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input.Keys; +import com.badlogic.gdx.InputAdapter; +import com.badlogic.gdx.math.Vector2; + +import io.anuke.mindustry.Inventory; +import io.anuke.mindustry.World; +import io.anuke.mindustry.resource.ItemStack; +import io.anuke.mindustry.world.Tile; +import io.anuke.mindustry.world.blocks.Blocks; +import io.anuke.mindustry.world.blocks.ProductionBlocks; +import io.anuke.ucore.core.Effects; +import io.anuke.ucore.core.Graphics; +import io.anuke.ucore.core.Sounds; +import io.anuke.ucore.scene.utils.Cursors; +import io.anuke.ucore.util.Mathf; + +public class AndroidInput extends InputAdapter{ + public static float mousex, mousey; + private static float lmousex, lmousey; + private static float warmup; + private static float warmupDelay = 20; + + @Override + public boolean keyDown (int keycode) { + if(keycode == Keys.E){ + place(); + } + return false; + } + + @Override + public boolean touchDown (int screenX, int screenY, int pointer, int button) { + if(pointer == 0){ + lmousex = screenX; + lmousey = screenY; + } + warmup = 0; + return false; + } + + public static Tile selected(){ + Vector2 vec = Graphics.world(mousex, mousey); + return World.tile(Mathf.scl2(vec.x, tilesize), Mathf.scl2(vec.y, tilesize)); + } + + public static void breakBlock(){ + Tile tile = selected(); + breaktime += Mathf.delta(); + if(breaktime >= tile.block().breaktime){ + Effects.effect("break", tile.worldx(), tile.worldy()); + Effects.shake(3f, 1f); + tile.setBlock(Blocks.air); + breaktime = 0f; + Sounds.play("break"); + } + } + + public static void place(){ + Vector2 vec = Graphics.world(mousex, mousey); + + int tilex = Mathf.scl2(vec.x, tilesize); + int tiley = Mathf.scl2(vec.y, tilesize); + + if(recipe != null && + World.validPlace(tilex, tiley, recipe.result)){ + + Tile tile = World.tile(tilex, tiley); + + if(tile == null) + return; //just in case + + tile.setBlock(recipe.result); + tile.rotation = rotation; + + Effects.effect("place", tilex*tilesize, tiley*tilesize); + Effects.shake(2f, 2f); + Sounds.play("place"); + + for(ItemStack stack : recipe.requirements){ + Inventory.removeItem(stack); + } + + if(!Inventory.hasItems(recipe.requirements)){ + recipe = null; + Cursors.restoreCursor(); + } + } + } + + public static void doInput(){ + if(Gdx.input.isTouched(0) + && Mathf.near2d(lmousex, lmousey, Gdx.input.getX(0), Gdx.input.getY(0), 50) + && !ui.hasMouse() && recipe == null){ + warmup += Mathf.delta(); + + mousex = Gdx.input.getX(0); + mousey = Gdx.input.getY(0); + + Tile sel = selected(); + + if(warmup > warmupDelay && sel.block() != ProductionBlocks.core && sel.breakable()){ + breaktime += Mathf.delta(); + + if(breaktime > selected().block().breaktime){ + breakBlock(); + breaktime = 0; + } + } + }else{ + warmup = 0; + lmousex = Gdx.input.getX(0); + lmousey = Gdx.input.getY(0); + breaktime = 0; + } + } +} diff --git a/core/src/io/anuke/mindustry/input/GestureHandler.java b/core/src/io/anuke/mindustry/input/GestureHandler.java new file mode 100644 index 0000000000..a49afc6158 --- /dev/null +++ b/core/src/io/anuke/mindustry/input/GestureHandler.java @@ -0,0 +1,99 @@ +package io.anuke.mindustry.input; + +import static io.anuke.mindustry.Vars.*; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.input.GestureDetector.GestureAdapter; +import com.badlogic.gdx.math.Vector2; + +import io.anuke.mindustry.World; +import io.anuke.mindustry.world.Tile; +import io.anuke.mindustry.world.blocks.Blocks; +import io.anuke.ucore.core.Effects; +import io.anuke.ucore.core.Sounds; +import io.anuke.ucore.util.Mathf; + +public class GestureHandler extends GestureAdapter{ + Vector2 pinch1 = new Vector2(-1, -1), pinch2 = pinch1.cpy(); + Vector2 vector = new Vector2(); + float initzoom = -1; + + @Override + public boolean longPress(float x, float y){ + Tile tile = World.cursorTile(); + breaktime += Mathf.delta(); + if(breaktime >= tile.block().breaktime){ + Effects.effect("break", tile.worldx(), tile.worldy()); + Effects.shake(3f, 1f); + tile.setBlock(Blocks.air); + breaktime = 0f; + Sounds.play("break"); + } + return false; + } + + @Override + public boolean pan(float x, float y, float deltaX, float deltaY){ + if(recipe == null){ + player.x -= deltaX*control.camera.zoom/control.cameraScale; + player.y += deltaY*control.camera.zoom/control.cameraScale; + }else{ + AndroidInput.mousex += deltaX; + AndroidInput.mousey += deltaY; + } + + return false; + } + + + + @Override + public boolean pinch (Vector2 initialPointer1, Vector2 initialPointer2, Vector2 pointer1, Vector2 pointer2) { + if(recipe == null) + return false; + + if(pinch1.x < 0){ + pinch1.set(initialPointer1); + pinch2.set(initialPointer2); + } + + Vector2 vec = (vector.set(pointer1).add(pointer2).scl(0.5f)).sub(pinch1.add(pinch2).scl(0.5f)); + + player.x -= vec.x*control.camera.zoom/control.cameraScale; + player.y += vec.y*control.camera.zoom/control.cameraScale; + + pinch1.set(pointer1); + pinch2.set(pointer2); + + return false; + } + + @Override + public boolean zoom(float initialDistance, float distance){ + + if(initzoom <= 0) + initzoom = initialDistance; + + control.targetzoom /= (distance/initzoom); + control.clampZoom(); + control.camera.update(); + + initzoom = distance; + + return false; + } + + @Override + public void pinchStop () { + initzoom = -1; + pinch2.set(pinch1.set(-1, -1)); + } + + int touches(){ + int sum = 0; + for(int i = 0; i < 10; i ++){ + if(Gdx.input.isTouched(i)) sum++; + } + return sum; + } +} diff --git a/core/src/io/anuke/mindustry/Input.java b/core/src/io/anuke/mindustry/input/Input.java similarity index 96% rename from core/src/io/anuke/mindustry/Input.java rename to core/src/io/anuke/mindustry/input/Input.java index b46d97d770..ed2a430e23 100644 --- a/core/src/io/anuke/mindustry/Input.java +++ b/core/src/io/anuke/mindustry/input/Input.java @@ -1,10 +1,12 @@ -package io.anuke.mindustry; +package io.anuke.mindustry.input; import static io.anuke.mindustry.Vars.*; import com.badlogic.gdx.Input.Buttons; import com.badlogic.gdx.Input.Keys; +import io.anuke.mindustry.Inventory; +import io.anuke.mindustry.World; import io.anuke.mindustry.entities.Weapon; import io.anuke.mindustry.resource.ItemStack; import io.anuke.mindustry.world.Tile; diff --git a/core/src/io/anuke/mindustry/ui/TutorialDialog.java b/core/src/io/anuke/mindustry/ui/TutorialDialog.java index 9d44eff94c..8ff86c5aae 100644 --- a/core/src/io/anuke/mindustry/ui/TutorialDialog.java +++ b/core/src/io/anuke/mindustry/ui/TutorialDialog.java @@ -8,7 +8,7 @@ import io.anuke.ucore.scene.ui.TextDialog; public class TutorialDialog extends TextDialog{ public TutorialDialog(){ - super("Tutorial", tutorialText); + super("Tutorial", android ? androidTutorialText : tutorialText); setup(); } diff --git a/core/src/io/anuke/mindustry/ui/UpgradeDialog.java b/core/src/io/anuke/mindustry/ui/UpgradeDialog.java index 3004410b44..8643e219f2 100644 --- a/core/src/io/anuke/mindustry/ui/UpgradeDialog.java +++ b/core/src/io/anuke/mindustry/ui/UpgradeDialog.java @@ -9,6 +9,7 @@ import io.anuke.mindustry.entities.Weapon; import io.anuke.mindustry.resource.ItemStack; import io.anuke.ucore.core.Draw; import io.anuke.ucore.core.Effects; +import io.anuke.ucore.function.Listenable; import io.anuke.ucore.scene.event.Touchable; import io.anuke.ucore.scene.ui.*; import io.anuke.ucore.scene.ui.layout.Table; @@ -71,7 +72,7 @@ public class UpgradeDialog extends Dialog{ Table tiptable = new Table(); - Runnable run = ()->{ + Listenable run = ()->{ tiptable.clearChildren(); String description = weapon.description; @@ -100,7 +101,7 @@ public class UpgradeDialog extends Dialog{ tiptable.pad(10f); }; - run.run(); + run.listen(); Tooltip tip = new Tooltip(tiptable, run); @@ -114,7 +115,7 @@ public class UpgradeDialog extends Dialog{ Inventory.removeItems(weapon.requirements); weapons.put(weapon, true); ui.updateWeapons(); - run.run(); + run.listen(); Effects.sound("purchase"); }); } diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index 7b8094008f..fbed23f177 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -160,10 +160,8 @@ public class Block{ if(floor.id <= this.id) continue; - TextureRegion region = Draw.region(floor.name() + "edge"); - - if(region == null) - region = Draw.region(floor.edge + "edge"); + TextureRegion region = Draw.hasRegion(floor.name() + "edge") ? Draw.region(floor.name() + "edge") : + Draw.region(floor.edge + "edge"); int sx = -dx*8+2, sy = -dy*8+2; int x = Mathf.clamp(sx, 0, 12); diff --git a/core/src/io/anuke/ucore/function/ActionProvider.java b/core/src/io/anuke/ucore/function/ActionProvider.java new file mode 100644 index 0000000000..b21bf03b93 --- /dev/null +++ b/core/src/io/anuke/ucore/function/ActionProvider.java @@ -0,0 +1,7 @@ +package io.anuke.ucore.function; + +import io.anuke.ucore.scene.Action; + +public interface ActionProvider{ + public Action get(); +} diff --git a/core/src/io/anuke/ucore/function/ButtonTweaker.java b/core/src/io/anuke/ucore/function/ButtonTweaker.java new file mode 100644 index 0000000000..a7ea0fb6d6 --- /dev/null +++ b/core/src/io/anuke/ucore/function/ButtonTweaker.java @@ -0,0 +1,7 @@ +package io.anuke.ucore.function; + +import io.anuke.ucore.scene.ui.TextButton; + +public interface ButtonTweaker{ + public void tweak(TextButton button); +} diff --git a/core/src/io/anuke/ucore/function/Callable.java b/core/src/io/anuke/ucore/function/Callable.java new file mode 100644 index 0000000000..8b4e399eb2 --- /dev/null +++ b/core/src/io/anuke/ucore/function/Callable.java @@ -0,0 +1,5 @@ +package io.anuke.ucore.function; + +public interface Callable{ + public void run(); +} diff --git a/core/src/io/anuke/ucore/function/CheckListenable.java b/core/src/io/anuke/ucore/function/CheckListenable.java new file mode 100644 index 0000000000..fd71dfb0a4 --- /dev/null +++ b/core/src/io/anuke/ucore/function/CheckListenable.java @@ -0,0 +1,5 @@ +package io.anuke.ucore.function; + +public interface CheckListenable{ + public void listen(boolean checked); +} diff --git a/core/src/io/anuke/ucore/function/ColorListenable.java b/core/src/io/anuke/ucore/function/ColorListenable.java new file mode 100644 index 0000000000..72aa5f0577 --- /dev/null +++ b/core/src/io/anuke/ucore/function/ColorListenable.java @@ -0,0 +1,7 @@ +package io.anuke.ucore.function; + +import com.badlogic.gdx.graphics.Color; + +public interface ColorListenable{ + public void changed(Color color); +} diff --git a/core/src/io/anuke/ucore/function/Consumer.java b/core/src/io/anuke/ucore/function/Consumer.java new file mode 100644 index 0000000000..1799b048a5 --- /dev/null +++ b/core/src/io/anuke/ucore/function/Consumer.java @@ -0,0 +1,5 @@ +package io.anuke.ucore.function; + +public interface Consumer{ + public void accept(T t); +} diff --git a/core/src/io/anuke/ucore/function/EffectRenderer.java b/core/src/io/anuke/ucore/function/EffectRenderer.java new file mode 100644 index 0000000000..826b390d16 --- /dev/null +++ b/core/src/io/anuke/ucore/function/EffectRenderer.java @@ -0,0 +1,7 @@ +package io.anuke.ucore.function; + +import io.anuke.ucore.entities.Effect; + +public interface EffectRenderer{ + public void render(Effect effect); +} diff --git a/core/src/io/anuke/ucore/function/FieldListenable.java b/core/src/io/anuke/ucore/function/FieldListenable.java new file mode 100644 index 0000000000..a16ca9c1d3 --- /dev/null +++ b/core/src/io/anuke/ucore/function/FieldListenable.java @@ -0,0 +1,5 @@ +package io.anuke.ucore.function; + +public interface FieldListenable{ + public void listen(String text); +} diff --git a/core/src/io/anuke/ucore/function/KeyListenable.java b/core/src/io/anuke/ucore/function/KeyListenable.java new file mode 100644 index 0000000000..40d4caf8be --- /dev/null +++ b/core/src/io/anuke/ucore/function/KeyListenable.java @@ -0,0 +1,5 @@ +package io.anuke.ucore.function; + +public interface KeyListenable{ + public void pressed(int key); +} diff --git a/core/src/io/anuke/ucore/function/Listenable.java b/core/src/io/anuke/ucore/function/Listenable.java new file mode 100644 index 0000000000..f77a4dcb87 --- /dev/null +++ b/core/src/io/anuke/ucore/function/Listenable.java @@ -0,0 +1,6 @@ +package io.anuke.ucore.function; + +/**Listener lambda class.*/ +public interface Listenable{ + public void listen(); +} diff --git a/core/src/io/anuke/ucore/function/PositionConsumer.java b/core/src/io/anuke/ucore/function/PositionConsumer.java new file mode 100644 index 0000000000..86c855eb63 --- /dev/null +++ b/core/src/io/anuke/ucore/function/PositionConsumer.java @@ -0,0 +1,5 @@ +package io.anuke.ucore.function; + +public interface PositionConsumer{ + public void accept(float x, float y); +} diff --git a/core/src/io/anuke/ucore/function/Predicate.java b/core/src/io/anuke/ucore/function/Predicate.java new file mode 100644 index 0000000000..8a741c4d1b --- /dev/null +++ b/core/src/io/anuke/ucore/function/Predicate.java @@ -0,0 +1,5 @@ +package io.anuke.ucore.function; + +public interface Predicate{ + public boolean test(T t); +} diff --git a/core/src/io/anuke/ucore/function/StringProcessor.java b/core/src/io/anuke/ucore/function/StringProcessor.java new file mode 100644 index 0000000000..ff4bc44cf4 --- /dev/null +++ b/core/src/io/anuke/ucore/function/StringProcessor.java @@ -0,0 +1,5 @@ +package io.anuke.ucore.function; + +public interface StringProcessor{ + public String get(int i); +} diff --git a/core/src/io/anuke/ucore/function/StringSupplier.java b/core/src/io/anuke/ucore/function/StringSupplier.java new file mode 100644 index 0000000000..cf04609aca --- /dev/null +++ b/core/src/io/anuke/ucore/function/StringSupplier.java @@ -0,0 +1,5 @@ +package io.anuke.ucore.function; + +public interface StringSupplier{ + public String get(); +} diff --git a/core/src/io/anuke/ucore/function/TileCollider.java b/core/src/io/anuke/ucore/function/TileCollider.java new file mode 100644 index 0000000000..3cd67b2771 --- /dev/null +++ b/core/src/io/anuke/ucore/function/TileCollider.java @@ -0,0 +1,6 @@ +package io.anuke.ucore.function; + +public interface TileCollider{ + public boolean solid(int x, int y); +} + diff --git a/core/src/io/anuke/ucore/function/TileHitboxProvider.java b/core/src/io/anuke/ucore/function/TileHitboxProvider.java new file mode 100644 index 0000000000..328cd3984c --- /dev/null +++ b/core/src/io/anuke/ucore/function/TileHitboxProvider.java @@ -0,0 +1,7 @@ +package io.anuke.ucore.function; + +import com.badlogic.gdx.math.Rectangle; + +public interface TileHitboxProvider{ + public void getHitbox(int x, int y, Rectangle out); +} diff --git a/core/src/io/anuke/ucore/function/TypingListenable.java b/core/src/io/anuke/ucore/function/TypingListenable.java new file mode 100644 index 0000000000..104bd09e19 --- /dev/null +++ b/core/src/io/anuke/ucore/function/TypingListenable.java @@ -0,0 +1,5 @@ +package io.anuke.ucore.function; + +public interface TypingListenable{ + public void typed(char c); +} diff --git a/core/src/io/anuke/ucore/function/VisibilityProvider.java b/core/src/io/anuke/ucore/function/VisibilityProvider.java new file mode 100644 index 0000000000..9b6daa84ba --- /dev/null +++ b/core/src/io/anuke/ucore/function/VisibilityProvider.java @@ -0,0 +1,5 @@ +package io.anuke.ucore.function; + +public interface VisibilityProvider{ + public boolean visible(); +} diff --git a/gradle.properties b/gradle.properties index 339fa1508b..bad4dbbeee 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true -org.gradle.jvmargs=-Xms128m -Xmx1500m +org.gradle.jvmargs=-Xms1024m -Xmx2048m org.gradle.configureondemand=true diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b902acb8dd..9760ad1d54 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sat Sep 21 13:08:26 CEST 2013 +#Sun May 28 16:07:17 EDT 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip +distributionUrl=http\://services.gradle.org/distributions/gradle-3.5-rc-3-all.zip diff --git a/settings.gradle b/settings.gradle index 56a7af46b1..e90e722ddb 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include 'desktop', 'html', 'core' +include 'desktop', 'html', 'core', 'android' diff --git a/ui/blank.png b/ui/blank.png new file mode 100644 index 0000000000000000000000000000000000000000..b2f9501f470dd0bd5d2a6003e55a3e866b73554a GIT binary patch literal 85 zcmeAS@N?(olHy`uVBq!ia0y~yVBi2@4mJh`h9ms@x)~T4WISCQLn>}1|M>skp4sk< n!xpCPcSJQR6htPx2B`9ip10H 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 Ib4q9e0Fk0O`2YX_ literal 0 HcmV?d00001 diff --git a/ui/border-dark-blue.9.png b/ui/border-dark-blue.9.png new file mode 100644 index 0000000000000000000000000000000000000000..59a74432826d2786413cf21f4416e8c4bfda1377 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0y~yU|YWU|=ut^mS!_$SlRk&Kvnl{~-edgRQ5FV~EE2s}l|R z7!){;tULC<{^uN3bB*TCy9$XJj*`z~JfX=d#Wzp$Pzr?lWBg literal 0 HcmV?d00001 diff --git a/ui/border.9.png b/ui/border.9.png new file mode 100644 index 0000000000000000000000000000000000000000..6e0dea69e00b53c865aa93a804d7a2b2f10ea1b2 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`26+$Niwq15Y)RhkE)4$}ZZOyt-eJAK zz`(#+;1OBOz`!jG!i)^F=14FwFtC?+`ns||WENr6Q`vtpK9qrh!QRuwF+}5ha>@a| ze~Uj#N^al`SzGyaek02TF{NWCjyR|-*zYE$!+7w5m{OaN#EnA<9X}@u-kpEs$ZLU5 d$~PGp3}yMWXF3|*U|?Wi@O1TaS?83{1OV_UG-?0< literal 0 HcmV?d00001 diff --git a/ui/bump.9.png b/ui/bump.9.png new file mode 100644 index 0000000000000000000000000000000000000000..12a1b3d66b3600f3df76e85483eef574592aa57e GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0y~yVDJKA4mJh`2AKn@h`~Lri_&LtA86_5a6KM*di9xFl3eEaktaqI1kje-mY z98Q79%hvOB)LL-`PdG38HG8U-{;sTL{b92?I5{+Agajbq!gK+4l>oIbzqG%%^HkrE Z@Tp4P{Jz`Og@J*A!PC{xWt~$(69BJMBtifH literal 0 HcmV?d00001 diff --git a/ui/button-blue-over.9.png b/ui/button-blue-over.9.png new file mode 100644 index 0000000000000000000000000000000000000000..071dc99259a40439e1fc6366a5f917dce5a31d1e GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0y~yV31;9V9?@VV_;xdYv7&Cz`)?*>EaktaqI1kg@OzQ zJWdzij8hnB{_n!&)pz~JfX=d#Wzp$PzpB`5y? literal 0 HcmV?d00001 diff --git a/ui/button-blue.9.png b/ui/button-blue.9.png new file mode 100644 index 0000000000000000000000000000000000000000..7364829a7a58fad36acd3e5d22f9aff15c3123d6 GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0y~yV31;9V9?@VV_;xdYv7&Cz`)?<>EaktaqI1kjl2vB zJj@5rob~ZJCbVpMv5Ll-=%U)(M_T$;uTsw}o!#5Q!Xm=Q$pHZ`ygQhMG=!`EOf_%g dslIW;uW{c3598Il85kHCJYD@<);T3K0RVa0Ce{D| literal 0 HcmV?d00001 diff --git a/ui/button-down.9.png b/ui/button-down.9.png new file mode 100644 index 0000000000000000000000000000000000000000..dd54656563f1d48a06bed6171db20c34e02391ba GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0y~yV31;9V9?@VV_;xdYv7&Cz`(#+;1OBOz`!jG!i)^F z=14FwFtC?+`ns||WRYXxHmg6&kjlWoQ0(dA7!q+fIYoi@kNaa|q16*7Ha0ds{C{f3 ze;yN-o`>ENGbLWIw9R+bxxw<@rqXxfLM@|3$_g)DNV!W?o>=yp$+d0Yj3-u7?u*5G zqfD|cu5g7jzT{swT(te|hOMXFn)4EVyHEMn?)EsNf`K7!r;zwHdxf103=9mOu6{1- HoD!M<%GgNx literal 0 HcmV?d00001 diff --git a/ui/button-gray-over.9.png b/ui/button-gray-over.9.png new file mode 100644 index 0000000000000000000000000000000000000000..31a904acbace5062b1d800cde235d491ac057143 GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0y~yV31;9V9?@VV_;xdYv7&Cz`($k|H*Y zfq{Xuz$3Dlfq`2Xgc%uT&5>YWU|=ut^mS!_$RfzZ%NJW+Jd=TeA=J~wF(l&f+v|pW z4F){UfwQ@v>sW4_nW*KIqH#aE?b*s{R#&Q~-AP+7w?!p1^h@Hd+wE;etf{-D85v_2 w2FMD4!3BNAVA%`PF5FpP^Og7M+j+uwcW?x4zj4`=fq{X+)78&qol`;+0D>Jq2LJ#7 literal 0 HcmV?d00001 diff --git a/ui/button-gray.9.png b/ui/button-gray.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d47e70b84fff2d9f6aacc4597baa0b0ed8080e03 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0y~yV31;9V9?@VV_;xdYv7&Cz`($k|H*Y zfq{Xuz$3Dlfq`2Xgc%uT&5>YWU|=ut^mS!_$RfzZr?Dh@>2d}JhHOt4$B>A_Z?7NZ zJYc}VdLjQLL*6T$yjN`Bz9^tzeUX*-*M$rXGgZx|?LOVO>{ZjI z+(m_@l7im8pg%$72d-Cr6yREkB-@=%;#Z0sG XxZ5(OI{so{U|{fc^>bP0l+XkK3(rlB literal 0 HcmV?d00001 diff --git a/ui/button-map-down.9.png b/ui/button-map-down.9.png new file mode 100644 index 0000000000000000000000000000000000000000..b34035f63c775fcc47c0e3d1c1fca44934266788 GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0y~yV31;9V9?@VV_;xdYv7&Cz`(#+;1OBOz`!jG!i)^F z=14FwFtC?+`ns||WEB>-W;_{Ff0u!Qp~Tb0F(l$}a*6`)ANR+`LaQfEY;0_N`2W<5 z|2!rvJrBJlW=gzZX`An=bA#o*O{MR|g<3|7loejQkaCx(T=99Aj%(YwX+I66+!u@W zMww(?T;U35e96CVxM=&^wB7$Ccy~EovtP8u-bBj%Ff#+glwcut5oK2y1_lNOPgg&e IbxsLQ07Q^RnE(I) literal 0 HcmV?d00001 diff --git a/ui/button-map-over.9.png b/ui/button-map-over.9.png new file mode 100644 index 0000000000000000000000000000000000000000..02b2542e97511d9db1b057639f13614a32cfbf39 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0y~yV31;9V9?@VV_;xdYv7&Cz`(#+;1OBOz`!jG!i)^F z=14FwFtC?+`ns||WEB>-vi#xtjfsJQq1e;KF(l$}a*6`)ANR+`LaQfEY;0_N_*ZBD ze;yN-rp(zAGbLWIw9R+bxxpg8@2B6yg`bq>C@Z{pA>}SnnQ_XtvWw@fSf#0y`(m-) zD3h#FZtIE7j1vL>ug*v+g*j%@`1PHrFs`XWMnX`5qwxSZRsfn1_lOCS3j3^ HP6-=8Jrs@2%M(zLr literal 0 HcmV?d00001 diff --git a/ui/button-over.9.png b/ui/button-over.9.png new file mode 100644 index 0000000000000000000000000000000000000000..9d1144c6ac9bf5515a14571b577b9a96189b6343 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0y~yV31;9V9?@VV_;xdYv7&Cz`(#+;1OBOz`!jG!i)^F z=14FwFtC?+`ns||WRYXxHs)Xcg;r0T*x1sUHRmP#cAxUC-R*Hk1p~wUJi%AzuK6uzU|?YIboFyt I=akR{06dRN1^@s6 literal 0 HcmV?d00001 diff --git a/ui/button-red.9.png b/ui/button-red.9.png new file mode 100644 index 0000000000000000000000000000000000000000..1bebf700e4eed214eb51760421bc382c727c2599 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0y~yV31;9V9?@VV_;xdYv7&Cz`)?@>EaktaqI1kjl2vB z0#1Q#1^?g9VXn6J*>b?&>F+J;B|7(JrSknu(^h0=oa)TR1OdN<9yPGMYLTmd%I@rD blcUq~WQ7WI9AgLr0|SGntDnm{r-UW|Ub`h! literal 0 HcmV?d00001 diff --git a/ui/button-select.9.png b/ui/button-select.9.png new file mode 100644 index 0000000000000000000000000000000000000000..4d793ce8fef15f15a59f9c26cbd2b072b24e0037 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0y~yV2}b~4mJh`hLv7E=NK3mI14-?iy0WWg+Z8+Vb&Z8 z1_lQ95>H=O_J=HTtcFsVbvI5hFfjOex;Tb-98XR;!1vEMfK6f}*Pi)L-B%v0XiT`J z=BCDG)%Y-7kb7H)xXbSqU)YpGMsykU3|dK Za9oLx%jQ9d2Ll5GgQu&X%Q~loCIBU9HFf|1 literal 0 HcmV?d00001 diff --git a/ui/button-window-bg.9.png b/ui/button-window-bg.9.png new file mode 100644 index 0000000000000000000000000000000000000000..564a70a904b3768531e0c52280532b68080bdfa9 GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0y~yV31;9V9?@VV_;xdYv7&Cz`($k4nJa0`PlBg3pY5)2Fs>?NMQuIvw)r5I&pn$y3YU|?Vf^>lFzi8%cBx*=bK z0grRw?CxhdmMdo_YB{B7+>dU1wsM-)m8xlX($>puQ3(zGlDO-3dz%q!>TYR9#@K}c tvI1amL0>Ug_QJFach=W@<$d~gp77}%96?j9GIBvK@^tlcS?83{1OPE$Jc9rL literal 0 HcmV?d00001 diff --git a/ui/button-window-over.9.png b/ui/button-window-over.9.png new file mode 100644 index 0000000000000000000000000000000000000000..2e45f28378e7490b78c1eb0cf03beda9db719314 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0y~yV31;9V9?@VV_;xdYv7&Cz`($k4nJa0`PlBg3pY5)2Fs>?NMQuIvw)r5I(^T(fnm7#J8rJY5_^A`ZX3ZphbQ zz~dY^J3IZ{&a*thf=bRm?-`l+Z@sec+U6%_)n6B=uH3ztKRDFRWQwN7?YkTtFSuG? qH9$Ze=ge0P+ghI0Jzbrzk^g#yW|uA6 zgqQr!v=4G}o_+7H=8I-wN7nBlvm>gwSsCu^edIVbDCMxqTJ~G(CkYx}2??!FxO+u% zZkdL0rmQ22po;*AxbXd*Rc5}m@#0eb-~Dd?70+ex$~x8vM5N}WOl4qTVDNPHb6Mw< G&;$S`7ee>| literal 0 HcmV?d00001 diff --git a/ui/check-off.png b/ui/check-off.png new file mode 100644 index 0000000000000000000000000000000000000000..d73a1a6e1fe9e618af098c2d8e7ff82c8aa455a6 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0y~yV31*8U{K&-V_;xl+$!P3z`($k|H*Y zfq{Xuz$3Dlfq`2Xgc%uT&5>YWU|=ut^mS!_$RZ~oFEjDGs22kRgTJSXV~EG`p z{yp#De&C2hy1^ga6i4wLm7mo@bpyh~<$Im2jz2u!FYn%5a^+AUx4W*))`BaC1mopr t&79fG_VU7}34y-8xm)rLx9GAk{P*M%JeDD!#lXP8;OXk;vd$@?2>_ZtJsAK1 literal 0 HcmV?d00001 diff --git a/ui/check-on.png b/ui/check-on.png new file mode 100644 index 0000000000000000000000000000000000000000..f1d36ec60c68568219803fd38271f16654492d2d GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0y~yV31*8U{K&-V_;xl+$!P3z`($k|H*Y zfq{Xuz$3Dlfq`2Xgc%uT&5>YWU|=ut^mS!_$Ra18V4b7fCCk9T5bx>Y7~*j}`ODX@ zf6qI(A2{NWZtzDp#Zi1mbP0l+XkK&)iEd literal 0 HcmV?d00001 diff --git a/ui/check-over.png b/ui/check-over.png new file mode 100644 index 0000000000000000000000000000000000000000..d0fe60dbba001f4f986e767f16d932052e53ea4b GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0y~yV31*8U{K&-V_;xl+$!P3z`($k|H*Y zfq{Xuz$3Dlfq`2Xgc%uT&5>YWU|=ut^mS!_$Ra18r0ylMzopr0QkZ_x&QzG literal 0 HcmV?d00001 diff --git a/ui/clear.png b/ui/clear.png new file mode 100644 index 0000000000000000000000000000000000000000..a38cc5d66374555ef29b06b8085817f52e181792 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0y~yU;weXIM^5%7Sx;TbNTu%N|t=# y7Jv34pe|8BlFzngI<+%9LqLT~^3=E#GelF{r5}E+z0xH4) literal 0 HcmV?d00001 diff --git a/ui/color-picker-bar-selector.png b/ui/color-picker-bar-selector.png new file mode 100644 index 0000000000000000000000000000000000000000..84e626e0e2f54037d34eaba4fe56aa8bcc35c7a9 GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0y~yVBlk5V36TpV_;wi4C`}bU|{&;>Eaktack`bYpz2M zBCQXlxq~~G-r!#Onc@3_Zi9CRcd(c8zf#&#$SS7iutD5=V^?cj{{o9McRbS$FxMMD zQ9dakm@8Pl&GCx!QubYoJM3mxACT0{UbvZg*8;Q5)3OgbT39pU8~Ii^PFwmyae?}) z;Im;&F;f1ik;~*uFN8XpUoqXU>$`Nj7}uN=_Ns@~tQHA#)jp_h_J6{?`n&mwGf7h~ zw7JYt>Ez|RxIipxMQ7iO7AL{ug*pc{|A$2^Y_oc?>VWhssfZmdrn93Z#h1!1d7*ef z{nhP+hHp9d8BJ9zp8a}im9ua&^PUCUxWwP=`zih{;3eaGjjF@Czw^H{HQk=K+_s%_ RBLf2igQu&X%Q~loCIFS@folK& literal 0 HcmV?d00001 diff --git a/ui/color-picker-cross.png b/ui/color-picker-cross.png new file mode 100644 index 0000000000000000000000000000000000000000..70489c4919cdee93df84f13333a4df35db2e2d60 GIT binary patch literal 104 zcmeAS@N?(olHy`uVBq!ia0y~yU;weXIM^5%7b&An57h7*cU7`3FBM4-ZcQ c4>QAEYr*$-iyLDY7#J8lUHx3vIVCg!07B&wMgRZ+ literal 0 HcmV?d00001 diff --git a/ui/color-picker-selector-vertical.png b/ui/color-picker-selector-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..c36d51297c4522d760b8158adb50856296b54115 GIT binary patch literal 76 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU|{25V_;xl68K`sz`!8v>EaktaVz-;KMPL+ g6UPFU7#;>LCBgT_Crd*Z7#J8lUHx3vIVCg!0Pd*|!~g&Q literal 0 HcmV?d00001 diff --git a/ui/cursor-normal.png b/ui/cursor-normal.png new file mode 100644 index 0000000000000000000000000000000000000000..7724fe99dbcbfef363cf1331e1792dffbb689d2f GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0y~yU;weXIM^5%799DXZhA}WOFnGH9xvXFdh=kXeLDS~363byEfg1{qHm#}JO|$u<=Q r@8j9n*wolG5}ckHEGXW<#lUcN4YNmiUScZ)0|SGntDnm{r-UW|cs(L_ literal 0 HcmV?d00001 diff --git a/ui/default-pane-no-border.9.png b/ui/default-pane-no-border.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d2c3e66a4966cc7a0c5e7c89a4f7828aec66c2bb GIT binary patch literal 78 zcmeAS@N?(olHy`uVBq!ia0y~yU|}1Cp0wt=P_to ezFd6{Gdn~0ALg4o`6qyMGI+ZBxvXVkZXPxwNzc~yHTU|x#)mxTXFfcGMc)I$ztaD0e0syp383X_T literal 0 HcmV?d00001 diff --git a/ui/default-select-selection.9.png b/ui/default-select-selection.9.png new file mode 100644 index 0000000000000000000000000000000000000000..faa20b6bb828ed73a89fd38b4eba122c2ff0003b GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0y~yU|h($ literal 0 HcmV?d00001 diff --git a/ui/default-select.9.png b/ui/default-select.9.png new file mode 100644 index 0000000000000000000000000000000000000000..c837c8313e2d34cb501fe45942e8e5b3e88f917c GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0y~yV6b3dU@+ofV_;z5l$EGpU|{&>>EaktaqI0>L#}26 zkzsPJ1wDNV-+Sk9@CfiyX*CtBb`pVDdxPWoew%n`Ra@GB=ZAw44SYy-Y zNfTF^_%1f)X}H~0PYn{=c%-D%mC(!1W5OiEwNPRaaQ qyMA)2B)=`(IWWcoUx(?hIa_?D)?Q1<3t?bjVDNPHb6Mw<&;$UzT6kdq literal 0 HcmV?d00001 diff --git a/ui/grey.png b/ui/grey.png new file mode 100644 index 0000000000000000000000000000000000000000..d57b4a1bb54850b50e5d8dd64fee0f5c21084871 GIT binary patch literal 70 zcmeAS@N?(olHy`uVBq!ia0y~yU|F!$rnsE{pDw1+QB$O U{MvFO1_lNOPgg&ebxsLQ0LZxzAOHXW literal 0 HcmV?d00001 diff --git a/ui/icon-cancel.png b/ui/icon-cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..bf4c7ed9a0e88083f34a1b1be3ff61685bd3dd78 GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`26+$Niwq15oCO|{#S9GG!XV7ZFl&wk z0|NtliKnkC`$INaCUy4eTd&VDFfgp}ba4#PI6rs7MczXOJTCK@okNl&A{ysU6Wt}C z9rCnY^prt|X4lUJo^!8E6i|;WI=9REY0A7PCBDZq)64I_Vc31Sm*?}9MXNGr)h&40 z-qZc;BdgQaPUR!Qx{d1_&N!(1A z^L~Hdsrf?bRfWQ*m6oVY>q^y1TDaAQrMTpFbeS~6fqiNPT@ydeuYbs#$y05%^vH+P Q3=9kmp00i_>zopr0E1Ctp8x;= literal 0 HcmV?d00001 diff --git a/ui/icon-check.png b/ui/icon-check.png new file mode 100644 index 0000000000000000000000000000000000000000..b3958fa59e0978877bed0ddc1ab8f37aa37d1b87 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`26+$Niwq15oCO|{#S9GG!XV7ZFl&wk z0|NtliKnkC`$INaW@)|xbBBct3=9iBT^vI+&d;56k@t`RkIQ}0wiQPVQd#Sw!d^J7 z379G$rg2zdna0C*m(JG;2R)}PntWb=rav2yHI14-?iy0WWg+Z8+Vb&Z8 z1_lQ95>H=O_J=HTEG!yKQHm!S7#JRSx;TbJ9DX}vqhNyphpX^;UY#u$yuypPj~8-> zZ`!=EkZo;7k@&=fJq}AY8NB#g{XubCUiIW65w(vR4-@Z)T{^f-+T(ruv+0W!ju`en zzuTA`vF_kWe3%?DZ}O2> z$uarU}6 ztF|ZoG*J7TdBxX!!u#w`cU~Dhb8ubZ_0DExx&E<=;;CoK^`H42S?H&F%=1nC>GM6@ ZBHI#?!@hPD6z literal 0 HcmV?d00001 diff --git a/ui/icon-close-over.png b/ui/icon-close-over.png new file mode 100644 index 0000000000000000000000000000000000000000..e526739fb6494cda281dd659c41fc09a4305d69a GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0y~yV9)?z4mJh`hMs>rav2yHI14-?iy0WWg+Z8+Vb&Z8 z1_lQ95>H=O_J=HTEG#n0@2=J`FfiQqba4!cIQ({oAzy<6kL$q-cFB}W){_1idnV8B z-hP3Tz4uy>!Ildr9asIVe4BsK_x8#ui-S7d-^y((b(A&P=Dzp+?D_po>1Q7Qt4f+- z^0NEHA0E*!DX&hcOtbtK`sS>_5tSn`bzE$(ijzdHoa>esRWM>X#(enC9F;Kn#Z|i- zwDuV}r3$@#S|i$X_Q~~1qe|A({BFqxW%4c0JRNHdwumb~_uN_iG2VykPWQ%pTu+&2 zoLL?yeS7iyY@@rc7@p1PN)HtRsW3cp+xKM6_oPQIZ(fJw%yF3>U6&*iH7iv5WrV{* Q1_lNOPgg&ebxsLQ00UBh-v9sr literal 0 HcmV?d00001 diff --git a/ui/icon-close.png b/ui/icon-close.png new file mode 100644 index 0000000000000000000000000000000000000000..02b26e0a258e1d95c1ce7a462233918eabe2c5cc GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0y~yV9)?z4mJh`hMs>rav2yH*pj^6T^PXNr}OT51_lPs z0*}aI1_o|n5N2eUHAjMhfq}im)7O>#A+r>dH0x#om+K4+3}-xD977@wzn$U8=itEO zT3g62wr0ow&Nn%ClGdmw&8RV*oVi+?+j!Re>)*t0)vfXB+ofeQ>u+Lg+N%U}pDVxf z-(O$+K+)+5Ps{x!@4{C;&|Y@VXVaON>ysFr1&p5iAN2ne|_QZtBT8>tkmxKv*hkxi(|K2C)IsVDlB!MQL<_BpT1veX1~qN59(;y Qe+LDGr>mdKI;Vst04>{neE$j5MzSEak7aXI-E`8z8~8d7#MmyT^vI+&d;5AnzzA#$9e80Re{qRn8a^1o^0UO zK48$p_{_nv#_5O4sua`8%tuV-jzTK$FBL=uUf440XK~WhQ+E}QG;N8R$oesP`s37s z{}VPZF!$t$8hzp`gwJHjlW U#%RFGz`(%Z>FVdQ&MBb@0JPi=oB#j- literal 0 HcmV?d00001 diff --git a/ui/menu-bg.png b/ui/menu-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..d57b4a1bb54850b50e5d8dd64fee0f5c21084871 GIT binary patch literal 70 zcmeAS@N?(olHy`uVBq!ia0y~yU|F!$rnsE{pDw1+QB$O U{MvFO1_lNOPgg&ebxsLQ0LZxzAOHXW literal 0 HcmV?d00001 diff --git a/ui/padded-list-selection.9.png b/ui/padded-list-selection.9.png new file mode 100644 index 0000000000000000000000000000000000000000..9e6045b908ebe9c747bfc53a32ea767acb6011d3 GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0y~yVBle3U|{B8V_;xduKdo3fq_BN)5S5Q;#P9P0lt6E mhGhX;pIxm_GGMl3VAyD(Fm;Z+q$>jh1B0ilpUXO@geCygz!aeX literal 0 HcmV?d00001 diff --git a/ui/progressbar-filled-vertical.png b/ui/progressbar-filled-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..6713cc9ea96b08c717c6287c7c0719c0e2b3d9de GIT binary patch literal 72 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU|{56V_;y|-?b*4fq{YF)5S5Q;#TsCsL!wd cJ0vmmaV9?GVcjp!z`(%Z>FVdQ&MBb@04|aei2wiq literal 0 HcmV?d00001 diff --git a/ui/progressbar-filled.png b/ui/progressbar-filled.png new file mode 100644 index 0000000000000000000000000000000000000000..50f58e3535d2f94a9e5c9db268fa07dabe0c7380 GIT binary patch literal 73 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU{K&-V_;yo{8UJafq_B5)5S5Q;#TsCsL!wL d4?j?4sGgMg@LAyt1qKEN22WQ%mvv4FO#n|I6kY%T literal 0 HcmV?d00001 diff --git a/ui/progressbar-vertical.png b/ui/progressbar-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..adeec047fe253900ab114b41c918a7cbbd2b3811 GIT binary patch literal 72 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU|{56V_;y|-?b*4fq{YF)5S5Q;#TqnlTCl^ cCrB`?ylV9D7)$3I1_lNOPgg&ebxsLQ05$CsTL1t6 literal 0 HcmV?d00001 diff --git a/ui/progressbar.png b/ui/progressbar.png new file mode 100644 index 0000000000000000000000000000000000000000..439795f5d5f3343820156c979de759d7343a29cb GIT binary patch literal 73 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU{K&-V_;yo{8UJafq_B5)5S5Q;#TqnlTClm d8&q&I?AvJca0^Rf90LObgQu&X%Q~loCIB^;67~Q9 literal 0 HcmV?d00001 diff --git a/ui/radio-off.png b/ui/radio-off.png new file mode 100644 index 0000000000000000000000000000000000000000..6b418cf4ea1adcaab27cc7cc03d6c4196703f46a GIT binary patch literal 591 zcmeAS@N?(olHy`uVBq!ia0y~yV2}Y}4mJh`h9chkQy3VS#5`RbLn?0Vop#qx+EAc% zxjy5q6!9Cp3R;s=bKmFv5Y4*Zur2F;+x_QEc>*2c4K3yiUh%d_?}&Wn^Txy}*LCU| zUD=a`LiKXhZ!BHztXd^hd&S!1a*v^lqre593ohTAuig4ketb=FSpV0Q((L1X5mll2 zmufb-^tw4e<5+B|b$Zgj8w|x+$F%vr%(ed>dDZ&r>Cb+ zxWUraI7d9-z##(}x6JR>&*cBiQOdEobX3JNV@j{Z6VCH*=09@T#p1k4eC2uVAA#aI zJikQ4kGWo7FWq51dseB^(vWwI&lZK8I3wJDz>@zzU%$*Ko_;!E4(W*OR+0h4U?_|F2y)PzWu(Ve~ zc88AL`L&rdH7ZmNJV>{yid~S@z-U~_D6w*n_CL0536qQu3$9(I$g*LgIjaD#fy2WG zQER8E2<0@EUVrabJMRbgrTuHYZtgYvu4;6B&e?W`?nNHQChq;9uz_{O6^(fnv)(YV yg}s<>^rWF&)7x@VpWLkbA(CFk$`=ZcX|ppJ$+f-VD`#L}VDNPHb6Mw<&;$SR;mV zq~J6~o!NgK=92oW9iDN; z=XxGF{o-g_6*tAM|AFfT@25pKv(0A5?Y{f1YVW*DH*e0oo?&ujv+4r>jVUE1$1bhE zniaSG_E)y%gT050zi>A6ZT>XjM4^m1$F=w0#Sd+{pw4kB&}zk*?aNGNDeYe8xBT%` zFIC|Wraz-E_sSZipFXtZ)z@8`r-~W&>%3}M6d~GC?h`HFaM@Kh%=38-qhv!cLwy_P z5gVxn`x9GKHav6kdns|CyxS@vFn>{o-{Basqe&N8YB(2gWIqgF9s2mtbKhqU`MHx7 zG~DvLbU2RfI%C1Q=(b>Y0(X;H{2PTC^TSpzy~MMyx0*3CRXsO&_x*x00z3T~oc)-6*_4S*kKik&l!}xLW$%dnk3$MC;J=A)nM63=9mOu6{1-oD!M< DDIQzL literal 0 HcmV?d00001 diff --git a/ui/scroll-horizontal.9.png b/ui/scroll-horizontal.9.png new file mode 100644 index 0000000000000000000000000000000000000000..6569566c4b061feb2586d9bc1197e48083d535a7 GIT binary patch literal 98 zcmeAS@N?(olHy`uVBq!ia0y~yVBlb2U{K*;V_;y|l30C=fq_BO)5S5Q;#P8k1MB~V z5~3MWH~$@PYwv3MznIHSv`0%JmhrBU{tfy*dAdn`;+sI(g{GEc*=EFZEX(opn#K&2MHCW?%?*so+tb&Oe)hfq}u()z4*} HQ$iB}CC?pS literal 0 HcmV?d00001 diff --git a/ui/scroll.9.png b/ui/scroll.9.png new file mode 100644 index 0000000000000000000000000000000000000000..efbaeea0e362db58838f1481d433f039cdfe01a1 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0y~yU{GOTVBp|jV_;yIm=}AMfq_BI)5S5Q;#P9P0lt5i zIg{CExo!K;&Mdcu@0b0n1q;Peo6kEob22cz{F~t68Z+$=0|Nttr>mdKI;Vst0DG_; A=l}o! literal 0 HcmV?d00001 diff --git a/ui/select-box-list-bg.png b/ui/select-box-list-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..640981b2206bf419ddc3975ef6cbfd39d8b1c895 GIT binary patch literal 70 zcmeAS@N?(olHy`uVBq!ia0y~yU|F!$pX^@|M4?0{$dQ9 S++YS$$>8bg=d#Wzp$P!Adk;4N literal 0 HcmV?d00001 diff --git a/ui/select-down.png b/ui/select-down.png new file mode 100644 index 0000000000000000000000000000000000000000..4390d83447a3753ce289bd142ea41c9ad1fef7be GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0y~yVBlk5VBp|jV_;x7DR}M-0|UcRPZ!6Kid(h)d%M~U z1YF-oFZan^ykOCyrlv0YrMGV1;`rsVxwtjbuIwi7oC#<4std3FNKDxrbLSEeE+*OeYW;KjjrwaLa%nU?R)dX>gM;qN8fd&yQc>H zn{r{B?yhykU4IT3Cm&CFVQ;7UrMACN=B|ma)3eHNhYj}3JQ)*jbXGm>XlKPT1_lNO MPgg&ebxsLQ07r>&j{pDw literal 0 HcmV?d00001 diff --git a/ui/select-up.png b/ui/select-up.png new file mode 100644 index 0000000000000000000000000000000000000000..67fcb85d761cfa9e9dfcfcb5012a9d74909749c0 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0y~yVBlk5VBp|jV_;x7DR}M-0|UcZPZ!6Kid&^;PIt8! z2(VuGb?;wWWXk0LqXj-k*jH$*_z|(HdV3zr-$k?TIGFnK3tLPGxhtKNw(9k)S<4n~ z%U$`}N~-N(&tnY(U*Yey@5@gpy!HQ{{ WC9(wF!$say`{K?P2yn*qF U*enhs1_lNOPgg&ebxsLQ0Ngwfp#T5? literal 0 HcmV?d00001 diff --git a/ui/separator.png b/ui/separator.png new file mode 100644 index 0000000000000000000000000000000000000000..114704cbced7a0fa5dad0fc1b095507cde8a2e44 GIT binary patch literal 70 zcmeAS@N?(olHy`uVBq!ia0y~yU|F!$s0;IfAKRgM=+k> UbW(i<0|Nttr>mdKI;Vst0Kg&-@Bjb+ literal 0 HcmV?d00001 diff --git a/ui/slider-knob-disabled.png b/ui/slider-knob-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..7bbf8cabc5fa4300d333db078ea03848548862ec GIT binary patch literal 102 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qV9?=UV_;xN4E6ZHz`&sE>EaktaqI0FMP3F5 z4hDl)2_L`ovuYZ=dGu}K)ndgXNgE?{#JZ1ysDG0Biv^g2TaO>kVqjok@O1TaS?83{ F1OQQyAIJaz literal 0 HcmV?d00001 diff --git a/ui/slider-knob-down.png b/ui/slider-knob-down.png new file mode 100644 index 0000000000000000000000000000000000000000..369c253da661b6c56af7595e24deb7538a8c7efb GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qV9?=UV_;xN4E6ZHz`(#+;1OBOz`!jG!i)^F z=14FwFtC?+`ns||WRYXxX4eyDh-YA6@bPqU4DmRg{Aa(>Gka!U24Uvj0~d^Eu*N!U z`XCU=X8V4-H1FfUW_MmW(~2t(kQnW|4)!dr6}a`?@tsYjt(3?XQwau+4QKdo9+AU(!7rYo85WkOe?NDKw`A-I@q(gR^Zlm$9FcBwo)QnOeGjNmhOv_ QU|?YIboFyt=akR{01fOh%>V!Z literal 0 HcmV?d00001 diff --git a/ui/slider-knob.png b/ui/slider-knob.png new file mode 100644 index 0000000000000000000000000000000000000000..9e7bd21cc645b54a47acb04d6da17499833ee07d GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qV9?=UV_;xN4E6ZHz`(#+;1OBOz`!jG!i)^F z=14FwFtC?+`ns||WRYXx;=HgyMv{Sn!OzphF~s9|@|Uk)|DJbXK5)cA+29LLnxnWy z?Kh=JwwY3|``bRQIJlUtU&~1pz TTYoVyFfe$!`njxgN@xNAwKgRy2q-%W?*0t@N{tu;kce$;(zbY cd`5l-2Dd*FVdQ&MBb@03>Z4hyVZp literal 0 HcmV?d00001 diff --git a/ui/slider.png b/ui/slider.png new file mode 100644 index 0000000000000000000000000000000000000000..7986f4f53bb7d6b9dabaa54e653127335fc413a1 GIT binary patch literal 117 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imVBp|jV_;ygkeceqz`(#+;1OBOz`!jG!i)^F z=14FwFtC?+`ns||WRYWG)%xmRxP*a$LB!L=F@)oKazOC)U+0e;IB=k0J_Cc#A+r>tgyxFHN7pehFi4iTMwB?`=jNv7l`uFL zr6!i7rYMwWmSiZnd-?{1H}Z)yFfd&6ba4!+xb^n7BHtkc5w-{6Mtd!JZcZ%tY|Wa+ zexP8gW#5(rwQ@!Q7N+DRi=ch+TR;83wC{>Z>0gP@GPB>Be)6iiYhxup`)%>uU3ERD ze@=-0xPH^^`IppGl$0DAA|#Y@Z|^(XktnfAFZTLY$%k1D5!02F?CuGqMy7=p%~Df8 zbd`aTiG@Qz!Jz>+LjjxABk`b;zcZfIA6~uc)T$@5?EF|b1Wp?(J^E+<>%L-M%`ye0 T=7nEC!NuU|>gTe~DWM4foqTo| literal 0 HcmV?d00001 diff --git a/ui/splitpane-over.png b/ui/splitpane-over.png new file mode 100644 index 0000000000000000000000000000000000000000..feaf4d9010b09150b698dbbd6caa51c3d17000d4 GIT binary patch literal 72 zcmeAS@N?(olHy`uVBq!ia0y~yVBlb2U|{56V_;x-%<$fsfq{YF)5S5Q;#P7;SJ(f3 cer5*F6#^5VoO?Twfq{X+)78&qol`;+02libpa1{> literal 0 HcmV?d00001 diff --git a/ui/splitpane-vertical-over.png b/ui/splitpane-vertical-over.png new file mode 100644 index 0000000000000000000000000000000000000000..211cba34aa021837c4fdd84639b744c90d12ac59 GIT binary patch literal 73 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imVBp|jV_;ygkeceqz`!8j>EaktaVxo_tLy)H dhZzhE&dUWR{(op{&cMLH;OXk;vd$@?2>=W45)S|X literal 0 HcmV?d00001 diff --git a/ui/splitpane-vertical.png b/ui/splitpane-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..4328d75f8d00bb40e126cec725d15db7c1d7a649 GIT binary patch literal 73 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imVBp|jV_;ygkeceqz`!8j>EaktaVvR43Foi# d4l@`S#LM{#cP+SgoPmLX!PC{xWt~$(69E4X5zqht literal 0 HcmV?d00001 diff --git a/ui/splitpane.png b/ui/splitpane.png new file mode 100644 index 0000000000000000000000000000000000000000..ff4820d685493c7bdc6d9e86894f3041920e32e7 GIT binary patch literal 72 zcmeAS@N?(olHy`uVBq!ia0y~yVBlb2U|{56V_;x-%<$fsfq{YF)5S5Q;#Ts863$=! c{LBnbZt@l8PYcLoU|?YIboFyt=akR{013AdqyPW_ literal 0 HcmV?d00001 diff --git a/ui/sub-menu.png b/ui/sub-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..43fe36b6b3f60fbcf878d5b53d6a912119f8cd42 GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0y~yVBlb2VBq6mV_;wq3X7e_z`(H2)5S5Q;?~rOhFmQM z0U>MeOip%iWff%=yb`uHH&@5z;+vk+JGeG&XuSW#_QVirCkLl zsW?tc)#zfH_nk?P$#4tT=}j)7p$ANSpUeqvl!y{!xmL>i=C|MJO)>$Ko?9AjVVb?{ zCH*iQXWg|=tOJd#sbMpJohcTgx~(r31}?rOnq8EZE&FfcH9y85}Sb4q9e E06^nm{r~^~ literal 0 HcmV?d00001 diff --git a/ui/textfield-over.9.png b/ui/textfield-over.9.png new file mode 100644 index 0000000000000000000000000000000000000000..3fe1f1ec4f69ec241a1cb3968ad50b38a051557a GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0y~yV2}f04mJh`25Wgp;*8iD3fsISO zFVt5(V%+}Y|B9oF#rmUcvOc0SN~FIqr+;){VBom0?N7a%sRaWA1B0ilpUXO@geCyr Clqd}V literal 0 HcmV?d00001 diff --git a/ui/textfield.9.png b/ui/textfield.9.png new file mode 100644 index 0000000000000000000000000000000000000000..fda1b6679a686244aac80f7dcb37d9472c801b6b GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0y~yV2}f04mJh`25WYWU|=ut^mS!_$SlGn!St-{YYPJdgPW&|V~EG`b>+5JTzLd$6m(0vH&OV literal 0 HcmV?d00001 diff --git a/ui/tooltip-bg.9.png b/ui/tooltip-bg.9.png new file mode 100644 index 0000000000000000000000000000000000000000..00ddecbbb295ae7fe9b50dfce6bbd10a6c0b2f57 GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0y~yU|cxAr-fh6C4`;^PE_a sb$0cC1DFVdQ&MBb@0L!TvDF6Tf literal 0 HcmV?d00001 diff --git a/ui/touchpad-knob.png b/ui/touchpad-knob.png new file mode 100644 index 0000000000000000000000000000000000000000..48b9c263391274ae4d8b192e90ed1f995cb40c91 GIT binary patch literal 1127 zcmeAS@N?(olHy`uVBq!ia0y~yV9)_!4mJh`2Dz3fMg|5JJx>?MkcwMZXZrdJ2a2@u zUraFA#==y$C0J;}CI+F_cL{5m)Yv{6|Im(^xkD*%f_#F3-js7&8WwRYa|Wg~UKCv+ zAihF-rlcLu(QOMNF0jt~e$Gd;ZIQx-nX~7lXc&LDD}Fz-_*|{N=OmYvx$BSnuRFH7 zWJB(RJ)6>IEDCz(F(o6l^-l8VDfTArp?5Eb+_0{82>Qa-zh--N>fZC(tL4|*&+Fav z*F^W!{`wDWTbI|I*Y&*i`lHX^X8n-AT3+uiR$g5G+;`3n`Ka}*OpQyXP7jx`Uy>cP z+%IlhlCahPR2Jrx#00jNsS8xMP4$gxdaL+7wte5Kcz4zu!`a~%J-A+GR{r_7>C1s2 zfeo`5&t7l5pt3-}VEOy)3^UIilh~#yFi%9AGlFq$+P3TL&s1-jPhN27;S5GukqdS6 zE*{KfiA}aS#&CFA)P`1N!&CDjg>Nizislo2J?9p;AGfv&r+&s5? z3}cf&XGdIOiq4<@)L4h`50eyFQn}1nf3>}wlq2=?#-sxru?_1u{TY7+Elbo* zzM(C)CWUeH=3vABjTc%o4w%<%=H0O7tnr(`1Je}VY!nZ8R}kXRZLzy~;p=)Qxf=}K zJsSIt{8`Ac;QVdgveIQ=H=pQGI6y+}35NFXb|bW;t-0k14K5Wy9u}Lsx|6FxkA@vmveh?FF?pR|Tg= z8JV_U5q6R{eyY5iS-)%S}&tujmkXHYZ?ZC)2$tHi~ohY|ZCg*vFNa zYO<4au5;|2l*c!1C!32Hnl0R^Y`9Qj-n*G?`rmI~D4)+hqkrK^+cVbb2b|`!ZkS+` zT6)lpwR+EseNm5IhpcSjz0f9e-!!x1kN;h0?ge(jTafBPuMB#b8(J%d14O7io5H0o#zFu)OpI0DC=mgxX)$! z(tW32ZS~=}6%c5+I@O6G#N5v4gxGWGz{15lRXEBw-nB6LpmFQzEIp5XZE?IW>aAS8 zV!NX1qCMuxMOJTXKJd4FO6MbG8$IV>%|kQR+Lj$w`?Bo(%L_VBrP;fAyepp_RBExzh@H^CP04cM1VJsn?^BOQ zihcZQ;l3(4(bpmWWrE>W#%ptJcJ*@GN*xdhvKCg>Y2+d|B5MGjWJ+gU|{fc^>bP0l+XkK6#W5M literal 0 HcmV?d00001 diff --git a/ui/tree-minus.png b/ui/tree-minus.png new file mode 100644 index 0000000000000000000000000000000000000000..cbfe2436a5d3ace1023ff784d4b2d349a91c4c2d GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0y~yU;weXIM^5%7c+`y=- ztIOu=>zlHR(c?dRV%v@#6-`|WxP&>hib_iU_)l4M;>3ynE}Bf*DsFF!$s0;IfAKRgM=+k> UbW(i<0|Nttr>mdKI;Vst0Kg&-@Bjb+ literal 0 HcmV?d00001 diff --git a/ui/tree-plus.png b/ui/tree-plus.png new file mode 100644 index 0000000000000000000000000000000000000000..9aafc6b9c770a8385951c48df7bfe95e12e4335c GIT binary patch literal 359 zcmeAS@N?(olHy`uVBq!ia0y~yVBle3U=ZM7V_;xVN}R{ez`&^I>EaktajW*y!Mr91 zk=BQw-J;$mm!vB5F*kQ8&kC8qw6RnAf@uEJ#dq&HrZ;UY``F6*{Je_6jI(xyHgX&9 zr$4FeW?cVR-Nrv*qkw?ZgQ~qui!Vwz3M|TvKDDXm$I`=(&-Jx_nE8g;$fuyY=+SiM zMVpiF^EZ6_(aR$(Q8{n&d++w+b0xhcnI@l{!eebW|Gd4~BqIrq-3kE*N`Cnrd%$wz zMS(?t#Hz*>zl|$;xPr8b;^ux35OsA7-126x&BJwD4;D#&|Hu9Aaemk1sh_o89GCyp z9k%*N=i?=nzt)t+OjBKZ{g$WD-GVRQ`?XJZZMnzuqD{HrOO5HORg2E5m2UBq?mHmp zb0ywxsYu@AS(i$zCz#26ys^V|#`)(KbNyDlp0(}v+{w#!w<#B}NXP1l|6!8kO}1|LA9tC@5ms Y-L8DMZ{jL11_lNOPgg&ebxsLQ0QJBTl>h($ literal 0 HcmV?d00001 diff --git a/ui/window-bg.png b/ui/window-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..640981b2206bf419ddc3975ef6cbfd39d8b1c895 GIT binary patch literal 70 zcmeAS@N?(olHy`uVBq!ia0y~yU|F!$pX^@|M4?0{$dQ9 S++YS$$>8bg=d#Wzp$P!Adk;4N literal 0 HcmV?d00001 diff --git a/ui/window-border-bg.9.png b/ui/window-border-bg.9.png new file mode 100644 index 0000000000000000000000000000000000000000..aba4bf1526c75bb0d0ca23c460f3113e0f33ca92 GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0y~yU|cxAr-fh6C4`;^PE_a sb$0cC1DmdKI;Vst0N2DB`2YX_ literal 0 HcmV?d00001 diff --git a/ui/window-gray.9.png b/ui/window-gray.9.png new file mode 100644 index 0000000000000000000000000000000000000000..36c4fc6ca550d8c76fe047fbbd0999c95e9e26d0 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0y~yV31{CV6f+4V_;yA`F_}lfq{W7$=lt9;Xep2*t>i( z0|NtRfk$L90|U1(2s1Lwnj^u$z`$PO>Fdh=kcCf7&(g!{?IZ>UhNYe^jv*0;-`?EF zdssn$^+Np#+mM;vO4S$A8@{}m_$X|VFRSp4QjWk`!rPwyKdoKCH z+fbMDPBUC3waq7 zcw8>#H6GmfzbBRPl}GT$x}skzyH}j{uipOcfq}u()z4*}Q$iB}#3C#Y literal 0 HcmV?d00001 diff --git a/ui/window-resizable.9.png b/ui/window-resizable.9.png new file mode 100644 index 0000000000000000000000000000000000000000..59839b9515f3890b00245dbcf9291e1515f819fc GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0y~yV31{CUUR$vckw)-F=&3cONY@U{7|dE=5TK5M@G+7fGj=c;7XRo{<(7aN=w z255+IwIWepSfoHge+6gRH9nh@9QES&#rLuAul2Y-Z{2mz`Nc)a@@Kvmo?jGtfBE@^ i+xx3?RrFqDxv70-oO5l%!_^E73=E#GelF{r5}E)J6;SH{ literal 0 HcmV?d00001 diff --git a/ui/window.9.png b/ui/window.9.png new file mode 100644 index 0000000000000000000000000000000000000000..8bb4f278ae3ad388d7e6e1d3982578553eb2895c GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0y~yV31{CV6f+4V_;yA`F_}lfq{Xuz$3Dlfq`2Xgc%uT z&5>YWU|=ut^mS!_$RfwWqj9Qv^+5&(hDn|-jv*0;-`?EI*{|ugHwr92!Iqw=8ZqaG_{YDe1U?;5U1?XiZN+AHAL&=iY>Qs3mdKI;Vst01gvZN&o-= literal 0 HcmV?d00001