From 6a2b8a8432d73b974cafedabde6deff256ca08de Mon Sep 17 00:00:00 2001 From: Ne_Eo Date: Fri, 20 Sep 2024 21:20:24 +0200 Subject: [PATCH 01/93] Mobile Port (by Mobile Porting Team) With some changes by Ne_Eo Co-Authored-By: Lily --- .github/ISSUE_TEMPLATE/bug.md | 2 + .github/ISSUE_TEMPLATE/compiling.md | 2 + .github/workflows/main.yml | 111 ++ .github/workflows/mobile-release.yml | 82 ++ README.md | 8 + assets/data/config/options.xml | 2 + assets/data/scripts/week6-pause.hx | 3 + assets/images/mobile/menu/arrows.png | Bin 0 -> 1842 bytes assets/images/mobile/menu/arrows.xml | 5 + assets/images/mobile/virtualpad/a.png | Bin 0 -> 23278 bytes assets/images/mobile/virtualpad/b.png | Bin 0 -> 20395 bytes assets/images/mobile/virtualpad/c.png | Bin 0 -> 24067 bytes assets/images/mobile/virtualpad/d.png | Bin 0 -> 23161 bytes assets/images/mobile/virtualpad/default.png | Bin 0 -> 16168 bytes assets/images/mobile/virtualpad/down.png | Bin 0 -> 23859 bytes assets/images/mobile/virtualpad/e.png | Bin 0 -> 23562 bytes assets/images/mobile/virtualpad/f.png | Bin 0 -> 22108 bytes assets/images/mobile/virtualpad/g.png | Bin 0 -> 27632 bytes assets/images/mobile/virtualpad/h.png | Bin 0 -> 25366 bytes assets/images/mobile/virtualpad/i.png | Bin 0 -> 23137 bytes assets/images/mobile/virtualpad/j.png | Bin 0 -> 22475 bytes assets/images/mobile/virtualpad/k.png | Bin 0 -> 23863 bytes assets/images/mobile/virtualpad/l.png | Bin 0 -> 23164 bytes assets/images/mobile/virtualpad/left.png | Bin 0 -> 25101 bytes assets/images/mobile/virtualpad/m.png | Bin 0 -> 23499 bytes assets/images/mobile/virtualpad/n.png | Bin 0 -> 21499 bytes assets/images/mobile/virtualpad/o.png | Bin 0 -> 24691 bytes assets/images/mobile/virtualpad/p.png | Bin 0 -> 24232 bytes assets/images/mobile/virtualpad/q.png | Bin 0 -> 25687 bytes assets/images/mobile/virtualpad/r.png | Bin 0 -> 24590 bytes assets/images/mobile/virtualpad/right.png | Bin 0 -> 20549 bytes assets/images/mobile/virtualpad/s.png | Bin 0 -> 24206 bytes assets/images/mobile/virtualpad/t.png | Bin 0 -> 21122 bytes assets/images/mobile/virtualpad/u.png | Bin 0 -> 21620 bytes assets/images/mobile/virtualpad/up.png | Bin 0 -> 24518 bytes assets/images/mobile/virtualpad/v.png | Bin 0 -> 21434 bytes assets/images/mobile/virtualpad/w.png | Bin 0 -> 23909 bytes assets/images/mobile/virtualpad/x.png | Bin 0 -> 23358 bytes assets/images/mobile/virtualpad/y.png | Bin 0 -> 22654 bytes assets/images/mobile/virtualpad/z.png | Bin 0 -> 21804 bytes hmm.json | 87 ++ key.keystore | Bin 0 -> 2746 bytes project.xml | 19 +- source/funkin/backend/MusicBeatState.hx | 122 ++- source/funkin/backend/MusicBeatSubstate.hx | 121 ++- .../backend/assets/AssetsLibraryList.hx | 70 +- source/funkin/backend/assets/ModsFolder.hx | 6 +- source/funkin/backend/assets/Paths.hx | 2 +- .../backend/assets/ScriptedAssetLibrary.hx | 3 +- source/funkin/backend/shaders/CustomShader.hx | 4 +- source/funkin/backend/shaders/FunkinShader.hx | 6 +- source/funkin/backend/system/Controls.hx | 126 +++ source/funkin/backend/system/Main.hx | 36 +- source/funkin/backend/system/MainState.hx | 15 +- .../backend/system/framerate/Framerate.hx | 40 +- .../backend/system/framerate/SystemInfo.hx | 61 +- .../backend/system/modules/CrashHandler.hx | 67 +- .../backend/system/updating/AsyncUpdater.hx | 2 +- .../backend/system/updating/UpdateScreen.hx | 2 +- source/funkin/backend/utils/MemoryUtil.hx | 8 +- source/funkin/backend/utils/NativeAPI.hx | 4 + source/funkin/backend/utils/ZipUtil.hx | 2 +- source/funkin/backend/utils/native/Android.hx | 31 + source/funkin/backend/utils/native/IOS.hx | 21 + source/funkin/editors/DebugOptions.hx | 2 +- source/funkin/editors/EditorPicker.hx | 10 +- source/funkin/editors/SaveSubstate.hx | 5 + source/funkin/editors/UIDebugState.hx | 3 +- .../editors/character/CharacterEditor.hx | 2 +- .../editors/character/CharacterSelection.hx | 12 +- .../editors/charter/CharterSelection.hx | 51 +- source/funkin/editors/ui/UITextBox.hx | 1 + source/funkin/game/GameOverSubstate.hx | 3 + source/funkin/game/PlayState.hx | 15 +- .../funkin/game/cutscenes/DialogueCutscene.hx | 7 +- source/funkin/game/cutscenes/VideoCutscene.hx | 2 +- source/funkin/import.hx | 3 + source/funkin/menus/BetaWarningState.hx | 18 +- source/funkin/menus/FreeplayState.hx | 31 +- source/funkin/menus/GitarooPause.hx | 2 + source/funkin/menus/MainMenuState.hx | 16 +- source/funkin/menus/ModSwitchMenu.hx | 2 + source/funkin/menus/PauseSubState.hx | 17 +- .../menus/PlaytestingWarningSubstate.hx | 2 + source/funkin/menus/StoryMenuState.hx | 2 + source/funkin/menus/TitleState.hx | 14 +- .../funkin/menus/credits/CreditsCodename.hx | 2 +- source/funkin/menus/credits/CreditsMain.hx | 5 +- source/funkin/options/Options.hx | 16 +- source/funkin/options/OptionsMenu.hx | 19 +- source/funkin/options/OptionsScreen.hx | 27 +- .../options/categories/AppearanceOptions.hx | 2 +- .../options/categories/GameplayOptions.hx | 2 +- .../funkin/options/categories/MiscOptions.hx | 4 +- .../options/categories/MobileOptions.hx | 134 +++ .../options/keybinds/KeybindsOptions.hx | 3 + source/mobile/flixel/FlxButton.hx | 587 +++++++++++ source/mobile/flixel/FlxVirtualPad.hx | 260 +++++ source/mobile/funkin/backend/CNEJNI.hx | 65 ++ .../mobile/funkin/backend/TouchFunctions.hx | 73 ++ .../mobile/funkin/backend/system/CopyState.hx | 216 ++++ .../backend/system/MobileRatioScaleMode.hx | 53 + source/mobile/funkin/backend/utils/SUtil.hx | 188 ++++ .../menus/MobileControlSelectSubState.hx | 271 +++++ source/mobile/objects/FlxButtonGroup.hx | 6 + source/mobile/objects/Hitbox.hx | 170 +++ source/mobile/objects/MobileControls.hx | 200 ++++ source/openfl/display/Shader.hx | 985 ++++++++++++++++++ source/openfl/utils/Assets.hx | 1 + 109 files changed, 4441 insertions(+), 138 deletions(-) create mode 100644 .github/workflows/main.yml create mode 100644 .github/workflows/mobile-release.yml create mode 100644 assets/images/mobile/menu/arrows.png create mode 100644 assets/images/mobile/menu/arrows.xml create mode 100644 assets/images/mobile/virtualpad/a.png create mode 100644 assets/images/mobile/virtualpad/b.png create mode 100644 assets/images/mobile/virtualpad/c.png create mode 100644 assets/images/mobile/virtualpad/d.png create mode 100644 assets/images/mobile/virtualpad/default.png create mode 100644 assets/images/mobile/virtualpad/down.png create mode 100644 assets/images/mobile/virtualpad/e.png create mode 100644 assets/images/mobile/virtualpad/f.png create mode 100644 assets/images/mobile/virtualpad/g.png create mode 100644 assets/images/mobile/virtualpad/h.png create mode 100644 assets/images/mobile/virtualpad/i.png create mode 100644 assets/images/mobile/virtualpad/j.png create mode 100644 assets/images/mobile/virtualpad/k.png create mode 100644 assets/images/mobile/virtualpad/l.png create mode 100644 assets/images/mobile/virtualpad/left.png create mode 100644 assets/images/mobile/virtualpad/m.png create mode 100644 assets/images/mobile/virtualpad/n.png create mode 100644 assets/images/mobile/virtualpad/o.png create mode 100644 assets/images/mobile/virtualpad/p.png create mode 100644 assets/images/mobile/virtualpad/q.png create mode 100644 assets/images/mobile/virtualpad/r.png create mode 100644 assets/images/mobile/virtualpad/right.png create mode 100644 assets/images/mobile/virtualpad/s.png create mode 100644 assets/images/mobile/virtualpad/t.png create mode 100644 assets/images/mobile/virtualpad/u.png create mode 100644 assets/images/mobile/virtualpad/up.png create mode 100644 assets/images/mobile/virtualpad/v.png create mode 100644 assets/images/mobile/virtualpad/w.png create mode 100644 assets/images/mobile/virtualpad/x.png create mode 100644 assets/images/mobile/virtualpad/y.png create mode 100644 assets/images/mobile/virtualpad/z.png create mode 100644 hmm.json create mode 100644 key.keystore create mode 100644 source/funkin/backend/utils/native/Android.hx create mode 100644 source/funkin/backend/utils/native/IOS.hx create mode 100644 source/funkin/options/categories/MobileOptions.hx create mode 100644 source/mobile/flixel/FlxButton.hx create mode 100644 source/mobile/flixel/FlxVirtualPad.hx create mode 100644 source/mobile/funkin/backend/CNEJNI.hx create mode 100644 source/mobile/funkin/backend/TouchFunctions.hx create mode 100644 source/mobile/funkin/backend/system/CopyState.hx create mode 100644 source/mobile/funkin/backend/system/MobileRatioScaleMode.hx create mode 100644 source/mobile/funkin/backend/utils/SUtil.hx create mode 100644 source/mobile/funkin/menus/MobileControlSelectSubState.hx create mode 100644 source/mobile/objects/FlxButtonGroup.hx create mode 100644 source/mobile/objects/Hitbox.hx create mode 100644 source/mobile/objects/MobileControls.hx create mode 100644 source/openfl/display/Shader.hx diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md index dd818bf4a..2ba3b31ed 100644 --- a/.github/ISSUE_TEMPLATE/bug.md +++ b/.github/ISSUE_TEMPLATE/bug.md @@ -14,6 +14,8 @@ labels: bug [ ] Windows [ ] Linux [ ] Mac +[ ] Android +[ ] iOS ### Explain your issue ##### Please check first if your issue haven't already been reported yet. diff --git a/.github/ISSUE_TEMPLATE/compiling.md b/.github/ISSUE_TEMPLATE/compiling.md index 4f516469e..cc8d321a2 100644 --- a/.github/ISSUE_TEMPLATE/compiling.md +++ b/.github/ISSUE_TEMPLATE/compiling.md @@ -14,6 +14,8 @@ labels: compiling help [ ] Windows [ ] Linux [ ] Mac +[ ] Android +[ ] iOS ### Explain your issue ##### Please check first if your issue haven't already been reported yet, and make sure you ran the `update.bat` file before building. diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 000000000..582928bb7 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,111 @@ +name: Main +on: workflow_dispatch +jobs: + Desktop: + runs-on: ${{matrix.os}} + strategy: + fail-fast: false + matrix: + os: [windows-latest, ubuntu-latest, macos-12, macos-14] + steps: + - name: Checkout + uses: actions/checkout@main + - name: Setup Haxe + uses: krdlab/setup-haxe@master + with: + haxe-version: 4.3.6 + - name: Install libVLC (Linux) + if: startsWith(matrix.os, 'ubuntu') + run: sudo apt install libvlc-dev libvlccore-dev + - name: Install Libraries + run: | + haxelib install hmm --quiet + haxelib run hmm install --quiet + - name: Compile (Windows) + if: startsWith(matrix.os, 'windows') + run: haxelib run lime build windows + - name: Compile (Linux) + if: startsWith(matrix.os, 'ubuntu') + run: haxelib run lime build linux + - name: Compile (macOS) + if: startsWith(matrix.os, 'macos') + run: haxelib run lime build mac + - name: Upload Artifact (Windows) + if: startsWith(matrix.os, 'windows') + uses: actions/upload-artifact@main + with: + name: windowsBuild + path: export\release\windows\bin\* + if-no-files-found: error + - name: Upload Artifact (Linux) + if: startsWith(matrix.os, 'ubuntu') + uses: actions/upload-artifact@main + with: + name: linuxBuild + path: export/release/linux/bin/* + if-no-files-found: error + - name: Upload Artifact (macOS 12) + if: matrix.os == 'macos-12' + uses: actions/upload-artifact@main + with: + name: macOSBuild-x86_64 + path: export/release/macos/bin/* + if-no-files-found: error + - name: Upload Artifact (macOS 14) + if: matrix.os == 'macos-14' + uses: actions/upload-artifact@main + with: + name: macOSBuild-arm64 + path: export/release/macos/bin/* + if-no-files-found: error + Mobile: + runs-on: ${{matrix.os}} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-14] + steps: + - name: Checkout + uses: actions/checkout@main + - name: Setup Haxe + uses: krdlab/setup-haxe@master + with: + haxe-version: 4.3.6 + - name: Install Libraries + run: | + haxelib install hmm --quiet + haxelib run hmm install --quiet + - name: Configure Android + if: startsWith(matrix.os, 'ubuntu') + run: | + haxelib run lime config ANDROID_SDK $ANDROID_HOME + haxelib run lime config ANDROID_NDK_ROOT $ANDROID_NDK_LATEST_HOME + haxelib run lime config JAVA_HOME $JAVA_HOME_17_X64 + haxelib run lime config ANDROID_SETUP true + - name: Compile (Android) + if: startsWith(matrix.os, 'ubuntu') + run: haxelib run lime build android -ONLY_ARMV7 + - name: Compile (iOS) + if: startsWith(matrix.os, 'macos') + run: haxelib run lime build ios -nosign + - name: Make Ipa + if: startsWith(matrix.os, 'macos') + run: | + cd export/release/ios/build/*-iphoneos + mkdir Payload + mv *.app Payload + zip -r CodenameEngine.ipa Payload + - name: Upload Artifact (Android) + if: startsWith(matrix.os, 'ubuntu') + uses: actions/upload-artifact@main + with: + name: androidBuild + path: export/release/android/bin/app/build/outputs/apk/release/*.apk + if-no-files-found: error + - name: Upload Artifact (iOS) + if: startsWith(matrix.os, 'macos') + uses: actions/upload-artifact@main + with: + name: iOSBuild + path: export/release/ios/build/Release-iphoneos/*.ipa + if-no-files-found: error diff --git a/.github/workflows/mobile-release.yml b/.github/workflows/mobile-release.yml new file mode 100644 index 000000000..da7fddff2 --- /dev/null +++ b/.github/workflows/mobile-release.yml @@ -0,0 +1,82 @@ +name: Mobile + Release +on: workflow_dispatch +jobs: + Mobile: + runs-on: ${{matrix.os}} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-14] + steps: + - name: Checkout + uses: actions/checkout@main + - name: Setup Haxe + uses: krdlab/setup-haxe@master + with: + haxe-version: 4.3.6 + - name: Install Libraries + run: | + haxelib install hmm --quiet + haxelib run hmm install --quiet + - name: Configure Android + if: startsWith(matrix.os, 'ubuntu') + run: | + haxelib run lime config ANDROID_SDK $ANDROID_HOME + haxelib run lime config ANDROID_NDK_ROOT $ANDROID_NDK_LATEST_HOME + haxelib run lime config JAVA_HOME $JAVA_HOME_17_X64 + haxelib run lime config ANDROID_SETUP true + - name: Compile (Android) + if: startsWith(matrix.os, 'ubuntu') + run: haxelib run lime build android -final + - name: Compile (iOS) + if: startsWith(matrix.os, 'macos') + run: haxelib run lime build ios -final -nosign + - name: Make Ipa And Zip For Release + if: startsWith(matrix.os, 'macos') + run: | + cd export/release/ios/build/*-iphoneos + mkdir Payload + mv *.app Payload + zip -r CodenameEngine.ipa Payload + zip CodenameEngine-iOS.zip CodenameEngine.ipa + - name: Upload Artifact (Android) + if: startsWith(matrix.os, 'ubuntu') + uses: actions/upload-artifact@main + with: + name: androidBuild + path: export/release/android/bin/app/build/outputs/apk/release/*.apk + if-no-files-found: error + - name: Upload Artifact (iOS) + if: startsWith(matrix.os, 'macos') + uses: actions/upload-artifact@main + with: + name: iOSBuild + path: export/release/ios/build/Release-iphoneos/*.zip + if-no-files-found: error + Releaser: + needs: [Mobile] + runs-on: ubuntu-latest + permissions: write-all + steps: + - name: Download Android Build + uses: actions/download-artifact@main + with: + name: androidBuild + path: /home/runner + - name: Move Android File + run: mv /home/runner/CodenameEngine-release.apk /home/runner/CodenameEngine-Android.apk + - name: Download iOS Build + uses: actions/download-artifact@main + with: + name: iOSBuild + path: /home/runner + - name: Publish The Release + uses: marvinpinto/action-automatic-releases@latest + with: + repo_token: "${{ secrets.GITHUB_TOKEN }}" + prerelease: true + automatic_release_tag: "dev-ca565de" + title: "DevBuild ca565de" + files: | + /home/runner/*.apk + /home/runner/*.zip diff --git a/README.md b/README.md index 604cd9c20..8ada852e0 100644 --- a/README.md +++ b/README.md @@ -87,3 +87,11 @@ In the future (when the engine won't be a WIP anymore) we're gonna also publish - Credits to Smokey555 for the backup Animate Atlas to spritesheet code - Credits to MAJigsaw77 for [hxvlc](https://github.com/MAJigsaw77/hxvlc) (video cutscene/mp4 support) and [hxdiscord_rpc](https://github.com/MAJigsaw77/hxdiscord_rpc) (discord rpc integration) + +
+

Mobile Credits

+ +- Credits to [Lily](ttps://youtube.com/@mcagabe19) to porting the engine +- Credits to [Karim Akra](https://youtube.com/@Karim0690) to helping me to port the engine +- Credits to [MAJigsaw77](https://github.com/MAJigsaw77) for mobile controls +
\ No newline at end of file diff --git a/assets/data/config/options.xml b/assets/data/config/options.xml index 888288d7a..d55f9e401 100644 --- a/assets/data/config/options.xml +++ b/assets/data/config/options.xml @@ -1,6 +1,7 @@ + @@ -11,5 +12,6 @@ + \ No newline at end of file diff --git a/assets/data/scripts/week6-pause.hx b/assets/data/scripts/week6-pause.hx index 6a4455cd8..7f49973d5 100644 --- a/assets/data/scripts/week6-pause.hx +++ b/assets/data/scripts/week6-pause.hx @@ -62,6 +62,9 @@ function create(event) { cameras = [pauseCam]; FlxG.sound.play(Paths.sound(isThorns ? 'pixel/ANGRY' : 'pixel/clickText')); + + addVirtualPad('UP_DOWN', 'A'); + addVirtualPadCamera(false); } function confText(text) { diff --git a/assets/images/mobile/menu/arrows.png b/assets/images/mobile/menu/arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..96158666bf9bee9bd5beb023da8da24349f0c9aa GIT binary patch literal 1842 zcmV-22hI42P)hnRB%ZJkP0rTz_$ZC6+kL5sQ^*|qym!)z!gj$MmFo+8Lf6# zD~S{Sb9h;4wd2p)(P$(sa7!W@f@lGvR}dXQ^qATtO++*%qGux75z!>IJ^o_AXAn{0 z_mtYKvWRGC0T=c3Q)Qg^2 z&_rth%hYCgY6DNm0FL>%4))2*hIj458&WUg4lx&sw#qG+JU}z#jZ%69aEfJ0ok)M{ zHp=x(MD(pR2`T;#AR2>cr<6yX84}SG$$Bc(k(77_OY|tr_C9_)@PGpc=y5z#X`w(| zlGB#(M(k#e-r9TN|fuUgIujIyOt=XijdD*FO?|Auv4;RqV`at z@5((=-M9Wt6(PTAJ(P$Z^8n3hP7U(Hai8qNdo@*re4wIBtKK7l?$u7oilL1n%D~P} z$b4^9&UpmO`Wc9kRMK+-7XULD^LNXZFRg7- zWTCv2E^mx6zjkQ$0`#5h&>^3|kpJz_`lZ9Y71>@pFI`?4WB%ya^rhqdHPWMt18RJo z&{l7=Lb9n&;gxrf8**Ec>*#T^qQ}W?AV2m6+CtuifNa~7K=(9R;oOA;xjGT?Yfl5+ z>>pNXmWIUPT2bdNU?k98Y;-+o5fn1FDTD50CJl)v9>E~nb|Zjh$l=2<8T6rjb2Jtp zzlC_k1<-+GXrk{5WO+*6tZfN&t3QBeM7d- zD1-jYQ+JD__0@(YjQO)u+iqQ&RJJhp__}rB0$^s0`6rZ7F0}`(L!QH!zgoBJr@e2* z$dG4RLAxnz}y(~9^IgV+@SS=Zwq67>%*Y7vXg_QQ1l~qgds@>twTO4*OSSHaX*BjZGgmm z5Xqo znJ6UCO1QR7F)4BB3Ys?zZk2l3MHmH*glnhBHq@%vqqoqFUiEKEYi)&VE8+#$PRm^( z#h`icn<{m(^UEczASapT0QR}S9$3G;Qp$g1>X$!dcyGu`DV_p2g-q_Z)c|t*39!p} ziDgI^*+kKcQal21q);n9Ej56i16XG6GQP+rj5dxc8|tze-%$hTN%VOrUTJV$aP@_;?3ntjfF=mYdgDW3s2B7?!Ci9BFW5qXdtSU)^>)Oi4~ z54L?Ek}T{ON0kvc{Hq-J>7Y@46@8~s@0-7C?5ge?X>_}KqN=Fw8-4g$J8fS_x#qJ6 z?6`irBWP}d7F69lQr zKYHsg!$&x#;DrlKGqB$d-ihSIzaQ)ofbA^}l6Ja2gPx@X_@A+-z!8bQl;sb5lVp%= zDPzpLJ^b_HsP=&H5lM~w21o*bi!S^iDUBJynx=0ae%t$vZ8jLnEol3nrHCY~f0Mp! z5VU!kP<3N^Szd2!chKC5Pn`V`k%aSaJ%i>)(3q;{S;~5)`jfK(Kyyov(7#Gh{GAcX zzeNDekD(zEt!rQ(T(HA|=GG>ju*2;7j|BSqxZ0WIf%LB%1O&}3jv=4z4nJ*=44NM) z9>XZ=OhP9L51LyYiV)=Ax^+a705m^VJ?vT3qI6FWps%g_OxZsM$>y*VfxbSz)^9%* z>h=hlpWqvjyfuzU5`$(FYUAxS$!|bl&}@zGAlWP;$pAE)K@)O^fCr(x2heQI#B-25 zdq*UhfM!#?{B{J;Y|XHN->zSk&It6?q*}in0rb@xU%%~!ogrwzdodvbXtu`JZ|~HI zBva6USDwU?_zx-GPWAwIvK_Dq_r?)PV%Z}bQ+S-@?f>Id#=OIrpW(M^bBnOwjWNF< zt1r0w`|U;Ho@`x5SyauFMDo$HHNGL>!q&eT(7+ei8LT?_hk)x_0}Xth63a;bD>pX< zI#1~zyt;!9F88O7@1TQ<{r2k}bS(L7Z@4Rv>iqUy0p;@BcLkRAf$zI|P<4<@cCzaK gAs!?%nAWz_e;Yg;H1piHr~m)}07*qoM6N<$f<-unJpcdz literal 0 HcmV?d00001 diff --git a/assets/images/mobile/menu/arrows.xml b/assets/images/mobile/menu/arrows.xml new file mode 100644 index 000000000..df670d955 --- /dev/null +++ b/assets/images/mobile/menu/arrows.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/images/mobile/virtualpad/a.png b/assets/images/mobile/virtualpad/a.png new file mode 100644 index 0000000000000000000000000000000000000000..7e0abf3be16d51f1f9b2b6022ed5891302d9c31a GIT binary patch literal 23278 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 b4Z!~gfCh6yGR&Rw00000NkvXXu0mjfO{&e> literal 0 HcmV?d00001 diff --git a/assets/images/mobile/virtualpad/b.png b/assets/images/mobile/virtualpad/b.png new file mode 100644 index 0000000000000000000000000000000000000000..93cf690e630786c27c422a7700e0006d08ec3d8d GIT binary patch literal 20395 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 literal 0 HcmV?d00001 diff --git a/assets/images/mobile/virtualpad/d.png b/assets/images/mobile/virtualpad/d.png new file mode 100644 index 0000000000000000000000000000000000000000..75fedc60698fa77c1674be8de10ecc95d3c56a6c GIT binary patch literal 23161 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 literal 0 HcmV?d00001 diff --git a/assets/images/mobile/virtualpad/e.png b/assets/images/mobile/virtualpad/e.png new file mode 100644 index 0000000000000000000000000000000000000000..004693125b1654f341a8337de530fdf5f24f3925 GIT binary patch literal 23562 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 VkB`nIg5UrE002ovPDHLkV1g|02jl<% literal 0 HcmV?d00001 diff --git a/assets/images/mobile/virtualpad/f.png b/assets/images/mobile/virtualpad/f.png new file mode 100644 index 0000000000000000000000000000000000000000..28df192d62f2093f71ed70548dc56246008536b8 GIT binary patch literal 22108 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�{i$I{TV+bqg8N`R?hbeZP$!t{Q=*|xMTTabp7Qiehy ziTm^4Iv+n~?S|?R3n?Z0w`z1&D6R94;xMLdDGnvS$)3IYIJ7-Yc(A$t#q$n9^h|(l z_ejLl*Lm~nK8WF&`71^@3qFXEAvg3jor5ypgBqKn#s|56Dy)B|wZ#cV46`Ub*)DZr zFRQCvV|bmSotXvSL!&sysGT`x%BZb{>2{z_oaBb7u>MyO!!^1LfVFGa=De2ujdXT8 zb+V_gt?KdUq~!442(7Cn9<%$bJeXo_;Yj+MjGlx&I}UT|P$J7RtLK0`+YpRQ93z!b z1kKrN5mHL_>^RAkHPFzcfZBT@#s*pZ>{stkt=zma0DknQ7P*hu@q4?e-BD2_bst+;x4v7x1VFX;v^=$xC8UbNOChW6lKTYx7gJD zJ`gk0B6Jfp!%ZHu^O>X2xHVW4krA4<`~vy$%`KVhF26eU^*g?31I~Ls4|n}ZV~(1c z2#0fw+PR?-Mr|V~k80&Gd799cN0DteJ(&WOaqF$O+K^>Z%#-Kt*uhcOZCqUO@P!bp zxX_(IQcA{7Xe1{Cb;FV~f)ebTxQi|SzJqkk1Nf%B|y6KN4c<15p0=Wizv#8qiHg87xE(ai3vrjc9S3R6#)Xp6l;-m8--G?ui=@;4rGPHD;0uM z2b28gJ%7df-}33Y4ogjWXkrz*DG0SgphY4joH#UsW!Vk;AD}XCKn|%m`lByA+{tz%Z_j~3{i-(T=DJS+x$ZmEKLZKOMPDiCG_X@mx5FFc`<~zYp z^3I$8rmB$8l!u&mN)gr(L|^H!iNt zNSm)4D#5|nx7hJOige7?jCDiOy*NOBe?Phjlj*|@9gYwg_M_x{6QyPY!I7P5eiZx! zzjfo^P|lAqXaz?n*q)mRZl6cbL^wP!G=s@df0P{?5la@b5EqG&3O-CN)D{ls7`3l7 zM(uP^GGF$M#2bp9DHK9V6hRa>ihDPgA!_CK3q&&K~`eb;*`oR;Y%*l7)q-~BA5WY6{! z93R;}gUK+>j8q^DBVPxh$kv{-1Lqv07G6n=+D1^G+QE$zO?S~OGFjV%84mB}p6@@) z$eGH?Y^B@DO^($XFiBi)s zlkLw9ppYdG$0mkjDPlz?*vVsKJoV6CGV@`V{yARx#}ZA;SEYWq4}u>7x1>y-Lis~=4QHjgDhXVhETAXnF}Am(Va>5NA4j+|+ zm2)jRKDP;?lpDVK@8|E})IqnTpedTUVBJN${f#%Wdhun1N5G?nu%&yCbX?$M=AMhjitFfI(!zxsFQKEmi;$;{9or7_wI6+wNMvRcFC8=4vwMIwS4&W(cB<>NgG4mN zj%SaOjLlpCLG36;`B12W-VmtQs%}W^X=KPbMr}D>enxE$^{j&8+873BS>HCyN;ij; zvgW?@hM@#|C+=eZvnjxfDVn)>?#>#N?MVsibe{S~$ zI@)`9&Fj~2)6Lg2IRq`;63u|Cnpd%P&xJhm+@s7)2ni1Dh;sC@Z?fF{K;9RTGc!^# zK`7LY*K05vrB68m!&}{A&~;QM70;`9MZK=cgMdo%+-%tf=_eI@0SE6*faW{?0zhnPx0N_)X4>xE~mAvpf=i;Mmnw_-NfnCQ|vqR z44K&68E1ij2h-a@hj%$LC=gnRNJ7!tqws}n`d2iwaN$B`GpvTUaxvw$`KF_=aFu~1 zQ{~F(QLlnkFck6xLm`5p61BU*3?S8!W7H0wtZy5iO-5}h`s!fRPUo=9F=|6*FD*SH z%czyJV$|mEUSoH!a$e#nMutfa?i*s?iznUBsmdK`jY28NBo)v6@&M5@esYe!iwx#@N{|E7z5~5A?bnEy-I$ocLj-C*! zdv3v_&riMyDH0^qN#awAP=`iu%f%S;oXcW-VnU8jOfWt%fiB4X)s=A5mCP$JYM&>S zO4mKtKTqy}0;Bd%II-{5uo)}MsD0p*HHAcuQQNs#(A5vE3tZw{CS%QzQCo_7T3~S$ zqhapxY^!?Pgc(jf$wNQeL1YwSV=ilMrv8Uq)Z#}^eIjpK0EGM~2{r|IRyJi#vTpxt4gRUbLxxYD=!^$ygANuL8s-{K`^UJ8ci=7XqNN2T0UDpVN z41!Gtfsj!%k<817ETi_RPgLbc6f|8X=8W0~d!xA)la^%6L3XD9oYAo< zoXq^Fo0=|Z4Fwq<4C7NK!4UX-1=3+;D#g&raZ=9AZNp4btLa>KY*#=oTh-0B-81iZ ztv9~VAe2kpLbBjbXw>e30RzX^!j}C6$>E zmfrl}rD4<-pd3-tSF0r4{slbX=ITG|QH&gHeS&b{A=0W3F@x>GIpJ{s!9Qi!qZ#Z} zAx!Bto7u4J_4F?j*52?pB$eT^8&KPQq3sRHj$<(k?H^=r>8hN z`ZzYx8Mhssl2CgCECBs0ra57*C_I{Z8L$GQR&nX3<@EHnmwZ3JjM{Hy8MOg?J|9&r69MqxSq;OSv!wMy;SdJN4(vsIBFH zaKCg-jNHeUNZ(Q{T_30_9qV3IBpkNgo5`{z3-h+Msf*R;_0iN+c&M7X><^6cUFwzH<`_wdqAi@6-LXvcz-k~4!-vmi6M$i$~Vr=`6vJ)tIQMlmFK z4PAN-9j~DmQ>|*eEiAb%9fwHfD7F?wNx}G7q-NpavOCuKuCN2PC$N!)ZRZp8=$Jl%;kC$71}w{B zcyJ19mMCY%pqD+nQ-# zeUc?>f`rewS*uNtYfkw?23lY~9heHk>)>n25cGDSr+b;08YPvPIgR`5GHM%xbSh1Z zvkb-R%l&T3_ZbR@A3k{p16v)^u}Wzl^mMUkNf!$i6`Ye+Mv_Ws;CMkqacqcjVf#(X0+NDdE^5M7r1xZd|`uZ`8$g|0qg|g?zALR?^v@aC2^)zw$rC0O1D}IM( zo_mU??mxndhaM%Bnduw;>@sRy)L(<5%)~hBK8R3vl8qN$fCMmJAc>tV@&XSg!$*h+c9*zFcEwnTT352`^n|$~J9{100 zVt5@4(?HMq6WonG4z^{GN?L4t@&J$S`ZA*RIOtP&L^Gxz^dfT6$mtjZLl4f%{{V{C z?%Hp8GfPCRw()H)5W)>}=6lhAlQLIdVJ1i=(j?<4{Qko8oKHq=a>|pZ+uwG}<)l(6 z^i&^_3572x2(}0ik{6ymN%*uz#+jQI;S1`ly;5hxm5bTb_Al7_7@0^Dx7>0ICl7y@ zBPZKuAs}2vZRV^pYU`WYxhO{N^9)UlncDG+Q#2AcWvx{F@9sX;WLlQ8cw{ zB@R2K6zPN@W}R@=RXt5l>qeHnbsdg=8K%d?>-FICdC_%!#sr<71UmG+CS&`fCCtLy8VThFT*elY}-bl6B$*+Ck4SajYpsRHphn!%+W!qXkQ@Mc-11_ zvFTqKJqhu&o3<=6Cb-~&OZde@Kb~dVjWKF}`Q*=M*?xVzBvA~HCrHrSinnWoORiec zu=d~><0RT1VEZrkQ*WR=dJC(1ZlY^pfzoVSicCtNqyYjvUX9K!jZhmv&zyf#pvh#- zc}p;DFG@?{=r)E~$ee83HWOp9S@|D)Eg3Gp#m^GnUm-{hLI?!jtbnMtGxn8^9HaJ$ z2NrSVb!+m%dG3tbZ)X{`{tCLi3mqXKlZj)R77uK{i|2PfPR5#>Wi2#CuqDWK-Ctnj zB*Y^QDHX@`b)aW-k}-+qahPo`X0tA%R?LY}J1wf17&E~1(EyJpNPpL*^!9e~#t*f_ zdD@lAj$@Ukvk&4XSwW4Xz;_qQJ zc9ZiFIG$YO80*!F>;?9 zGBFAcuIYblyKgmDE&mZ{PhN9N%N*S#Y)B^}&L^wi0rb zorZ{YIIpg%Of#uCm^rmwYDnpNX&u|;oJ$9!Bi#Q>gKA_yU3dGJPD+fx6jJFJDukwM zXhq#jr!$1ZagsA|Q0k_`%1gYw`Le&k@Kj4&>zWrWbEH1xDm&LgDqVP`7Ik6XlNq~= z+I|-IEx}ID1EY3t1~6*U?Nd=mro(u(CPvRVOdRpe3m-=45|1AonIsm4Hs4B`J2d=3 z06kB)KYCzi7PN6Z>rHX%0Df1A@-(Qv2V|fRKezbu2-AQj$()CyWH8B$Li=G-;ru z2}(mK9i=oXvJjWSCP5+7nnX81Xb!nrL-BZ$W8nv}WQ4}v8j8M^e%^llr>hDFD3}+) z_R8<(6F#q*e`7Stq?`@T7NfQ%-9Ba@oFGyu#!qRCkH_ZaX9*32Cy7Z5hVo%}Gz_0x zR2fR?_L&)$4gj#vBBORXoYg2sQ17Fwc@eAK!YfRj(Xi}9{b!;CN7CQq#J)6*E-YV@ zMr(T^^eLspwzRze0bG@AGIIzclRHn#CMJP^{fVeUGAbKx$nZH_ zee)_j{`%Yy-7GbgENgc3gj(d7@+ii9Gbzh4|BTvNbbAfQk_bc#5)cYHtBpOX_xV)$~#$4$3@bWThXBEXLui{(_(otOVhP42Uosgt$8(U1T0%`ip zn2!D?fxoFR862lj*}0@Y)1*G1Erf9QHi@Fwems&QlW26pE0%5Wab6v6h^7MgSxB%f zDbq}S9Qi)iiaZDi2Ac|MTR~LRec-d(yf=47?e_ahNprR6_NjwURWx@C+7=d6SAelIVVI{PDLDvTn~}evQIoSAXM<5&i*BDz zN>Xyv4RfCHac1%$a-NhT!>7>_>Om+S)9~Oa;_=OuZVzXdQ9B)~nHci|4;{33dgxxF z5u1Q`W*Di>PJ-5hS9Id_dNGS~T}la3mDgNUB_yU=D5=d@4MjB!lF1}~zaODlh$2}e zr6e9nVP$Gf3bzW=n#+RRw(+m;4S z5HuIi)RD_DRT%qB#^Tw>4m2`M4MQnVPNCFTBTZtwb3&Mu?Yv9y{=jL+&`j9}24?ZAAtS_)wZx_Vnn1cau65E=%d zyw9OnAUL*L>3Q$uw+N3p#3vyhmSj?jn01OoW(+G~pd8J;PE%-_Lib35z9V$EtfjZ@ zB3^UJui?=&0)`i*6_}omrB@%kWFcYO{as+V5NRqzJzvyi5CL8x6; zXb;<-JT$8m=hLCs#AqanF>@2cWz?>1ZCrb3gi-r)(d`4R3eyO;zNc39N*Hoz{_#K;`3>wMRWll1bwT>18Rdd;My3eKndU&<&T~ z3-01grL0Od23WYHnd^H08m$TmDkm6xEOf(}Z4hb)Ur1I^!A~9=w1nyG>Gm%zqqde7ILEyh^%0&( zAcVxBA@)h37Ohd`CQ0zw0! z40P2>CY|KR&;Bt-cSlKuJ=iHDn}&WiIRFH{2!)Qs$#rD*$tQb^mW*sTb# zpnXMFb0{5VO$G2sJ0fV@E&9z?pJKib6NRQ>I>Nnn2e+mk6T~=HZHt$34;S* zdP5}Z(5h$3sQp!;+vgayZ+q=a%c!mAXg(_@hC_rHhuQkbepapP!|OHhW*x2LgN?T% zgzHUS(z}`g_LY2R(9A;rCVZh%0b$z;%MxhHgI_J9EA z(Dkf+t)QtV$@**kyy5)6!SGauGhGr?UtQhiz<~qY`O$m%#=Re{dCrQ}3;F#!ZsY6! z@&He7-%rGxUD0eYhW~{0cx6qN9F=~G`==KFh ztuOG>FlzJd)i5#6dPb=ipF2uCo-9%QW`kf`|N56t(8wff zZ3}YS=1VzwbdLd# zF9)NxaD5FY<=Kp4WEf{`B*N}($GPgY=gp}tqlWp})a=9KDP38b;Vxn&Y%Ccjo*A3B zEY|sZXhrQQy=26M5SSh#FAY{LJHPH83!4}UNiwFPdkT&xDJ37c?F)b+#-Xf3a(eWy z=wk7*E{>1PoHSD$#rX3#?*-sDJ_*b+r-oB z0BhE)soS2%W8(47vaDcv6a#X`#jFH`mk!#ypuHEOqmWi(*d*$k7c<1Gmu~+GX4K|- zSQf=-xUyEGr)3yt|L#*feDBVDH6<~tsa73s^`X+qW@o^*T&lIZv1k77mqUp%AdM1r zS=V%eO+JL-j?vyd`?0P1MOmdt5aS?8hDb6*%o<`mGDO50;4lB-y?pW?-bI9c{PV~5 zF|g-I-M&pt#uz#=G5g=9Yf{Xh;?#6y_u9IfN*J|PT25Luf7vs69}!gaHwR|7H~EgwK?QWj9lrxdGSH$ro-y>ecbrk zHz3e>;kl!1ePkaSFI&pW)x9n~bcR}n)|&rc!Ah{rMh-2PbByZdRMm?(oi=AgD8d&V0y%iat%xi<%YrX_mD;foxG!~313Kqm|IG1+kIhp z!=G|>`~Pus1=LX`tHGaIM>1@%_&oURkI!dd`%-@Y*T02FYvF(W#np5#4iXC|dFtT- zo`2#1Bi56%qW6|ZF`(e%n{i`V#A5|UtprT321p!7O{+;X!l->Y==MD==d+}J6PI1` z8iM%HF-m;k_2~BS%3;)IN3iBM^BBcYboQD2_6L85mcYWiZ~)MR&c#*PO}1*CLi>`LNJ3Ta|zTopF= zmg-v2!t%~*I5RwgO_b4tEo@E17+!w|8!uezX7;A~o1+?R;>0Eu@d<%uO7um~@sHp7 zZT|dszs+5Ldz{J4UMv|U#^EfZa`roC=QoN0Q{!}jhKAQ-~rXFEx;u@Npizv1kH}sf;FQlP+9IWI#>9j=`fq?6#mPQqz-v4#gj>=;xWdSM%v+`5a`t@?W!6%vj}5>p2- zXu`Ilc)~02v}t_lNAKmQUykzA`*$*te0I(gqhc=x`N=SA&(ZMU6b=?`eO@Mqz@Btz z&Zg`k7&uf_NX&#$TaRuJ1=7{s&)hL@bo-1GqsiBU$aEq#fo>?Uy*c?%mu?TQ4n{3h zMlm!R5DwL1=zs7Bx3i%2JgTcJg2~JP6FkG`{`lwUCg@&?RMV3?a@m81N2@vJ1gV%} zbhvU5geW`#ZvZ@j`AIL9>(gZN6m~`-qz{EgD&>$)7hKk+X|ilh524n|@raH1*>-P+ zA3c2ssVG&QU)A7p_U?Wh4MVoFJMsmN zyci=q7$hC@Wc?|=reEOlJ(cqZC-^z%dCGR6rvcne*td)LW5C^YU;XCi>Lr7Bs&Kl$00(5 z0pf9sP^(5zEJ7%M&FkEY1t<6hBd4oN!gNA0K2oYq8(s*R{b(uxLa{pd9$H)5s$M@^ zBvNDSOMDSc`Ef*qn0=f~JW%2fS+=@|Pk_yi5p~c@(1_Y!x9Y5A($R0|4l_o25cCd>qA$+EP@f+Y3R~ zYvMzR6bs`YL?ybIuT7~!fHY%RgmFX+<(VvLxtMOBLsL(Z3vTlA_8b0&P{-^UwI6xg zf6(4un`fP4)ULmH2?29%eC+Zl#;j+>H~#ZWCDn;E6~LpqF;yp{LrEU~{-}E#gZ=w= z(9{lrW-afftp_`;kqlSo;-?cZGB`;hQSknIgYH|!AmlnJeS)6OrD*e3?m@UVYqAwv zOd&}jqz5Z*kVzNrF*O#?I#;Vda>vpcKAz&2_w3^bUwwfeK6yvOLPApkymVuF+;V^C zU);~4{*ICfIV-3_b??H>0Bvp=rCxaY2+ll^U&yM>kACrQ zr0gkl4k)*0<@SbY3>$ynp`u@=ks#;b!(YxW;mtXx)`Z+VKEE$Z<>Z{zxUE=jFHn} z_G~*or@lcYqqY{^UMh&DhjB=ts{om_jWd5%=8Wm~P|T>U-e!SO3z?#Px>8Esf9t>S zuYdUjF%I!x|1!`}A9IY_xx6%_U20;?!HXx@xpjz%GylfxFZ~PFY#60)rJrxy`%z-C z7&~|FhkEXCG8!j`_hGM47^c8-l1!-m9GJYHU?IWyzo zdv*OQkEd(IVA>Grxib{^G;fSWEvHy=Ns?7d&L@)+y!gTZr;lZrPnJ$5VQ}QdI6qK#u%ve_ zwgswlC+WamCXO_7?8P1u$(e3Y6C@^m?0m>#anD^`zT&+Vn|7R}kMRk?vWuX6^I2U z=J+!Tm?7OBTt@AMy{e{(0a-?^I#@8hEr?lQGsR#1<9jiDiof~jPx!*e*7NcI+ePo< z+RmJrFluXN7@M!X7zQmY3SGlBH?L>?#>%|{LI_r`UX9?{5|u|cX>eag{hfWORFuJ# z>#P(blF6|Q2il*;N^8VN{rRd(^9MonjGuv6h9my%NGb4yEKKh*l9L|d6SGYss#vf% z#D%@pYeiTYhkXOv*l_du3Kpel>U1t>;nZBxUWl^l-Z1OE7`o}OXhkdU{jJ;4HG`eo z_Vf7td%5V!Wh_|Gjp>D%?ozJCsI5k~R~BT%2pDNHP6l1gCY)Ix4b$zj%WJNTTA%Dg z)5rP2PyU_3gYb=yz?6ECJAb$a)0`Wlw%+#tIcJnIXkmeG6PIpU#Z}j@si_%+LX{55 z<_<_FYO^YJQ*qN3?uc}+^aV^-EV_hD(xFT~;PIG*n$JR2-)X4Um2erg@A=?w(%W%9B0C-%E?vz1 zKl>4P{9XY|BDCFv|Mh2Jq#k+r#`YYJ=7~#!o`u zD!AjnVc*t`{C{t|2ZuNx`sCGg_0A8YHivo1C>1c%+fCi@&$z8^77kpZ>*%`0{5T!Bz=;!4T2`Lk~5) z1-lxf_SHbQ&tWc%TE|gXDo%6);#02ny?7n`-FI%|;kys=qc4nda_n9#8JjVqwq|}1 zF-H@_poN~$Mt=RhSJxE|Qc7NYNCJwbD+|f=yuRs|RgP76OLyzWogasNz&#H$60 zVFH~uDZ(k$w@pyu}p>ojBX89ws|_n?_z20-D|WK-r)i&0yk+n3hatVOqm<^*=Nl04>rjjR#q)w5R5yEF6Isup85@g-l)w8mt>Xkt#-|jtQA4K1h z+HqDXCExq%V?2D{F2boH-tyL4Dtr;103;jGFmpoU4d;K3!QG$c)WP{FzWPeQg2hd& zZEn1fjBbMNDa|T0HJK=3l^V2^ID{M7#8Xk-o0&&3gs7F;Pw|<*{67c*5e5*tBG4po z#`^FDlEj@lY3P*T1YgfGYKt9?1-gCz($X}~LKM>K=jisS@a!v4m2{_wZtwN@P@+J$ z&pD6tbo=K8;i`0)0;6{D#ZR+#{ZbaK)mYv1p1P3^a0P{f!jf?^Vhm5JleS)mn>H_J z_wK7WoqTG>T13?z&Z@e1SqwcgnIIO6mu#4Vf^c~3fjx|-cG1jQHeSB8!fp}V@wQbIdD8>w6r*%@+1b(w4-(NQiGko%nJ27a%R#RxoVDG*itXXyuRuU9V=z1Jm z)}DT~7`652_EtKBBNAD<{UIW!=VpQxBS*KtJouM5T7;OLA{g&SH5JT^Jl+1x^o-i! zIh$muy;*C#+0O#`y7FPxJhf2RRjc9FulHuyAoDH{6)1P#21;*S&|fKmIn8XA}qa zA7t=Q4BaDHf32Te*8B|~f9c3NwyUBZv%iV$2xLZ(NkKBMh>k0UMh@0kj{KKc1!8@0)-(%S-QQ0 z*XQjFar@XHl=J0Q^M&Ib(-SKYLZ7Y{t)(n;qykLMi4 zunDtw_#XHHoH#s6cW)~rLsRV8agx)gCi3+eTmbmw8E;( z6!&=kj6F{#iH+oJUWMUv@V8`G(BDj7_ez?&1pc7F;{(m3&^49c#w%?>BBJx+jsXsD zPZn`F6s@f-T+sKP8e4wr{BA2qIst)}LWnb!O7n{!zraLlFE(L3bl~$>s^X?6C;t_e zRefWEQjoUGUa@W$YkK&~9bCd{XNl)cTzdINHeRqUf4rDc``y2v#K{&i5)HUF>M?46 zmFV^^8e`Os4#Sd-Q0^XTY75X5@-dN|J)<^*#6+jaen&UXE+glBp++fFwRpC??E>N=U?29VM>l4nBdW$?`A6I&Kk$5t`Jm< zVr182&8kB=4Pvg0+VMK9%0?KqzdCgL1{k$Llf~^9BW+6Rfx5jiXlj`z&q{-sRTLwY zN@Yn=Gn?T#hvro`uBCrT>E8UNcFEN6^gBCWO3a65GN0`jnja4#_X%k*F&^OuUw@K) z$DS%7;@E_F@z^~a|IRb?-g7CYX%Y>`IT3r9v=v1+C3dX3i6OKqbunC7GHqG1nJ{W4 zir@Oft~?Ff8=@|&a;A*hS2Nw-@Y!5&lV@5+?ZQv%##Q80mDn?gXd> zhX{uTpWzojT)^9Z_nMM&e43^aY6s`cD@TiXIUtn3Y7!l#S#$=MAZ>v+D2a}0eCJya zv3JJ_5?1AoJ)0=wu_)o#1RgqyXt(a8EhhAo+^5=;7e)WAftfIBcRwQ0G+4H(Cx6^? z))=*~F1me=QTuBbPQ$1riQak!E7^mc(lE;ywTW2Wiaj&JjH4I@^)xq|8XuH|HNm#6 zhv?{O=GNc1IPYZ#2zA(`lLkaq5mg6YkwT)@0)}kDj|Tf(s~tZJ0WF`5B-Vwfv$_XgsF3k+5&VF3|}cH zCZ0$$cBVj*YJ^d%n~hiZp4P;O#bR`J7JHy&zWjUnLqrCM!SJKhp zrla%u47!%ujGr>llYQAmH;A7;bW=mqA(=I|O(d4t*n+GEKMOH^*}cqJr6{)}uQ;8U zo?WaSpUc_s2i@{#zZ(4!H^7SQ?gP5sTFhz4^T6tdg@e!l)fdy-2IRj*G5ZUST);Ltr(y z*8e9nYJ~1vrwCLc%l1#)jeiDOOc z$0~FvDPV=+F)jRgiD1?Jf7tE;Ze3eJixAP$C;WaY~6K; z%qS~^E1Xry+rhGI9LK5Yg8�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 FV1j+zv^D?$ literal 0 HcmV?d00001 diff --git a/assets/images/mobile/virtualpad/i.png b/assets/images/mobile/virtualpad/i.png new file mode 100644 index 0000000000000000000000000000000000000000..3c1787f037fa663c85f5d11a821e48f16b32fa56 GIT binary patch literal 23137 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 z zBmABr_eQ8GD&fkC%5?L>wz%}2DEExzpvd&M45iu{!Y74?}mwOkwILBXA4!VZYA3bt}gDIV) zF$t&&iV*m7$VO?HW3J6epl?(cC;z*_M@P){Gf!f9>5d zZ66YB3±S=(kMe)7JEku25<*Z7!sjKiocD7{*oQG5H}AHjINvEcny_Z?{FrpJHD z)2m-)V%_`M+2rNO3+C(oBp3q8P(9F%pd0Ys$u-Q7eF;8Re1pU*Sq4 z#^zU7;?X=P_2o1lXlAabiV}Y@3ywhQeUedIbQl=535;hHBN~i5B~@kE84V-lUTj@K zjheW6qhltqWyFA#d;?NdoD@nqZXiu-%p({jQzr0(`tv|2d4)s0^iqWfyWGpKDw_F6 z|1nu>1iroddDJK0XNxhiZR!S#V)XX)5A@a;M={D=Uc6K5IO)QRQLID5s0HW=_w$!^ zuT$yv(HRXQJUUh7l{8BiSAF!-Ba(W5C>gbRwZPG=#TW{qu3l^b&lGns-*VGu4y_hS z0oS?bAU?Acp(C7ix9a# zjM|t^Egs&g3{%rE4aMW)mK?J~Z+AD*$5t_YcZdnpv6tZ3*`6baViZc8n_E7C&z*cB zi@y3P?47Nw?;U#G#aJ?Gdt+gGWARBV7N)1KkLk4yMOX5(rpfKiFY|w%Y2%qUUZJt~;HU-Z zcttU;owbBTU;Px8wCRW*K1OXSjzsGHp<>h)gbWj7OxOHx>u=?|dtX4hbuO!#i`r0* z+E7l7K7>O>2&CftsJhNiW?n+^%&~b9GG-9!?n}>ysHvDr?oKZ_{5IGin z%sEIsTUr}PtVv}sgm8$(V*Gvfb+|nqG)=?p@o?{qOStIf>(RddF|J>DCbRYOQ8YG3 z6vO!$QfLhJ*+`)7*tr0Ry&J*GW>`e} z`jM$KxvFC18WFlSqNU842-o^>pTCeFp8FYOW$sN;CQ2{=!Ir#r+|=|0-&}SB<>mQ5 z{-4gijLUERGG`ut5>^f&lz?CmqSOeZ7>Z#H`T@_WsHf)S`BL)R*c#N@|qYKQH(L)7h})r4Fk@~Q9zWBO=1*jT7>%oL{s-> z&{XDYl@z7y9wG&N+B=8xvN8;xi&$~|r^N02_Pa5?I+jbr9)coVbkc0@nX`1z8KFk^ z@paeY?Dk5@4XYo<`;|X3lldk zr?tQ==Htnz1&%oC{cstzY1fXBQJX;i&72w8z8HmKW7}SCU-Or=t@cKQL1x54A%PCX zBoYb}i$s$704$e+sw?R!=Y)W&V*cfnOL;8V1gZ*(GVpdR3t}cR6lGV-e){*fp$B3) z2lRqzGlyJbv4?)v^>=fXYi`o=2VvM0pt?>t6y z^$xUfb{1n989K9ZpBd$}Rxftz0p}WBL3&+$?cN`7%QwCTz+QsfwCyiEFy~`~)}^_0 zboU6o+nG@eNH|tUEFeA*jM@YaA@%-6^FBG zZv?Ovfl}&Y$(g5d>B(oM?XU$Fz4&9@!Zd*a?z~g^VSpW z?xSn(fx#L*C`J^;7)0V9k&N1WI7HO@1f$lo^my*7IVV2O2Cq56sJ+Hro3_o_xG-uH z7>~6WmafvUa28jde=#1-#mcqs()V&B-#T#xKb?JHPK5xmH z-2Kc;T=3P$vH!M|Klod?u-lWL3z4ht(BLs}Z)q_%{o|LZEy?ZW7eKMpaK~kDLQN7l zbnEHgT9yck`#K|An9(qw#y^ar>mRxx4orE_kU2-dN98 zqkCjCT|A1BUTDE67Hb`ej9TEZQtyuxMlB3s4UE;k7!uGMD*4ilpGOtx6O{pe9=AhB^C1n_#25-k8lyJt zK8J~Vf5bCt6Bw(t7`Co*{dL!635UczE@)W5>%7W0TVCY9r(Zt2%1vufN1p^r{MjKu zk5rjMF+x+J!cVxugUjt2(cT9_2vki2O+#8fj)~Qkh=RxBgNC$Ib%$Ih8I@&`&qJc?25OChv5 znUY2%`Os$5Z+#9f2wuNO{7_k^e%)l}Y48y>- zY;4QKiaVoJMMcq6Ty7U`kB3NifP-6iuy5lw9yqX?{=KazF$*-sh*YFC%#C8MyxAcWim@h0$r2V->}C{oS{@?A!};nizlE zyN>3^Uk6|-0ak6@$Z3m?r#fQL8W=hpr$h~0z4`6dww6{NdG`grcj8s}ihOuVd{E(Y zd`S5oqfq(Amu&x;7zug2+$=J8VGIfS5VJE>;zAX$YSidLvi|x@Zse z5wT;qMxk=5hDBsgD_i!o5_`kVmXl_2_i3LfSV&BiUjEb7#MhNmxcm64_|xP@w(WRl z#O(nbLQv+u7(+xc3PFNVTU0zus(l8=icynHhWotl#(0Y zeT1^_KE=6Ty>ZBUB^kB5CX9?Qmw*@nQ7V^-@%9U^@>c5(K5^NVO!HSVPnJ+8z5M&_ z-^T}O`SMnM_kK=!`ZxTpqJ@w4d56>@lwb^XkUcron2CIM7aj9@C|)oXGWI@*#bN~7 zI_TK7pZ1;mY2Uq%m)f==d&3-z_S0*G5O&;4Eg8r!m~o%PQzy#DikB_`cW;#F$|i1g zJOtl~?cM02yMJjOp4JA4SY$HVNiPD1W@XLPow%-k0P3W;J2bV1-O z9jD%Jj}CAl64d*hWorn8O_Bze5YBj!0wo^h5T=EaW8xSMqxROn{)V#qUvL<;|M6$I zXz7s8HY!GK0;WASQ49glc!1xA{=mXx7GRz{ga4dyDgV6Uw*-ShzV!Z|m~;2@Ng<&K zh0m2PM(WM9nu7}nyM1VStJN7GaIh0KWzk727UN*!4tB5JK+Bfxyxy`683@y1h6$wD zNQFN1cvF1z{wU$MwsI?vbN6vqIOb63^!Q0Ca~>`)$jlfl&DdC* z7;tzQwfS(UsrRE{)c(WFGq{Dn0EdWCo4{B_F~CuoPjl4~JZUBmEdFG&-0%1E@adoD zv){6r^Wzti<%*&VwJ#Bv7Iy2<{Qb^okbRrCG5LfAR8DEY2u0ZZ!kaX{wwgEgY^Ea= zND~T2A_U;+4r9Eyk%wz1aovnlvsj$raG07-n~xor&7{1u;&dMJKgYK2QTQRoA&QZ} zp=Q)(LIM*ePUI8IuBNWK#vv#H{YK=FQ13^}sQtx%+{aW`F<-vr7V5wDIA6He=D+7( zowuIhFlzJiJH~P?#vFew)&&c=@0jdH3nBQoIhXN2tV}2~tx&^jT5S^Z7V_(rgIDvV1M7uHh*eof9x8 zhUuh~fKu$`(>HyNg_RSNF8lJAak+Dc6#;JRd=){Evv0m8soq`hpN~z;fJ&9sKmo-b?mF{Rd}H!+gjeL> zNeLWHqAwgxKHCQgrbk1+U;)=mIWg}nrRzFv(~8*MxsxR&3&w=kk%nARjNx1kX!Vu+ z%T51Cxhp*|?NN2U@ULHI_YWQ!H%4s&s@Kg8U;I3C>L%qs2SJ5&rTYnh8l?zPQ4D_9 zm{adZ!>B!A1vy{^nGp3--4#OW3SxF0S3mh5Jod?NGW`cH@}M;`Ms5Bi#v>p~WnzK9 zmbb5)GpKN|Y>O*jbQo~Y%}7z*JT8WOj5w?A-l-SizVH~rHNHc&;r1be1l)_Ka?j!` zhg`hV>M~doE=P@J&s?$5Cg+JqF^p*HM>}{%sZ^*%9&Wt;x-8)UPA^aNma&&0-)wnt zSSmI!B%?MJ7hSqEuW(QhluH*2DWgI7sMm|B_m@*&Qb9vm6=FgeOek}*pOqC2{FM8l zx)dgqBPUj3O{zd?C}&aWg!E@gq2A{b^#0}m^0^JHdGJZT*|Y*Fhewh-K$!KSiw$N6 zt*sr{oqc@#e}BS+OHScgt(B$`(5>^D7>OvxXfjG&aMEeqGxfr}$1U698;|{(C!c?Y zW2esH-i8Z?f0MY7_{q#m@SZjYt57E92L!QFH*-%u4xtyufyf0jW)SKwJRwUy=x&dx zyFEjnm;=RA>zG!Of2Uc)w#JQ7n>-abetveoMg>8!)L29*Q{1J9NtLju0Txb#S#>a@ z7N%80ZRw!f-9ZZV-seVE_&CN}Ly@h-7j)SLQSZlsQQK++Xl-f53`Mx$(xoG2)DE@{ z!l*M!RZgkTd(5&ezV@4+BA(g6)<`Fpo_juCU;6AKi}b>rRdFG4&w|UibK^lGO+%+m z|Dd3FQZ3h%%rAT!I$gzfX=xHY)ZI&D z47=I(y9@Vb3xV*unRfDGHaE3o*^l8GAH{PgF}v1LFJ&Z#3`ViL`q|grPG4tF!P~Zt zHzeSlQp?n1=5qbQv-0vDGEpl%JXq7pKPc&f`3IW;u^CS0pT#tKoO9}Gx%rGMn7U{# z-D-?I?`~wpo3F6B%}D~A_b$1j7{fqMTL({eZ073fg;~cocI{{RfBrWRXVh*RTSjdH zl{M9A&*wp9wo;0iTnS~lnV5%@dVfSRY7-cXD8|#PU+1YQVeVS;30!evMzFh&+aLY~ z%9}gb+TRMmWPE&K(z)3cxQ90$rGRVaoz5fwQig2pp=oOq{o9+dU5dkXpR*L<&6puf z3n?WJnN1GcEoMPnc*xEGO>NEe?r(LrYmb=Y?%y&%lVHa>irSLs7-6sD5Dtb z4(?|0pW)3N8m0BM^tQCJe{CaT{|>fhs5+`Edws7Ud0fW;a?Ofa@w2K?T_J zPUm;*Ko~aH>$7sF?{aA%B{%3fY_wTmBa?Ng!5CXMZzj09Y0!vCE=U}Ig5}ndNlqYp z#*US`nScBu^qNv<^WFl{qQ{tD;YCx@HU4jJTY<4*P4fRK$IZu%8Yn(DUclvcF@4Fg zMBe%{{^miPSh=DY&busVko?E~F4vgoMw@nV>WH zOgsq5CAAL9K%O|4Z@Zo#{N`4Q+MMW%#M!qXR_dl?@&snq)FY}(oSDSqLb_CEd2)Qc zfG{o8z6gzLHxPbrSCYdafzq-vu5CCz=aS#SP;KalkbzY?u=+3-jdI3c_VHhlf#v1_ z&BljKsveaXL=rHKJkbCNmKjMO>&^#~m!XvD;5wX)+5|e9_R!zb@qwh?9}$e&1V)lk zYNRh_FF|f^d6|2sUy^>n<0{-ynX^GdvD-#ahfCw0#aHrh{W=K85G5XLuN$cfq^5EM z)18RJV9)_C$a5F*$nhJHhK*1aP~aNxJSg@IJ7S?DP`X2?6@KulPENu#k7KP{oz^cc z8=9!8sm0cHq?9Nz3s+kREi|->K3pC|=JNl;$*4`>gHF9a?2Ot3#&RvjP}oX*N6*m}0{*LmeRcy-0 zAoSQv&vJ6ofD?(JD$@5bHRx#6LEx#F35oLV-O)u9%i+P?wSu&{I$Gjlyw0!og3F&yXIkhaip z8MSBr<7dW=Q41ej>b>dFaGigc8MO&yL@^W!(BRUxts5rRH}B%?$MzEnq^J2(6on@% zx~P>SBj|kCQRnuvsJMBQQ5dHz3s$7}DslQUzG0NT6S`Ay?%eE#j<^Xv65 z(A?FUl>V_;o>?^4^dKaNp+($q8MV*POlkKxF>3p)C_BSl1U?|bA;GBq(Xoe_QJabk zqSTN`sHd4;+(Mul7Jpy)1~1eG`SI0XN*hd9RL^p|2-&MwxuAmxbjL0oXsX@iuKI;aShuZYQ#$2EQ~X1N1EPlB#hd;`9TE3H!(5? zSD}uh1RDEWnft{1e2ZUm*X5s2rXf?^E|xUR;XQL36GKO)kVt&M;3V@vjep3NJ$RPp zq3Y39q+8<;{uZwHO#@wnga_WVFuMc1-Lj3BfAe?tytN8nsDDV|kc!k!9kj1Bp>Vhrh|?CwVL(-8yOt7s0k|p6*@8^`Xfq z{n6ZM%@vWX=P9wDkNKxy``u~vTp!>6z_Kkuo!#8A^;yn(wVRjMuVzcnfFp9a!XYsL z6vM(W4Ep=~v(8ICuG=%BDY+mD zTezaP8Z0~cVHXOiD?C-+&6Sna$=rX1;Ch@r9WqHVilXoj<;OvRnZ`esqaMq)hz7%a zcgJ&_^HMi^*KES*YUWoX+zdz8^)%rC4*$Wjtek=*f!^MZbOGULNkevSK1S`oKJrV% z8{3aEYI8jUM>wNa5%87!k`AkaeGryqVVWjx284vAt4S545C~vvq?5)~&oOsXEnmA} zD|cLW1LYHH9j|POmzzsY1>j~TIPFbb>~Zn2`o)k#tF>(#C2BaKz*Km2=jF!*!junE+0Hi?=?(C`JuhWue2nNNlFb#uHXy|+jR@T;g zHVnd2NX$O@7_}T_)PC?7wW$x1ZerXyq=^vSQ_cfmFPG-hj55Sqga-Os;c>U5P-|&P8S9R`XG)nYCl+v+Jcb!o|Y{e z-dc>rAj=dIkS-`P?~@PPjBd7Wd6T&rsV9(Nt)Vy&X0qO=*vvMi#}C~iR0 z^|XPS&pVpSDUvvMbEut7>t19*V-+tf?&j6A%DMaatI%BfhzTK( zc>isF+I?Wq^zUPdgd;ccJ5e^C$P^Bi<%BmCWsqe>hJ|HjY_sPyGp|R_Fbp(ZFIZ3< zWz?o$f5;fMZGDKEk~Bu`kcg%W5=THtIcTF@E?07}C6G$I(aArfB{0;-AuP$}P&=Df zu3-KC%}hIGF;AW1=B~*XpvBdsTmmCuBA79QU{^0c-101EzZ0Zw+it9$7XIDp zDYzYDiNw7Qgx(QLI_k%*lRBM_CT5Ar0mRhiDg-6IigjA;V7ea45}L@ zqxPhdNxT1$~t+}n?3_V5e(M%|7N z0#d`xp-?DkN~HGFpb!vj=?yXv?iL6kf!#yhdpLZU_07BZ>SOx}eW5?igj5uT$1A!x zwe<+nB90(Ta2HeU@&gjlP>I>x$@35W53jFXJvgJbtDWEEsdLcPy{ZDsmpdQ({a-}G z31=0wU@I}`QvZ%bB3PD%+wDeG)uhcbR(&YK6y*QsIYE zhh+DINA73U>bFN7jvdTtor=WwEb+RW-{Dx+y#s*&et&Mqp=p|!rioz~=(_F*2~C3t zs5v$*No`m@?|No=YCVNM*iiN7YD>O0W|n6@S8Dli+E)lt>&&b_5m_<}BTabcLS84O z&u!l~YiW%8zo>Ek7nNJiy;1?9_dWJtUK69Irw4C&DKI=O;wYnb_>5YsyPvlYG!a~} zlPzzrVSmexQ3;2HDS^57=IISsvC?AIesA+DE+EE& zhF)IZmc*Wklu|2S>S6RvejPD-g&Na-Uh- z!i|@^PMhL&0f7MlF@FNU%RKe|b(z=n_xID+*N10>M5d!Syy))kCK}5VwVYD9vT;|N zr)I_sSFp9o3`S5QQK1lMu3%xqI$qy)cIG8JcI@CI6YGG1aBixQ$hERG6-ODhW6!8f zMZ(WVx*Pn8L&CPsw@a5I{EEvA*;MmgYzIBG_G@DKechj+ZKh={O z0MfV~3FI4~sW{509Xm#CDl*@FCIz8ycQe6YF#AHkTjKM+Y!#Q4mlmt7kSZX)`6T@0 ziU5lyhIoHZ)@B0D&CQgTJ9^Y`?c}34yl880%Y9(c!~lxi>EN!yCWf+&_H7EEfE8}`r4ytu8cjXk?})6md>Qsl`BYY%5_4#c&I-h(u* zI>_90l{~Y!H7O|EKJVBtYF7ne?J9njvGn=Fgw(FiTqo7r+e&iJP(Y zc9+K=e13al3_#=SzXg7qdg3xFd{!>+bw@`Be!riZnwq0R;s}SPX|%Pq<)1CeiX@Y( zex1lAb;)sOB#uO0dFQn#(2dPTWp2YWmPfmph?zAWcJ11g90RqrwWD5}lQ?f{q?4_y zo@3UkV*Xh7J~PfZffY-<{BY_B7`3bVIk;^%X4^jQi>vYz|Fkkoi%8@ut*WXb6bj*vuN+NXpOd-DbU4^XfNcji z!14{ueX^2=%3q^$Y6Df%C#ErK0gP~j-j-In_8g$6xs_;N5HsAte;p!q{!n5t5@O;V zr_%2eM8?L(#{6{1OO9#8rM-yTb719r??Z`WRcid`DfrH1nWuk&bLL&aOPh0U+q`>^ zGw_aT5=S01O{1fuBiTneaqQ#}v#P&VKu#E}JN^tXo5>Y1_I71;^u~=FnK5Gqvu4c# z29gWur01uA(Xnec%N{m&^+4Aac(1^VbSNM>_lPi7%L>L4nF2U5yPKv-Q&SVo&CR(l zT+k3zg)-E8;d+9`vioDrBXD?VrO-b$%Bppp+_wL;k6%Dob@=+WrXqraj)<#Ej z$Tw5emswo0=wa4tud-f)_1VIGLw{C&L&@jQx)n{$S?i7+J9zfFXNg22Xu6(sQjTQh ztW?DZ;>Yr6V_IM0*~c3D_U&W!>ecy$LurxCRmc4jjkUl5fK!hjSb^#Yi0>}Xb?K{I zfBK`iwY+OI+S=N9XZ1S;Wi2|2@q=la1OfrxefM4Z1Nn1LQtq?)^eKPA=Y5eB^b>IT3tlF_%ad1Ld4-J|HYENX68S!qOxT+Gq5es{i{ZSJobO3jlRtgE zy{uZbif!Ar<=?i#>ymu#^cA?=e*iY;I%O!^;4|vy&Yo`l>V=c@o*`k|wr!M`m!s=C z#l^*Vz22jws&Pgn5+NK86Ny9!g+g=}vM=LjPJY>2U-hSOIPzGc=$5;0%sk6Y!Vj?_ zYj~Wed}hfu`;TwUBF`=e&CSj9^z_is&_GR14c_unhjp0|29$$n=kotE)~+3=cZ)%m z=!*iBF}*)ZG!mhsql1kb^RBfUz^6`rkMg2BfcLYG-SmKS-=T6r0D>=^{W|~s%4tL2 zk>qgk`~7&_9%nI;dFb{;l(t0V$n`hg<>LiiOL4@R2D+vb3WWxkkp*s=sDAnURqmN} zcT4zdI2?g>&NJi^5cj?Ggv|@x1D&=!O~Vv?bn!l(Ue_?>O$GRhe7IaL^tkC^7)DyI zip1ixd}BoBTHEj;L}E;(_ICoQivtr&9uj6;A~{ej7Q-}6XIvEW%5FI0J!aJ1hBTf9 z6*L8;1uh?aUt?U0EOq_pSgyyW``Sin&N>>Uh-t^XfUdmW3b15r#z*!|GKh{@!Y+ zzJ=CKqsZr_U;*JEeOiyJopA`|JC{CeKlH|@Xz4k!-1$e58^=rvap|#-;8UL{D)K)Q z>W`8pAa2d}MJBX?f)d668|;VQoX?$C{R6Kw{)m^iRE}Zuk7BG)U2LnLJoR;Jg8yEk z^69+iy^zyyF`)mSU#^oPB$h2(#_|D8LIT%t(|K?5-mY)+{Cxk>-orQRlDZYkc6WaFu^bgS81N_D^S6Q0Z(mwSQzURZZ*2Qlezwe`g_W9PA5$uK(NOUW-+$u!%$rb{K)C(S`HtA64%p?(?Mxw& zszumt4Wvc1ufNgd^OmS*%zNElGJC2W2p=PQ!c*;zz6QCsqmq4HMRWvIqDTD|IWW3+ zqN$QnucW5fpsp;SOswdTr9}so3jZ$6>)xOjxz_f7_4lvv{i}12jqg5@t3Ancb2}XG z`5QTX61gF9b~d;RxQnOWcOLlrA6tTHT|#Hz6auj-Y!q}6Ls2ZG6sn>M>1>pQkWPc7 zkis@o)4gd@3Ix(lBvMU(hJ^nlS;i4mKG04(W+@1yqAA$szyz&miu1w8>#$7|Bm#j% z2#J&e)7CL89aXW_lA?ag@7n1q^))G8_YNuK!D!fCM>O0zL?0y){+CDc9m+LOVirxV)ip6y#>}Z^Z+Ir1{nP1>loB&Fbj3nZWRZ);a$Yg{>NTF*Iq$spJ zUp*+o#+FLveY5LH<^pz7X4tlZaK^jPG!Tl6KaW5t5+P;s9*J5N=Wl6ARYsyJAkb73 zpF2Qp$!7fC*AezxsG`k|sX79erE38VIrzBv*DSLlYYgO#NG#g`%a^and2H#bC@X;T zR|a6|Qmp5k^i`^=pKM)p(Rl#883YJ{{*tsjRW99A142mKir7d?O6TobQYK%7qNu7O z6ql4zv5`^RG6Jfqh8_2+Pyk_AmM$bNMO9ovsJgCd9#C{CZOgWdux(pWDTJb_x>r$D zm&kZVMJU*E;3Jg`Y#L+RreRAvEI~N+3e~o)m}SO-sG3VtR4)i&SkYcZ&|zal6cp96 zC{a|^s|ww(D4GXAO3Sou8I#zil(rO7#th3g6h#U}(TY?>E7DcnEp4ZLwvaKyiUp({ z>q4<}@8#YBAl%Rw1t!LSPEb|#MV2mIW$m<3_c(o%3!(hN!Fd(=%9k&*!;9X+jPRavbj zbz$34#a5-0d99e2Sz|B+YT9qQeu;kGBpL2XQ#=?3us074Z10{51eWdHyG M07*qoM6N<$g7$8Y(f|Me literal 0 HcmV?d00001 diff --git a/assets/images/mobile/virtualpad/j.png b/assets/images/mobile/virtualpad/j.png new file mode 100644 index 0000000000000000000000000000000000000000..5e4086c1c83f2d51718ad06f85f44977e41872e0 GIT binary patch literal 22475 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 literal 0 HcmV?d00001 diff --git a/assets/images/mobile/virtualpad/k.png b/assets/images/mobile/virtualpad/k.png new file mode 100644 index 0000000000000000000000000000000000000000..8576c8d6943473780b843909018ca1a16710cf0d GIT binary patch literal 23863 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 KMNUMnLSTYPnB+46 literal 0 HcmV?d00001 diff --git a/assets/images/mobile/virtualpad/l.png b/assets/images/mobile/virtualpad/l.png new file mode 100644 index 0000000000000000000000000000000000000000..56209bfca4e18ddafe3f53deb0c477623a56d8c6 GIT binary patch literal 23164 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
- +
@@ -180,6 +180,10 @@ + + + +
@@ -189,6 +193,9 @@ + + + @@ -198,4 +205,10 @@ + + + + + + diff --git a/source/funkin/backend/MusicBeatState.hx b/source/funkin/backend/MusicBeatState.hx index 35b684e57..aa79c4453 100644 --- a/source/funkin/backend/MusicBeatState.hx +++ b/source/funkin/backend/MusicBeatState.hx @@ -12,6 +12,12 @@ import funkin.backend.scripting.ScriptPack; import funkin.backend.system.interfaces.IBeatReceiver; import funkin.backend.system.Conductor; import funkin.options.PlayerSettings; +import mobile.objects.MobileControls; +import mobile.flixel.FlxVirtualPad; +import flixel.FlxCamera; +import flixel.input.actions.FlxActionInput; +import flixel.util.FlxDestroyUtil; +import flixel.util.typeLimit.OneOfTwo; class MusicBeatState extends FlxState implements IBeatReceiver { @@ -105,8 +111,110 @@ class MusicBeatState extends FlxState implements IBeatReceiver inline function get_controlsP2():Controls return PlayerSettings.player2.controls; + public var mobileControls:MobileControls; + public var virtualPad:FlxVirtualPad; + public var camControls:FlxCamera; + public var camVPad:FlxCamera; + public static var instance:MusicBeatState; + + var trackedInputsMobileControls:Array = []; + var trackedInputsVirtualPad:Array = []; + + public function addVirtualPad(DPad:OneOfTwo, Action:OneOfTwo):Void + { + if (virtualPad != null) + removeVirtualPad(); + + virtualPad = new FlxVirtualPad(DPad, Action); + add(virtualPad); + + controls.setVirtualPadUI(virtualPad, virtualPad.curDPadMode, virtualPad.curActionMode); + trackedInputsVirtualPad = controls.trackedInputsUI; + controls.trackedInputsUI = []; + } + + public function removeVirtualPad():Void + { + if (trackedInputsVirtualPad.length > 0) + controls.removeVirtualControlsInput(trackedInputsVirtualPad); + + if (virtualPad != null) + remove(virtualPad); + } + + public function addMobileControls(DefaultDrawTarget:Bool = false) { + if (mobileControls != null) + removeMobileControls(); + + mobileControls = new MobileControls(); + + switch (MobileControls.mode) + { + case 0 | 1 | 2: + controls.setVirtualPadNOTES(mobileControls.virtualPad, RIGHT_FULL, NONE); + case 3: + controls.setHitBox(mobileControls.hitbox); + case 4: // do nothing + } + + trackedInputsMobileControls = controls.trackedInputsNOTES; + controls.trackedInputsNOTES = []; + + camControls = new FlxCamera(); + camControls.bgColor.alpha = 0; + FlxG.cameras.add(camControls, DefaultDrawTarget); + + mobileControls.cameras = [camControls]; + add(mobileControls); + } + + public function removeMobileControls() { + if(trackedInputsMobileControls.length > 0) + controls.removeVirtualControlsInput(trackedInputsMobileControls); + + if(mobileControls != null) + remove(mobileControls); + } + + public function addVirtualPadCamera(DefaultDrawTarget:Bool = false) { + if (virtualPad == null) return; + + camVPad = new FlxCamera(); + camVPad.bgColor.alpha = 0; + FlxG.cameras.add(camVPad, DefaultDrawTarget); + virtualPad.cameras = [camVPad]; + } + + override function destroy() { + // Mobile Controls Related + if(trackedInputsMobileControls.length > 0) + controls.removeVirtualControlsInput(trackedInputsMobileControls); + + if(trackedInputsVirtualPad.length > 0) + controls.removeVirtualControlsInput(trackedInputsVirtualPad); + + if(virtualPad != null) + virtualPad = FlxDestroyUtil.destroy(virtualPad); + + if(mobileControls != null) + mobileControls = FlxDestroyUtil.destroy(mobileControls); + + if(camControls != null) + camControls = FlxDestroyUtil.destroy(camControls); + + if(camVPad != null) + camVPad = FlxDestroyUtil.destroy(camVPad); + + // CNE Related + super.destroy(); + graphicCache.destroy(); + call("destroy"); + stateScripts = FlxDestroyUtil.destroy(stateScripts); + } + public function new(scriptsAllowed:Bool = true, ?scriptName:String) { super(); + instance = this; this.scriptsAllowed = #if SOFTCODED_STATES scriptsAllowed #else false #end; this.scriptName = scriptName; } @@ -125,6 +233,13 @@ class MusicBeatState extends FlxState implements IBeatReceiver script.remappedNames.set(script.fileName, '$i:${script.fileName}'); stateScripts.add(script); script.load(); + stateScripts.set('setVirtualPadMode', function(DPadMode:String, ActionMode:String, ?addCamera = false){ + if(virtualPad == null) return; + removeVirtualPad(); + addVirtualPad(DPadMode, ActionMode); + if(addCamera) + addVirtualPadCamera(false); + }); } } else stateScripts.reload(); @@ -236,13 +351,6 @@ class MusicBeatState extends FlxState implements IBeatReceiver event("onResize", EventManager.get(ResizeEvent).recycle(w, h, null, null)); } - public override function destroy() { - super.destroy(); - graphicCache.destroy(); - call("destroy"); - stateScripts = FlxDestroyUtil.destroy(stateScripts); - } - public override function draw() { graphicCache.draw(); var e = event("draw", EventManager.get(DrawEvent).recycle()); diff --git a/source/funkin/backend/MusicBeatSubstate.hx b/source/funkin/backend/MusicBeatSubstate.hx index e2bbb3123..71a6ce20e 100644 --- a/source/funkin/backend/MusicBeatSubstate.hx +++ b/source/funkin/backend/MusicBeatSubstate.hx @@ -10,6 +10,12 @@ import funkin.backend.system.Conductor; import funkin.backend.system.Controls; import funkin.options.PlayerSettings; import flixel.FlxSubState; +import mobile.objects.MobileControls; +import mobile.flixel.FlxVirtualPad; +import flixel.FlxCamera; +import flixel.input.actions.FlxActionInput; +import flixel.util.FlxDestroyUtil; +import flixel.util.typeLimit.OneOfTwo; class MusicBeatSubstate extends FlxSubState implements IBeatReceiver { @@ -91,9 +97,111 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver inline function get_controlsP2():Controls return PlayerSettings.player2.controls; + public var mobileControls:MobileControls; + public var virtualPad:FlxVirtualPad; + public var camControls:FlxCamera; + public var camVPad:FlxCamera; + public static var instance:MusicBeatSubstate; + + var trackedInputsMobileControls:Array = []; + var trackedInputsVirtualPad:Array = []; + + public function addVirtualPad(DPad:OneOfTwo, Action:OneOfTwo) + { + if (virtualPad != null) + removeVirtualPad(); + + virtualPad = new FlxVirtualPad(DPad, Action); + add(virtualPad); + + controls.setVirtualPadUI(virtualPad, virtualPad.curDPadMode, virtualPad.curActionMode); + trackedInputsVirtualPad = controls.trackedInputsUI; + controls.trackedInputsUI = []; + } + + public function removeVirtualPad() + { + if (trackedInputsVirtualPad.length > 0) + controls.removeVirtualControlsInput(trackedInputsVirtualPad); + + if (virtualPad != null) + remove(virtualPad); + } + + public function addMobileControls(DefaultDrawTarget:Bool = false) { + if (mobileControls != null) + removeMobileControls(); + + mobileControls = new MobileControls(); + + switch (MobileControls.mode) + { + case 0 | 1 | 2: + controls.setVirtualPadNOTES(mobileControls.virtualPad, RIGHT_FULL, NONE); + case 3: + controls.setHitBox(mobileControls.hitbox); + case 4: // do nothing + } + + trackedInputsMobileControls = controls.trackedInputsNOTES; + controls.trackedInputsNOTES = []; + + camControls = new FlxCamera(); + camControls.bgColor.alpha = 0; + FlxG.cameras.add(camControls, DefaultDrawTarget); + + mobileControls.cameras = [camControls]; + mobileControls.visible = false; + add(mobileControls); + } + + public function removeMobileControls() { + if(trackedInputsMobileControls.length > 0) + controls.removeVirtualControlsInput(trackedInputsMobileControls); + + if(mobileControls != null) + remove(mobileControls); + } + + public function addVirtualPadCamera(DefaultDrawTarget:Bool = false) { + if (virtualPad == null) return; + + camVPad = new FlxCamera(); + camVPad.bgColor.alpha = 0; + FlxG.cameras.add(camVPad, DefaultDrawTarget); + virtualPad.cameras = [camVPad]; + } + + override function destroy() { + // Mobile Controls Related + if(trackedInputsMobileControls.length > 0) + controls.removeVirtualControlsInput(trackedInputsMobileControls); + + if(trackedInputsVirtualPad.length > 0) + controls.removeVirtualControlsInput(trackedInputsVirtualPad); + + if(virtualPad != null) + virtualPad = FlxDestroyUtil.destroy(virtualPad); + + if(mobileControls != null) + mobileControls = FlxDestroyUtil.destroy(mobileControls); + + if(camControls != null) + camControls = FlxDestroyUtil.destroy(camControls); + + if(camVPad != null) + camVPad = FlxDestroyUtil.destroy(camVPad); + + // CNE Related + super.destroy(); + call("destroy"); + stateScripts = FlxDestroyUtil.destroy(stateScripts); + + } public function new(scriptsAllowed:Bool = true, ?scriptName:String) { super(); + instance = this; this.scriptsAllowed = #if SOFTCODED_STATES scriptsAllowed #else false #end; this.scriptName = scriptName; } @@ -112,6 +220,13 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver script.remappedNames.set(script.fileName, '$i:${script.fileName}'); stateScripts.add(script); script.load(); + stateScripts.set('setVirtualPadMode', function(DPadMode:String, ActionMode:String, ?addCamera = false){ + if(virtualPad == null) return; + removeVirtualPad(); + addVirtualPad(DPadMode, ActionMode); + if(addCamera) + addVirtualPadCamera(false); + }); } } else stateScripts.reload(); @@ -225,12 +340,6 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver event("onResize", EventManager.get(ResizeEvent).recycle(w, h, null, null)); } - public override function destroy() { - super.destroy(); - call("destroy"); - stateScripts = FlxDestroyUtil.destroy(stateScripts); - } - public override function switchTo(nextState:FlxState) { var e = event("onStateSwitch", EventManager.get(StateEvent).recycle(nextState)); if (e.cancelled) diff --git a/source/funkin/backend/assets/AssetsLibraryList.hx b/source/funkin/backend/assets/AssetsLibraryList.hx index 494479970..0b578d842 100644 --- a/source/funkin/backend/assets/AssetsLibraryList.hx +++ b/source/funkin/backend/assets/AssetsLibraryList.hx @@ -1,7 +1,11 @@ package funkin.backend.assets; +import sys.FileSystem; import funkin.backend.assets.IModsAssetLibrary; import lime.utils.AssetLibrary; +import lime.utils.AssetType; + +using StringTools; class AssetsLibraryList extends AssetLibrary { public var libraries:Array = []; @@ -58,14 +62,30 @@ class AssetsLibraryList extends AssetLibrary { l = cast(l, openfl.utils.AssetLibrary).__proxy; } - // TODO: do base folder scanning #if MOD_SUPPORT - if (l is IModsAssetLibrary) { - var lib = cast(l, IModsAssetLibrary); - for(e in lib.getFiles(folder)) - content.push(e); + if (source == MODS || source == BOTH) { + if (l is IModsAssetLibrary) { + var lib = cast(l, IModsAssetLibrary); + for (e in lib.getFiles(folder)) + content.push(e); + } + } + #else + #if sys + if (source == SOURCE || source == BOTH) { + var fileStuffs = FileSystem.readDirectory(folder); + if (fileStuffs != null && fileStuffs.length > 0) { + for (e in fileStuffs) { + if (!FileSystem.isDirectory(folder + e.toString())) { + content.push(e); + } + } + } else { + Logs.trace('No files/folders found in the requested directory \'${folder}\'', WARNING, YELLOW); + } } #end + #end } return content; } @@ -82,14 +102,30 @@ class AssetsLibraryList extends AssetLibrary { l = cast(l, openfl.utils.AssetLibrary).__proxy; } - // TODO: do base folder scanning #if MOD_SUPPORT - if (l is IModsAssetLibrary) { - var lib = cast(l, IModsAssetLibrary); - for(e in lib.getFolders(folder)) - content.push(e); + if (source == MODS || source == BOTH) { + if (l is IModsAssetLibrary) { + var lib = cast(l, IModsAssetLibrary); + for (e in lib.getFolders(folder)) + content.push(e); + } + } + #else + #if sys + if (source == SOURCE || source == BOTH) { + var fileStuffs = FileSystem.readDirectory(folder); + if (fileStuffs != null && fileStuffs.length > 0) { + for (e in fileStuffs) { + if (FileSystem.isDirectory(folder + e.toString())) { + content.push(e); + } + } + } else { + Logs.trace('No files/folders found in the requested directory \'${folder}\'', WARNING, YELLOW); + } } #end + #end } return content; } @@ -162,6 +198,20 @@ class AssetsLibraryList extends AssetLibrary { libraries.insert(0, lib); return lib; } + + override public function list(type:String):Array { + var items = []; + + for(library in libraries) { + var libraryItems = library.list(type); + + if (libraryItems != null) { + items = items.concat(libraryItems); + } + } + + return items; + } } enum abstract AssetSource(Null) from Bool from Null to Null { diff --git a/source/funkin/backend/assets/ModsFolder.hx b/source/funkin/backend/assets/ModsFolder.hx index cd1704ed3..bc3d021bd 100644 --- a/source/funkin/backend/assets/ModsFolder.hx +++ b/source/funkin/backend/assets/ModsFolder.hx @@ -35,11 +35,11 @@ class ModsFolder { /** * Path to the `mods` folder. */ - public static var modsPath:String = "./mods/"; + public static var modsPath:String = SUtil.getStorageDirectory(true) + "mods/"; /** * Path to the `addons` folder. */ - public static var addonsPath:String = "./addons/"; + public static var addonsPath:String = SUtil.getStorageDirectory(true) + "addons/"; /** * If accessing a file as assets/data/global/LIB_mymod.hx should redirect to mymod:assets/data/global.hx @@ -54,6 +54,8 @@ class ModsFolder { * Initialises `mods` folder. */ public static function init() { + if (!FileSystem.exists(modsPath)) FileSystem.createDirectory(modsPath); + if (!FileSystem.exists(addonsPath)) FileSystem.createDirectory(addonsPath); if(!getModsList().contains(Options.lastLoadedMod)) Options.lastLoadedMod = null; } diff --git a/source/funkin/backend/assets/Paths.hx b/source/funkin/backend/assets/Paths.hx index d8c6ba392..361c1a611 100644 --- a/source/funkin/backend/assets/Paths.hx +++ b/source/funkin/backend/assets/Paths.hx @@ -171,7 +171,7 @@ class Paths return FlxAtlasFrames.fromAseprite('$key.png', '$key.json'); inline static public function getAssetsRoot():String - return ModsFolder.currentModFolder != null ? '${ModsFolder.modsPath}${ModsFolder.currentModFolder}' : './assets'; + return ModsFolder.currentModFolder != null ? '${ModsFolder.modsPath}${ModsFolder.currentModFolder}' : 'assets'; /** * Gets frames at specified path. diff --git a/source/funkin/backend/assets/ScriptedAssetLibrary.hx b/source/funkin/backend/assets/ScriptedAssetLibrary.hx index 0fd8d380c..1ca8268f0 100644 --- a/source/funkin/backend/assets/ScriptedAssetLibrary.hx +++ b/source/funkin/backend/assets/ScriptedAssetLibrary.hx @@ -21,7 +21,8 @@ class ScriptedAssetLibrary extends ModsFolderLibrary { public var scriptName:String; private static var nullValue:Dynamic = {}; - public function new(scriptName:String, args:Array = null, folderPath:String="./assets/", libName:String="assets", ?modName:String) { + public function new(scriptName:String, args:Array = null, folderPath:String="", libName:String="assets", ?modName:String) { + if(folderPath == "") folderPath = SUtil.getStorageDirectory() + "assets/"; if(modName == null) modName = scriptName; super(folderPath, libName, modName); this.scriptName = scriptName; diff --git a/source/funkin/backend/shaders/CustomShader.hx b/source/funkin/backend/shaders/CustomShader.hx index 7ea07c7e1..6aaf81fc3 100644 --- a/source/funkin/backend/shaders/CustomShader.hx +++ b/source/funkin/backend/shaders/CustomShader.hx @@ -19,9 +19,9 @@ class CustomShader extends FunkinShader { /** * Creates a new custom shader * @param name Name of the frag and vert files. - * @param glslVersion GLSL version to use. Defaults to `120`. + * @param glslVersion GLSL version to use. Defaults to `100` in mobile, `120` in desktop. */ - public function new(name:String, glslVersion:String = "120") { + public function new(name:String, glslVersion:String = #if mobile "100" #else "120" #end) { var fragShaderPath = Paths.fragShader(name); var vertShaderPath = Paths.vertShader(name); var fragCode = Assets.exists(fragShaderPath) ? Assets.getText(fragShaderPath) : null; diff --git a/source/funkin/backend/shaders/FunkinShader.hx b/source/funkin/backend/shaders/FunkinShader.hx index ef91d1285..9c8bcfb17 100644 --- a/source/funkin/backend/shaders/FunkinShader.hx +++ b/source/funkin/backend/shaders/FunkinShader.hx @@ -25,16 +25,16 @@ import openfl.display.ShaderInput; class FunkinShader extends FlxShader implements IHScriptCustomBehaviour { private static var __instanceFields = Type.getInstanceFields(FunkinShader); - public var glslVer:String = "120"; + public var glslVer:String = #if mobile "100" #else "120" #end; /** * Creates a new shader from the specified fragment and vertex source. * Accepts `#pragma header`. * @param frag Fragment source (pass `null` to use default) * @param vert Vertex source (pass `null` to use default) - * @param glslVer Version of GLSL to use (defaults to 120) + * @param glslVer Version of GLSL to use (defaults to 120 at desktop, 100 at mobile) */ - public override function new(frag:String, vert:String, glslVer:String = "120") { + public override function new(frag:String, vert:String, glslVer:String = #if mobile "100" #else "120" #end) { if (frag == null) frag = ShaderTemplates.defaultFragmentSource; if (vert == null) vert = ShaderTemplates.defaultVertexSource; this.glFragmentSource = frag; diff --git a/source/funkin/backend/system/Controls.hx b/source/funkin/backend/system/Controls.hx index a09da1c74..8e20d8533 100644 --- a/source/funkin/backend/system/Controls.hx +++ b/source/funkin/backend/system/Controls.hx @@ -9,6 +9,9 @@ import flixel.input.actions.FlxActionSet; import flixel.input.gamepad.FlxGamepadButton; import flixel.input.gamepad.FlxGamepadInputID; import flixel.input.keyboard.FlxKey; +import mobile.flixel.FlxButton as Button; +import mobile.objects.Hitbox; +import mobile.flixel.FlxVirtualPad; enum abstract Action(String) to String from String { var UP = "up"; @@ -419,6 +422,129 @@ class Controls extends FlxActionSet { super.update(); } + + public var trackedInputsUI:Array = []; + public var trackedInputsNOTES:Array = []; + + public function addButtonNOTES(action:FlxActionDigital, button:Button, state:FlxInputState):Void + { + if (button == null) + return; + + var input:FlxActionInputDigitalIFlxInput = new FlxActionInputDigitalIFlxInput(button, state); + trackedInputsNOTES.push(input); + action.add(input); + } + + public function addButtonUI(action:FlxActionDigital, button:Button, state:FlxInputState):Void + { + if (button == null) + return; + + var input:FlxActionInputDigitalIFlxInput = new FlxActionInputDigitalIFlxInput(button, state); + trackedInputsUI.push(input); + action.add(input); + } + + public function setHitBox(hitbox:Hitbox):Void + { + if (Hitbox == null) + return; + + inline forEachBound(Control.NOTE_LEFT, (action, state) -> addButtonNOTES(action, hitbox.buttonLeft, state)); + inline forEachBound(Control.NOTE_DOWN, (action, state) -> addButtonNOTES(action, hitbox.buttonDown, state)); + inline forEachBound(Control.NOTE_UP, (action, state) -> addButtonNOTES(action, hitbox.buttonUp, state)); + inline forEachBound(Control.NOTE_RIGHT, (action, state) -> addButtonNOTES(action, hitbox.buttonRight, state)); + } + + public function setVirtualPadUI(vpad:FlxVirtualPad, DPad:FlxDPadMode, Action:FlxActionMode):Void + { + if (vpad == null) + return; + + switch (DPad) + { + case UP_DOWN: + inline forEachBound(Control.UP, (action, state) -> addButtonUI(action, vpad.buttonUp, state)); + inline forEachBound(Control.DOWN, (action, state) -> addButtonUI(action, vpad.buttonDown, state)); + case LEFT_RIGHT: + inline forEachBound(Control.LEFT, (action, state) -> addButtonUI(action, vpad.buttonLeft, state)); + inline forEachBound(Control.RIGHT, (action, state) -> addButtonUI(action, vpad.buttonRight, state)); + case NONE: // do nothing + default: + inline forEachBound(Control.UP, (action, state) -> addButtonUI(action, vpad.buttonUp, state)); + inline forEachBound(Control.DOWN, (action, state) -> addButtonUI(action, vpad.buttonDown, state)); + inline forEachBound(Control.LEFT, (action, state) -> addButtonUI(action, vpad.buttonLeft, state)); + inline forEachBound(Control.RIGHT, (action, state) -> addButtonUI(action, vpad.buttonRight, state)); + } + + switch (Action) + { + case A: + inline forEachBound(Control.ACCEPT, (action, state) -> addButtonUI(action, vpad.buttonA, state)); + case B: + inline forEachBound(Control.BACK, (action, state) -> addButtonUI(action, vpad.buttonB, state)); + case P: + inline forEachBound(Control.PAUSE, (action, state) -> addButtonUI(action, vpad.buttonP, state)); + case NONE: // do nothing + default: + inline forEachBound(Control.ACCEPT, (action, state) -> addButtonUI(action, vpad.buttonA, state)); + inline forEachBound(Control.BACK, (action, state) -> addButtonUI(action, vpad.buttonB, state)); + } + } + + public function setVirtualPadNOTES(VirtualPad:FlxVirtualPad, DPad:FlxDPadMode, Action:FlxActionMode):Void + { + if (VirtualPad == null) + return; + + switch (DPad) + { + case UP_DOWN: + inline forEachBound(Control.NOTE_UP, (action, state) -> addButtonNOTES(action, VirtualPad.buttonUp, state)); + inline forEachBound(Control.NOTE_DOWN, (action, state) -> addButtonNOTES(action, VirtualPad.buttonDown, state)); + case LEFT_RIGHT: + inline forEachBound(Control.NOTE_LEFT, (action, state) -> addButtonNOTES(action, VirtualPad.buttonLeft, state)); + inline forEachBound(Control.NOTE_RIGHT, (action, state) -> addButtonNOTES(action, VirtualPad.buttonRight, state)); + case NONE: // do nothing + default: + inline forEachBound(Control.NOTE_UP, (action, state) -> addButtonNOTES(action, VirtualPad.buttonUp, state)); + inline forEachBound(Control.NOTE_DOWN, (action, state) -> addButtonNOTES(action, VirtualPad.buttonDown, state)); + inline forEachBound(Control.NOTE_LEFT, (action, state) -> addButtonNOTES(action, VirtualPad.buttonLeft, state)); + inline forEachBound(Control.NOTE_RIGHT, (action, state) -> addButtonNOTES(action, VirtualPad.buttonRight, state)); + } + + switch (Action) + { + case A: + inline forEachBound(Control.ACCEPT, (action, state) -> addButtonNOTES(action, VirtualPad.buttonA, state)); + case B: + inline forEachBound(Control.BACK, (action, state) -> addButtonNOTES(action, VirtualPad.buttonB, state)); + case P: + inline forEachBound(Control.PAUSE, (action, state) -> addButtonNOTES(action, VirtualPad.buttonP, state)); + case NONE: // do nothing + default: + inline forEachBound(Control.ACCEPT, (action, state) -> addButtonNOTES(action, VirtualPad.buttonA, state)); + inline forEachBound(Control.BACK, (action, state) -> addButtonNOTES(action, VirtualPad.buttonB, state)); + } + } + + public function removeVirtualControlsInput(Tinputs:Array):Void + { + for (action in this.digitalActions) + { + var i = action.inputs.length; + while (i-- > 0) + { + var x = Tinputs.length; + while (x-- > 0) + { + if (Tinputs[x] == action.inputs[i]) + action.remove(action.inputs[i]); + } + } + } + } // inline public function checkByName(name:Action):Bool diff --git a/source/funkin/backend/system/Main.hx b/source/funkin/backend/system/Main.hx index cad2266ec..85841bb79 100644 --- a/source/funkin/backend/system/Main.hx +++ b/source/funkin/backend/system/Main.hx @@ -16,6 +16,9 @@ import flixel.addons.transition.TransitionData; import flixel.math.FlxPoint; import flixel.math.FlxRect; import funkin.backend.system.modules.*; +#if mobile +import mobile.funkin.backend.system.MobileRatioScaleMode as FunkinRatioScaleMode; +#end #if ALLOW_MULTITHREADING import sys.thread.Thread; @@ -24,6 +27,7 @@ import sys.thread.Thread; import sys.io.File; #end import funkin.backend.assets.ModsFolder; +import lime.system.System as LimeSystem; class Main extends Sprite { @@ -38,9 +42,7 @@ class Main extends Sprite public static var noTerminalColor:Bool = false; public static var scaleMode:FunkinRatioScaleMode; - #if !mobile public static var framerateSprite:funkin.backend.system.framerate.Framerate; - #end var gameWidth:Int = 1280; // Width of the game in pixels (might be less / more in actual pixels). var gameHeight:Int = 720; // Height of the game in pixels (might be less / more in actual pixels). @@ -63,12 +65,24 @@ class Main extends Sprite instance = this; + #if mobile + #if android + SUtil.doPermissionsShit(); + #end + Sys.setCwd(SUtil.getStorageDirectory(false)); + #end + CrashHandler.init(); + #if !html5 framerateSprite = new funkin.backend.system.framerate.Framerate(); #end + addChild(game = new FunkinGame(gameWidth, gameHeight, MainState, Options.framerate, Options.framerate, skipSplash, startFullscreen)); - #if (!mobile && !web) - addChild(framerateSprite = new funkin.backend.system.framerate.Framerate()); + #if android FlxG.android.preventDefaultKeys = [BACK]; #end + + #if !html5 + addChild(framerateSprite); + FlxG.stage.window.onResize.add((w:Int, h:Int) -> framerateSprite.setScale()); SystemInfo.init(); #end } @@ -127,12 +141,12 @@ class Main extends Sprite #if (sys && TEST_BUILD) trace("Used cne test / cne build. Switching into source assets."); #if MOD_SUPPORT - ModsFolder.modsPath = './${pathBack}mods/'; - ModsFolder.addonsPath = './${pathBack}addons/'; + ModsFolder.modsPath = Sys.getCwd() + '${pathBack}mods/'; + ModsFolder.addonsPath = Sys.getCwd() + '${pathBack}addons/'; #end - Paths.assetsTree.__defaultLibraries.push(ModsFolder.loadLibraryFromFolder('assets', './${pathBack}assets/', true)); + Paths.assetsTree.__defaultLibraries.push(ModsFolder.loadLibraryFromFolder('assets', Sys.getCwd() + '${pathBack}assets/', true)); #elseif USE_ADAPTED_ASSETS - Paths.assetsTree.__defaultLibraries.push(ModsFolder.loadLibraryFromFolder('assets', './assets/', true)); + Paths.assetsTree.__defaultLibraries.push(ModsFolder.loadLibraryFromFolder('assets', Sys.getCwd() + 'assets/', true)); #end @@ -152,10 +166,11 @@ class Main extends Sprite Conductor.init(); AudioSwitchFix.init(); EventManager.init(); + FlxG.signals.preStateSwitch.add(onStateSwitch); FlxG.signals.postStateSwitch.add(onStateSwitchPost); - FlxG.mouse.useSystemCursor = true; + FlxG.mouse.useSystemCursor = !MobileControls.mobileC; ModsFolder.init(); #if MOD_SUPPORT @@ -163,6 +178,9 @@ class Main extends Sprite #end initTransition(); + #if mobile + LimeSystem.allowScreenTimeout = Options.screenTimeOut; + #end } public static function refreshAssets() { diff --git a/source/funkin/backend/system/MainState.hx b/source/funkin/backend/system/MainState.hx index 14c40aff8..f5f078f6d 100644 --- a/source/funkin/backend/system/MainState.hx +++ b/source/funkin/backend/system/MainState.hx @@ -8,6 +8,9 @@ import funkin.menus.TitleState; import funkin.menus.BetaWarningState; import funkin.backend.chart.EventsData; import flixel.FlxState; +#if mobile +import mobile.funkin.backend.system.CopyState; +#end /** * Simple state used for loading the game @@ -17,12 +20,22 @@ class MainState extends FlxState { public static var betaWarningShown:Bool = false; public override function create() { super.create(); + funkin.backend.system.Main.framerateSprite.setScale(); if (!initiated) + { Main.loadGameSettings(); + #if mobile + if (!CopyState.checkExistingFiles()) + { + FlxG.switchState(new CopyState()); + return; + } + #end + } initiated = true; #if sys - CoolUtil.deleteFolder('./.temp/'); // delete temp folder + CoolUtil.deleteFolder('.temp/'); // delete temp folder #end Options.save(); diff --git a/source/funkin/backend/system/framerate/Framerate.hx b/source/funkin/backend/system/framerate/Framerate.hx index 88680e89d..20f307e3c 100644 --- a/source/funkin/backend/system/framerate/Framerate.hx +++ b/source/funkin/backend/system/framerate/Framerate.hx @@ -9,6 +9,7 @@ import openfl.display.Sprite; import openfl.text.TextField; import openfl.text.TextFormat; import openfl.ui.Keyboard; +import flixel.util.FlxTimer; class Framerate extends Sprite { public static var instance:Framerate; @@ -43,6 +44,11 @@ class Framerate extends Sprite { return __bitmap; } + #if mobile + #if android public var presses:Int = 0; #end + public var sillyTimer:FlxTimer = new FlxTimer(); + #end + public function new() { super(); if (instance != null) throw "Cannot create another instance"; @@ -101,13 +107,37 @@ class Framerate extends Sprite { public override function __enterFrame(t:Int) { alpha = CoolUtil.fpsLerp(alpha, debugMode > 0 ? 1 : 0, 0.5); debugAlpha = CoolUtil.fpsLerp(debugAlpha, debugMode > 1 ? 1 : 0, 0.5); + #if android + if(FlxG.android.justReleased.BACK){ + sillyTimer.cancel(); + ++presses; + if(presses >= 3){ + debugMode = (debugMode + 1) % 3; + presses = 0; + return; + } + sillyTimer.start(0.3, (tmr:FlxTimer) -> presses = 0); + } + #elseif ios + for(camera in FlxG.cameras.list) { + var pos = FlxG.mouse.getScreenPosition(camera); + if(posx >= 0 && posx <= 80 && posy >= 0 && posy <= 60) { + if(FlxG.mouse.justPressed) + sillyTimer.start(0.4, (tmr:FlxTimer) -> debugMode = (debugMode + 1) % 3); + + if(FlxG.mouse.justReleased) + sillyTimer.cancel(); + } else if(sillyTimer.active && !sillyTimer.finished) + sillyTimer.cancel(); + } + #end if (alpha < 0.05) return; super.__enterFrame(t); bgSprite.alpha = debugAlpha * 0.5; - x = 10 + offset.x; - y = 2 + offset.y; + x = #if mobile FlxG.game.x + #end 10 + offset.x; + y = #if mobile FlxG.game.y + #end 2 + offset.y; var width = Math.max(fpsCounter.width, #if SHOW_BUILD_ON_FPS Math.max(memoryCounter.width, codenameBuildField.width) #else memoryCounter.width #end) + (x*2); var height = #if SHOW_BUILD_ON_FPS codenameBuildField.y + codenameBuildField.height #else memoryCounter.y + memoryCounter.height #end; @@ -132,4 +162,10 @@ class Framerate extends Sprite { y = c.y + c.height + 4; } } + + public inline function setScale(?scale:Float){ + if(scale == null) + scale = Math.min(FlxG.stage.window.width / FlxG.width, FlxG.stage.window.height / FlxG.height); + scaleX = scaleY = #if android (scale > 1 ? scale : 1) #else (scale < 1 ? scale : 1) #end; + } } \ No newline at end of file diff --git a/source/funkin/backend/system/framerate/SystemInfo.hx b/source/funkin/backend/system/framerate/SystemInfo.hx index 0d2bc73a5..8fa383861 100644 --- a/source/funkin/backend/system/framerate/SystemInfo.hx +++ b/source/funkin/backend/system/framerate/SystemInfo.hx @@ -3,9 +3,22 @@ package funkin.backend.system.framerate; import funkin.backend.utils.native.HiddenProcess; import funkin.backend.utils.MemoryUtil; import funkin.backend.system.Logs; +#if android +import android.os.Build; +import android.os.Build.VERSION; +#end using StringTools; +#if cpp +#if windows +@:cppFileCode('#include ') +#elseif (mac || ios) +@:cppFileCode('#include ') +#else +@:headerInclude('sys/utsname.h') +#end +#end class SystemInfo extends FramerateCategory { public static var osInfo:String = "Unknown"; public static var gpuName:String = "Unknown"; @@ -62,7 +75,7 @@ class SystemInfo extends FramerateCategory { if (process.exitCode() != 0) throw 'Could not fetch CPU information'; cpuName = process.stdout.readAll().toString().trim().split("\n")[1].trim(); - #elseif mac + #elseif (mac || ios) var process = new HiddenProcess("sysctl -a | grep brand_string"); // Somehow this isnt able to use the args but it still works if (process.exitCode() != 0) throw 'Could not fetch CPU information'; @@ -77,6 +90,8 @@ class SystemInfo extends FramerateCategory { break; } } + #elseif android + cpuName = (VERSION.SDK_INT >= VERSION_CODES.S) ? Build.SOC_MODEL : Build.HARDWARE; #end } catch (e) { Logs.trace('Unable to grab CPU Name: $e', ERROR, RED); @@ -116,9 +131,9 @@ class SystemInfo extends FramerateCategory { } static function formatSysInfo() { - __formattedSysText = ""; + __formattedSysText = #if android 'Device: ${Build.BRAND.charAt(0).toUpperCase() + Build.BRAND.substring(1)} ${Build.MODEL} (${Build.BOARD})\n' #else "" #end; if (osInfo != "Unknown") __formattedSysText += 'System: $osInfo'; - if (cpuName != "Unknown") __formattedSysText += '\nCPU: $cpuName ${openfl.system.Capabilities.cpuArchitecture} ${(openfl.system.Capabilities.supports64BitProcesses ? '64-Bit' : '32-Bit')}'; + if (cpuName != "Unknown") __formattedSysText += '\nCPU: $cpuName ${getCPUArch()}'; if (gpuName != cpuName || vRAM != "Unknown") { var gpuNameKnown = gpuName != "Unknown" && gpuName != cpuName; var vramKnown = vRAM != "Unknown"; @@ -146,4 +161,44 @@ class SystemInfo extends FramerateCategory { this.text.text = _text; super.__enterFrame(t); } + + #if windows + @:functionCode(' + SYSTEM_INFO osInfo; + + GetSystemInfo(&osInfo); + + switch(osInfo.wProcessorArchitecture) + { + case 9: + return ::String("x86_64"); + case 5: + return ::String("ARM"); + case 12: + return ::String("ARM64"); + case 6: + return ::String("IA-64"); + case 0: + return ::String("x86"); + default: + return ::String("Unknown"); + } + ') + #elseif (mac || ios) + @:functionCode(' + const NXArchInfo *archInfo = NXGetLocalArchInfo(); + return ::String(archInfo == NULL ? "Unknown" : archInfo->name); + ') + #elseif cpp + @:functionCode(' + struct utsname osInfo{}; + uname(&osInfo); + return ::String(osInfo.machine); + ') + #end + @:noCompletion + private static function getCPUArch():String + { + return "Unknown"; + } } \ No newline at end of file diff --git a/source/funkin/backend/system/modules/CrashHandler.hx b/source/funkin/backend/system/modules/CrashHandler.hx index 19c183165..57c44f75a 100644 --- a/source/funkin/backend/system/modules/CrashHandler.hx +++ b/source/funkin/backend/system/modules/CrashHandler.hx @@ -1,17 +1,18 @@ package funkin.backend.system.modules; -import lime.system.System; -import funkin.backend.utils.NativeAPI; -import openfl.Lib; import openfl.events.UncaughtErrorEvent; import openfl.events.ErrorEvent; import openfl.errors.Error; -import openfl.events.UncaughtErrorEvent; -import haxe.CallStack; +import lime.system.System as LimeSystem; +import haxe.io.Path; +#if sys +import sys.FileSystem; +import sys.io.File; +#end class CrashHandler { - public static function init() { - Lib.current.loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, onUncaughtError); + public static function init():Void { + openfl.Lib.current.loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, onUncaughtError); #if cpp untyped __global__.__hxcpp_set_critical_error_handler(onError); #elseif hl @@ -19,7 +20,11 @@ class CrashHandler { #end } - public static function onUncaughtError(e:UncaughtErrorEvent) { + private static function onUncaughtError(e:UncaughtErrorEvent):Void { + e.preventDefault(); + e.stopPropagation(); + e.stopImmediatePropagation(); + var m:String = e.error; if (Std.isOfType(e.error, Error)) { var err = cast(e.error, Error); @@ -28,40 +33,52 @@ class CrashHandler { var err = cast(e.error, ErrorEvent); m = '${err.text}'; } - var stack = CallStack.exceptionStack(); - var stackLabel:String = ""; + var stack = haxe.CallStack.exceptionStack(); + var stackBuffer = new StringBuf(); for(e in stack) { switch(e) { - case CFunction: stackLabel += "Non-Haxe (C) Function"; - case Module(c): stackLabel += 'Module ${c}'; + case CFunction: stackBuffer.add("Non-Haxe (C) Function\n"); + case Module(c): stackBuffer.add('Module ${c}\n'); case FilePos(parent, file, line, col): switch(parent) { case Method(cla, func): - stackLabel += '(${file}) ${cla.split(".").last()}.$func() - line $line'; + stackBuffer.add('${Path.withoutExtension(file)}.$func() - line $line\n'); case _: - stackLabel += '(${file}) - line $line'; + stackBuffer.add('${file} - line $line\n'); } case LocalFunction(v): - stackLabel += 'Local Function ${v}'; + stackBuffer.add('Local Function ${v}\n'); case Method(cl, m): - stackLabel += '${cl} - ${m}'; + stackBuffer.add('${cl} - ${m}\n'); } - stackLabel += "\r\n"; } + var stackLabel = stackBuffer.toString(); + #if sys + try + { + if (!FileSystem.exists('crash')) + FileSystem.createDirectory('crash'); - e.preventDefault(); - e.stopPropagation(); - e.stopImmediatePropagation(); + File.saveContent('crash/' + Date.now().toString().replace(' ', '-').replace(':', "'") + '.txt', '$m\n$stackLabel'); + } + catch (e:haxe.Exception) + trace('Couldn\'t save error message. (${e.message})'); + #end - NativeAPI.showMessageBox("Codename Engine Crash Handler", 'Uncaught Error:$m\n\n$stackLabel', MSG_ERROR); - #if sys - Sys.exit(1); + NativeAPI.showMessageBox("Error!", '$m\n$stackLabel', MSG_ERROR); + + #if js + if (FlxG.sound.music != null) + FlxG.sound.music.stop(); + + js.Browser.window.location.reload(true); + #else + LimeSystem.exit(1); #end } #if (cpp || hl) - private static function onError(message:Dynamic):Void - { + private static function onError(message:Dynamic):Void { throw Std.string(message); } #end diff --git a/source/funkin/backend/system/updating/AsyncUpdater.hx b/source/funkin/backend/system/updating/AsyncUpdater.hx index af7cfff57..52821a73c 100644 --- a/source/funkin/backend/system/updating/AsyncUpdater.hx +++ b/source/funkin/backend/system/updating/AsyncUpdater.hx @@ -66,7 +66,7 @@ class AsyncUpdater { var reader = ZipUtil.openZip(path); progress.curZipProgress = new ZipProgress(); - ZipUtil.uncompressZip(reader, './', null, progress.curZipProgress); + ZipUtil.uncompressZip(reader, Sys.getCwd(), null, progress.curZipProgress); // FileSystem.deleteFile(path); } if (executableReplaced = FileSystem.exists('$path$executableName')) { diff --git a/source/funkin/backend/system/updating/UpdateScreen.hx b/source/funkin/backend/system/updating/UpdateScreen.hx index 323fda09c..c9555b383 100644 --- a/source/funkin/backend/system/updating/UpdateScreen.hx +++ b/source/funkin/backend/system/updating/UpdateScreen.hx @@ -121,7 +121,7 @@ class UpdateScreen extends MusicBeatState { #if windows // the executable has been replaced, restart the game entirely Sys.command('start /B ${AsyncUpdater.executableName}'); - #else + #elseif !mobile // We have to make the new executable allowed to execute // before we can execute it! Sys.command('chmod +x ./${AsyncUpdater.executableName} && ./${AsyncUpdater.executableName}'); diff --git a/source/funkin/backend/utils/MemoryUtil.hx b/source/funkin/backend/utils/MemoryUtil.hx index 6905d6b20..d40975c83 100644 --- a/source/funkin/backend/utils/MemoryUtil.hx +++ b/source/funkin/backend/utils/MemoryUtil.hx @@ -69,8 +69,12 @@ class MemoryUtil { return funkin.backend.utils.native.Windows.getTotalRam(); #elseif mac return funkin.backend.utils.native.Mac.getTotalRam(); + #elseif ios + return funkin.backend.utils.native.IOS.getTotalRam(); #elseif linux return funkin.backend.utils.native.Linux.getTotalRam(); + #elseif android + return funkin.backend.utils.native.Android.getTotalRam(); #else return 0; #end @@ -124,7 +128,7 @@ class MemoryUtil { var process = new HiddenProcess("wmic", ["memorychip", "get", "SMBIOSMemoryType"]); if (process.exitCode() == 0) memoryOutput = Std.int(Std.parseFloat(process.stdout.readAll().toString().trim().split("\n")[1])); if (memoryOutput != -1) return memoryMap[memoryOutput]; - #elseif mac + #elseif (mac || ios) var process = new HiddenProcess("system_profiler", ["SPMemoryDataType"]); var reg = ~/Type: (.+)/; reg.match(process.stdout.readAll().toString()); @@ -138,6 +142,8 @@ class MemoryUtil { return line.substring("Type:".length).trim(); } } + #elseif android + // MTODO: Do get mem type for android smh? #end return "Unknown"; } diff --git a/source/funkin/backend/utils/NativeAPI.hx b/source/funkin/backend/utils/NativeAPI.hx index 78f0b38de..d5fabb52b 100644 --- a/source/funkin/backend/utils/NativeAPI.hx +++ b/source/funkin/backend/utils/NativeAPI.hx @@ -96,6 +96,10 @@ class NativeAPI { public static function showMessageBox(caption:String, message:String, icon:MessageBoxIcon = MSG_WARNING) { #if windows Windows.showMessageBox(caption, message, icon); + #elseif (ios || iphonesim || web) + trace('$caption - $message'); + #elseif android + android.Tools.showAlertDialog(caption, message, {name: "OK", func: null}, null); #else lime.app.Application.current.window.alert(message, caption); #end diff --git a/source/funkin/backend/utils/ZipUtil.hx b/source/funkin/backend/utils/ZipUtil.hx index eef06a6d7..03358a5ee 100644 --- a/source/funkin/backend/utils/ZipUtil.hx +++ b/source/funkin/backend/utils/ZipUtil.hx @@ -21,7 +21,7 @@ import sys.thread.Thread; using StringTools; // import ZipUtils; ZipUtils.uncompressZip(ZipUtils.openZip("E:\\Desktop\\test\\termination lua.ycemod"), "E:\\Desktop\\test\\uncompressed\\"); -// import ZipUtils; var e = ZipUtils.createZipFile("gjnsdghs.ycemod"); ZipUtils.writeFolderToZip(e, "./mods/Friday Night Funkin'/", "Friday Night Funkin'/"); e.flush(); e.close(); +// import ZipUtils; var e = ZipUtils.createZipFile("gjnsdghs.ycemod"); ZipUtils.writeFolderToZip(e, Sys.getCwd() + "mods/Friday Night Funkin'/", "Friday Night Funkin'/"); e.flush(); e.close(); class ZipUtil { public static var bannedNames:Array = [".git", ".gitignore", ".github", ".vscode", ".gitattributes", "readme.txt"]; diff --git a/source/funkin/backend/utils/native/Android.hx b/source/funkin/backend/utils/native/Android.hx new file mode 100644 index 000000000..4ba180f7e --- /dev/null +++ b/source/funkin/backend/utils/native/Android.hx @@ -0,0 +1,31 @@ +package funkin.backend.utils.native; + +#if android +class Android +{ + @:functionCode(' + FILE *meminfo = fopen("/proc/meminfo", "r"); + + if(meminfo == NULL) + return -1; + + char line[256]; + while(fgets(line, sizeof(line), meminfo)) + { + int ram; + if(sscanf(line, "MemTotal: %d kB", &ram) == 1) + { + fclose(meminfo); + return (ram / 1024); + } + } + + fclose(meminfo); + return -1; + ') + public static function getTotalRam():Float + { + return 0; + } +} +#end diff --git a/source/funkin/backend/utils/native/IOS.hx b/source/funkin/backend/utils/native/IOS.hx new file mode 100644 index 000000000..6f5c84962 --- /dev/null +++ b/source/funkin/backend/utils/native/IOS.hx @@ -0,0 +1,21 @@ +package funkin.backend.utils.native; + +#if ios +@:cppFileCode("#include ") +class IOS { + @:functionCode(' + int mib [] = { CTL_HW, HW_MEMSIZE }; + int64_t value = 0; + size_t length = sizeof(value); + + if(-1 == sysctl(mib, 2, &value, &length, NULL, 0)) + return -1; // An error occurred + + return value / 1024 / 1024; + ') + public static function getTotalRam():Float + { + return 0; + } +} +#end diff --git a/source/funkin/editors/DebugOptions.hx b/source/funkin/editors/DebugOptions.hx index 8dcfeda7d..d7ebdd493 100644 --- a/source/funkin/editors/DebugOptions.hx +++ b/source/funkin/editors/DebugOptions.hx @@ -26,7 +26,7 @@ class DebugOptions extends TreeMenu { class DebugOptionsScreen extends OptionsScreen { public override function new() { - super("Debug Options", "Use this menu to change debug options."); + super("Debug Options", "Use this menu to change debug options.", null, 'LEFT_FULL', 'A_B'); #if windows add(new TextOption( "Show Console", diff --git a/source/funkin/editors/EditorPicker.hx b/source/funkin/editors/EditorPicker.hx index 7056305f2..64a8dc3df 100644 --- a/source/funkin/editors/EditorPicker.hx +++ b/source/funkin/editors/EditorPicker.hx @@ -71,7 +71,9 @@ class EditorPicker extends MusicBeatSubstate { } sprites[0].selected = true; - FlxG.mouse.getScreenPosition(subCam, oldMousePos); + if (!MobileControls.mobileC) FlxG.mouse.getScreenPosition(subCam, oldMousePos); + + addVirtualPad('UP_DOWN', 'A_B'); } public override function update(elapsed:Float) { @@ -86,14 +88,14 @@ class EditorPicker extends MusicBeatSubstate { } changeSelection(-FlxG.mouse.wheel + (controls.UP_P ? -1 : 0) + (controls.DOWN_P ? 1 : 0)); - FlxG.mouse.getScreenPosition(subCam, curMousePos); - if (curMousePos.x != oldMousePos.x || curMousePos.y != oldMousePos.y) { + if (!MobileControls.mobileC) FlxG.mouse.getScreenPosition(subCam, curMousePos); + if (!MobileControls.mobileC && curMousePos.x != oldMousePos.x || curMousePos.y != oldMousePos.y) { oldMousePos.set(curMousePos.x, curMousePos.y); curSelected = -1; changeSelection(Std.int(curMousePos.y / optionHeight)+1); } - if (controls.ACCEPT || FlxG.mouse.justReleased) { + if (controls.ACCEPT || !MobileControls.mobileC && FlxG.mouse.justReleased) { if (options[curSelected].state != null) { selected = true; CoolUtil.playMenuSFX(CONFIRM); diff --git a/source/funkin/editors/SaveSubstate.hx b/source/funkin/editors/SaveSubstate.hx index 7202cf373..219b6a365 100644 --- a/source/funkin/editors/SaveSubstate.hx +++ b/source/funkin/editors/SaveSubstate.hx @@ -26,6 +26,10 @@ class SaveSubstate extends MusicBeatSubstate { public override function create() { super.create(); + #if mobile + mobile.funkin.backend.utils.SUtil.saveContent(options.defaultSaveFile.replace(options.saveExt, ''), options.saveExt, data); + close(); + #else var fileDialog = new FileDialog(); fileDialog.onCancel.add(function() close()); fileDialog.onSelect.add(function(str) { @@ -33,6 +37,7 @@ class SaveSubstate extends MusicBeatSubstate { close(); }); fileDialog.browse(SAVE, options.saveExt.getDefault(Path.extension(options.defaultSaveFile)), options.defaultSaveFile); + #end } public override function update(elapsed:Float) { diff --git a/source/funkin/editors/UIDebugState.hx b/source/funkin/editors/UIDebugState.hx index dd74c90ef..f59611f79 100644 --- a/source/funkin/editors/UIDebugState.hx +++ b/source/funkin/editors/UIDebugState.hx @@ -7,7 +7,8 @@ class UIDebugState extends UIState { public override function create() { super.create(); - FlxG.mouse.useSystemCursor = FlxG.mouse.visible = true; + FlxG.mouse.useSystemCursor = !MobileControls.mobileC; + FlxG.mouse.visible = true; var bg = new FlxSprite().makeSolid(FlxG.width, FlxG.height, 0xFF444444); bg.updateHitbox(); diff --git a/source/funkin/editors/character/CharacterEditor.hx b/source/funkin/editors/character/CharacterEditor.hx index 95da49893..933b9855d 100644 --- a/source/funkin/editors/character/CharacterEditor.hx +++ b/source/funkin/editors/character/CharacterEditor.hx @@ -296,7 +296,7 @@ class CharacterEditor extends UIState { closeCurrentContextMenu(); openContextMenu(topMenu[2].childs); } - if (FlxG.mouse.pressed) { + if (!MobileControls.mobileC && FlxG.mouse.pressed) { nextScroll.set(nextScroll.x - FlxG.mouse.deltaScreenX, nextScroll.y - FlxG.mouse.deltaScreenY); currentCursor = HAND; } else diff --git a/source/funkin/editors/character/CharacterSelection.hx b/source/funkin/editors/character/CharacterSelection.hx index 817acf294..d79b4d150 100644 --- a/source/funkin/editors/character/CharacterSelection.hx +++ b/source/funkin/editors/character/CharacterSelection.hx @@ -18,11 +18,19 @@ class CharacterSelection extends EditorTreeMenu var modsList:Array = Character.getList(true); + final button:String = MobileControls.mobileC ? 'A' : 'ACCEPT'; + var list:Array = [ for (char in (modsList.length == 0 ? Character.getList(false) : modsList)) - new IconOption(char, "Press ACCEPT to edit this character.", Character.getIconFromCharName(char), + new IconOption(char, "Press " + button + " to edit this character.", Character.getIconFromCharName(char), function() { + #if mobile + openSubState(new UIWarningSubstate("CharacterEditor: Not Supported!", "This feature isnt supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Mobile Porting Team", [ + {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} + ])); + #else FlxG.switchState(new CharacterEditor(char)); + #end }) ]; @@ -32,7 +40,7 @@ class CharacterSelection extends EditorTreeMenu ])); })); - main = new OptionsScreen("Character Editor", "Select a character to edit", list); + main = new OptionsScreen("Character Editor", "Select a character to edit", list, 'UP_DOWN', 'A'); DiscordUtil.call("onEditorTreeLoaded", ["Character Editor"]); } diff --git a/source/funkin/editors/charter/CharterSelection.hx b/source/funkin/editors/charter/CharterSelection.hx index 6fd97bdcd..331539a7d 100644 --- a/source/funkin/editors/charter/CharterSelection.hx +++ b/source/funkin/editors/charter/CharterSelection.hx @@ -16,6 +16,7 @@ using StringTools; class CharterSelection extends EditorTreeMenu { public var freeplayList:FreeplaySonglist; public var curSong:ChartMetaData; + private final button:String = MobileControls.mobileC ? 'A' : 'ACCEPT'; public override function create() { bgType = "charter"; @@ -26,26 +27,44 @@ class CharterSelection extends EditorTreeMenu { freeplayList = FreeplaySonglist.get(false); var list:Array = [ - for(s in freeplayList.songs) new EditorIconOption(s.name, "Press ACCEPT to choose a difficulty to edit.", s.icon, function() { + for(s in freeplayList.songs) new EditorIconOption(s.name, "Press " + button + " to choose a difficulty to edit.", s.icon, function() { curSong = s; var list:Array = [ for(d in s.difficulties) if (d != "") - new TextOption(d, "Press ACCEPT to edit the chart for the selected difficulty", function() { + new TextOption(d, "Press " + button + " to edit the chart for the selected difficulty", function() { + #if mobile + openSubState(new UIWarningSubstate("Charter: Not Supported!", "This feature isnt supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Mobile Porting Team", [ + {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} + ])); + #else FlxG.switchState(new Charter(s.name, d)); + #end }) ]; list.push(new NewOption("New Difficulty", "New Difficulty", function() { + #if mobile + openSubState(new UIWarningSubstate("New Difficulty: Not Supported!", "This feature isnt supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Mobile Porting Team", [ + {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} + ])); + #else FlxG.state.openSubState(new ChartCreationScreen(saveChart)); + #end })); - optionsTree.add(new OptionsScreen(s.name, "Select a difficulty to continue.", list)); + optionsTree.add(new OptionsScreen(s.name, "Select a difficulty to continue.", list, 'UP_DOWN', 'A_B')); }, s.parsedColor.getDefault(0xFFFFFFFF)) ]; list.insert(0, new NewOption("New Song", "New Song", function() { + #if mobile + openSubState(new UIWarningSubstate("New Song: Not Supported!", "This feature isnt supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Mobile Porting Team", [ + {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} + ])); + #else FlxG.state.openSubState(new SongCreationScreen(saveSong)); + #end })); - main = new OptionsScreen("Chart Editor", "Select a song to modify the charts from.", list); + main = new OptionsScreen("Chart Editor", "Select a song to modify the charts from.", list, 'UP_DOWN', 'A'); DiscordUtil.call("onEditorTreeLoaded", ["Chart Editor"]); } @@ -114,16 +133,28 @@ class CharterSelection extends EditorTreeMenu { if (creation.voicesBytes != null) sys.io.File.saveBytes('$songFolder/song/Voices.${Paths.SOUND_EXT}', creation.voicesBytes); #end - var option = new EditorIconOption(creation.meta.name, "Press ACCEPT to choose a difficulty to edit.", creation.meta.icon, function() { + var option = new EditorIconOption(creation.meta.name, "Press " + button + " to choose a difficulty to edit.", creation.meta.icon, function() { curSong = creation.meta; var list:Array = [ for(d in creation.meta.difficulties) - if (d != "") new TextOption(d, "Press ACCEPT to edit the chart for the selected difficulty", function() { + if (d != "") new TextOption(d, "Press " + button + " to edit the chart for the selected difficulty", function() { + #if mobile + openSubState(new UIWarningSubstate("Charter: Not Supported!", "This feature isnt supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Mobile Porting Team", [ + {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} + ])); + #else FlxG.switchState(new Charter(creation.meta.name, d)); + #end }) ]; list.push(new NewOption("New Difficulty", "New Difficulty", function() { + #if mobile + openSubState(new UIWarningSubstate("New Difficulty: Not Supported!", "This feature isnt supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Mobile Porting Team", [ + {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} + ])); + #else FlxG.state.openSubState(new ChartCreationScreen(saveChart)); + #end })); optionsTree.insert(1, new OptionsScreen(creation.meta.name, "Select a difficulty to continue.", list)); }, creation.meta.parsedColor.getDefault(0xFFFFFFFF)); @@ -151,8 +182,14 @@ class CharterSelection extends EditorTreeMenu { // Add to List curSong.difficulties.push(name); - var option = new TextOption(name, "Press ACCEPT to edit the chart for the selected difficulty", function() { + var option = new TextOption(name, "Press " + button + " to edit the chart for the selected difficulty", function() { + #if mobile + openSubState(new UIWarningSubstate("Charter: Not Supported!", "This feature isnt supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Mobile Porting Team", [ + {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} + ])); + #else FlxG.switchState(new Charter(curSong.name, name)); + #end }); optionsTree.members[optionsTree.members.length-1].insert(optionsTree.members[optionsTree.members.length-1].length-1, option); diff --git a/source/funkin/editors/ui/UITextBox.hx b/source/funkin/editors/ui/UITextBox.hx index 3aa97fd27..a7aa609cd 100644 --- a/source/funkin/editors/ui/UITextBox.hx +++ b/source/funkin/editors/ui/UITextBox.hx @@ -72,6 +72,7 @@ class UITextBox extends UISliceSprite implements IUIFocusable { framesOffset = (selected ? 18 : (hovered ? 9 : 0)); @:privateAccess { if (selected) { + FlxG.stage.window.textInputEnabled = true; __wasFocused = true; caretSpr.alpha = (FlxG.game.ticks % 666) >= 333 ? 1 : 0; diff --git a/source/funkin/game/GameOverSubstate.hx b/source/funkin/game/GameOverSubstate.hx index 66b379681..fa44e5e54 100644 --- a/source/funkin/game/GameOverSubstate.hx +++ b/source/funkin/game/GameOverSubstate.hx @@ -89,6 +89,9 @@ class GameOverSubstate extends MusicBeatSubstate DiscordUtil.call("onGameOver", []); gameoverScript.call("postCreate"); + + addVirtualPad('NONE', 'A_B'); + addVirtualPadCamera(false); } override function update(elapsed:Float) diff --git a/source/funkin/game/PlayState.hx b/source/funkin/game/PlayState.hx index 4e1257241..042daf43a 100644 --- a/source/funkin/game/PlayState.hx +++ b/source/funkin/game/PlayState.hx @@ -536,6 +536,7 @@ class PlayState extends MusicBeatState @:dox(hide) override public function create() { + #if mobile lime.system.System.allowScreenTimeout = false; #end Note.__customNoteTypeExists = []; // SCRIPTING & DATA INITIALIZATION #if REGION @@ -759,6 +760,12 @@ class PlayState extends MusicBeatState #end startingSong = true; + addMobileControls(); + mobileControls.visible = true; + #if !android + addVirtualPad('NONE', 'P'); + addVirtualPadCamera(false); + #end super.create(); @@ -958,6 +965,7 @@ class PlayState extends MusicBeatState public override function destroy() { scripts.call("destroy"); + #if mobile lime.system.System.allowScreenTimeout = Options.screenTimeOut; #end for(g in __cachedGraphics) g.useCount--; @:privateAccess @@ -1033,6 +1041,8 @@ class PlayState extends MusicBeatState { var event = scripts.event("onSubstateOpen", EventManager.get(StateEvent).recycle(SubState)); + #if mobile lime.system.System.allowScreenTimeout = Options.screenTimeOut; #end + if (!postCreated) MusicBeatState.skipTransIn = true; @@ -1058,6 +1068,7 @@ class PlayState extends MusicBeatState override function closeSubState() { var event = scripts.event("onSubstateClose", EventManager.get(StateEvent).recycle(subState)); + #if mobile lime.system.System.allowScreenTimeout = false; #end if (event.cancelled) return; if (paused) @@ -1237,7 +1248,7 @@ class PlayState extends MusicBeatState updateRatingStuff(); - if (controls.PAUSE && startedCountdown && canPause) + if (#if android FlxG.android.justReleased.BACK || #else virtualPad.buttonP.justPressed || #end controls.PAUSE && startedCountdown && canPause) pauseGame(); if (canAccessDebugMenus) { @@ -1440,6 +1451,7 @@ class PlayState extends MusicBeatState */ public function endSong():Void { + mobileControls.visible = false; scripts.call("onSongEnd"); canPause = false; inst.volume = 0; @@ -1481,6 +1493,7 @@ class PlayState extends MusicBeatState * Immediately switches to the next song, or goes back to the Story/Freeplay menu. */ public function nextSong() { + mobileControls.visible = false; if (isStoryMode) { campaignScore += songScore; diff --git a/source/funkin/game/cutscenes/DialogueCutscene.hx b/source/funkin/game/cutscenes/DialogueCutscene.hx index 656df6f24..8491946ff 100644 --- a/source/funkin/game/cutscenes/DialogueCutscene.hx +++ b/source/funkin/game/cutscenes/DialogueCutscene.hx @@ -126,7 +126,12 @@ class DialogueCutscene extends Cutscene { super.update(elapsed); dialogueScript.call("update", [elapsed]); - if(controls.ACCEPT) { + var justTouched:Bool = false; + for (touch in FlxG.touches.list) + if (touch.justPressed) + justTouched = true; + + if(justTouched || controls.ACCEPT) { if(dialogueBox.dialogueEnded) next(); else dialogueBox.text.skip(); } diff --git a/source/funkin/game/cutscenes/VideoCutscene.hx b/source/funkin/game/cutscenes/VideoCutscene.hx index de485450e..a6d7ef78b 100644 --- a/source/funkin/game/cutscenes/VideoCutscene.hx +++ b/source/funkin/game/cutscenes/VideoCutscene.hx @@ -92,7 +92,7 @@ class VideoCutscene extends Cutscene { // ZIP PATH: EXPORT // TODO: this but better and more ram friendly - localPath = './.temp/video-${curVideo++}.mp4'; + localPath = '.temp/video-${curVideo++}.mp4'; Main.execAsync(function() { File.saveBytes(localPath, Assets.getBytes(path)); videoReady = true; diff --git a/source/funkin/import.hx b/source/funkin/import.hx index eca238fd6..ae8943ee7 100644 --- a/source/funkin/import.hx +++ b/source/funkin/import.hx @@ -11,6 +11,9 @@ import funkin.options.Options; import funkin.game.PlayState; import funkin.backend.scripting.EventManager; +import mobile.funkin.backend.utils.SUtil; +import mobile.objects.MobileControls; + import openfl.utils.Assets; import flixel.FlxSprite; diff --git a/source/funkin/menus/BetaWarningState.hx b/source/funkin/menus/BetaWarningState.hx index 162014540..b1dafa072 100644 --- a/source/funkin/menus/BetaWarningState.hx +++ b/source/funkin/menus/BetaWarningState.hx @@ -19,7 +19,7 @@ class BetaWarningState extends MusicBeatState { disclaimer = new FunkinText(16, titleAlphabet.y + titleAlphabet.height + 10, FlxG.width - 32, "", 32); disclaimer.alignment = CENTER; - disclaimer.applyMarkup('This engine is still in a *${Main.releaseCycle}* state. That means *majority of the features* are either *buggy* or *non finished*. If you find any bugs, please report them to the Codename Engine GitHub.\n\nPress ENTER to continue', + disclaimer.applyMarkup('This engine is still in a *${Main.releaseCycle}* state. That means *majority of the features* are either *buggy* or *non finished*. If you find any bugs, please report them to the Codename Engine GitHub.\n\n${MobileControls.mobileC ? 'Tap Your Screen' : 'Press ENTER'} to continue', [ new FlxTextFormatMarkerPair(new FlxTextFormat(0xFFFF4444), "*") ] @@ -36,6 +36,22 @@ class BetaWarningState extends MusicBeatState { public override function update(elapsed:Float) { super.update(elapsed); + #if FLX_TOUCH + for (touch in FlxG.touches.list) + { + if (touch.justPressed && transitioning) { + FlxG.camera.stopFX(); FlxG.camera.visible = false; + goToTitle(); + } else if (touch.justPressed && !transitioning) { + transitioning = true; + CoolUtil.playMenuSFX(CONFIRM); + FlxG.camera.flash(FlxColor.WHITE, 1, function() { + FlxG.camera.fade(FlxColor.BLACK, 2.5, false, goToTitle); + }); + } + } + #end + if (controls.ACCEPT && transitioning) { FlxG.camera.stopFX(); FlxG.camera.visible = false; goToTitle(); diff --git a/source/funkin/menus/FreeplayState.hx b/source/funkin/menus/FreeplayState.hx index 7ca66b022..7bc8cfa98 100644 --- a/source/funkin/menus/FreeplayState.hx +++ b/source/funkin/menus/FreeplayState.hx @@ -108,6 +108,9 @@ class FreeplayState extends MusicBeatState curSelected = k; } } + + #if mobile if (funkin.backend.assets.ModsFolder.currentModFolder == null) for (song in songs) song.difficulties = ['EASY', 'NORMAL', 'HARD']; #end // mobile temporary fix + if (songs[curSelected] != null) { for(k=>diff in songs[curSelected].difficulties) { if (diff == Options.freeplayLastDifficulty) { @@ -172,6 +175,8 @@ class FreeplayState extends MusicBeatState changeCoopMode(0, true); interpColor = new FlxInterpolateColor(bg.color); + + addVirtualPad('LEFT_FULL', 'A_B_X_Y'); } #if PRELOAD_ALL @@ -218,7 +223,7 @@ class FreeplayState extends MusicBeatState if (canSelect) { changeSelection((controls.UP_P ? -1 : 0) + (controls.DOWN_P ? 1 : 0)); changeDiff((controls.LEFT_P ? -1 : 0) + (controls.RIGHT_P ? 1 : 0)); - changeCoopMode((FlxG.keys.justPressed.TAB ? 1 : 0)); + changeCoopMode(((virtualPad.buttonX.justPressed || FlxG.keys.justPressed.TAB) ? 1 : 0)); // putting it before so that its actually smooth updateOptionsAlpha(); } @@ -256,7 +261,7 @@ class FreeplayState extends MusicBeatState } #if sys - if (FlxG.keys.justPressed.EIGHT && Sys.args().contains("-livereload")) + if (virtualPad.buttonY.justPressed || FlxG.keys.justPressed.EIGHT && Sys.args().contains("-livereload")) convertChart(); #end @@ -286,7 +291,8 @@ class FreeplayState extends MusicBeatState public function select() { updateCoopModes(); - if (songs[curSelected].difficulties.length <= 0) return; + if (songs[curSelected].difficulties.length <= 0) + return; var event = event("onSelect", EventManager.get(FreeplaySongSelectEvent).recycle(songs[curSelected].name, songs[curSelected].difficulties[curDifficulty], __opponentMode, __coopMode)); @@ -346,11 +352,12 @@ class FreeplayState extends MusicBeatState /** * Array containing all labels for Co-Op / Opponent modes. */ - public var coopLabels:Array = [ - "[TAB] Solo", - "[TAB] Opponent Mode", - "[TAB] Co-Op Mode", - "[TAB] Co-Op Mode (Switched)" + public var coopLabels:Array = MobileControls.mobileC ? ['[X] Solo', '[X] Opponent Mode'] : + [ + '[TAB] Solo', + '[TAB] Opponent Mode', + '[TAB] Co-Op Mode', + '[TAB] Co-Op Mode (Switched)' ]; /** @@ -363,7 +370,13 @@ class FreeplayState extends MusicBeatState if (!songs[curSelected].coopAllowed && !songs[curSelected].opponentModeAllowed) return; var bothEnabled = songs[curSelected].coopAllowed && songs[curSelected].opponentModeAllowed; - var event = event("onChangeCoopMode", EventManager.get(MenuChangeEvent).recycle(curCoopMode, FlxMath.wrap(curCoopMode + change, 0, bothEnabled ? 3 : 1), change)); + var changeThingy:Int = -1; + if(MobileControls.mobileC) + changeThingy = FlxMath.wrap(curCoopMode + change, 0, 1); + else + changeThingy = FlxMath.wrap(curCoopMode + change, 0, bothEnabled ? 3 : 1); + + var event = event("onChangeCoopMode", EventManager.get(MenuChangeEvent).recycle(curCoopMode, changeThingy, change)); if (event.cancelled) return; diff --git a/source/funkin/menus/GitarooPause.hx b/source/funkin/menus/GitarooPause.hx index cff8aec9f..652736572 100644 --- a/source/funkin/menus/GitarooPause.hx +++ b/source/funkin/menus/GitarooPause.hx @@ -46,6 +46,8 @@ class GitarooPause extends MusicBeatState changeThing(); super.create(); + + addVirtualPad('LEFT_RIGHT', 'A'); } override function update(elapsed:Float) diff --git a/source/funkin/menus/MainMenuState.hx b/source/funkin/menus/MainMenuState.hx index 4d30a2621..a581f053c 100644 --- a/source/funkin/menus/MainMenuState.hx +++ b/source/funkin/menus/MainMenuState.hx @@ -12,6 +12,7 @@ import lime.app.Application; import funkin.backend.scripting.events.*; import funkin.options.OptionsMenu; +import mobile.funkin.menus.MobileControlSelectSubState; using StringTools; @@ -75,13 +76,16 @@ class MainMenuState extends MusicBeatState } FlxG.camera.follow(camFollow, null, 0.06); + var modsKey:String = MobileControls.mobileC ? "M" : controls.getKeyName(SWITCHMOD); - versionText = new FunkinText(5, FlxG.height - 2, 0, 'Codename Engine v${Application.current.meta.get('version')}\nCommit ${funkin.backend.system.macros.GitCommitMacro.commitNumber} (${funkin.backend.system.macros.GitCommitMacro.commitHash})\n[${controls.getKeyName(SWITCHMOD)}] Open Mods menu\n'); + versionText = new FunkinText(5, FlxG.height - 2, 0, 'Codename Engine v${Application.current.meta.get('version')}\nCommit ${funkin.backend.system.macros.GitCommitMacro.commitNumber} (${funkin.backend.system.macros.GitCommitMacro.commitHash})\n[$modsKey}] Open Mods menu\n'); versionText.y -= versionText.height; versionText.scrollFactor.set(); add(versionText); changeItem(); + + addVirtualPad('UP_DOWN', 'A_B_M_E'); } var selectedSomethin:Bool = false; @@ -95,7 +99,7 @@ class MainMenuState extends MusicBeatState if (!selectedSomethin) { if (canAccessDebugMenus) { - if (FlxG.keys.justPressed.SEVEN) { + if (FlxG.keys.justPressed.SEVEN || virtualPad.buttonE.justPressed) { persistentUpdate = false; persistentDraw = true; openSubState(new funkin.editors.EditorPicker()); @@ -119,7 +123,7 @@ class MainMenuState extends MusicBeatState FlxG.switchState(new TitleState()); #if MOD_SUPPORT - if (controls.SWITCHMOD) { + if (controls.SWITCHMOD || virtualPad.buttonM.justPressed) { openSubState(new ModSwitchMenu()); persistentUpdate = false; persistentDraw = true; @@ -141,6 +145,12 @@ class MainMenuState extends MusicBeatState }); } + override function closeSubState() { + super.closeSubState(); + removeVirtualPad(); + addVirtualPad('UP_DOWN', 'A_B_M_E'); + } + public override function switchTo(nextState:FlxState):Bool { try { menuItems.forEach(function(spr:FlxSprite) { diff --git a/source/funkin/menus/ModSwitchMenu.hx b/source/funkin/menus/ModSwitchMenu.hx index 1b23b9d2f..fcfc38da4 100644 --- a/source/funkin/menus/ModSwitchMenu.hx +++ b/source/funkin/menus/ModSwitchMenu.hx @@ -34,6 +34,8 @@ class ModSwitchMenu extends MusicBeatSubstate { } add(alphabets); changeSelection(0, true); + + addVirtualPad('UP_DOWN', 'A_B'); } public override function update(elapsed:Float) { diff --git a/source/funkin/menus/PauseSubState.hx b/source/funkin/menus/PauseSubState.hx index fb2326e5c..79e35c044 100644 --- a/source/funkin/menus/PauseSubState.hx +++ b/source/funkin/menus/PauseSubState.hx @@ -14,6 +14,7 @@ import funkin.options.keybinds.KeybindsOptions; import funkin.menus.StoryMenuState; import funkin.backend.system.Conductor; import funkin.backend.utils.FunkinParentDisabler; +import mobile.funkin.menus.MobileControlSelectSubState; class PauseSubState extends MusicBeatSubstate { @@ -108,6 +109,9 @@ class PauseSubState extends MusicBeatSubstate pauseScript.call("postCreate"); game.updateDiscordPresence(); + + addVirtualPad('UP_DOWN', 'A'); + addVirtualPadCamera(); } override function update(elapsed:Float) @@ -150,8 +154,9 @@ class PauseSubState extends MusicBeatSubstate game.registerSmoothTransition(); FlxG.resetState(); case "Change Controls": - persistentDraw = false; - openSubState(new KeybindsOptions()); + persistentUpdate = false; + removeVirtualPad(); + openSubState(MobileControls.mobileC ? new MobileControlSelectSubState() : new KeybindsOptions()); case "Change Options": FlxG.switchState(new OptionsMenu()); case "Exit to charter": @@ -187,6 +192,14 @@ class PauseSubState extends MusicBeatSubstate super.destroy(); } + override function closeSubState() { + persistentUpdate = true; + super.closeSubState(); + removeVirtualPad(); + addVirtualPad('UP_DOWN', 'A'); + addVirtualPadCamera(); + } + function changeSelection(change:Int = 0):Void { var event = EventManager.get(MenuChangeEvent).recycle(curSelected, FlxMath.wrap(curSelected + change, 0, menuItems.length-1), change, change != 0); diff --git a/source/funkin/menus/PlaytestingWarningSubstate.hx b/source/funkin/menus/PlaytestingWarningSubstate.hx index e366bf9f1..f9b5aa469 100644 --- a/source/funkin/menus/PlaytestingWarningSubstate.hx +++ b/source/funkin/menus/PlaytestingWarningSubstate.hx @@ -68,6 +68,8 @@ class PlaytestingWarningSubstate extends MusicBeatSubstate curSelected = options.length-1; changeSelection(0); + + addVirtualPad('LEFT_RIGHT', 'A'); } var sinner:Float = 0; diff --git a/source/funkin/menus/StoryMenuState.hx b/source/funkin/menus/StoryMenuState.hx index 27d700d7a..06d469921 100644 --- a/source/funkin/menus/StoryMenuState.hx +++ b/source/funkin/menus/StoryMenuState.hx @@ -118,6 +118,8 @@ class StoryMenuState extends MusicBeatState { DiscordUtil.call("onMenuLoaded", ["Story Menu"]); CoolUtil.playMenuSong(); + + addVirtualPad('LEFT_FULL', 'A_B'); } var __lastDifficultyTween:FlxTween; diff --git a/source/funkin/menus/TitleState.hx b/source/funkin/menus/TitleState.hx index 4aca30dbf..a6e11f518 100644 --- a/source/funkin/menus/TitleState.hx +++ b/source/funkin/menus/TitleState.hx @@ -119,17 +119,13 @@ class TitleState extends MusicBeatState { if (FlxG.keys.justPressed.F) FlxG.fullscreen = !FlxG.fullscreen; - var pressedEnter:Bool = FlxG.keys.justPressed.ENTER; + var pressedEnter:Bool = controls.ACCEPT; - #if mobile - for (touch in FlxG.touches.list) - { - if (touch.justPressed) - { - pressedEnter = true; - } + if (MobileControls.mobileC) { + for (touch in FlxG.touches.list) + if (touch.justPressed) + pressedEnter = true; } - #end var gamepad:FlxGamepad = FlxG.gamepads.lastActive; diff --git a/source/funkin/menus/credits/CreditsCodename.hx b/source/funkin/menus/credits/CreditsCodename.hx index 579360edf..08da585d7 100644 --- a/source/funkin/menus/credits/CreditsCodename.hx +++ b/source/funkin/menus/credits/CreditsCodename.hx @@ -17,7 +17,7 @@ class CreditsCodename extends funkin.options.OptionsScreen { public override function new() { - super("Codename Engine", "All the contributors of the engine! - Press RESET to update the list (One reset per 2 minutes)."); + super("Codename Engine", "All the contributors of the engine! - Press RESET to update the list (One reset per 2 minutes).", null, 'UP_DOWN', 'A_B'); tryUpdating(true); } diff --git a/source/funkin/menus/credits/CreditsMain.hx b/source/funkin/menus/credits/CreditsMain.hx index 847d2b647..02143bc10 100644 --- a/source/funkin/menus/credits/CreditsMain.hx +++ b/source/funkin/menus/credits/CreditsMain.hx @@ -42,7 +42,8 @@ class CreditsMain extends TreeMenu { CoolUtil.openURL("https://ninja-muffin24.itch.io/funkin"); })); - main = new OptionsScreen('Credits', 'The people who made this possible!', items); + main = new OptionsScreen('Credits', 'The people who made this possible!', items, 'UP_DOWN', 'A_B'); + super.create(); DiscordUtil.call("onMenuLoaded", ["Credits Menu"]); @@ -96,7 +97,7 @@ class CreditsMain extends TreeMenu { case "menu": credsMenus.push(new TextOption(name + " >", desc, function() { - optionsTree.add(new OptionsScreen(name, desc, parseCreditsFromXML(node, source))); + optionsTree.add(new OptionsScreen(name, desc, parseCreditsFromXML(node, source), 'UP_DOWN', 'A_B')); })); } } diff --git a/source/funkin/options/Options.hx b/source/funkin/options/Options.hx index a9bf72ac1..81b50db84 100644 --- a/source/funkin/options/Options.hx +++ b/source/funkin/options/Options.hx @@ -33,15 +33,25 @@ class Options public static var splashesEnabled:Bool = true; public static var hitWindow:Float = 250; public static var songOffset:Float = 0; - public static var framerate:Int = 120; - public static var gpuOnlyBitmaps:Bool = #if (mac || web) false #else true #end; // causes issues on mac and web + public static var framerate:Int = #if !mobile 120 #else 60 #end; + public static var gpuOnlyBitmaps:Bool = #if (mac || web || mobile) false #else true #end; // causes issues on mac, web and mobile public static var lastLoadedMod:String = null; + // mobile options + #if mobile + public static var screenTimeOut:Bool = false; + public static var wideScreen:Bool = false; + #end + public static var hideHitbox:Bool = false; + public static var hitboxType:String = 'gradient'; + public static var controlsAlpha:Float = FlxG.onMobile ? 0.6 : 0; + #if android public static var storageType:String = "EXTERNAL_DATA"; #end + /** * EDITORS SETTINGS */ - public static var intensiveBlur:Bool = true; + public static var intensiveBlur:Bool = #if mobile false #else true #end; public static var editorSFX:Bool = true; public static var editorPrettyPrint:Bool = false; public static var maxUndos:Int = 120; diff --git a/source/funkin/options/OptionsMenu.hx b/source/funkin/options/OptionsMenu.hx index 497bfd9b9..d36aef62b 100644 --- a/source/funkin/options/OptionsMenu.hx +++ b/source/funkin/options/OptionsMenu.hx @@ -5,6 +5,8 @@ import haxe.xml.Access; import funkin.options.type.*; import funkin.options.categories.*; import funkin.options.TreeMenu; +import haxe.ds.Map; +import mobile.flixel.FlxVirtualPad; class OptionsMenu extends TreeMenu { public static var mainOptions:Array = [ @@ -24,6 +26,11 @@ class OptionsMenu extends TreeMenu { desc: 'Change Appearance options such as Flashing menus...', state: AppearanceOptions }, + { + name: 'Mobile Options >', + desc: 'Change Options Related To Mobile & Mobile Controls', + state: MobileOptions + }, { name: 'Miscellaneous >', desc: 'Use this menu to reset save data or engine settings.', @@ -80,7 +87,8 @@ class OptionsMenu extends TreeMenu { main.add(o); } } - + addVirtualPad('UP_DOWN', 'A_B'); + addVirtualPadCamera(false); } public override function exit() { @@ -92,6 +100,7 @@ class OptionsMenu extends TreeMenu { /** * XML STUFF */ + var vpadMap:Map> = new Map(); public function parseOptionsFromXML(xml:Access):Array { var options:Array = []; @@ -136,8 +145,14 @@ class OptionsMenu extends TreeMenu { case "menu": options.push(new TextOption(name + " >", desc, function() { - optionsTree.add(new OptionsScreen(name, desc, parseOptionsFromXML(node))); + optionsTree.add(new OptionsScreen(name, desc, parseOptionsFromXML(node), vpadMap.exists(name) ? vpadMap.get(name)[0] : 'NONE', vpadMap.exists(name) ? vpadMap.get(name)[1] : 'NONE')); })); + case "virtualPad": + var arr = [ + node.getAtt("dpadMode") == null ? MusicBeatState.instance.virtualPad.curDPadMode.getName() : node.getAtt("dpadMode"), + node.getAtt("actionMode") == null ? MusicBeatState.instance.virtualPad.curActionMode.getName() : node.getAtt("actionMode") + ]; + vpadMap.set(node.getAtt("menuName"), arr); } } diff --git a/source/funkin/options/OptionsScreen.hx b/source/funkin/options/OptionsScreen.hx index 455808215..b25474792 100644 --- a/source/funkin/options/OptionsScreen.hx +++ b/source/funkin/options/OptionsScreen.hx @@ -1,6 +1,7 @@ package funkin.options; import funkin.options.type.OptionType; +import mobile.objects.MobileControls; class OptionsScreen extends FlxTypedSpriteGroup { public static var optionHeight:Float = 120; @@ -15,19 +16,30 @@ class OptionsScreen extends FlxTypedSpriteGroup { public var name:String; public var desc:String; - public function new(name:String, desc:String, ?options:Array) { + public var dpadMode:String = 'NONE'; + public var actionMode:String = 'NONE'; + public var prevVPadModes:Array = []; + + public function new(name:String, desc:String, ?options:Array, dpadMode:String = 'NONE', actionMode:String = 'NONE') { super(); this.name = name; this.desc = desc; if (options != null) for(o in options) add(o); + if(MusicBeatState.instance.virtualPad != null) + prevVPadModes = [MusicBeatState.instance.virtualPad.curDPadMode.getName(), MusicBeatState.instance.virtualPad.curActionMode.getName()]; + this.dpadMode = dpadMode; + this.actionMode = actionMode; + MusicBeatState.instance.removeVirtualPad(); + MusicBeatState.instance.addVirtualPad(dpadMode, actionMode); + MusicBeatState.instance.addVirtualPadCamera(false); } public override function update(elapsed:Float) { super.update(elapsed); var controls = PlayerSettings.solo.controls; - - changeSelection((controls.UP_P ? -1 : 0) + (controls.DOWN_P ? 1 : 0) - FlxG.mouse.wheel); + var wheel = FlxG.mouse.wheel; + changeSelection((controls.UP_P ? -1 : 0) + (controls.DOWN_P ? 1 : 0) - wheel); x = id * FlxG.width; for(k=>option in members) { if(option == null) continue; @@ -45,19 +57,24 @@ class OptionsScreen extends FlxTypedSpriteGroup { if (members.length > 0) { members[curSelected].selected = true; - if (controls.ACCEPT || FlxG.mouse.justReleased) + if (controls.ACCEPT || (FlxG.mouse.justReleased && !MobileControls.mobileC)) members[curSelected].onSelect(); if (controls.LEFT_P) members[curSelected].onChangeSelection(-1); if (controls.RIGHT_P) members[curSelected].onChangeSelection(1); } - if (controls.BACK || FlxG.mouse.justReleasedRight) + if (controls.BACK || (FlxG.mouse.justReleasedRight && !MobileControls.mobileC)) close(); } public function close() { onClose(this); + if(prevVPadModes.length > 0){ + MusicBeatState.instance.removeVirtualPad(); + MusicBeatState.instance.addVirtualPad(prevVPadModes[0], prevVPadModes[1]); + MusicBeatState.instance.addVirtualPadCamera(false); + } } public function changeSelection(sel:Int, force:Bool = false) { diff --git a/source/funkin/options/categories/AppearanceOptions.hx b/source/funkin/options/categories/AppearanceOptions.hx index 926213431..de9ab5c52 100644 --- a/source/funkin/options/categories/AppearanceOptions.hx +++ b/source/funkin/options/categories/AppearanceOptions.hx @@ -2,7 +2,7 @@ package funkin.options.categories; class AppearanceOptions extends OptionsScreen { public override function new() { - super("Appearance", "Change Appearance options such as Flashing menus..."); + super("Appearance", "Change Appearance options such as Flashing menus...", null, 'LEFT_FULL', 'A_B'); add(new NumOption( "Framerate", "Pretty self explanatory, isn't it?", diff --git a/source/funkin/options/categories/GameplayOptions.hx b/source/funkin/options/categories/GameplayOptions.hx index 15c0ba603..92e2b5fae 100644 --- a/source/funkin/options/categories/GameplayOptions.hx +++ b/source/funkin/options/categories/GameplayOptions.hx @@ -9,7 +9,7 @@ class GameplayOptions extends OptionsScreen { var offsetSetting:NumOption; public override function new() { - super("Gameplay", 'Change Gameplay options such as Downscroll, Scroll Speed, Naughtyness...'); + super("Gameplay", 'Change Gameplay options such as Downscroll, Scroll Speed, Naughtyness...', null, 'LEFT_FULL', 'A_B'); add(new Checkbox( "Downscroll", "If checked, notes will go from up to down instead of down to up, as if they're falling.", diff --git a/source/funkin/options/categories/MiscOptions.hx b/source/funkin/options/categories/MiscOptions.hx index 2aecb20fd..5da7dd85f 100644 --- a/source/funkin/options/categories/MiscOptions.hx +++ b/source/funkin/options/categories/MiscOptions.hx @@ -3,7 +3,9 @@ package funkin.options.categories; class MiscOptions extends OptionsScreen { public override function new() { - super("Miscellaneous", "Use this menu to reset save data or engine settings."); + dpadMode = 'NONE'; + actionMode = 'A_B'; + super("Miscellaneous", "Use this menu to reset save data or engine settings.", null, #if UPDATE_CHECKING 'UP_DOWN' #else 'NONE' #end, 'A_B'); #if UPDATE_CHECKING add(new Checkbox( "Enable Nightly Updates", diff --git a/source/funkin/options/categories/MobileOptions.hx b/source/funkin/options/categories/MobileOptions.hx new file mode 100644 index 000000000..414a12bb7 --- /dev/null +++ b/source/funkin/options/categories/MobileOptions.hx @@ -0,0 +1,134 @@ +package funkin.options.categories; + +import flixel.FlxG; +import flixel.input.keyboard.FlxKey; +import flixel.util.FlxTimer; +import funkin.backend.MusicBeatState; +import funkin.options.Options; +import lime.system.System as LimeSystem; +#if android +import mobile.funkin.backend.utils.SUtil; +#end +#if sys +import sys.io.File; +#end + +class MobileOptions extends OptionsScreen { + var canEnter:Bool = true; + #if android + final lastStorageType:String = Options.storageType; + var externalPaths:Array = SUtil.checkExternalPaths(true); + var typeNames:Array = ['Data', 'Obb', 'Media', 'External']; + var typeVars:Array = ['EXTERNAL_DATA', 'EXTERNAL_OBB', 'EXTERNAL_MEDIA', 'EXTERNAL']; + #end + + public override function new() { + #if android + if (!externalPaths.contains('\n')) + { + typeNames = typeNames.concat(externalPaths); + typeVars = typeVars.concat(externalPaths); + } + #end + dpadMode = 'LEFT_FULL'; + actionMode = 'A_B'; + super("Mobile", 'Change Mobile Related Things such as Controls alpha, screen timeout....', null, 'LEFT_FULL', 'A_B'); + add(new TextOption( + "Mobile Controls", + "Choose which control to play with (hitbox, vpad left, vpad right, custom...).", + openMobileControlsMenu)); + add(new NumOption( + "Controls Alpha", + "Change how transparent the mobile controls should be", + 0.0, // minimum + 1.0, // maximum + 0.1, // change + "controlsAlpha", // save name or smth + changeControlsAlpha)); // callback + add(new ArrayOption( + "Hitbox Design", + "Choose how your hitbox should look like!", + ['gradient', 'noGradient', 'hidden'], + ['Gradient', 'No Gradient', 'Hidden'], + 'hitboxType')); + #if mobile + add(new Checkbox( + "Allow Screen Timeout", + "If checked, The phone will enter sleep mode if the player is inactive.", + "screenTimeOut")); + add(new Checkbox( + "Wide Screen", + "If checked, It'll change aspect ratio of the game.", + "wideScreen")); + #end + #if android + add(new ArrayOption( + "Storage Type", + "Choose which folder Codename Engine should use! (CHANGING THIS MAKES DELETE YOUR OLD FOLDER!!)", + typeVars, + typeNames, + 'storageType')); + #end + } + + override function update(elapsed) { + #if mobile + final lastScreenTimeOut:Bool = Options.screenTimeOut; + final lastWideScreen:Bool = Options.wideScreen; + if (lastScreenTimeOut != Options.screenTimeOut) LimeSystem.allowScreenTimeout = Options.screenTimeOut; + if (lastWideScreen != Options.wideScreen) FlxG.scaleMode = new mobile.funkin.backend.system.MobileRatioScaleMode(); + #end + super.update(elapsed); + } + + override public function destroy() { + #if android + if (lastStorageType != Options.storageType) { + onStorageChange(); + funkin.backend.utils.NativeAPI.showMessageBox('Notice!', 'Storage Type has been changed and you needed restart the game!!\nPress OK to close the game.'); + LimeSystem.exit(0); + } + #end + } + + function changeControlsAlpha(alpha) { + MusicBeatState.instance.virtualPad.alpha = alpha; + if (mobile.objects.MobileControls.mobileC) { + FlxG.sound.volumeUpKeys = []; + FlxG.sound.volumeDownKeys = []; + FlxG.sound.muteKeys = []; + } else { + FlxG.sound.volumeUpKeys = [FlxKey.PLUS, FlxKey.NUMPADPLUS]; + FlxG.sound.volumeDownKeys = [FlxKey.MINUS, FlxKey.NUMPADMINUS]; + FlxG.sound.muteKeys = [FlxKey.ZERO, FlxKey.NUMPADZERO]; + } + } + + function openMobileControlsMenu() { + if(!canEnter) return; + canEnter = false; + FlxG.state.persistentUpdate = false; + MusicBeatState.instance.camVPad.visible = false; + FlxG.state.openSubState(new mobile.funkin.menus.MobileControlSelectSubState(() -> { + MusicBeatState.instance.camVPad.visible = true; + FlxG.state.persistentUpdate = true; + new FlxTimer().start(0.2, (tmr:FlxTimer) -> canEnter = true); + })); + } + + #if android + function onStorageChange():Void + { + File.saveContent(LimeSystem.applicationStorageDirectory + 'storagetype.txt', Options.storageType); + + var lastStoragePath:String = StorageType.fromStrForce(lastStorageType) + '/'; + + try + { + Sys.command('rm', ['-rf', lastStoragePath]); + } + catch (e:haxe.Exception) + trace('Failed to remove last directory. (${e.message})'); + } + #end +} diff --git a/source/funkin/options/keybinds/KeybindsOptions.hx b/source/funkin/options/keybinds/KeybindsOptions.hx index e4e7d26cd..0d5af6c33 100644 --- a/source/funkin/options/keybinds/KeybindsOptions.hx +++ b/source/funkin/options/keybinds/KeybindsOptions.hx @@ -162,6 +162,9 @@ class KeybindsOptions extends MusicBeatSubstate { } add(alphabets); add(camFollow); + + addVirtualPad('LEFT_FULL', 'A_B'); + addVirtualPadCamera(); } public override function destroy() { diff --git a/source/mobile/flixel/FlxButton.hx b/source/mobile/flixel/FlxButton.hx new file mode 100644 index 000000000..f543a2ee8 --- /dev/null +++ b/source/mobile/flixel/FlxButton.hx @@ -0,0 +1,587 @@ +package mobile.flixel; + +import flixel.FlxCamera; +import flixel.FlxG; +import flixel.FlxSprite; +import flixel.graphics.atlas.FlxAtlas; +import flixel.graphics.atlas.FlxNode; +import flixel.graphics.frames.FlxTileFrames; +import flixel.input.FlxInput; +import flixel.input.FlxPointer; +import flixel.input.IFlxInput; +import flixel.input.touch.FlxTouch; +import flixel.math.FlxPoint; +import flixel.sound.FlxSound; +import flixel.text.FlxText; +import flixel.util.FlxDestroyUtil; + +/** + * A simple button class that calls a function when clicked by the touch. + */ +class FlxButton extends FlxTypedButton +{ + /** + * Used with public variable status, means not highlighted or pressed. + */ + public static inline var NORMAL:Int = 0; + + /** + * Used with public variable status, means highlighted (usually from touch over). + */ + public static inline var HIGHLIGHT:Int = 1; + + /** + * Used with public variable status, means pressed (usually from touch click). + */ + public static inline var PRESSED:Int = 2; + + /** + * Shortcut to setting label.text + */ + public var text(get, set):String; + + /** + * Creates a new `FlxButton` object with a gray background + * and a callback function on the UI thread. + * + * @param X The x position of the button. + * @param Y The y position of the button. + * @param Text The text that you want to appear on the button. + * @param OnClick The function to call whenever the button is clicked. + */ + public function new(X:Float = 0, Y:Float = 0, ?Text:String, ?OnClick:Void->Void):Void + { + super(X, Y, OnClick); + + for (point in labelOffsets) + point.set(point.x - 1, point.y + 3); + + initLabel(Text); + } + + /** + * Updates the size of the text field to match the button. + */ + override function resetHelpers():Void + { + super.resetHelpers(); + + if (label != null) + { + label.fieldWidth = label.frameWidth = Std.int(width); + label.size = label.size; // Calls set_size(), don't remove! + } + } + + inline function initLabel(Text:String):Void + { + if (Text != null) + { + label = new FlxText(x + labelOffsets[NORMAL].x, y + labelOffsets[NORMAL].y, 80, Text); + label.setFormat(null, 8, 0x333333, 'center'); + label.alpha = labelAlphas[status]; + label.drawFrame(true); + } + } + + inline function get_text():String + { + return (label != null) ? label.text : null; + } + + inline function set_text(Text:String):String + { + if (label == null) + initLabel(Text); + else + label.text = Text; + return Text; + } +} + +/** + * A simple button class that calls a function when clicked by the touch. + */ +#if !display +@:generic +#end +class FlxTypedButton extends FlxSprite implements IFlxInput +{ + /** + * The label that appears on the button. Can be any `FlxSprite`. + */ + public var label(default, set):T; + + /** + * What offsets the `label` should have for each status. + */ + public var labelOffsets:Array = [FlxPoint.get(), FlxPoint.get(), FlxPoint.get(0, 1)]; + + /** + * What alpha value the label should have for each status. Default is `[0.8, 1.0, 0.5]`. + * Multiplied with the button's `alpha`. + */ + public var labelAlphas:Array = [0.8, 1.0, 0.5]; + + /** + * What animation should be played for each status. + * Default is ['normal', 'highlight', 'pressed']. + */ + public var statusAnimations:Array = ['normal', 'highlight', 'pressed']; + + /** + * Whether you can press the button simply by releasing the touch button over it (default). + * If false, the input has to be pressed while hovering over the button. + */ + public var allowSwiping:Bool = true; + + /** + * Whether the button can use multiple fingers on it. + */ + public var multiTouch:Bool = false; + + /** + * Maximum distance a pointer can move to still trigger event handlers. + * If it moves beyond this limit, onOut is triggered. + * Defaults to `Math.POSITIVE_INFINITY` (i.e. no limit). + */ + public var maxInputMovement:Float = Math.POSITIVE_INFINITY; + + /** + * Shows the current state of the button, either `FlxButton.NORMAL`, + * `FlxButton.HIGHLIGHT` or `FlxButton.PRESSED`. + */ + public var status(default, set):Int; + + /** + * The properties of this button's `onUp` event (callback function, sound). + */ + public var onUp(default, null):FlxButtonEvent; + + /** + * The properties of this button's `onDown` event (callback function, sound). + */ + public var onDown(default, null):FlxButtonEvent; + + /** + * The properties of this button's `onOver` event (callback function, sound). + */ + public var onOver(default, null):FlxButtonEvent; + + /** + * The properties of this button's `onOut` event (callback function, sound). + */ + public var onOut(default, null):FlxButtonEvent; + + public var justReleased(get, never):Bool; + public var released(get, never):Bool; + public var pressed(get, never):Bool; + public var justPressed(get, never):Bool; + + /** + * We cast label to a `FlxSprite` for internal operations to avoid Dynamic casts in C++ + */ + var _spriteLabel:FlxSprite; + + /** + * We don't need an ID here, so let's just use `Int` as the type. + */ + var input:FlxInput; + + /** + * The input currently pressing this button, if none, it's `null`. Needed to check for its release. + */ + var currentInput:IFlxInput; + + var lastStatus = -1; + + /** + * Creates a new `FlxTypedButton` object with a gray background. + * + * @param X The x position of the button. + * @param Y The y position of the button. + * @param OnClick The function to call whenever the button is clicked. + */ + public function new(X:Float = 0, Y:Float = 0, ?OnClick:Void->Void):Void + { + super(X, Y); + + loadDefaultGraphic(); + + onUp = new FlxButtonEvent(OnClick); + onDown = new FlxButtonEvent(); + onOver = new FlxButtonEvent(); + onOut = new FlxButtonEvent(); + + status = multiTouch ? FlxButton.NORMAL : FlxButton.HIGHLIGHT; + + // Since this is a UI element, the default scrollFactor is (0, 0) + scrollFactor.set(); + + statusAnimations[FlxButton.HIGHLIGHT] = 'normal'; + labelAlphas[FlxButton.HIGHLIGHT] = 1; + + input = new FlxInput(0); + } + + override public function graphicLoaded():Void + { + super.graphicLoaded(); + + setupAnimation('normal', FlxButton.NORMAL); + setupAnimation('pressed', FlxButton.PRESSED); + } + + function loadDefaultGraphic():Void + loadGraphic('flixel/images/ui/button.png', true, 80, 20); + + function setupAnimation(animationName:String, frameIndex:Int):Void + { + // make sure the animation doesn't contain an invalid frame + frameIndex = Std.int(Math.min(frameIndex, #if (flixel < "5.3.0") animation.frames #else animation.numFrames #end - 1)); + animation.add(animationName, [frameIndex]); + } + + /** + * Called by the game state when state is changed (if this object belongs to the state) + */ + override public function destroy():Void + { + label = FlxDestroyUtil.destroy(label); + _spriteLabel = null; + + onUp = FlxDestroyUtil.destroy(onUp); + onDown = FlxDestroyUtil.destroy(onDown); + onOver = FlxDestroyUtil.destroy(onOver); + onOut = FlxDestroyUtil.destroy(onOut); + + labelOffsets = FlxDestroyUtil.putArray(labelOffsets); + + labelAlphas = null; + currentInput = null; + input = null; + + super.destroy(); + } + + /** + * Called by the game loop automatically, handles touch over and click detection. + */ + override public function update(elapsed:Float):Void + { + super.update(elapsed); + + if (visible) + { + // Update the button, but only if at least either touches are enabled + #if FLX_POINTER_INPUT + updateButton(); + #end + + // Trigger the animation only if the button's input status changes. + if (lastStatus != status) + { + updateStatusAnimation(); + lastStatus = status; + } + } + + input.update(); + } + + function updateStatusAnimation():Void + animation.play(statusAnimations[status]); + + /** + * Just draws the button graphic and text label to the screen. + */ + override public function draw():Void + { + super.draw(); + + if (_spriteLabel != null && _spriteLabel.visible) + { + _spriteLabel.cameras = cameras; + _spriteLabel.draw(); + } + } + + #if FLX_DEBUG + /** + * Helper function to draw the debug graphic for the label as well. + */ + override public function drawDebug():Void + { + super.drawDebug(); + + if (_spriteLabel != null) + _spriteLabel.drawDebug(); + } + #end + + /** + * Stamps button's graphic and label onto specified atlas object and loads graphic from this atlas. + * This method assumes that you're using whole image for button's graphic and image has no spaces between frames. + * And it assumes that label is a single frame sprite. + * + * @param atlas Atlas to stamp graphic to. + * @return Whether the button's graphic and label's graphic were stamped on the atlas successfully. + */ + public function stampOnAtlas(atlas:FlxAtlas):Bool + { + var buttonNode:FlxNode = atlas.addNode(graphic.bitmap, graphic.key); + var result:Bool = (buttonNode != null); + + if (buttonNode != null) + { + var buttonFrames:FlxTileFrames = cast frames; + var tileSize:FlxPoint = FlxPoint.get(buttonFrames.tileSize.x, buttonFrames.tileSize.y); + var tileFrames:FlxTileFrames = buttonNode.getTileFrames(tileSize); + this.frames = tileFrames; + } + + if (result && label != null) + { + var labelNode:FlxNode = atlas.addNode(label.graphic.bitmap, label.graphic.key); + result = result && (labelNode != null); + + if (labelNode != null) + label.frames = labelNode.getImageFrame(); + } + + return result; + } + + /** + * Basic button update logic - searches for overlaps with touches and + * the touch and calls `updateStatus()`. + */ + function updateButton():Void + { + var overlapFound = checkTouchOverlap(); + + if (currentInput != null && currentInput.justReleased && overlapFound) + onUpHandler(); + + if (status != FlxButton.NORMAL && (!overlapFound || (currentInput != null && currentInput.justReleased))) + onOutHandler(); + } + + function checkTouchOverlap():Bool + { + var overlap = false; + + for (camera in cameras) + for (touch in FlxG.touches.list) + if (checkInput(touch, touch, touch.justPressedPosition, camera)) + overlap = true; + + return overlap; + } + + function checkInput(pointer:FlxPointer, input:IFlxInput, justPressedPosition:FlxPoint, camera:FlxCamera):Bool + { + if (maxInputMovement != Math.POSITIVE_INFINITY + && justPressedPosition.distanceTo(pointer.getScreenPosition(FlxPoint.weak())) > maxInputMovement + && input == currentInput) + { + currentInput = null; + } + else if (overlapsPoint(pointer.getWorldPosition(camera, _point), true, camera)) + { + updateStatus(input); + return true; + } + + return false; + } + + /** + * Updates the button status by calling the respective event handler function. + */ + function updateStatus(input:IFlxInput):Void + { + if (input.justPressed) + { + currentInput = input; + onDownHandler(); + } + else if (status == FlxButton.NORMAL) + { + // Allow 'swiping' to press a button (dragging it over the button while pressed) + if (allowSwiping && input.pressed) + onDownHandler(); + else + onOverHandler(); + } + } + + function updateLabelPosition() + { + if (_spriteLabel != null) // Label positioning + { + _spriteLabel.x = (pixelPerfectPosition ? Math.floor(x) : x) + labelOffsets[status].x; + _spriteLabel.y = (pixelPerfectPosition ? Math.floor(y) : y) + labelOffsets[status].y; + } + } + + function updateLabelAlpha() + { + if (_spriteLabel != null && labelAlphas.length > status) + _spriteLabel.alpha = alpha * labelAlphas[status]; + } + + /** + * Internal function that handles the onUp event. + */ + function onUpHandler():Void + { + status = FlxButton.NORMAL; + input.release(); + currentInput = null; + onUp.fire(); // Order matters here, because onUp.fire() could cause a state change and destroy this object. + } + + /** + * Internal function that handles the onDown event. + */ + function onDownHandler():Void + { + status = FlxButton.PRESSED; + input.press(); + onDown.fire(); // Order matters here, because onDown.fire() could cause a state change and destroy this object. + } + + /** + * Internal function that handles the onOver event. + */ + function onOverHandler():Void + { + status = FlxButton.HIGHLIGHT; + onOver.fire(); // Order matters here, because onOver.fire() could cause a state change and destroy this object. + } + + /** + * Internal function that handles the onOut event. + */ + function onOutHandler():Void + { + status = FlxButton.NORMAL; + input.release(); + onOut.fire(); // Order matters here, because onOut.fire() could cause a state change and destroy this object. + } + + function set_label(Value:T):T + { + if (Value != null) + { + // use the same FlxPoint object for both + Value.scrollFactor.put(); + Value.scrollFactor = scrollFactor; + } + + label = Value; + _spriteLabel = label; + + updateLabelPosition(); + + return Value; + } + + function set_status(Value:Int):Int + { + status = Value; + updateLabelAlpha(); + return status; + } + + override function set_alpha(Value:Float):Float + { + super.set_alpha(Value); + updateLabelAlpha(); + return alpha; + } + + override function set_x(Value:Float):Float + { + super.set_x(Value); + updateLabelPosition(); + return x; + } + + override function set_y(Value:Float):Float + { + super.set_y(Value); + updateLabelPosition(); + return y; + } + + inline function get_justReleased():Bool + return input.justReleased; + + inline function get_released():Bool + return input.released; + + inline function get_pressed():Bool + return input.pressed; + + inline function get_justPressed():Bool + return input.justPressed; +} + +/** + * Helper function for `FlxButton` which handles its events. + */ +private class FlxButtonEvent implements IFlxDestroyable +{ + /** + * The callback function to call when this even fires. + */ + public var callback:Void->Void; + + #if FLX_SOUND_SYSTEM + /** + * The sound to play when this event fires. + */ + public var sound:FlxSound; + #end + + /** + * @param Callback The callback function to call when this even fires. + * @param sound The sound to play when this event fires. + */ + public function new(?Callback:Void->Void, ?sound:FlxSound):Void + { + callback = Callback; + + #if FLX_SOUND_SYSTEM + this.sound = sound; + #end + } + + /** + * Cleans up memory. + */ + public inline function destroy():Void + { + callback = null; + + #if FLX_SOUND_SYSTEM + sound = FlxDestroyUtil.destroy(sound); + #end + } + + /** + * Fires this event (calls the callback and plays the sound) + */ + public inline function fire():Void + { + if (callback != null) + callback(); + + #if FLX_SOUND_SYSTEM + if (sound != null) + sound.play(true); + #end + } +} \ No newline at end of file diff --git a/source/mobile/flixel/FlxVirtualPad.hx b/source/mobile/flixel/FlxVirtualPad.hx new file mode 100644 index 000000000..3a4fea9d4 --- /dev/null +++ b/source/mobile/flixel/FlxVirtualPad.hx @@ -0,0 +1,260 @@ +package mobile.flixel; + +import flixel.FlxG; +#if MOD_SUPPORT +import sys.FileSystem; +#end +import flixel.math.FlxPoint; +import funkin.options.Options; +import mobile.flixel.FlxButton; +import openfl.display.BitmapData; +import flixel.util.FlxDestroyUtil; +import flixel.graphics.FlxGraphic; +import funkin.backend.assets.Paths; +import mobile.objects.FlxButtonGroup; +import flixel.graphics.frames.FlxTileFrames; +import flixel.graphics.frames.FlxAtlasFrames; +import openfl.utils.Assets; +import haxe.ds.Map; +import flixel.util.typeLimit.OneOfTwo; + +enum FlxDPadMode +{ + UP_DOWN; + LEFT_RIGHT; + LEFT_FULL; + RIGHT_FULL; + NONE; +} + +enum FlxActionMode +{ + A; + B; + P; + A_B; + A_B_C; + A_B_E; + A_B_X_Y; + A_B_M_E; + A_B_C_X_Y; + A_B_C_X_Y_Z; + A_B_C_D_V_X_Y_Z; + NONE; +} + +/** + * A highly modified FlxVirtualPad. + * It's easy to customize the layout. + * + * @author Ka Wing Chin + * @author Mihai Alexandru (M.A. Jigsaw) + */ +class FlxVirtualPad extends FlxButtonGroup +{ + public var buttonLeft:FlxButton = new FlxButton(0, 0); + public var buttonUp:FlxButton = new FlxButton(0, 0); + public var buttonRight:FlxButton = new FlxButton(0, 0); + public var buttonDown:FlxButton = new FlxButton(0, 0); + public var buttonLeft2:FlxButton = new FlxButton(0, 0); + public var buttonUp2:FlxButton = new FlxButton(0, 0); + public var buttonRight2:FlxButton = new FlxButton(0, 0); + public var buttonDown2:FlxButton = new FlxButton(0, 0); + public var buttonA:FlxButton = new FlxButton(0, 0); + public var buttonB:FlxButton = new FlxButton(0, 0); + public var buttonC:FlxButton = new FlxButton(0, 0); + public var buttonD:FlxButton = new FlxButton(0, 0); + public var buttonE:FlxButton = new FlxButton(0, 0); + public var buttonF:FlxButton = new FlxButton(0, 0); + public var buttonG:FlxButton = new FlxButton(0, 0); + public var buttonH:FlxButton = new FlxButton(0, 0); + public var buttonI:FlxButton = new FlxButton(0, 0); + public var buttonJ:FlxButton = new FlxButton(0, 0); + public var buttonK:FlxButton = new FlxButton(0, 0); + public var buttonL:FlxButton = new FlxButton(0, 0); + public var buttonM:FlxButton = new FlxButton(0, 0); + public var buttonN:FlxButton = new FlxButton(0, 0); + public var buttonO:FlxButton = new FlxButton(0, 0); + public var buttonP:FlxButton = new FlxButton(0, 0); + public var buttonQ:FlxButton = new FlxButton(0, 0); + public var buttonR:FlxButton = new FlxButton(0, 0); + public var buttonS:FlxButton = new FlxButton(0, 0); + public var buttonT:FlxButton = new FlxButton(0, 0); + public var buttonU:FlxButton = new FlxButton(0, 0); + public var buttonV:FlxButton = new FlxButton(0, 0); + public var buttonW:FlxButton = new FlxButton(0, 0); + public var buttonX:FlxButton = new FlxButton(0, 0); + public var buttonY:FlxButton = new FlxButton(0, 0); + public var buttonZ:FlxButton = new FlxButton(0, 0); + + public var curDPadMode:FlxDPadMode = NONE; + public var curActionMode:FlxActionMode = NONE; + public static var dpadModes:Map; + public static var actionModes:Map; + + /** + * Create a gamepad. + * + * @param FlxDPadMode The D-Pad mode. `LEFT_FULL` for example. + * @param FlxActionMode The action buttons mode. `A_B_C` for example. + */ + public function new(DPad:OneOfTwo, Action:OneOfTwo) + { + super(); + var dpadMode:FlxDPadMode; + var actionMode:FlxActionMode; + + if(DPad is FlxDPadMode) + dpadMode = cast DPad; + else + dpadMode = cast getDPadModeByString(cast DPad); + + if(Action is FlxActionMode) + actionMode = cast DPad; + else + actionMode = cast getActionModeByString(cast Action); + curDPadMode = dpadMode; + curActionMode = actionMode; + switch (dpadMode) + { + case UP_DOWN: + add(buttonUp = createButton(0, FlxG.height - 258, 'up', 0x00FF00)); + add(buttonDown = createButton(0, FlxG.height - 131, 'down', 0x00FFFF)); + case LEFT_RIGHT: + add(buttonLeft = createButton(0, FlxG.height - 131, 'left', 0xFF00FF)); + add(buttonRight = createButton(127, FlxG.height - 131, 'right', 0xFF0000)); + case LEFT_FULL: + add(buttonUp = createButton(105, FlxG.height - 356, 'up', 0x00FF00)); + add(buttonLeft = createButton(0, FlxG.height - 246, 'left', 0xFF00FF)); + add(buttonRight = createButton(207, FlxG.height - 246, 'right', 0xFF0000)); + add(buttonDown = createButton(105, FlxG.height - 131, 'down', 0x00FFFF)); + case RIGHT_FULL: + add(buttonUp = createButton(FlxG.width - 258, FlxG.height - 404, 'up', 0x00FF00)); + add(buttonLeft = createButton(FlxG.width - 384, FlxG.height - 305, 'left', 0xFF00FF)); + add(buttonRight = createButton(FlxG.width - 132, FlxG.height - 305, 'right', 0xFF0000)); + add(buttonDown = createButton(FlxG.width - 258, FlxG.height - 197, 'down', 0x00FFFF)); + case NONE: // do nothing + } + + switch (actionMode) + { + case A: + add(buttonA = createButton(FlxG.width - 132, FlxG.height - 131, 'a', 0xFF0000)); + case B: + add(buttonB = createButton(FlxG.width - 132, FlxG.height - 131, 'b', 0xFFCB00)); + case P: + add(buttonP = createButton(FlxG.width - 132, 0, 'p', 0xFFCB00)); + case A_B: + add(buttonB = createButton(FlxG.width - 262, FlxG.height - 131, 'b', 0xFFCB00)); + add(buttonA = createButton(FlxG.width - 132, FlxG.height - 131, 'a', 0xFF0000)); + case A_B_C: + add(buttonC = createButton(FlxG.width - 392, FlxG.height - 131, 'c', 0x44FF00)); + add(buttonB = createButton(FlxG.width - 262, FlxG.height - 131, 'b', 0xFFCB00)); + add(buttonA = createButton(FlxG.width - 132, FlxG.height - 131, 'a', 0xFF0000)); + case A_B_E: + add(buttonE = createButton(FlxG.width - 392, FlxG.height - 131, 'e', 0xFF7D00)); + add(buttonB = createButton(FlxG.width - 262, FlxG.height - 131, 'b', 0xFFCB00)); + add(buttonA = createButton(FlxG.width - 132, FlxG.height - 131, 'a', 0xFF0000)); + case A_B_X_Y: + add(buttonX = createButton(FlxG.width - 522, FlxG.height - 131, 'x', 0x99062D)); + add(buttonB = createButton(FlxG.width - 262, FlxG.height - 131, 'b', 0xFFCB00)); + add(buttonY = createButton(FlxG.width - 392, FlxG.height - 131, 'y', 0x4A35B9)); + add(buttonA = createButton(FlxG.width - 132, FlxG.height - 131, 'a', 0xFF0000)); + case A_B_C_X_Y: + add(buttonC = createButton(FlxG.width - 392, FlxG.height - 131, 'c', 0x44FF00)); + add(buttonX = createButton(FlxG.width - 262, FlxG.height - 251, 'x', 0x99062D)); + add(buttonB = createButton(FlxG.width - 262, FlxG.height - 131, 'b', 0xFFCB00)); + add(buttonY = createButton(FlxG.width - 132, FlxG.height - 251, 'y', 0x4A35B9)); + add(buttonA = createButton(FlxG.width - 132, FlxG.height - 131, 'a', 0xFF0000)); + case A_B_C_X_Y_Z: + add(buttonX = createButton(FlxG.width - 392, FlxG.height - 251, 'x', 0x99062D)); + add(buttonC = createButton(FlxG.width - 392, FlxG.height - 131, 'c', 0x44FF00)); + add(buttonY = createButton(FlxG.width - 262, FlxG.height - 251, 'y', 0x4A35B9)); + add(buttonB = createButton(FlxG.width - 262, FlxG.height - 131, 'b', 0xFFCB00)); + add(buttonZ = createButton(FlxG.width - 132, FlxG.height - 251, 'z', 0xCCB98E)); + add(buttonA = createButton(FlxG.width - 132, FlxG.height - 131, 'a', 0xFF0000)); + case A_B_C_D_V_X_Y_Z: + add(buttonV = createButton(FlxG.width - 522, FlxG.height - 251, 'v', 0x49A9B2)); + add(buttonD = createButton(FlxG.width - 522, FlxG.height - 131, 'd', 0x0078FF)); + add(buttonX = createButton(FlxG.width - 392, FlxG.height - 251, 'x', 0x99062D)); + add(buttonC = createButton(FlxG.width - 392, FlxG.height - 131, 'c', 0x44FF00)); + add(buttonY = createButton(FlxG.width - 262, FlxG.height - 251, 'y', 0x4A35B9)); + add(buttonB = createButton(FlxG.width - 262, FlxG.height - 131, 'b', 0xFFCB00)); + add(buttonZ = createButton(FlxG.width - 132, FlxG.height - 251, 'z', 0xCCB98E)); + add(buttonA = createButton(FlxG.width - 132, FlxG.height - 131, 'a', 0xFF0000)); + // CNE Releated + case A_B_M_E: + add(buttonM = createButton(FlxG.width - 522, FlxG.height - 131, 'm', 0x00BBFF)); + add(buttonB = createButton(FlxG.width - 262, FlxG.height - 131, 'b', 0xFFCB00)); + add(buttonE = createButton(FlxG.width - 392, FlxG.height - 131, 'e', 0xFF7D00)); + add(buttonA = createButton(FlxG.width - 132, FlxG.height - 131, 'a', 0xFF0000)); + case NONE: // do nothing + } + + scrollFactor.set(); + var guh = Options.controlsAlpha; + if (guh >= 0.9) + guh = guh - 0.07; + alpha = Options.controlsAlpha; + } + + public static function getDPadModeByString(mode:String):FlxDPadMode { + if(dpadModes == null){ + dpadModes = new Map(); + for(enumValue in FlxDPadMode.createAll()) + dpadModes.set(enumValue.getName(), enumValue); + } + return dpadModes.exists(mode) ? dpadModes.get(mode) : NONE; + } + + public static function getActionModeByString(mode:String):FlxActionMode { + if(actionModes == null){ + actionModes = new Map(); + for(enumValue in FlxActionMode.createAll()) + actionModes.set(enumValue.getName(), enumValue); + } + return actionModes.exists(mode) ? actionModes.get(mode) : NONE; + } + + /** + * Clean up memory. + */ + override public function destroy():Void + { + super.destroy(); + + for (field in Reflect.fields(this)) + if (Std.isOfType(Reflect.field(this, field), FlxButton)) + Reflect.setField(this, field, FlxDestroyUtil.destroy(Reflect.field(this, field))); + } + + private function createButton(X:Float, Y:Float, Graphic:String, Color:Int = 0xFFFFFF):FlxButton + { + var graphic:FlxGraphic; + var path:String = Paths.image('mobile/virtualpad/$Graphic'); + #if MOD_SUPPORT + if(FileSystem.exists(path)) + graphic = FlxGraphic.fromBitmapData(BitmapData.fromFile(path)); + else #end if(Assets.exists(path)) + graphic = FlxGraphic.fromBitmapData(Assets.getBitmapData(path)); + else + graphic = FlxGraphic.fromBitmapData(Assets.getBitmapData(Paths.image('mobile/virtualpad/default'))); + + var button:FlxButton = new FlxButton(X, Y); + try { + button.frames = FlxTileFrames.fromGraphic(graphic, FlxPoint.get(Std.int(graphic.width / 2), graphic.height)); + } + catch (e){ + trace("Failed to create button(s) " + e.message); + return null; + } + button.solid = false; + button.immovable = true; + button.scrollFactor.set(); + button.color = Color; + #if FLX_DEBUG + button.ignoreDrawDebug = true; + #end + return button; + } +} \ No newline at end of file diff --git a/source/mobile/funkin/backend/CNEJNI.hx b/source/mobile/funkin/backend/CNEJNI.hx new file mode 100644 index 000000000..99a7141bf --- /dev/null +++ b/source/mobile/funkin/backend/CNEJNI.hx @@ -0,0 +1,65 @@ +// fully stolen from PsychJNI bleh +package mobile.backend; + +/** + * ... + * @author Lily Ross (mcagabe19) + */ +#if android +import lime.system.JNI; + +class CNEJNI #if (lime >= "8.0.0") implements JNISafety #end +{ + public static final SDL_ORIENTATION_UNKNOWN:Int = 0; + public static final SDL_ORIENTATION_LANDSCAPE:Int = 1; + public static final SDL_ORIENTATION_LANDSCAPE_FLIPPED:Int = 2; + public static final SDL_ORIENTATION_PORTRAIT:Int = 3; + public static final SDL_ORIENTATION_PORTRAIT_FLIPPED:Int = 4; + + public static inline function setOrientation(width:Int, height:Int, resizeable:Bool, hint:String):Dynamic + return setOrientation_jni(width, height, resizeable, hint); + + public static inline function getCurrentOrientationAsString():String + { + return switch (getCurrentOrientation_jni()) + { + case SDL_ORIENTATION_PORTRAIT: "Portrait"; + case SDL_ORIENTATION_LANDSCAPE: "LandscapeRight"; + case SDL_ORIENTATION_PORTRAIT_FLIPPED: "PortraitUpsideDown"; + case SDL_ORIENTATION_LANDSCAPE_FLIPPED: "LandscapeLeft"; + default: "Unknown"; + } + } + + public static inline function isScreenKeyboardShown():Dynamic + return isScreenKeyboardShown_jni(); + + public static inline function clipboardHasText():Dynamic + return clipboardHasText_jni(); + + public static inline function clipboardGetText():Dynamic + return clipboardGetText_jni(); + + public static inline function clipboardSetText(string:String):Dynamic + return clipboardSetText_jni(string); + + public static inline function manualBackButton():Dynamic + return manualBackButton_jni(); + + public static inline function setActivityTitle(title:String):Dynamic + return setActivityTitle_jni(title); + + @:noCompletion private static var setOrientation_jni:Dynamic = JNI.createStaticMethod('org/libsdl/app/SDLActivity', 'setOrientation', + '(IIZLjava/lang/String;)V'); + @:noCompletion private static var getCurrentOrientation_jni:Dynamic = JNI.createStaticMethod('org/libsdl/app/SDLActivity', 'getCurrentOrientation', '()I'); + @:noCompletion private static var isScreenKeyboardShown_jni:Dynamic = JNI.createStaticMethod('org/libsdl/app/SDLActivity', 'isScreenKeyboardShown', '()Z'); + @:noCompletion private static var clipboardHasText_jni:Dynamic = JNI.createStaticMethod('org/libsdl/app/SDLActivity', 'clipboardHasText', '()Z'); + @:noCompletion private static var clipboardGetText_jni:Dynamic = JNI.createStaticMethod('org/libsdl/app/SDLActivity', 'clipboardGetText', + '()Ljava/lang/String;'); + @:noCompletion private static var clipboardSetText_jni:Dynamic = JNI.createStaticMethod('org/libsdl/app/SDLActivity', 'clipboardSetText', + '(Ljava/lang/String;)V'); + @:noCompletion private static var manualBackButton_jni:Dynamic = JNI.createStaticMethod('org/libsdl/app/SDLActivity', 'manualBackButton', '()V'); + @:noCompletion private static var setActivityTitle_jni:Dynamic = JNI.createStaticMethod('org/libsdl/app/SDLActivity', 'setActivityTitle', + '(Ljava/lang/String;)Z'); +} +#end diff --git a/source/mobile/funkin/backend/TouchFunctions.hx b/source/mobile/funkin/backend/TouchFunctions.hx new file mode 100644 index 000000000..bde52dd6f --- /dev/null +++ b/source/mobile/funkin/backend/TouchFunctions.hx @@ -0,0 +1,73 @@ +package mobile.funkin.backend; + +import flixel.FlxG; +import flixel.FlxBasic; +import flixel.FlxObject; +import flixel.FlxCamera; +import flixel.input.touch.FlxTouch; + +class TouchFunctions +{ + public static var touchPressed(get, never):Bool; + public static var touchJustPressed(get, never):Bool; + public static var touchJustReleased(get, never):Bool; + public static var touch(get, never):FlxTouch; + + public static function touchOverlapObject(object:FlxBasic, camera:FlxCamera):Bool + { + for (touch in FlxG.touches.list) + if (touch.overlaps(object, camera)) + return true; + return false; + } + + public static function touchOverlapObjectComplex(object:FlxObject):Bool + { + var overlap = false; + for (camera in object.cameras) + { + for (touch in FlxG.touches.list) + { + @:privateAccess + if (object.overlapsPoint(touch.getWorldPosition(camera, object._point), true, camera)) + overlap = true; + } + } + return overlap; + } + + @:noCompletion + private static function get_touchPressed():Bool + { + for (touch in FlxG.touches.list) + if (touch.pressed) + return true; + return false; + } + + @:noCompletion + private static function get_touchJustPressed():Bool + { + for (touch in FlxG.touches.list) + if (touch.justPressed) + return true; + return false; + } + + @:noCompletion + private static function get_touchJustReleased():Bool + { + for (touch in FlxG.touches.list) + if (touch.justReleased) + return true; + return false; + } + + @:noCompletion + private static function get_touch():FlxTouch + { + for (touch in FlxG.touches.list) + return touch; + return FlxG.touches.list[0]; + } +} diff --git a/source/mobile/funkin/backend/system/CopyState.hx b/source/mobile/funkin/backend/system/CopyState.hx new file mode 100644 index 000000000..b82a2e03e --- /dev/null +++ b/source/mobile/funkin/backend/system/CopyState.hx @@ -0,0 +1,216 @@ +package mobile.funkin.backend.system; + +#if mobile +import lime.utils.Assets as LimeAssets; +import openfl.utils.Assets as OpenFLAssets; +import flixel.addons.util.FlxAsyncLoop; +import flixel.FlxG; +import flixel.text.FlxText; +import flixel.FlxSprite; +import flixel.util.FlxColor; +import openfl.utils.ByteArray; +import haxe.io.Path; +import mobile.funkin.backend.utils.SUtil; +import funkin.backend.assets.Paths; +import funkin.backend.utils.NativeAPI; +import funkin.backend.system.MainState; + +#if sys +import sys.io.File; +import sys.FileSystem; +#end + +using StringTools; + +class CopyState extends funkin.backend.MusicBeatState +{ + public static var locatedFiles:Array = []; + public static var maxLoopTimes:Int = 0; + public static final IGNORE_FOLDER_FILE_NAME:String = "ignore.txt"; + + public var loadingImage:FlxSprite; + public var bottomBG:FlxSprite; + public var loadedText:FlxText; + public var copyLoop:FlxAsyncLoop; + + var loopTimes:Int = 0; + var failedFiles:Array = []; + var failedFilesStack:Array = []; + var canUpdate:Bool = true; + var shouldCopy:Bool = false; + + private static final textFilesExtensions:Array = ['ini', 'txt', 'xml', 'hxs', 'hx', 'lua', 'json', 'frag', 'vert']; + + override function create() + { + locatedFiles = []; + maxLoopTimes = 0; + checkExistingFiles(); + if (maxLoopTimes <= 0) + { + FlxG.switchState(new MainState()); + return; + } + + NativeAPI.showMessageBox("Notice", "Seems like you have some missing files that are necessary to run the game\nPress OK to begin the copy process"); + + shouldCopy = true; + + add(new FlxSprite(0, 0).makeGraphic(FlxG.width, FlxG.height, 0xffcaff4d)); + + loadingImage = new FlxSprite(0, 0, Paths.image('funkay')); + loadingImage.setGraphicSize(0, FlxG.height); + loadingImage.updateHitbox(); + loadingImage.screenCenter(); + add(loadingImage); + + bottomBG = new FlxSprite(0, FlxG.height - 26).makeGraphic(FlxG.width, 26, 0xFF000000); + bottomBG.alpha = 0.6; + add(bottomBG); + + loadedText = new FlxText(bottomBG.x, bottomBG.y + 4, FlxG.width, '', 16); + loadedText.setFormat(Paths.font("vcr.ttf"), 16, FlxColor.WHITE, CENTER); + add(loadedText); + + var ticks:Int = 15; + if (maxLoopTimes <= 15) + ticks = 1; + + copyLoop = new FlxAsyncLoop(maxLoopTimes, copyAsset, ticks); + add(copyLoop); + copyLoop.start(); + + super.create(); + } + + override function update(elapsed:Float) + { + if (shouldCopy && copyLoop != null) + { + if (copyLoop.finished && canUpdate) + { + if (failedFiles.length > 0) + { + NativeAPI.showMessageBox('Failed To Copy ${failedFiles.length} File.', failedFiles.join('\n')); + if (!FileSystem.exists('logs')) + FileSystem.createDirectory('logs'); + File.saveContent('logs/' + Date.now().toString().replace(' ', '-').replace(':', "'") + '-CopyState' + '.txt', failedFilesStack.join('\n')); + } + canUpdate = false; + FlxG.sound.play(Paths.sound('menu/confirm')).onComplete = () -> { + FlxG.switchState(new MainState()); + }; + } + + if (maxLoopTimes == 0) + loadedText.text = "Completed!"; + else + loadedText.text = '$loopTimes/$maxLoopTimes'; + } + super.update(elapsed); + } + + public function copyAsset() + { + var file = locatedFiles[loopTimes]; + loopTimes++; + if (!FileSystem.exists(file)) + { + var directory = Path.directory(file); + if (!FileSystem.exists(directory)) + SUtil.mkDirs(directory); + try + { + if (OpenFLAssets.exists(getFile(file))) + { + if (textFilesExtensions.contains(Path.extension(file))) + createContentFromInternal(file); + else + File.saveBytes(file, getFileBytes(getFile(file))); + } + else + { + failedFiles.push(getFile(file) + " (File Dosen't Exist)"); + failedFilesStack.push('Asset ${getFile(file)} does not exist.'); + } + } + catch (e:haxe.Exception) + { + failedFiles.push('${getFile(file)} (${e.message})'); + failedFilesStack.push('${getFile(file)} (${e.stack})'); + } + } + } + + public function createContentFromInternal(file:String) + { + var fileName = Path.withoutDirectory(file); + var directory = Path.directory(file); + try + { + var fileData:String = OpenFLAssets.getText(getFile(file)); + if (fileData == null) + fileData = ''; + if (!FileSystem.exists(directory)) + SUtil.mkDirs(directory); + File.saveContent(Path.join([directory, fileName]), fileData); + } + catch (e:haxe.Exception) + { + failedFiles.push('${getFile(file)} (${e.message})'); + failedFilesStack.push('${getFile(file)} (${e.stack})'); + } + } + + public function getFileBytes(file:String):ByteArray + { + switch (Path.extension(file)) + { + case 'otf' | 'ttf': + return ByteArray.fromFile(file); + default: + return OpenFLAssets.getBytes(file); + } + } + + public static function getFile(file:String):String + { + if(OpenFLAssets.exists(file)) return file; + + @:privateAccess + for(library in LimeAssets.libraries.keys()){ + if(OpenFLAssets.exists('$library:$file') && library != 'default') + return '$library:$file'; + } + + return file; + } + + public static function checkExistingFiles():Bool + { + locatedFiles = OpenFLAssets.list(); + + // removes unwanted assets + var assets = locatedFiles.filter(folder -> folder.startsWith('assets/')); + var mods = locatedFiles.filter(folder -> folder.startsWith('mods/')); + locatedFiles = assets.concat(mods); + + var filesToRemove:Array = []; + + for (file in locatedFiles) + { + if (FileSystem.exists(file) || OpenFLAssets.exists(getFile(Path.join([Path.directory(getFile(file)), IGNORE_FOLDER_FILE_NAME])))) + { + filesToRemove.push(file); + } + } + + for (file in filesToRemove) + locatedFiles.remove(file); + + maxLoopTimes = locatedFiles.length; + + return (maxLoopTimes <= 0); + } +} +#end diff --git a/source/mobile/funkin/backend/system/MobileRatioScaleMode.hx b/source/mobile/funkin/backend/system/MobileRatioScaleMode.hx new file mode 100644 index 000000000..b5fe45a42 --- /dev/null +++ b/source/mobile/funkin/backend/system/MobileRatioScaleMode.hx @@ -0,0 +1,53 @@ +package mobile.funkin.backend.system; + +import flixel.FlxG; +import flixel.system.scaleModes.BaseScaleMode; + +class MobileRatioScaleMode extends BaseScaleMode +{ + public static var allowWideScreen(default, set):Bool = true; + + override function updateGameSize(Width:Int, Height:Int):Void + { + if (funkin.options.Options.wideScreen && allowWideScreen) + { + super.updateGameSize(Width, Height); + } + else + { + var ratio:Float = FlxG.width / FlxG.height; + var realRatio:Float = Width / Height; + + var scaleY:Bool = realRatio < ratio; + + if (scaleY) + { + gameSize.x = Width; + gameSize.y = Math.floor(gameSize.x / ratio); + } + else + { + gameSize.y = Height; + gameSize.x = Math.floor(gameSize.y * ratio); + } + } + } + + override function updateGamePosition():Void + { + if (funkin.options.Options.wideScreen && allowWideScreen) + FlxG.game.x = FlxG.game.y = 0; + else + super.updateGamePosition(); + } + + @:noCompletion + private static function set_allowWideScreen(value:Bool):Bool + { + allowWideScreen = value; + FlxG.scaleMode = new MobileRatioScaleMode(); + return value; + } + + public function resetSize() {} +} diff --git a/source/mobile/funkin/backend/utils/SUtil.hx b/source/mobile/funkin/backend/utils/SUtil.hx new file mode 100644 index 000000000..af089fe6d --- /dev/null +++ b/source/mobile/funkin/backend/utils/SUtil.hx @@ -0,0 +1,188 @@ +package mobile.funkin.backend.utils; + +#if android +import android.content.Context; +import android.os.Environment; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; +import android.Permissions; +import android.Settings; +#end +import lime.system.System as LimeSystem; +import funkin.backend.utils.NativeAPI; +#if sys +import sys.io.File; +import sys.FileSystem; +#end + +using StringTools; + +/** + * A storage class for mobile. + * @author Mihai Alexandru (M.A. Jigsaw) + */ +class SUtil +{ + #if sys + public static function getStorageDirectory(?force:Bool = false):String + { + #if mobile + var daPath:String; + #if android + if (!FileSystem.exists(LimeSystem.applicationStorageDirectory + 'storagetype.txt')) + File.saveContent(LimeSystem.applicationStorageDirectory + 'storagetype.txt', funkin.options.Options.storageType); + var curStorageType:String = File.getContent(LimeSystem.applicationStorageDirectory + 'storagetype.txt'); + daPath = force ? StorageType.fromStrForce(curStorageType) : StorageType.fromStr(curStorageType); + daPath = haxe.io.Path.addTrailingSlash(daPath); + #elseif ios + daPath = LimeSystem.documentsDirectory; + #end + + return daPath; + #else + return Sys.getCwd(); + #end + } + + public static function mkDirs(directory:String):Void + { + try { + if (FileSystem.exists(directory) && FileSystem.isDirectory(directory)) + return; + } catch (e:haxe.Exception) { + trace('Something went wrong while looking at folder. (${e.message})'); + } + var total:String = ''; + if (directory.substr(0, 1) == '/') + total = '/'; + + var parts:Array = directory.split('/'); + if (parts.length > 0 && parts[0].indexOf(':') > -1) + parts.shift(); + + for (part in parts) + { + if (part != '.' && part != '') + { + if (total != '' && total != '/') + total += '/'; + + total += part; + + try + { + if (!FileSystem.exists(total)) + FileSystem.createDirectory(total); + } + catch (e:haxe.Exception) + trace('Error while creating folder. (${e.message}'); + } + } + } + + public static function saveContent(fileName:String = 'file', fileExtension:String = '.json', + fileData:String = 'You forgor to add somethin\' in yo code :3'):Void + { + try + { + if (!FileSystem.exists('saves')) + FileSystem.createDirectory('saves'); + + File.saveContent('saves/$fileName', fileData); + NativeAPI.showMessageBox("Success!", '$fileName has been saved.', MSG_INFORMATION); + } + catch (e:haxe.Exception) + trace('File couldn\'t be saved. (${e.message})'); + } + + #if android + public static function doPermissionsShit():Void + { + if (VERSION.SDK_INT >= VERSION_CODES.TIRAMISU) + Permissions.requestPermissions(['READ_MEDIA_IMAGES', 'READ_MEDIA_VIDEO', 'READ_MEDIA_AUDIO']); + else + Permissions.requestPermissions(['READ_EXTERNAL_STORAGE', 'WRITE_EXTERNAL_STORAGE']); + + if (!Environment.isExternalStorageManager()) + { + if (VERSION.SDK_INT >= VERSION_CODES.S) + Settings.requestSetting('REQUEST_MANAGE_MEDIA'); + Settings.requestSetting('MANAGE_APP_ALL_FILES_ACCESS_PERMISSION'); + } + + if ((VERSION.SDK_INT >= VERSION_CODES.TIRAMISU && !Permissions.getGrantedPermissions().contains('android.permission.READ_MEDIA_IMAGES')) || (VERSION.SDK_INT < VERSION_CODES.TIRAMISU && !Permissions.getGrantedPermissions().contains('android.permission.READ_EXTERNAL_STORAGE'))) + NativeAPI.showMessageBox('Notice!', 'If you accepted the permissions you are all good!' + '\nIf you didn\'t then expect a crash' + '\nPress Ok to see what happens', MSG_INFORMATION); + + try + { + if (!FileSystem.exists(SUtil.getStorageDirectory())) + mkDirs(SUtil.getStorageDirectory()); + } + catch (e:Dynamic) + { + NativeAPI.showMessageBox('Error!', 'Please create folder to\n' + SUtil.getStorageDirectory(true) + '\nPress OK to close the game', MSG_ERROR); + LimeSystem.exit(1); + } + } + + public static function checkExternalPaths(?splitStorage = false):Array { + var process = new funkin.backend.utils.native.HiddenProcess('grep -o "/storage/....-...." /proc/mounts | paste -sd \',\''); + var paths:String = process.stdout.readAll().toString(); + if (splitStorage) paths = paths.replace('/storage/', ''); + return paths.split(','); + } + + public static function getExternalDirectory(external:String):String { + var daPath:String = ''; + for (path in checkExternalPaths()) + if (path.contains(external)) daPath = path; + + daPath = haxe.io.Path.addTrailingSlash(daPath.endsWith("\n") ? daPath.substr(0, daPath.length - 1) : daPath); + return daPath; + } + #end + #end +} + +#if android +enum abstract StorageType(String) from String to String +{ + final forcedPath = '/storage/emulated/0/'; + final packageNameLocal = 'com.yoshman29.codenameengine'; + final fileLocal = 'CodenameEngine'; + + public static function fromStr(str:String):StorageType + { + final EXTERNAL_DATA = Context.getExternalFilesDir(); + final EXTERNAL_OBB = Context.getObbDir(); + final EXTERNAL_MEDIA = Environment.getExternalStorageDirectory() + '/Android/media/' + lime.app.Application.current.meta.get('packageName'); + final EXTERNAL = Environment.getExternalStorageDirectory() + '/.' + lime.app.Application.current.meta.get('file'); + + return switch (str) + { + case "EXTERNAL_DATA": EXTERNAL_DATA; + case "EXTERNAL_OBB": EXTERNAL_OBB; + case "EXTERNAL_MEDIA": EXTERNAL_MEDIA; + case "EXTERNAL": EXTERNAL; + default: SUtil.getExternalDirectory(str) + '.' + fileLocal; + } + } + + public static function fromStrForce(str:String):StorageType + { + final EXTERNAL_DATA = forcedPath + 'Android/data/' + packageNameLocal + '/files'; + final EXTERNAL_OBB = forcedPath + 'Android/obb/' + packageNameLocal; + final EXTERNAL_MEDIA = forcedPath + 'Android/media/' + packageNameLocal; + final EXTERNAL = forcedPath + '.' + fileLocal; + + return switch (str) + { + case "EXTERNAL_DATA": EXTERNAL_DATA; + case "EXTERNAL_OBB": EXTERNAL_OBB; + case "EXTERNAL_MEDIA": EXTERNAL_MEDIA; + case "EXTERNAL": EXTERNAL; + default: SUtil.getExternalDirectory(str) + '.' + fileLocal; + } + } +} +#end diff --git a/source/mobile/funkin/menus/MobileControlSelectSubState.hx b/source/mobile/funkin/menus/MobileControlSelectSubState.hx new file mode 100644 index 000000000..7d83e850f --- /dev/null +++ b/source/mobile/funkin/menus/MobileControlSelectSubState.hx @@ -0,0 +1,271 @@ +package mobile.funkin.menus; + +import flixel.addons.display.FlxBackdrop; +import flixel.addons.display.FlxGridOverlay; +import flixel.util.FlxGradient; +import mobile.funkin.backend.TouchFunctions; +import mobile.flixel.FlxButton; +import flixel.input.touch.FlxTouch; +import flixel.ui.FlxButton as UIButton; +import funkin.backend.MusicBeatSubstate; +import mobile.objects.MobileControls; +import flixel.FlxSprite; +import flixel.text.FlxText; +import flixel.FlxCamera; +import flixel.util.FlxColor; +import flixel.tweens.*; +import flixel.FlxG; +import funkin.backend.assets.Paths; +import funkin.backend.utils.CoolUtil; +import funkin.menus.ui.Alphabet; + +using StringTools; + +class MobileControlSelectSubState extends MusicBeatSubstate +{ + var options:Array = ['Pad-Right', 'Pad-Left', 'Pad-Custom', 'Hitbox', 'Keyboard']; + var control:MobileControls; + var leftArrow:FlxSprite; + var rightArrow:FlxSprite; + var itemText:Alphabet; + var positionText:FlxText; + var positionTextBg:FlxSprite; + var bg:FlxBackdrop; + var ui:FlxCamera; + var buttonCamera:FlxCamera; + var curOption:Int = MobileControls.mode; + var buttonBinded:Bool = false; + var bindButton:FlxButton; + var reset:UIButton; + var tweenieShit:Float = 0; + var keyboardText:FlxText; + var closeCallBack:Void->Void; + + public function new(?closeCallBack:Void->Void, ?openCallBack:Void->Void) + { + super(); + + this.closeCallBack = closeCallBack; + if(openCallBack != null) openCallBack(); + + bg = new FlxBackdrop(FlxGridOverlay.createGrid(80, 80, 160, 160, true, + FlxColor.fromRGB(FlxG.random.int(0, 255), FlxG.random.int(0, 255), FlxG.random.int(0, 255)), + FlxColor.fromRGB(FlxG.random.int(0, 255), FlxG.random.int(0, 255), FlxG.random.int(0, 255)))); + bg.velocity.set(40, 40); + bg.alpha = 0; + add(bg); + + ui = new FlxCamera(); + ui.bgColor.alpha = 0; + ui.alpha = 0; + FlxG.cameras.add(ui, false); + + buttonCamera = new FlxCamera(); + buttonCamera.bgColor.alpha = 0; + buttonCamera.alpha = 0; + FlxG.cameras.add(buttonCamera, false); + + itemText = new Alphabet(0, 60, ''); + add(itemText); + + leftArrow = new FlxSprite(0, itemText.y - 25); + leftArrow.frames = Paths.getSparrowAtlas('mobile/menu/arrows'); + leftArrow.animation.addByPrefix('idle', 'arrow left'); + leftArrow.animation.addByPrefix('press', "arrow push left"); + leftArrow.animation.play('idle'); + add(leftArrow); + + itemText.x = leftArrow.width + 70; + leftArrow.x = itemText.x - 60; + + rightArrow = new FlxSprite().loadGraphicFromSprite(leftArrow); + rightArrow.flipX = true; + rightArrow.setPosition(itemText.x + itemText.width + 10, itemText.y - 25); + add(rightArrow); + + positionText = new FlxText(0, FlxG.height, FlxG.width / 4, ''); + positionText.setFormat(Paths.font("vcr.ttf"), 18, FlxColor.WHITE, FlxTextAlign.LEFT); + positionText.visible = false; + + positionTextBg = FlxGradient.createGradientFlxSprite(250, 150, [FlxColor.BLACK, FlxColor.BLACK, FlxColor.BLACK, FlxColor.TRANSPARENT], 1, 360); + positionTextBg.setPosition(0, FlxG.height - positionTextBg.height); + positionTextBg.visible = false; + positionTextBg.alpha = 0.8; + add(positionTextBg); + add(positionText); + + keyboardText = new FlxText(0, 0, FlxG.width, "-- No Controls --", 14); + keyboardText.setFormat(Paths.font("vcr.ttf"), 36, FlxColor.WHITE, FlxTextAlign.CENTER); + keyboardText.screenCenter(); + add(keyboardText); + keyboardText.kill(); + + var exit = new UIButton(0, itemText.y - 25, "Exit & Save", () -> + { + MobileControls.mode = curOption; + if (options[curOption] == 'Pad-Custom') + MobileControls.setCustomMode(control.virtualPad); + CoolUtil.playMenuSFX(CANCEL); + if(closeCallBack != null) closeCallBack(); + close(); + }); + exit.color = FlxColor.LIME; + exit.setGraphicSize(Std.int(exit.width) * 3); + exit.updateHitbox(); + exit.x = FlxG.width - exit.width - 70; + exit.label.setFormat(Paths.font('vcr.ttf'), 28, FlxColor.WHITE, FlxTextAlign.CENTER); + exit.label.fieldWidth = exit.width; + exit.label.x = ((exit.width - exit.label.width) / 2) + exit.x; + exit.label.offset.y = -10; // WHY THE FUCK I CAN'T CHANGE THE LABEL Y + add(exit); + + reset = new UIButton(exit.x, exit.height + exit.y + 20, "Reset", () -> + { + changeOption(0); // realods the current control mode ig? + }); + reset.color = FlxColor.RED; + reset.setGraphicSize(Std.int(reset.width) * 3); + reset.updateHitbox(); + reset.label.setFormat(Paths.font('vcr.ttf'), 28, FlxColor.WHITE, FlxTextAlign.CENTER); + reset.label.fieldWidth = reset.width; + reset.label.x = ((reset.width - reset.label.width) / 2) + reset.x; + reset.label.offset.y = -10; + add(reset); + + cameras = [ui]; + leftArrow.cameras = rightArrow.cameras = reset.cameras = exit.cameras = [buttonCamera]; + FlxTween.tween(bg, {alpha: 0.45}, 0.3, { + ease: FlxEase.quadOut, + onComplete: (twn:FlxTween) -> + { + for (camera in [ui, buttonCamera]) + FlxTween.tween(camera, {alpha: 1}, 0.2, {ease: FlxEase.circOut}); + } + }); + changeOption(0); + setOptionText(); + FlxG.mouse.visible = true; + } + + override function update(elapsed:Float) + { + checkArrowButton(leftArrow, () -> changeOption(-1)); + checkArrowButton(rightArrow, () -> changeOption(1)); + + for(touch in FlxG.touches.list){ + if (options[curOption] == 'Pad-Custom') + { + if (buttonBinded) + { + if (touch.justReleased) + { + bindButton = null; + buttonBinded = false; + } + else + moveButton(touch, bindButton); + } + else + { + control.virtualPad.forEachAlive((button:FlxButton) -> + { + if (button.justPressed) + moveButton(touch, button); + }); + } + } + } + + tweenieShit += 180 * elapsed; + keyboardText.alpha = 1 - Math.sin((Math.PI * tweenieShit) / 180); + + super.update(elapsed); + } + + function changeControls(?type:Int = null) + { + if (type == null) + type = curOption; + if (control != null) + control.destroy(); + if (members.contains(control)) + remove(control); + control = new MobileControls(type); + add(control); + control.cameras = [ui]; + } + + function changeOption(change:Int) + { + CoolUtil.playMenuSFX(); + curOption += change; + + if (curOption < 0) + curOption = options.length - 1; + if (curOption >= options.length) + curOption = 0; + + switch (curOption) + { + case 2: + reset.visible = true; + keyboardText.kill(); + changeControls(); + default: + reset.visible = false; + keyboardText.kill(); + changeControls(); + } + updatePosText(); + setOptionText(); + } + + function setOptionText() + { + itemText.text = options[curOption].replace('-', ' '); + itemText.updateHitbox(); + itemText.offset.set(0, 15); + FlxTween.tween(rightArrow, {x: itemText.x + itemText.width + 10}, 0.1, {ease: FlxEase.quintOut}); + } + + function updatePosText() + { + var optionName = options[curOption]; + if (optionName == 'Pad-Custom') + { + positionText.visible = positionTextBg.visible = true; + positionText.text = 'LEFT X: ${control.virtualPad.buttonLeft.x} - Y: ${control.virtualPad.buttonLeft.y}\nDOWN X: ${control.virtualPad.buttonDown.x} - Y: ${control.virtualPad.buttonDown.y}\n\nUP X: ${control.virtualPad.buttonUp.x} - Y: ${control.virtualPad.buttonUp.y}\nRIGHT X: ${control.virtualPad.buttonRight.x} - Y: ${control.virtualPad.buttonRight.y}'; + positionText.setPosition(0, (((positionTextBg.height - positionText.height) / 2) + positionTextBg.y)); + } + else + positionText.visible = positionTextBg.visible = false; + } + + function checkArrowButton(button:FlxSprite, func:Void->Void) + { + // OVERLAPS WON'T WORK IDFK WHY + for(camera in button.cameras) + if (FlxG.mouse.getScreenPosition(camera).x >= button.x && FlxG.mouse.getScreenPosition(camera).x <= button.x + button.width && + FlxG.mouse.getScreenPosition(camera).y >= button.y && FlxG.mouse.getScreenPosition(camera).y <= button.y + button.height) + { + if (FlxG.mouse.justPressed) + func(); + if (FlxG.mouse.pressed) + button.animation.play('press'); + } + if (FlxG.mouse.justReleased && button.animation.curAnim.name == 'press') + button.animation.play('idle'); + + if (FlxG.keys.justPressed.LEFT && button == leftArrow || FlxG.keys.justPressed.RIGHT && button == rightArrow) + func(); + } + + function moveButton(touch:FlxTouch, button:FlxButton):Void + { + bindButton = button; + buttonBinded = bindButton == null ? false : true; + bindButton.x = touch.getScreenPosition(ui).x - Std.int(bindButton.width / 2); + bindButton.y = touch.getScreenPosition(ui).y - Std.int(bindButton.height / 2); + updatePosText(); + } +} diff --git a/source/mobile/objects/FlxButtonGroup.hx b/source/mobile/objects/FlxButtonGroup.hx new file mode 100644 index 000000000..f18dc5c2b --- /dev/null +++ b/source/mobile/objects/FlxButtonGroup.hx @@ -0,0 +1,6 @@ +package mobile.objects; + +import mobile.flixel.FlxButton; +import flixel.group.FlxSpriteGroup.FlxTypedSpriteGroup; + +typedef FlxButtonGroup = FlxTypedSpriteGroup; \ No newline at end of file diff --git a/source/mobile/objects/Hitbox.hx b/source/mobile/objects/Hitbox.hx new file mode 100644 index 000000000..9d66e5dde --- /dev/null +++ b/source/mobile/objects/Hitbox.hx @@ -0,0 +1,170 @@ +package mobile.objects; + +import flixel.FlxG; +import flixel.tweens.*; +import flixel.util.FlxColor; +import openfl.display.Shape; +import funkin.options.Options; +import mobile.flixel.FlxButton; +import openfl.display.BitmapData; +import flixel.util.FlxDestroyUtil; + +/** + * A zone with 4 hint's (A hitbox). + * It's really easy to customize the layout. + * + * @author: Mihai Alexandru and Karim Akra + */ +class Hitbox extends FlxButtonGroup +{ + //final offsetFir:Int = (ClientPrefs.data.hitbox2 ? Std.int(FlxG.height / 4) * 3 : 0); + //final offsetSec:Int = (ClientPrefs.data.hitbox2 ? 0 : Std.int(FlxG.height / 4)); + + public var buttonLeft:FlxButton = new FlxButton(0, 0); + public var buttonDown:FlxButton = new FlxButton(0, 0); + public var buttonUp:FlxButton = new FlxButton(0, 0); + public var buttonRight:FlxButton = new FlxButton(0, 0); + public var buttonExtra:FlxButton = new FlxButton(0, 0); + public var buttonExtra2:FlxButton = new FlxButton(0, 0); + + /** + * Create the zone. + */ + public function new(/*extraMode:ExtraActions*/) + { + super(); + + //switch (extraMode) + //{ + // case NONE: + add(buttonLeft = createHint(0, 0, Std.int(FlxG.width / 4), FlxG.height, 0xFFC24B99)); + add(buttonDown = createHint(FlxG.width / 4, 0, Std.int(FlxG.width / 4), FlxG.height, 0xFF00FFFF)); + add(buttonUp = createHint(FlxG.width / 2, 0, Std.int(FlxG.width / 4), FlxG.height, 0xFF12FA05)); + add(buttonRight = createHint((FlxG.width / 2) + (FlxG.width / 4), 0, Std.int(FlxG.width / 4), FlxG.height, 0xFFF9393F)); + /* case SINGLE: + add(buttonLeft = createHint(0, offsetSec, Std.int(FlxG.width / 4), Std.int(FlxG.height / 4) * 3, 0xFFC24B99)); + add(buttonDown = createHint(FlxG.width / 4, offsetSec, Std.int(FlxG.width / 4), Std.int(FlxG.height / 4) * 3, 0xFF00FFFF)); + add(buttonUp = createHint(FlxG.width / 2, offsetSec, Std.int(FlxG.width / 4), Std.int(FlxG.height / 4) * 3, 0xFF12FA05)); + add(buttonRight = createHint((FlxG.width / 2) + (FlxG.width / 4), offsetSec, Std.int(FlxG.width / 4), Std.int(FlxG.height / 4) * 3, + 0xFFF9393F)); + add(buttonExtra = createHint(0, offsetFir, FlxG.width, Std.int(FlxG.height / 4), 0xFF0066FF)); + case DOUBLE: + add(buttonLeft = createHint(0, offsetSec, Std.int(FlxG.width / 4), Std.int(FlxG.height / 4) * 3, 0xFFC24B99)); + add(buttonDown = createHint(FlxG.width / 4, offsetSec, Std.int(FlxG.width / 4), Std.int(FlxG.height / 4) * 3, 0xFF00FFFF)); + add(buttonUp = createHint(FlxG.width / 2, offsetSec, Std.int(FlxG.width / 4), Std.int(FlxG.height / 4) * 3, 0xFF12FA05)); + add(buttonRight = createHint((FlxG.width / 2) + (FlxG.width / 4), offsetSec, Std.int(FlxG.width / 4), Std.int(FlxG.height / 4) * 3, + 0xFFF9393F)); + add(buttonExtra2 = createHint(Std.int(FlxG.width / 2), offsetFir, Std.int(FlxG.width / 2), Std.int(FlxG.height / 4), 0xA6FF00)); + add(buttonExtra = createHint(0, offsetFir, Std.int(FlxG.width / 2), Std.int(FlxG.height / 4), 0xFF0066FF)); + } + */ + scrollFactor.set(); + var guh = Options.controlsAlpha; + if (guh >= 0.9) + guh = guh - 0.07; + alpha = Options.controlsAlpha; + } + + /** + * Clean up memory. + */ + override function destroy() + { + super.destroy(); + + buttonLeft = FlxDestroyUtil.destroy(buttonLeft); + buttonDown = FlxDestroyUtil.destroy(buttonDown); + buttonUp = FlxDestroyUtil.destroy(buttonUp); + buttonRight = FlxDestroyUtil.destroy(buttonRight); + buttonExtra = FlxDestroyUtil.destroy(buttonExtra); + buttonExtra2 = FlxDestroyUtil.destroy(buttonExtra2); + } + + private function createHint(X:Float, Y:Float, Width:Int, Height:Int, Color:Int = 0xFFFFFF):FlxButton + { + var hintTween:FlxTween = null; + var hint = new FlxButton(X, Y); + hint.loadGraphic(createHintGraphic(Width, Height)); + hint.color = Color; + hint.solid = false; + hint.immovable = true; + hint.multiTouch = true; + hint.moves = false; + hint.scrollFactor.set(); + hint.alpha = 0.00001; + hint.antialiasing = Options.antialiasing; + if (Options.hitboxType != 'hidden') + { + var controlsAlpha = Options.hitboxType == 'gradient' ? Options.controlsAlpha : 0.25; // so it won't cover up your whole screen with a solid color + hint.onDown.callback = function() + { + if (hintTween != null) + hintTween.cancel(); + + hintTween = FlxTween.tween(hint, {alpha: controlsAlpha}, controlsAlpha / 100, { + ease: FlxEase.circInOut, + onComplete: function(twn:FlxTween) + { + hintTween = null; + } + }); + } + hint.onUp.callback = function() + { + if (hintTween != null) + hintTween.cancel(); + + hintTween = FlxTween.tween(hint, {alpha: 0.00001}, controlsAlpha / 10, { + ease: FlxEase.circInOut, + onComplete: function(twn:FlxTween) + { + hintTween = null; + } + }); + } + hint.onOut.callback = function() + { + if (hintTween != null) + hintTween.cancel(); + + hintTween = FlxTween.tween(hint, {alpha: 0.00001}, controlsAlpha / 10, { + ease: FlxEase.circInOut, + onComplete: function(twn:FlxTween) + { + hintTween = null; + } + }); + } + } + #if FLX_DEBUG + hint.ignoreDrawDebug = true; + #end + return hint; + } + + function createHintGraphic(Width:Int, Height:Int):BitmapData + { + var guh = Options.controlsAlpha; + if (guh >= 0.9) + guh = Options.controlsAlpha - 0.07; + var shape:Shape = new Shape(); + shape.graphics.beginFill(0xFFFFFF); + if(Options.hitboxType == 'gradient'){ + shape.graphics.lineStyle(3, 0xFFFFFF, 1); + shape.graphics.drawRect(0, 0, Width, Height); + shape.graphics.lineStyle(0, 0, 0); + shape.graphics.drawRect(3, 3, Width - 6, Height - 6); + shape.graphics.endFill(); + shape.graphics.beginGradientFill(RADIAL, [0xFFFFFF, FlxColor.TRANSPARENT], [guh, 0], [0, 255], null, null, null, 0.5); + shape.graphics.drawRect(3, 3, Width - 6, Height - 6); + shape.graphics.endFill(); + } else { + shape.graphics.lineStyle(10, 0xFFFFFF, 1); + shape.graphics.drawRect(0, 0, Width, Height); + shape.graphics.endFill(); + } + var bitmap:BitmapData = new BitmapData(Width, Height, true, 0); + bitmap.draw(shape); + return bitmap; + } +} \ No newline at end of file diff --git a/source/mobile/objects/MobileControls.hx b/source/mobile/objects/MobileControls.hx new file mode 100644 index 000000000..0fdf5a870 --- /dev/null +++ b/source/mobile/objects/MobileControls.hx @@ -0,0 +1,200 @@ +package mobile.objects; + +import flixel.FlxG; +import flixel.math.FlxPoint; +import mobile.flixel.FlxButton; +import flixel.group.FlxSpriteGroup.FlxTypedSpriteGroup; +import mobile.flixel.FlxVirtualPad; +import flixel.util.FlxDestroyUtil; +import funkin.options.Options; + +class MobileControls extends FlxTypedSpriteGroup +{ + public var virtualPad:FlxVirtualPad = new FlxVirtualPad(FlxDPadMode.NONE, FlxActionMode.NONE); + public var hitbox:Hitbox = new Hitbox(); + // YOU CAN'T CHANGE PROPERTIES USING THIS EXCEPT WHEN IN RUNTIME!! (except for the variables it already has like buttonUp, buttonLeft...) + public var current:CurrentManager; + + public static var mode(get, set):Int; + public static var forcedControl:Null; + public static var mobileC(get, never):Bool; + + public function new(?forceType:Int) + { + super(); + forcedControl = mode; + if (forceType != null) + forcedControl = forceType; + switch (forcedControl) + { + case 0: // RIGHT_FULL + initControler(0); + case 1: // LEFT_FULL + initControler(1); + case 2: // CUSTOM + initControler(2); + case 3: // HITBOX + initControler(3); + case 4: // KEYBOARD + } + current = new CurrentManager(this); + //updateButtonsColors(); + } + + private function initControler(virtualPadMode:Int = 0) + { + switch (virtualPadMode) + { + case 0: + virtualPad = new FlxVirtualPad('RIGHT_FULL', 'NONE'); + add(virtualPad); + case 1: + virtualPad = new FlxVirtualPad('LEFT_FULL', 'NONE'); + add(virtualPad); + case 2: + virtualPad = getCustomMode(new FlxVirtualPad('RIGHT_FULL', 'NONE')); + add(virtualPad); + case 3: + hitbox = new Hitbox(); + add(hitbox); + } + } + + public static function setCustomMode(virtualPad:FlxVirtualPad):Void + { + if (FlxG.save.data.buttons == null) + { + FlxG.save.data.buttons = new Array(); + for (buttons in virtualPad) + FlxG.save.data.buttons.push(FlxPoint.get(buttons.x, buttons.y)); + } + else + { + var tempCount:Int = 0; + for (buttons in virtualPad) + { + FlxG.save.data.buttons[tempCount] = FlxPoint.get(buttons.x, buttons.y); + tempCount++; + } + } + + FlxG.save.flush(); + } + + public static function getCustomMode(virtualPad:FlxVirtualPad):FlxVirtualPad + { + var tempCount:Int = 0; + + if (FlxG.save.data.buttons == null) + return virtualPad; + + for (buttons in virtualPad) + { + if(FlxG.save.data.buttons[tempCount] != null){ + buttons.x = FlxG.save.data.buttons[tempCount].x; + buttons.y = FlxG.save.data.buttons[tempCount].y; + } + tempCount++; + } + + return virtualPad; + } + + override public function destroy():Void + { + super.destroy(); + + if (virtualPad != null) + { + virtualPad = FlxDestroyUtil.destroy(virtualPad); + virtualPad = null; + } + + if (hitbox != null) + { + hitbox = FlxDestroyUtil.destroy(hitbox); + hitbox = null; + } + } + + static function set_mode(mode:Int = 0) + { + FlxG.save.data.mobileControlsMode = mode; + FlxG.save.flush(); + return mode; + } + + static function get_mode():Int + { + if (forcedControl != null) + return forcedControl; + + if (FlxG.save.data.mobileControlsMode == null) + { + FlxG.save.data.mobileControlsMode = 0; + FlxG.save.flush(); + } + + return FlxG.save.data.mobileControlsMode; + } + + @:noCompletion + private static function get_mobileC():Bool return Options.controlsAlpha >= 0.1; + /* + public function updateButtonsColors() { + // Dynamic Controls Color + var buttonsColors:Array = []; + var data:Dynamic; + if (ClientPrefs.data.dynamicColors) + data = ClientPrefs.data; + else + data = ClientPrefs.defaultData; + + buttonsColors.push(data.arrowRGB[0][0]); + buttonsColors.push(data.arrowRGB[1][0]); + buttonsColors.push(data.arrowRGB[2][0]); + buttonsColors.push(data.arrowRGB[3][0]); + if (mode == 3) + { + virtualPad.buttonLeft2.color = buttonsColors[0]; + virtualPad.buttonDown2.color = buttonsColors[1]; + virtualPad.buttonUp2.color = buttonsColors[2]; + virtualPad.buttonRight2.color = buttonsColors[3]; + } + current.buttonLeft.color = buttonsColors[0]; + current.buttonDown.color = buttonsColors[1]; + current.buttonUp.color = buttonsColors[2]; + current.buttonRight.color = buttonsColors[3]; + } + */ +} + +class CurrentManager { + public var buttonLeft:FlxButton; + public var buttonDown:FlxButton; + public var buttonUp:FlxButton; + public var buttonRight:FlxButton; + //public var buttonExtra:FlxButton; + //public var buttonExtra2:FlxButton; + public var target:FlxButtonGroup; + + public function new(control:MobileControls){ + if(MobileControls.mode == 3) { + target = control.hitbox; + buttonLeft = control.hitbox.buttonLeft; + buttonDown = control.hitbox.buttonDown; + buttonUp = control.hitbox.buttonUp; + buttonRight = control.hitbox.buttonRight; + //buttonExtra = control.hitbox.buttonExtra; + //buttonExtra2 = control.hitbox.buttonExtra2; + } else { + target = control.virtualPad; + buttonLeft = control.virtualPad.buttonLeft; + buttonDown = control.virtualPad.buttonDown; + buttonUp = control.virtualPad.buttonUp; + buttonRight = control.virtualPad.buttonRight; + //buttonExtra = control.virtualPad.buttonExtra; + //buttonExtra2 = control.virtualPad.buttonExtra2; + } + } +} diff --git a/source/openfl/display/Shader.hx b/source/openfl/display/Shader.hx new file mode 100644 index 000000000..72b017197 --- /dev/null +++ b/source/openfl/display/Shader.hx @@ -0,0 +1,985 @@ +package openfl.display; + +#if !flash +import openfl.display3D._internal.GLProgram; +import openfl.display3D._internal.GLShader; +import openfl.display._internal.ShaderBuffer; +import openfl.utils._internal.Float32Array; +import openfl.utils._internal.Log; +import openfl.display3D.Context3D; +import openfl.display3D.Program3D; +import openfl.utils.ByteArray; + +/** + // TODO: Document GLSL Shaders + A Shader instance represents a Pixel Bender shader kernel in ActionScript. + To use a shader in your application, you create a Shader instance for it. + You then use that Shader instance in the appropriate way according to the + effect you want to create. For example, to use the shader as a filter, you + assign the Shader instance to the `shader` property of a ShaderFilter + object. + A shader defines a function that executes on all the pixels in an image, + one pixel at a time. The result of each call to the function is the output + color at that pixel coordinate in the image. A shader can specify one or + more input images, which are images whose content can be used in + determining the output of the function. A shader can also specify one or + more parameters, which are input values that can be used in calculating + the function output. In a single shader execution, the input and parameter + values are constant. The only thing that varies is the coordinate of the + pixel whose color is the function result. Shader function calls for + multiple output pixel coordinates execute in parallel to improve shader + execution performance. + + The shader bytecode can be loaded at run time using a URLLoader instance. + The following example demonstrates loading a shader bytecode file at run + time and linking it to a Shader instance. + + ```as3 + var loader:URLLoader = new URLLoader(); + loader.dataFormat = URLLoaderDataFormat.BINARY; + loader.addEventListener(Event.COMPLETE, onLoadComplete); + loader.load(new URLRequest("myShader.pbj")); + var shader:Shader; + + function onLoadComplete(event:Event):void { + // Create a new shader and set the loaded data as its bytecode + shader = new Shader(); + shader.byteCode = loader.data; + + // You can also pass the bytecode to the Shader() constructor like this: + // shader = new Shader(loader.data); + + // do something with the shader + } + ``` + + You can also embed the shader into the SWF at compile time using the + `[Embed]` metadata tag. The `[Embed]` metadata tag is only available if + you use the Flex SDK to compile the SWF. The `[Embed]` tag's `source` + parameter points to the shader file, and its `mimeType` parameter is + `"application/octet-stream"`, as in this example: + + ```as3 + [Embed(source="myShader.pbj", mimeType="application/octet-stream)] var MyShaderClass:Class; + + // ... + + // create a new shader and set the embedded shader as its bytecode var + shaderShader = new Shader(); + shader.byteCode = new MyShaderClass(); + + // You can also pass the bytecode to the Shader() constructor like this: + // var shader:Shader = new Shader(new MyShaderClass()); + + // do something with the shader + ``` + + In either case, you link the raw shader (the `URLLoader.data` property or + an instance of the `[Embed]` data class) to the Shader instance. As the + previous examples demonstrate, you can do this in two ways. You can pass + the shader bytecode as an argument to the `Shader()` constructor. + Alternatively, you can set it as the Shader instance's `byteCode` + property. + + Once a Shader instance is created, it can be used in one of several ways: + + * A shader fill: The output of the shader is used as a fill for content + drawn with the drawing API. Pass the Shader instance as an argument to the + `Graphics.beginShaderFill()` method. + * A shader filter: The output of the shader is used as a graphic filter + applied to a display object. Assign the Shader instance to the `shader` + property of a ShaderFilter instance. + * A blend mode: The output of the shader is rendered as the blending + between two overlapping display objects. Assign the Shader instance to the + `blendShader` property of the upper of the two display objects. + * Background shader processing: The shader executes in the background, + avoiding the possibility of freezing the display, and dispatches an event + when processing is complete. Assign the Shader instance to the `shader` + property of a ShaderJob instance. + + Shader fills, filters, and blends are not supported under GPU rendering. + + **Mobile Browser Support:** This feature is not supported in mobile + browsers. + + _Adobe AIR profile support:_ This feature is supported on all desktop operating + systems, but it is not supported on all mobile devices. It is not + supported on AIR for TV devices. See + [AIR Profile Support](https://help.adobe.com/en_US/air/build/WS144092a96ffef7cc16ddeea2126bb46b82f-8000.html) + for more information regarding API support across multiple profiles. +**/ +#if !openfl_debug +@:fileXml('tags="haxe,release"') +@:noDebug +#end +@:access(openfl.display3D.Context3D) +@:access(openfl.display3D.Program3D) +@:access(openfl.display.ShaderInput) +@:access(openfl.display.ShaderParameter) +// #if (!display && !macro) +#if !macro +@:autoBuild(openfl.utils._internal.ShaderMacro.build()) +#end +class Shader +{ + /** + The raw shader bytecode for this Shader instance. + **/ + public var byteCode(null, default):ByteArray; + + /** + Provides access to parameters, input images, and metadata for the + Shader instance. ShaderParameter objects representing parameters for + the shader, ShaderInput objects representing the input images for the + shader, and other values representing the shader's metadata are + dynamically added as properties of the `data` property object when the + Shader instance is created. Those properties can be used to introspect + the shader and to set parameter and input values. + For information about accessing and manipulating the dynamic + properties of the `data` object, see the ShaderData class description. + **/ + public var data(get, set):ShaderData; + + /** + Get or set the fragment source used when compiling with GLSL. + + This property is not available on the Flash target. + **/ + public var glFragmentSource(get, set):String; + + /** + The compiled GLProgram if available. + + This property is not available on the Flash target. + **/ + @SuppressWarnings("checkstyle:Dynamic") public var glProgram(default, null):GLProgram; + + /** + Get or set the vertex source used when compiling with GLSL. + + This property is not available on the Flash target. + **/ + public var glVertexSource(get, set):String; + + /** + The precision of math operations performed by the shader. + The set of possible values for the `precisionHint` property is defined + by the constants in the ShaderPrecision class. + + The default value is `ShaderPrecision.FULL`. Setting the precision to + `ShaderPrecision.FAST` can speed up math operations at the expense of + precision. + + Full precision mode (`ShaderPrecision.FULL`) computes all math + operations to the full width of the IEEE 32-bit floating standard and + provides consistent behavior on all platforms. In this mode, some math + operations such as trigonometric and exponential functions can be + slow. + + Fast precision mode (`ShaderPrecision.FAST`) is designed for maximum + performance but does not work consistently on different platforms and + individual CPU configurations. In many cases, this level of precision + is sufficient to create graphic effects without visible artifacts. + + The precision mode selection affects the following shader operations. + These operations are faster on an Intel processor with the SSE + instruction set: + + * `sin(x)` + * `cos(x)` + * `tan(x)` + * `asin(x)` + * `acos(x)` + * `atan(x)` + * `atan(x, y)` + * `exp(x)` + * `exp2(x)` + * `log(x)` + * `log2(x)` + * `pow(x, y)` + * `reciprocal(x)` + * `sqrt(x)` + **/ + public var precisionHint:ShaderPrecision; + + /** + The compiled Program3D if available. + + This property is not available on the Flash target. + **/ + public var program:Program3D; + + @:noCompletion private var __alpha:ShaderParameter; + @:noCompletion private var __bitmap:ShaderInput; + @:noCompletion private var __colorMultiplier:ShaderParameter; + @:noCompletion private var __colorOffset:ShaderParameter; + @:noCompletion private var __context:Context3D; + @:noCompletion private var __data:ShaderData; + @:noCompletion private var __glFragmentSource:String; + @:noCompletion private var __glSourceDirty:Bool; + @:noCompletion private var __glVertexSource:String; + @:noCompletion private var __hasColorTransform:ShaderParameter; + @:noCompletion private var __inputBitmapData:Array>; + @:noCompletion private var __isGenerated:Bool; + @:noCompletion private var __matrix:ShaderParameter; + @:noCompletion private var __numPasses:Int; + @:noCompletion private var __paramBool:Array>; + @:noCompletion private var __paramFloat:Array>; + @:noCompletion private var __paramInt:Array>; + @:noCompletion private var __position:ShaderParameter; + @:noCompletion private var __textureCoord:ShaderParameter; + @:noCompletion private var __texture:ShaderInput; + @:noCompletion private var __textureSize:ShaderParameter; + + #if openfljs + @:noCompletion private static function __init__() + { + untyped Object.defineProperties(Shader.prototype, { + "data": { + get: untyped #if haxe4 js.Syntax.code #else __js__ #end ("function () { return this.get_data (); }"), + set: untyped #if haxe4 js.Syntax.code #else __js__ #end ("function (v) { return this.set_data (v); }") + }, + "glFragmentSource": { + get: untyped #if haxe4 js.Syntax.code #else __js__ #end ("function () { return this.get_glFragmentSource (); }"), + set: untyped #if haxe4 js.Syntax.code #else __js__ #end ("function (v) { return this.set_glFragmentSource (v); }") + }, + "glVertexSource": { + get: untyped #if haxe4 js.Syntax.code #else __js__ #end ("function () { return this.get_glVertexSource (); }"), + set: untyped #if haxe4 js.Syntax.code #else __js__ #end ("function (v) { return this.set_glVertexSource (v); }") + }, + }); + } + #end + + /** + Creates a new Shader instance. + + @param code The raw shader bytecode to link to the Shader. + **/ + public function new(code:ByteArray = null) + { + byteCode = code; + precisionHint = FULL; + + __glSourceDirty = true; + __numPasses = 1; + __data = new ShaderData(code); + } + + @:noCompletion private function __clearUseArray():Void + { + for (parameter in __paramBool) + { + parameter.__useArray = false; + } + + for (parameter in __paramFloat) + { + parameter.__useArray = false; + } + + for (parameter in __paramInt) + { + parameter.__useArray = false; + } + } + + // private function __clone ():Shader { + // var classType = Type.getClass (this); + // var shader = Type.createInstance (classType, []); + // for (input in __inputBitmapData) { + // if (input.input != null) { + // var field = Reflect.field (shader.data, input.name); + // field.channels = input.channels; + // field.height = input.height; + // field.input = input.input; + // field.smoothing = input.smoothing; + // field.width = input.width; + // } + // } + // for (param in __paramBool) { + // if (param.value != null) { + // Reflect.field (shader.data, param.name).value = param.value.copy (); + // } + // } + // for (param in __paramFloat) { + // if (param.value != null) { + // Reflect.field (shader.data, param.name).value = param.value.copy (); + // } + // } + // for (param in __paramInt) { + // if (param.value != null) { + // Reflect.field (shader.data, param.name).value = param.value.copy (); + // } + // } + // return shader; + // } + @:noCompletion private function __createGLShader(source:String, type:Int):GLShader + { + var gl = __context.gl; + + var shader = gl.createShader(type); + gl.shaderSource(shader, source); + gl.compileShader(shader); + var shaderInfoLog = gl.getShaderInfoLog(shader); + var hasInfoLog = shaderInfoLog != null && StringTools.trim(shaderInfoLog) != ""; + var compileStatus = gl.getShaderParameter(shader, gl.COMPILE_STATUS); + + if (hasInfoLog || compileStatus == 0) + { + final startMessage = '${(compileStatus == 0) ? "Error" : "Info" } ${(type == gl.VERTEX_SHADER) ? "compiling vertex shader" : "compiling fragment shader"}'; + var message = startMessage; + message += "\n" + shaderInfoLog; + message += "\n" + source; + #if sys + if (compileStatus == 0) + { + try + { + if (!sys.FileSystem.exists('logs')) + sys.FileSystem.createDirectory('logs'); + + sys.io.File.saveContent('logs/' + 'ShaderCompileError.txt', '$message'); + } + catch (e:haxe.Exception) + Log.warn('Couldn\'t save error message. (${e.message})', null); + } + #end + if (compileStatus == 0) + #if (android && !macro) + android.Tools.showAlertDialog("Shader Compile Error!", message, null, null) + #elseif !ios + openfl.Lib.application.window.alert('$message', 'Shader Compile Error!') + #else + Log.error(message) + #end; + else if (hasInfoLog) + Log.debug(message); + } + + return shader; + } + + @:noCompletion private function __createGLProgram(vertexSource:String, fragmentSource:String):GLProgram + { + var gl = __context.gl; + + var vertexShader = __createGLShader(vertexSource, gl.VERTEX_SHADER); + var fragmentShader = __createGLShader(fragmentSource, gl.FRAGMENT_SHADER); + + var program = gl.createProgram(); + + // Fix support for drivers that don't draw if attribute 0 is disabled + for (param in __paramFloat) + { + if (param.name.indexOf("Position") > -1 && StringTools.startsWith(param.name, "openfl_")) + { + gl.bindAttribLocation(program, 0, param.name); + break; + } + } + + gl.attachShader(program, vertexShader); + gl.attachShader(program, fragmentShader); + gl.linkProgram(program); + + if (gl.getProgramParameter(program, gl.LINK_STATUS) == 0) + { + var message = "Unable to initialize the shader program"; + message += "\n" + gl.getProgramInfoLog(program); + Log.error(message); + } + + return program; + } + + @:noCompletion private function __disable():Void + { + if (program != null) + { + __disableGL(); + } + } + + @:noCompletion private function __disableGL():Void + { + var gl = __context.gl; + + var textureCount = 0; + + for (input in __inputBitmapData) + { + input.__disableGL(__context, textureCount); + textureCount++; + if (textureCount == gl.MAX_TEXTURE_IMAGE_UNITS) + break; + } + + for (parameter in __paramBool) + { + parameter.__disableGL(__context); + } + + for (parameter in __paramFloat) + { + parameter.__disableGL(__context); + } + + for (parameter in __paramInt) + { + parameter.__disableGL(__context); + } + + __context.__bindGLArrayBuffer(null); + + #if lime + if (__context.__context.type == OPENGL) + { + gl.disable(gl.TEXTURE_2D); + } + #end + } + + @:noCompletion private function __enable():Void + { + __init(); + + if (program != null) + { + __enableGL(); + } + } + + @:noCompletion private function __enableGL():Void + { + var textureCount = 0; + + var gl = __context.gl; + + for (input in __inputBitmapData) + { + gl.uniform1i(input.index, textureCount); + textureCount++; + } + + #if lime + if (__context.__context.type == OPENGL && textureCount > 0) + { + gl.enable(gl.TEXTURE_2D); + } + #end + } + + @:noCompletion private function __init():Void + { + if (__data == null) + { + __data = cast new ShaderData(null); + } + + if (__glFragmentSource != null && __glVertexSource != null && (program == null || __glSourceDirty)) + { + __initGL(); + } + } + + @:noCompletion private function __initGL():Void + { + if (__glSourceDirty || __paramBool == null) + { + __glSourceDirty = false; + program = null; + + __inputBitmapData = new Array(); + __paramBool = new Array(); + __paramFloat = new Array(); + __paramInt = new Array(); + + __processGLData(glVertexSource, "attribute"); + __processGLData(glVertexSource, "uniform"); + __processGLData(glFragmentSource, "uniform"); + } + + if (__context != null && program == null) + { + var gl = __context.gl; + + #if (js && html5) + var prefix = (precisionHint == FULL ? "precision mediump float;\n" : "precision lowp float;\n"); + #else + var prefix = "#ifdef GL_ES\n" + + (precisionHint == FULL ? "#ifdef GL_FRAGMENT_PRECISION_HIGH\n" + + "precision highp float;\n" + + "#else\n" + + "precision mediump float;\n" + + "#endif\n" : "precision lowp float;\n") + + "#endif\n\n"; + #end + + var vertex = prefix + glVertexSource; + var fragment = prefix + glFragmentSource; + + var id = vertex + fragment; + + if (__context.__programs.exists(id)) + { + program = __context.__programs.get(id); + } + else + { + program = __context.createProgram(GLSL); + + // TODO + // program.uploadSources (vertex, fragment); + program.__glProgram = __createGLProgram(vertex, fragment); + + __context.__programs.set(id, program); + } + + if (program != null) + { + glProgram = program.__glProgram; + + for (input in __inputBitmapData) + { + if (input.__isUniform) + { + input.index = gl.getUniformLocation(glProgram, input.name); + } + else + { + input.index = gl.getAttribLocation(glProgram, input.name); + } + } + + for (parameter in __paramBool) + { + if (parameter.__isUniform) + { + parameter.index = gl.getUniformLocation(glProgram, parameter.name); + } + else + { + parameter.index = gl.getAttribLocation(glProgram, parameter.name); + } + } + + for (parameter in __paramFloat) + { + if (parameter.__isUniform) + { + parameter.index = gl.getUniformLocation(glProgram, parameter.name); + } + else + { + parameter.index = gl.getAttribLocation(glProgram, parameter.name); + } + } + + for (parameter in __paramInt) + { + if (parameter.__isUniform) + { + parameter.index = gl.getUniformLocation(glProgram, parameter.name); + } + else + { + parameter.index = gl.getAttribLocation(glProgram, parameter.name); + } + } + } + } + } + + @:noCompletion private function __processGLData(source:String, storageType:String):Void + { + var lastMatch = 0, position, regex, name, type; + + if (storageType == "uniform") + { + regex = ~/uniform ([A-Za-z0-9]+) ([A-Za-z0-9_]+)/; + } + else + { + regex = ~/attribute ([A-Za-z0-9]+) ([A-Za-z0-9_]+)/; + } + + while (regex.matchSub(source, lastMatch)) + { + type = regex.matched(1); + name = regex.matched(2); + + if (StringTools.startsWith(name, "gl_")) + { + continue; + } + + var isUniform = (storageType == "uniform"); + + if (StringTools.startsWith(type, "sampler")) + { + var input = new ShaderInput(); + input.name = name; + input.__isUniform = isUniform; + __inputBitmapData.push(input); + + switch (name) + { + case "openfl_Texture": + __texture = input; + case "bitmap": + __bitmap = input; + default: + } + + Reflect.setField(__data, name, input); + if (__isGenerated) + Reflect.setField(this, name, input); + } + else if (!Reflect.hasField(__data, name) || Reflect.field(__data, name) == null) + { + var parameterType:ShaderParameterType = switch (type) + { + case "bool": BOOL; + case "double", "float": FLOAT; + case "int", "uint": INT; + case "bvec2": BOOL2; + case "bvec3": BOOL3; + case "bvec4": BOOL4; + case "ivec2", "uvec2": INT2; + case "ivec3", "uvec3": INT3; + case "ivec4", "uvec4": INT4; + case "vec2", "dvec2": FLOAT2; + case "vec3", "dvec3": FLOAT3; + case "vec4", "dvec4": FLOAT4; + case "mat2", "mat2x2": MATRIX2X2; + case "mat2x3": MATRIX2X3; + case "mat2x4": MATRIX2X4; + case "mat3x2": MATRIX3X2; + case "mat3", "mat3x3": MATRIX3X3; + case "mat3x4": MATRIX3X4; + case "mat4x2": MATRIX4X2; + case "mat4x3": MATRIX4X3; + case "mat4", "mat4x4": MATRIX4X4; + default: null; + } + + var length = switch (parameterType) + { + case BOOL2, INT2, FLOAT2: 2; + case BOOL3, INT3, FLOAT3: 3; + case BOOL4, INT4, FLOAT4, MATRIX2X2: 4; + case MATRIX3X3: 9; + case MATRIX4X4: 16; + default: 1; + } + + var arrayLength = switch (parameterType) + { + case MATRIX2X2: 2; + case MATRIX3X3: 3; + case MATRIX4X4: 4; + default: 1; + } + + switch (parameterType) + { + case BOOL, BOOL2, BOOL3, BOOL4: + var parameter = new ShaderParameter(); + parameter.name = name; + parameter.type = parameterType; + parameter.__arrayLength = arrayLength; + parameter.__isBool = true; + parameter.__isUniform = isUniform; + parameter.__length = length; + __paramBool.push(parameter); + + if (name == "openfl_HasColorTransform") + { + __hasColorTransform = parameter; + } + + Reflect.setField(__data, name, parameter); + if (__isGenerated) + Reflect.setField(this, name, parameter); + + case INT, INT2, INT3, INT4: + var parameter = new ShaderParameter(); + parameter.name = name; + parameter.type = parameterType; + parameter.__arrayLength = arrayLength; + parameter.__isInt = true; + parameter.__isUniform = isUniform; + parameter.__length = length; + __paramInt.push(parameter); + Reflect.setField(__data, name, parameter); + if (__isGenerated) + Reflect.setField(this, name, parameter); + + default: + var parameter = new ShaderParameter(); + parameter.name = name; + parameter.type = parameterType; + parameter.__arrayLength = arrayLength; + #if lime + if (arrayLength > 0) + parameter.__uniformMatrix = new Float32Array(arrayLength * arrayLength); + #end + parameter.__isFloat = true; + parameter.__isUniform = isUniform; + parameter.__length = length; + __paramFloat.push(parameter); + + if (StringTools.startsWith(name, "openfl_")) + { + switch (name) + { + case "openfl_Alpha": __alpha = parameter; + case "openfl_ColorMultiplier": __colorMultiplier = parameter; + case "openfl_ColorOffset": __colorOffset = parameter; + case "openfl_Matrix": __matrix = parameter; + case "openfl_Position": __position = parameter; + case "openfl_TextureCoord": __textureCoord = parameter; + case "openfl_TextureSize": __textureSize = parameter; + default: + } + } + + Reflect.setField(__data, name, parameter); + if (__isGenerated) + Reflect.setField(this, name, parameter); + } + } + + position = regex.matchedPos(); + lastMatch = position.pos + position.len; + } + } + + @:noCompletion private function __update():Void + { + if (program != null) + { + __updateGL(); + } + } + + @:noCompletion private function __updateFromBuffer(shaderBuffer:ShaderBuffer, bufferOffset:Int):Void + { + if (program != null) + { + __updateGLFromBuffer(shaderBuffer, bufferOffset); + } + } + + @:noCompletion private function __updateGL():Void + { + var textureCount = 0; + + for (input in __inputBitmapData) + { + input.__updateGL(__context, textureCount); + textureCount++; + } + + for (parameter in __paramBool) + { + parameter.__updateGL(__context); + } + + for (parameter in __paramFloat) + { + parameter.__updateGL(__context); + } + + for (parameter in __paramInt) + { + parameter.__updateGL(__context); + } + } + + @:noCompletion private function __updateGLFromBuffer(shaderBuffer:ShaderBuffer, bufferOffset:Int):Void + { + var textureCount = 0; + var input, inputData, inputFilter, inputMipFilter, inputWrap; + + for (i in 0...shaderBuffer.inputCount) + { + input = shaderBuffer.inputRefs[i]; + inputData = shaderBuffer.inputs[i]; + inputFilter = shaderBuffer.inputFilter[i]; + inputMipFilter = shaderBuffer.inputMipFilter[i]; + inputWrap = shaderBuffer.inputWrap[i]; + + if (inputData != null) + { + input.__updateGL(__context, textureCount, inputData, inputFilter, inputMipFilter, inputWrap); + textureCount++; + } + } + + var gl = __context.gl; + + if (shaderBuffer.paramDataLength > 0) + { + if (shaderBuffer.paramDataBuffer == null) + { + shaderBuffer.paramDataBuffer = gl.createBuffer(); + } + + // Log.verbose ("bind param data buffer (length: " + shaderBuffer.paramData.length + ") (" + shaderBuffer.paramCount + ")"); + + __context.__bindGLArrayBuffer(shaderBuffer.paramDataBuffer); + gl.bufferData(gl.ARRAY_BUFFER, shaderBuffer.paramData, gl.DYNAMIC_DRAW); + } + else + { + // Log.verbose ("bind buffer null"); + + __context.__bindGLArrayBuffer(null); + } + + var boolIndex = 0; + var floatIndex = 0; + var intIndex = 0; + + var boolCount = shaderBuffer.paramBoolCount; + var floatCount = shaderBuffer.paramFloatCount; + var paramData = shaderBuffer.paramData; + + var boolRef, floatRef, intRef, hasOverride; + var overrideBoolValue:Array = null, + overrideFloatValue:Array = null, + overrideIntValue:Array = null; + + for (i in 0...shaderBuffer.paramCount) + { + hasOverride = false; + + if (i < boolCount) + { + boolRef = shaderBuffer.paramRefs_Bool[boolIndex]; + + for (j in 0...shaderBuffer.overrideBoolCount) + { + if (boolRef.name == shaderBuffer.overrideBoolNames[j]) + { + overrideBoolValue = shaderBuffer.overrideBoolValues[j]; + hasOverride = true; + break; + } + } + + if (hasOverride) + { + boolRef.__updateGL(__context, overrideBoolValue); + } + else + { + boolRef.__updateGLFromBuffer(__context, paramData, shaderBuffer.paramPositions[i], shaderBuffer.paramLengths[i], bufferOffset); + } + + boolIndex++; + } + else if (i < boolCount + floatCount) + { + floatRef = shaderBuffer.paramRefs_Float[floatIndex]; + + for (j in 0...shaderBuffer.overrideFloatCount) + { + if (floatRef.name == shaderBuffer.overrideFloatNames[j]) + { + overrideFloatValue = shaderBuffer.overrideFloatValues[j]; + hasOverride = true; + break; + } + } + + if (hasOverride) + { + floatRef.__updateGL(__context, overrideFloatValue); + } + else + { + floatRef.__updateGLFromBuffer(__context, paramData, shaderBuffer.paramPositions[i], shaderBuffer.paramLengths[i], bufferOffset); + } + + floatIndex++; + } + else + { + intRef = shaderBuffer.paramRefs_Int[intIndex]; + + for (j in 0...shaderBuffer.overrideIntCount) + { + if (intRef.name == shaderBuffer.overrideIntNames[j]) + { + overrideIntValue = cast shaderBuffer.overrideIntValues[j]; + hasOverride = true; + break; + } + } + + if (hasOverride) + { + intRef.__updateGL(__context, overrideIntValue); + } + else + { + intRef.__updateGLFromBuffer(__context, paramData, shaderBuffer.paramPositions[i], shaderBuffer.paramLengths[i], bufferOffset); + } + + intIndex++; + } + } + } + + // Get & Set Methods + @:noCompletion private function get_data():ShaderData + { + if (__glSourceDirty || __data == null) + { + __init(); + } + + return __data; + } + + @:noCompletion private function set_data(value:ShaderData):ShaderData + { + return __data = cast value; + } + + @:noCompletion private function get_glFragmentSource():String + { + return __glFragmentSource; + } + + @:noCompletion private function set_glFragmentSource(value:String):String + { + if (value != __glFragmentSource) + { + __glSourceDirty = true; + } + + return __glFragmentSource = value; + } + + @:noCompletion private function get_glVertexSource():String + { + return __glVertexSource; + } + + @:noCompletion private function set_glVertexSource(value:String):String + { + if (value != __glVertexSource) + { + __glSourceDirty = true; + } + + return __glVertexSource = value; + } +} +#else +typedef Shader = flash.display.Shader; +#end \ No newline at end of file diff --git a/source/openfl/utils/Assets.hx b/source/openfl/utils/Assets.hx index db92e5303..13538288c 100644 --- a/source/openfl/utils/Assets.hx +++ b/source/openfl/utils/Assets.hx @@ -614,6 +614,7 @@ class Assets } else { + @:privateAccess LimeAssets.libraries.remove(name); _library = new AssetLibrary(); _library.__proxy = library; LimeAssets.registerLibrary(name, _library); From 792d6515e4c90a803ab5864a3a35b27ae1118b6a Mon Sep 17 00:00:00 2001 From: Lily Date: Fri, 20 Sep 2024 23:57:34 +0300 Subject: [PATCH 02/93] codenameify Delete .github/workflows/mobile-release.yml Delete .github/workflows/main.yml --- .github/workflows/android.yml | 75 ++++++++++++++++++ .github/workflows/ios.yml | 32 ++++++++ .github/workflows/main.yml | 111 --------------------------- .github/workflows/mobile-release.yml | 82 -------------------- 4 files changed, 107 insertions(+), 193 deletions(-) create mode 100644 .github/workflows/android.yml create mode 100644 .github/workflows/ios.yml delete mode 100644 .github/workflows/main.yml delete mode 100644 .github/workflows/mobile-release.yml diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml new file mode 100644 index 000000000..10542a75e --- /dev/null +++ b/.github/workflows/android.yml @@ -0,0 +1,75 @@ +name: Android Build +on: + push: + workflow_dispatch: +jobs: + build: + name: Android Build + permissions: write-all + runs-on: ubuntu-latest + steps: + - name: Pulling the new commit + uses: actions/checkout@v2 + - name: Setup Haxe + uses: krdlab/setup-haxe@master + with: + haxe-version: 4.2.5 + - name: Restore existing build cache for faster compilation + uses: actions/cache@v3 + with: + # not caching the bin folder to prevent asset duplication and stuff like that + key: cache-build-android + path: | + ~/.gradle + .haxelib/ + export/release/android/haxe/ + export/release/android/obj/ + restore-keys: | + cache-build-android + - name: Installing/Updating libraries + run: | + haxe -cp commandline -D analyzer-optimize --run Main setup + - name: Configuring Android + run: | + haxelib run lime config ANDROID_SDK $ANDROID_HOME + haxelib run lime config ANDROID_NDK_ROOT $ANDROID_NDK_LATEST_HOME + haxelib run lime config JAVA_HOME $JAVA_HOME_17_X64 + haxelib run lime config ANDROID_SETUP true + - name: Building the game + run: haxelib run lime build android + - name: Uploading artifact + uses: actions/upload-artifact@v4 + with: + name: Codename Engine + path: export/release/android/bin/app/build/outputs/apk/release/*.apk + - name: Clearing already existing cache + uses: actions/github-script@v6 + with: + script: | + const caches = await github.rest.actions.getActionsCacheList({ + owner: context.repo.owner, + repo: context.repo.repo, + }) + for (const cache of caches.data.actions_caches) { + if (cache.key == "cache-build-android") { + console.log('Clearing ' + cache.key + '...') + await github.rest.actions.deleteActionsCacheById({ + owner: context.repo.owner, + repo: context.repo.repo, + cache_id: cache.id, + }) + console.log("Cache cleared.") + } + } + - name: Uploading new cache + uses: actions/cache@v3 + with: + # caching again since for some reason it doesnt work with the first post cache shit + key: cache-build-android + path: | + ~/.gradle + .haxelib/ + export/release/android/haxe/ + export/release/android/obj/ + restore-keys: | + cache-build-android \ No newline at end of file diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml new file mode 100644 index 000000000..c1673f363 --- /dev/null +++ b/.github/workflows/ios.yml @@ -0,0 +1,32 @@ +name: iOS Build +on: + push: + workflow_dispatch: +jobs: + build: + name: iOS Build + permissions: write-all + runs-on: macos-13 + steps: + - name: Pulling the new commit + uses: actions/checkout@v2 + - name: Setting up Haxe + uses: krdlab/setup-haxe@v1 + with: + haxe-version: 4.2.5 + - name: Installing/Updating libraries + run: | + haxe -cp commandline -D analyzer-optimize --run Main setup + - name: Building the game + run: haxelib run lime build ios -nosign + - name: Making ipa file + run: | + cd export/*/ios/build/*-iphoneos + mkdir Payload + mv *.app Payload + zip -r CodenameEngine.ipa Payload + - name: Upload Artifact (iOS) + uses: actions/upload-artifact@v4 + with: + name: Codename Engine + path: export/release/ios/build/Release-iphoneos/*.ipa \ No newline at end of file diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 582928bb7..000000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,111 +0,0 @@ -name: Main -on: workflow_dispatch -jobs: - Desktop: - runs-on: ${{matrix.os}} - strategy: - fail-fast: false - matrix: - os: [windows-latest, ubuntu-latest, macos-12, macos-14] - steps: - - name: Checkout - uses: actions/checkout@main - - name: Setup Haxe - uses: krdlab/setup-haxe@master - with: - haxe-version: 4.3.6 - - name: Install libVLC (Linux) - if: startsWith(matrix.os, 'ubuntu') - run: sudo apt install libvlc-dev libvlccore-dev - - name: Install Libraries - run: | - haxelib install hmm --quiet - haxelib run hmm install --quiet - - name: Compile (Windows) - if: startsWith(matrix.os, 'windows') - run: haxelib run lime build windows - - name: Compile (Linux) - if: startsWith(matrix.os, 'ubuntu') - run: haxelib run lime build linux - - name: Compile (macOS) - if: startsWith(matrix.os, 'macos') - run: haxelib run lime build mac - - name: Upload Artifact (Windows) - if: startsWith(matrix.os, 'windows') - uses: actions/upload-artifact@main - with: - name: windowsBuild - path: export\release\windows\bin\* - if-no-files-found: error - - name: Upload Artifact (Linux) - if: startsWith(matrix.os, 'ubuntu') - uses: actions/upload-artifact@main - with: - name: linuxBuild - path: export/release/linux/bin/* - if-no-files-found: error - - name: Upload Artifact (macOS 12) - if: matrix.os == 'macos-12' - uses: actions/upload-artifact@main - with: - name: macOSBuild-x86_64 - path: export/release/macos/bin/* - if-no-files-found: error - - name: Upload Artifact (macOS 14) - if: matrix.os == 'macos-14' - uses: actions/upload-artifact@main - with: - name: macOSBuild-arm64 - path: export/release/macos/bin/* - if-no-files-found: error - Mobile: - runs-on: ${{matrix.os}} - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, macos-14] - steps: - - name: Checkout - uses: actions/checkout@main - - name: Setup Haxe - uses: krdlab/setup-haxe@master - with: - haxe-version: 4.3.6 - - name: Install Libraries - run: | - haxelib install hmm --quiet - haxelib run hmm install --quiet - - name: Configure Android - if: startsWith(matrix.os, 'ubuntu') - run: | - haxelib run lime config ANDROID_SDK $ANDROID_HOME - haxelib run lime config ANDROID_NDK_ROOT $ANDROID_NDK_LATEST_HOME - haxelib run lime config JAVA_HOME $JAVA_HOME_17_X64 - haxelib run lime config ANDROID_SETUP true - - name: Compile (Android) - if: startsWith(matrix.os, 'ubuntu') - run: haxelib run lime build android -ONLY_ARMV7 - - name: Compile (iOS) - if: startsWith(matrix.os, 'macos') - run: haxelib run lime build ios -nosign - - name: Make Ipa - if: startsWith(matrix.os, 'macos') - run: | - cd export/release/ios/build/*-iphoneos - mkdir Payload - mv *.app Payload - zip -r CodenameEngine.ipa Payload - - name: Upload Artifact (Android) - if: startsWith(matrix.os, 'ubuntu') - uses: actions/upload-artifact@main - with: - name: androidBuild - path: export/release/android/bin/app/build/outputs/apk/release/*.apk - if-no-files-found: error - - name: Upload Artifact (iOS) - if: startsWith(matrix.os, 'macos') - uses: actions/upload-artifact@main - with: - name: iOSBuild - path: export/release/ios/build/Release-iphoneos/*.ipa - if-no-files-found: error diff --git a/.github/workflows/mobile-release.yml b/.github/workflows/mobile-release.yml deleted file mode 100644 index da7fddff2..000000000 --- a/.github/workflows/mobile-release.yml +++ /dev/null @@ -1,82 +0,0 @@ -name: Mobile + Release -on: workflow_dispatch -jobs: - Mobile: - runs-on: ${{matrix.os}} - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, macos-14] - steps: - - name: Checkout - uses: actions/checkout@main - - name: Setup Haxe - uses: krdlab/setup-haxe@master - with: - haxe-version: 4.3.6 - - name: Install Libraries - run: | - haxelib install hmm --quiet - haxelib run hmm install --quiet - - name: Configure Android - if: startsWith(matrix.os, 'ubuntu') - run: | - haxelib run lime config ANDROID_SDK $ANDROID_HOME - haxelib run lime config ANDROID_NDK_ROOT $ANDROID_NDK_LATEST_HOME - haxelib run lime config JAVA_HOME $JAVA_HOME_17_X64 - haxelib run lime config ANDROID_SETUP true - - name: Compile (Android) - if: startsWith(matrix.os, 'ubuntu') - run: haxelib run lime build android -final - - name: Compile (iOS) - if: startsWith(matrix.os, 'macos') - run: haxelib run lime build ios -final -nosign - - name: Make Ipa And Zip For Release - if: startsWith(matrix.os, 'macos') - run: | - cd export/release/ios/build/*-iphoneos - mkdir Payload - mv *.app Payload - zip -r CodenameEngine.ipa Payload - zip CodenameEngine-iOS.zip CodenameEngine.ipa - - name: Upload Artifact (Android) - if: startsWith(matrix.os, 'ubuntu') - uses: actions/upload-artifact@main - with: - name: androidBuild - path: export/release/android/bin/app/build/outputs/apk/release/*.apk - if-no-files-found: error - - name: Upload Artifact (iOS) - if: startsWith(matrix.os, 'macos') - uses: actions/upload-artifact@main - with: - name: iOSBuild - path: export/release/ios/build/Release-iphoneos/*.zip - if-no-files-found: error - Releaser: - needs: [Mobile] - runs-on: ubuntu-latest - permissions: write-all - steps: - - name: Download Android Build - uses: actions/download-artifact@main - with: - name: androidBuild - path: /home/runner - - name: Move Android File - run: mv /home/runner/CodenameEngine-release.apk /home/runner/CodenameEngine-Android.apk - - name: Download iOS Build - uses: actions/download-artifact@main - with: - name: iOSBuild - path: /home/runner - - name: Publish The Release - uses: marvinpinto/action-automatic-releases@latest - with: - repo_token: "${{ secrets.GITHUB_TOKEN }}" - prerelease: true - automatic_release_tag: "dev-ca565de" - title: "DevBuild ca565de" - files: | - /home/runner/*.apk - /home/runner/*.zip From d77a5e34911072aaed8fec3afbc96d976519f0c7 Mon Sep 17 00:00:00 2001 From: Lily Date: Sat, 21 Sep 2024 00:29:08 +0300 Subject: [PATCH 03/93] I forgor to change that --- .github/workflows/ios.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index c1673f363..9d0a5a09a 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -25,8 +25,8 @@ jobs: mkdir Payload mv *.app Payload zip -r CodenameEngine.ipa Payload - - name: Upload Artifact (iOS) + - name: Uploading artifact uses: actions/upload-artifact@v4 with: name: Codename Engine - path: export/release/ios/build/Release-iphoneos/*.ipa \ No newline at end of file + path: export/release/ios/build/Release-iphoneos/*.ipa From c08018a31066762339b8bf5295f2daf8f83092f8 Mon Sep 17 00:00:00 2001 From: Lily Date: Sat, 21 Sep 2024 00:33:02 +0300 Subject: [PATCH 04/93] oh wait- --- .github/workflows/android.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 10542a75e..8f6aeb92b 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -11,7 +11,7 @@ jobs: - name: Pulling the new commit uses: actions/checkout@v2 - name: Setup Haxe - uses: krdlab/setup-haxe@master + uses: krdlab/setup-haxe@v1 with: haxe-version: 4.2.5 - name: Restore existing build cache for faster compilation @@ -72,4 +72,4 @@ jobs: export/release/android/haxe/ export/release/android/obj/ restore-keys: | - cache-build-android \ No newline at end of file + cache-build-android From e46a1a41c9edada8d81b03fbfcce8ebb17988c3a Mon Sep 17 00:00:00 2001 From: Lily <124677802+LilyRoss19@users.noreply.github.com> Date: Sun, 22 Sep 2024 05:40:56 +0000 Subject: [PATCH 05/93] switch `Mobile Porting Team` to `Codename Devs` on editor warnings --- .../funkin/editors/character/CharacterSelection.hx | 4 ++-- source/funkin/editors/charter/CharterSelection.hx | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/source/funkin/editors/character/CharacterSelection.hx b/source/funkin/editors/character/CharacterSelection.hx index d79b4d150..bee9aac02 100644 --- a/source/funkin/editors/character/CharacterSelection.hx +++ b/source/funkin/editors/character/CharacterSelection.hx @@ -25,7 +25,7 @@ class CharacterSelection extends EditorTreeMenu new IconOption(char, "Press " + button + " to edit this character.", Character.getIconFromCharName(char), function() { #if mobile - openSubState(new UIWarningSubstate("CharacterEditor: Not Supported!", "This feature isnt supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Mobile Porting Team", [ + openSubState(new UIWarningSubstate("CharacterEditor: Not Supported!", "This feature isn't supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Codename Devs", [ {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} ])); #else @@ -35,7 +35,7 @@ class CharacterSelection extends EditorTreeMenu ]; list.insert(0, new NewOption("New Character", "New Character", function() { - openSubState(new UIWarningSubstate("New Character: Feature Not Implemented!", "This feature isnt implemented yet. Please wait for more cne updates to have this functional.\n\n\n- Codename Devs", [ + openSubState(new UIWarningSubstate("New Character: Feature Not Implemented!", "This feature isn't implemented yet. Please wait for more cne updates to have this functional.\n\n\n- Codename Devs", [ {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} ])); })); diff --git a/source/funkin/editors/charter/CharterSelection.hx b/source/funkin/editors/charter/CharterSelection.hx index 331539a7d..08711d27d 100644 --- a/source/funkin/editors/charter/CharterSelection.hx +++ b/source/funkin/editors/charter/CharterSelection.hx @@ -33,7 +33,7 @@ class CharterSelection extends EditorTreeMenu { for(d in s.difficulties) if (d != "") new TextOption(d, "Press " + button + " to edit the chart for the selected difficulty", function() { #if mobile - openSubState(new UIWarningSubstate("Charter: Not Supported!", "This feature isnt supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Mobile Porting Team", [ + openSubState(new UIWarningSubstate("Charter: Not Supported!", "This feature isn't supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Codename Devs", [ {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} ])); #else @@ -43,7 +43,7 @@ class CharterSelection extends EditorTreeMenu { ]; list.push(new NewOption("New Difficulty", "New Difficulty", function() { #if mobile - openSubState(new UIWarningSubstate("New Difficulty: Not Supported!", "This feature isnt supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Mobile Porting Team", [ + openSubState(new UIWarningSubstate("New Difficulty: Not Supported!", "This feature isn't supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Codename Devs", [ {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} ])); #else @@ -56,7 +56,7 @@ class CharterSelection extends EditorTreeMenu { list.insert(0, new NewOption("New Song", "New Song", function() { #if mobile - openSubState(new UIWarningSubstate("New Song: Not Supported!", "This feature isnt supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Mobile Porting Team", [ + openSubState(new UIWarningSubstate("New Song: Not Supported!", "This feature isn't supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Codename Devs", [ {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} ])); #else @@ -139,7 +139,7 @@ class CharterSelection extends EditorTreeMenu { for(d in creation.meta.difficulties) if (d != "") new TextOption(d, "Press " + button + " to edit the chart for the selected difficulty", function() { #if mobile - openSubState(new UIWarningSubstate("Charter: Not Supported!", "This feature isnt supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Mobile Porting Team", [ + openSubState(new UIWarningSubstate("Charter: Not Supported!", "This feature isn't supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Codename Devs", [ {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} ])); #else @@ -149,7 +149,7 @@ class CharterSelection extends EditorTreeMenu { ]; list.push(new NewOption("New Difficulty", "New Difficulty", function() { #if mobile - openSubState(new UIWarningSubstate("New Difficulty: Not Supported!", "This feature isnt supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Mobile Porting Team", [ + openSubState(new UIWarningSubstate("New Difficulty: Not Supported!", "This feature isn't supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Codename Devs", [ {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} ])); #else @@ -184,7 +184,7 @@ class CharterSelection extends EditorTreeMenu { curSong.difficulties.push(name); var option = new TextOption(name, "Press " + button + " to edit the chart for the selected difficulty", function() { #if mobile - openSubState(new UIWarningSubstate("Charter: Not Supported!", "This feature isnt supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Mobile Porting Team", [ + openSubState(new UIWarningSubstate("Charter: Not Supported!", "This feature isn't supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Codename Devs", [ {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} ])); #else From b9770d6e84f681790d34c159e92e6234e9d696fc Mon Sep 17 00:00:00 2001 From: Lily <124677802+LilyRoss19@users.noreply.github.com> Date: Sun, 22 Sep 2024 11:33:23 +0000 Subject: [PATCH 06/93] rename `SUtil` to `MobileUtil` --- source/funkin/backend/assets/ModsFolder.hx | 4 ++-- source/funkin/backend/assets/ScriptedAssetLibrary.hx | 2 +- source/funkin/backend/system/Main.hx | 4 ++-- source/funkin/editors/SaveSubstate.hx | 2 +- source/funkin/import.hx | 2 +- source/funkin/options/categories/MobileOptions.hx | 4 ++-- source/mobile/funkin/backend/system/CopyState.hx | 6 +++--- .../funkin/backend/utils/{SUtil.hx => MobileUtil.hx} | 12 ++++++------ 8 files changed, 18 insertions(+), 18 deletions(-) rename source/mobile/funkin/backend/utils/{SUtil.hx => MobileUtil.hx} (94%) diff --git a/source/funkin/backend/assets/ModsFolder.hx b/source/funkin/backend/assets/ModsFolder.hx index bc3d021bd..95cb8a165 100644 --- a/source/funkin/backend/assets/ModsFolder.hx +++ b/source/funkin/backend/assets/ModsFolder.hx @@ -35,11 +35,11 @@ class ModsFolder { /** * Path to the `mods` folder. */ - public static var modsPath:String = SUtil.getStorageDirectory(true) + "mods/"; + public static var modsPath:String = MobileUtil.getStorageDirectory(true) + "mods/"; /** * Path to the `addons` folder. */ - public static var addonsPath:String = SUtil.getStorageDirectory(true) + "addons/"; + public static var addonsPath:String = MobileUtil.getStorageDirectory(true) + "addons/"; /** * If accessing a file as assets/data/global/LIB_mymod.hx should redirect to mymod:assets/data/global.hx diff --git a/source/funkin/backend/assets/ScriptedAssetLibrary.hx b/source/funkin/backend/assets/ScriptedAssetLibrary.hx index 1ca8268f0..e3eb63008 100644 --- a/source/funkin/backend/assets/ScriptedAssetLibrary.hx +++ b/source/funkin/backend/assets/ScriptedAssetLibrary.hx @@ -22,7 +22,7 @@ class ScriptedAssetLibrary extends ModsFolderLibrary { private static var nullValue:Dynamic = {}; public function new(scriptName:String, args:Array = null, folderPath:String="", libName:String="assets", ?modName:String) { - if(folderPath == "") folderPath = SUtil.getStorageDirectory() + "assets/"; + if(folderPath == "") folderPath = MobileUtil.getStorageDirectory() + "assets/"; if(modName == null) modName = scriptName; super(folderPath, libName, modName); this.scriptName = scriptName; diff --git a/source/funkin/backend/system/Main.hx b/source/funkin/backend/system/Main.hx index 85841bb79..fddd7e643 100644 --- a/source/funkin/backend/system/Main.hx +++ b/source/funkin/backend/system/Main.hx @@ -67,9 +67,9 @@ class Main extends Sprite #if mobile #if android - SUtil.doPermissionsShit(); + MobileUtil.doPermissionsShit(); #end - Sys.setCwd(SUtil.getStorageDirectory(false)); + Sys.setCwd(MobileUtil.getStorageDirectory(false)); #end CrashHandler.init(); diff --git a/source/funkin/editors/SaveSubstate.hx b/source/funkin/editors/SaveSubstate.hx index 219b6a365..8aa081e59 100644 --- a/source/funkin/editors/SaveSubstate.hx +++ b/source/funkin/editors/SaveSubstate.hx @@ -27,7 +27,7 @@ class SaveSubstate extends MusicBeatSubstate { super.create(); #if mobile - mobile.funkin.backend.utils.SUtil.saveContent(options.defaultSaveFile.replace(options.saveExt, ''), options.saveExt, data); + mobile.funkin.backend.utils.MobileUtil.saveContent(options.defaultSaveFile.replace(options.saveExt, ''), options.saveExt, data); close(); #else var fileDialog = new FileDialog(); diff --git a/source/funkin/import.hx b/source/funkin/import.hx index ae8943ee7..22fe3fed0 100644 --- a/source/funkin/import.hx +++ b/source/funkin/import.hx @@ -11,7 +11,7 @@ import funkin.options.Options; import funkin.game.PlayState; import funkin.backend.scripting.EventManager; -import mobile.funkin.backend.utils.SUtil; +import mobile.funkin.backend.utils.MobileUtil; import mobile.objects.MobileControls; import openfl.utils.Assets; diff --git a/source/funkin/options/categories/MobileOptions.hx b/source/funkin/options/categories/MobileOptions.hx index 414a12bb7..534910e28 100644 --- a/source/funkin/options/categories/MobileOptions.hx +++ b/source/funkin/options/categories/MobileOptions.hx @@ -7,7 +7,7 @@ import funkin.backend.MusicBeatState; import funkin.options.Options; import lime.system.System as LimeSystem; #if android -import mobile.funkin.backend.utils.SUtil; +import mobile.funkin.backend.utils.MobileUtil; #end #if sys import sys.io.File; @@ -17,7 +17,7 @@ class MobileOptions extends OptionsScreen { var canEnter:Bool = true; #if android final lastStorageType:String = Options.storageType; - var externalPaths:Array = SUtil.checkExternalPaths(true); + var externalPaths:Array = MobileUtil.checkExternalPaths(true); var typeNames:Array = ['Data', 'Obb', 'Media', 'External']; var typeVars:Array = ['EXTERNAL_DATA', 'EXTERNAL_OBB', 'EXTERNAL_MEDIA', 'EXTERNAL']; #end diff --git a/source/mobile/funkin/backend/system/CopyState.hx b/source/mobile/funkin/backend/system/CopyState.hx index b82a2e03e..99ebdfb5c 100644 --- a/source/mobile/funkin/backend/system/CopyState.hx +++ b/source/mobile/funkin/backend/system/CopyState.hx @@ -10,7 +10,7 @@ import flixel.FlxSprite; import flixel.util.FlxColor; import openfl.utils.ByteArray; import haxe.io.Path; -import mobile.funkin.backend.utils.SUtil; +import mobile.funkin.backend.utils.MobileUtil; import funkin.backend.assets.Paths; import funkin.backend.utils.NativeAPI; import funkin.backend.system.MainState; @@ -118,7 +118,7 @@ class CopyState extends funkin.backend.MusicBeatState { var directory = Path.directory(file); if (!FileSystem.exists(directory)) - SUtil.mkDirs(directory); + MobileUtil.mkDirs(directory); try { if (OpenFLAssets.exists(getFile(file))) @@ -152,7 +152,7 @@ class CopyState extends funkin.backend.MusicBeatState if (fileData == null) fileData = ''; if (!FileSystem.exists(directory)) - SUtil.mkDirs(directory); + MobileUtil.mkDirs(directory); File.saveContent(Path.join([directory, fileName]), fileData); } catch (e:haxe.Exception) diff --git a/source/mobile/funkin/backend/utils/SUtil.hx b/source/mobile/funkin/backend/utils/MobileUtil.hx similarity index 94% rename from source/mobile/funkin/backend/utils/SUtil.hx rename to source/mobile/funkin/backend/utils/MobileUtil.hx index af089fe6d..8a1326699 100644 --- a/source/mobile/funkin/backend/utils/SUtil.hx +++ b/source/mobile/funkin/backend/utils/MobileUtil.hx @@ -21,7 +21,7 @@ using StringTools; * A storage class for mobile. * @author Mihai Alexandru (M.A. Jigsaw) */ -class SUtil +class MobileUtil { #if sys public static function getStorageDirectory(?force:Bool = false):String @@ -115,12 +115,12 @@ class SUtil try { - if (!FileSystem.exists(SUtil.getStorageDirectory())) - mkDirs(SUtil.getStorageDirectory()); + if (!FileSystem.exists(MobileUtil.getStorageDirectory())) + mkDirs(MobileUtil.getStorageDirectory()); } catch (e:Dynamic) { - NativeAPI.showMessageBox('Error!', 'Please create folder to\n' + SUtil.getStorageDirectory(true) + '\nPress OK to close the game', MSG_ERROR); + NativeAPI.showMessageBox('Error!', 'Please create folder to\n' + MobileUtil.getStorageDirectory(true) + '\nPress OK to close the game', MSG_ERROR); LimeSystem.exit(1); } } @@ -164,7 +164,7 @@ enum abstract StorageType(String) from String to String case "EXTERNAL_OBB": EXTERNAL_OBB; case "EXTERNAL_MEDIA": EXTERNAL_MEDIA; case "EXTERNAL": EXTERNAL; - default: SUtil.getExternalDirectory(str) + '.' + fileLocal; + default: MobileUtil.getExternalDirectory(str) + '.' + fileLocal; } } @@ -181,7 +181,7 @@ enum abstract StorageType(String) from String to String case "EXTERNAL_OBB": EXTERNAL_OBB; case "EXTERNAL_MEDIA": EXTERNAL_MEDIA; case "EXTERNAL": EXTERNAL; - default: SUtil.getExternalDirectory(str) + '.' + fileLocal; + default: MobileUtil.getExternalDirectory(str) + '.' + fileLocal; } } } From 1e21079762b9620e15e0bc61ec6a7ce40ceae03d Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 22 Sep 2024 14:35:46 +0300 Subject: [PATCH 07/93] Update SaveSubstate.hx --- source/funkin/editors/SaveSubstate.hx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/funkin/editors/SaveSubstate.hx b/source/funkin/editors/SaveSubstate.hx index 8aa081e59..bf9ae8c4f 100644 --- a/source/funkin/editors/SaveSubstate.hx +++ b/source/funkin/editors/SaveSubstate.hx @@ -26,10 +26,10 @@ class SaveSubstate extends MusicBeatSubstate { public override function create() { super.create(); - #if mobile - mobile.funkin.backend.utils.MobileUtil.saveContent(options.defaultSaveFile.replace(options.saveExt, ''), options.saveExt, data); + /*#if mobile + MobileUtil.saveContent(options.defaultSaveFile.replace(options.saveExt, ''), options.saveExt, data); close(); - #else + #else*/ var fileDialog = new FileDialog(); fileDialog.onCancel.add(function() close()); fileDialog.onSelect.add(function(str) { @@ -37,7 +37,7 @@ class SaveSubstate extends MusicBeatSubstate { close(); }); fileDialog.browse(SAVE, options.saveExt.getDefault(Path.extension(options.defaultSaveFile)), options.defaultSaveFile); - #end + //#end } public override function update(elapsed:Float) { @@ -49,4 +49,4 @@ class SaveSubstate extends MusicBeatSubstate { typedef SaveSubstateData = { var ?defaultSaveFile:String; var ?saveExt:String; -} \ No newline at end of file +} From b102f164fc55da1f3707d8209987ff7fd908b526 Mon Sep 17 00:00:00 2001 From: Lily <124677802+LilyRoss19@users.noreply.github.com> Date: Sun, 22 Sep 2024 12:44:09 +0000 Subject: [PATCH 08/93] add `#if mobile` to `MobileUtil.getStorageDirectory` --- source/funkin/backend/assets/ModsFolder.hx | 4 +-- .../backend/assets/ScriptedAssetLibrary.hx | 4 +-- source/funkin/backend/system/Main.hx | 2 +- .../mobile/funkin/backend/utils/MobileUtil.hx | 27 +++++-------------- 4 files changed, 11 insertions(+), 26 deletions(-) diff --git a/source/funkin/backend/assets/ModsFolder.hx b/source/funkin/backend/assets/ModsFolder.hx index 95cb8a165..9ae0265bc 100644 --- a/source/funkin/backend/assets/ModsFolder.hx +++ b/source/funkin/backend/assets/ModsFolder.hx @@ -35,11 +35,11 @@ class ModsFolder { /** * Path to the `mods` folder. */ - public static var modsPath:String = MobileUtil.getStorageDirectory(true) + "mods/"; + public static var modsPath:String = #if mobile MobileUtil.getStorageDirectory(true) + #end "mods/"; /** * Path to the `addons` folder. */ - public static var addonsPath:String = MobileUtil.getStorageDirectory(true) + "addons/"; + public static var addonsPath:String = #if mobile MobileUtil.getStorageDirectory(true) + #end "addons/"; /** * If accessing a file as assets/data/global/LIB_mymod.hx should redirect to mymod:assets/data/global.hx diff --git a/source/funkin/backend/assets/ScriptedAssetLibrary.hx b/source/funkin/backend/assets/ScriptedAssetLibrary.hx index e3eb63008..dd08b1d78 100644 --- a/source/funkin/backend/assets/ScriptedAssetLibrary.hx +++ b/source/funkin/backend/assets/ScriptedAssetLibrary.hx @@ -21,8 +21,8 @@ class ScriptedAssetLibrary extends ModsFolderLibrary { public var scriptName:String; private static var nullValue:Dynamic = {}; - public function new(scriptName:String, args:Array = null, folderPath:String="", libName:String="assets", ?modName:String) { - if(folderPath == "") folderPath = MobileUtil.getStorageDirectory() + "assets/"; + public function new(scriptName:String, args:Array = null, folderPath:String, libName:String="assets", ?modName:String) { + if(folderPath == null) folderPath = #if mobile MobileUtil.getStorageDirectory() + #end "assets/"; if(modName == null) modName = scriptName; super(folderPath, libName, modName); this.scriptName = scriptName; diff --git a/source/funkin/backend/system/Main.hx b/source/funkin/backend/system/Main.hx index fddd7e643..f22328586 100644 --- a/source/funkin/backend/system/Main.hx +++ b/source/funkin/backend/system/Main.hx @@ -67,7 +67,7 @@ class Main extends Sprite #if mobile #if android - MobileUtil.doPermissionsShit(); + MobileUtil.requestPermissionsFromUser(); #end Sys.setCwd(MobileUtil.getStorageDirectory(false)); #end diff --git a/source/mobile/funkin/backend/utils/MobileUtil.hx b/source/mobile/funkin/backend/utils/MobileUtil.hx index 8a1326699..a40ead3fd 100644 --- a/source/mobile/funkin/backend/utils/MobileUtil.hx +++ b/source/mobile/funkin/backend/utils/MobileUtil.hx @@ -19,15 +19,16 @@ using StringTools; /** * A storage class for mobile. - * @author Mihai Alexandru (M.A. Jigsaw) + * @author Mihai Alexandru (M.A. Jigsaw) & Lily Ross (mcagabe19) */ class MobileUtil { #if sys public static function getStorageDirectory(?force:Bool = false):String { - #if mobile var daPath:String; + + #if mobile #if android if (!FileSystem.exists(LimeSystem.applicationStorageDirectory + 'storagetype.txt')) File.saveContent(LimeSystem.applicationStorageDirectory + 'storagetype.txt', funkin.options.Options.storageType); @@ -36,12 +37,11 @@ class MobileUtil daPath = haxe.io.Path.addTrailingSlash(daPath); #elseif ios daPath = LimeSystem.documentsDirectory; + #else + daPath = Sys.getCwd(); #end return daPath; - #else - return Sys.getCwd(); - #end } public static function mkDirs(directory:String):Void @@ -80,23 +80,8 @@ class MobileUtil } } - public static function saveContent(fileName:String = 'file', fileExtension:String = '.json', - fileData:String = 'You forgor to add somethin\' in yo code :3'):Void - { - try - { - if (!FileSystem.exists('saves')) - FileSystem.createDirectory('saves'); - - File.saveContent('saves/$fileName', fileData); - NativeAPI.showMessageBox("Success!", '$fileName has been saved.', MSG_INFORMATION); - } - catch (e:haxe.Exception) - trace('File couldn\'t be saved. (${e.message})'); - } - #if android - public static function doPermissionsShit():Void + public static function requestPermissionsFromUser():Void { if (VERSION.SDK_INT >= VERSION_CODES.TIRAMISU) Permissions.requestPermissions(['READ_MEDIA_IMAGES', 'READ_MEDIA_VIDEO', 'READ_MEDIA_AUDIO']); From a5568c6d9d609507feffe62c5859f5534ac79632 Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 22 Sep 2024 15:54:23 +0300 Subject: [PATCH 09/93] oops --- source/mobile/funkin/backend/utils/MobileUtil.hx | 1 - 1 file changed, 1 deletion(-) diff --git a/source/mobile/funkin/backend/utils/MobileUtil.hx b/source/mobile/funkin/backend/utils/MobileUtil.hx index a40ead3fd..731c8b63e 100644 --- a/source/mobile/funkin/backend/utils/MobileUtil.hx +++ b/source/mobile/funkin/backend/utils/MobileUtil.hx @@ -28,7 +28,6 @@ class MobileUtil { var daPath:String; - #if mobile #if android if (!FileSystem.exists(LimeSystem.applicationStorageDirectory + 'storagetype.txt')) File.saveContent(LimeSystem.applicationStorageDirectory + 'storagetype.txt', funkin.options.Options.storageType); From ce33c76fc5deb1f8c54221aa0d70ab8d07891e0b Mon Sep 17 00:00:00 2001 From: Ne_Eo Date: Sun, 22 Sep 2024 15:09:34 +0200 Subject: [PATCH 10/93] --libs= code + caching for ios --- .github/workflows/android.yml | 4 +- .github/workflows/ios.yml | 30 ++++++++++++ commandline/commands/Update.hx | 19 ++++++-- hmm.json | 87 ---------------------------------- libs.android.xml | 27 +++++++++++ 5 files changed, 74 insertions(+), 93 deletions(-) delete mode 100644 hmm.json create mode 100644 libs.android.xml diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 8f6aeb92b..58e1fa4bc 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -28,7 +28,7 @@ jobs: cache-build-android - name: Installing/Updating libraries run: | - haxe -cp commandline -D analyzer-optimize --run Main setup + haxe -cp commandline -D analyzer-optimize --run Main setup --lib=./libs.android.xml - name: Configuring Android run: | haxelib run lime config ANDROID_SDK $ANDROID_HOME @@ -37,7 +37,7 @@ jobs: haxelib run lime config ANDROID_SETUP true - name: Building the game run: haxelib run lime build android - - name: Uploading artifact + - name: Uploading artifact uses: actions/upload-artifact@v4 with: name: Codename Engine diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index 9d0a5a09a..1a417565b 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -14,11 +14,41 @@ jobs: uses: krdlab/setup-haxe@v1 with: haxe-version: 4.2.5 + - name: Restore existing build cache for faster compilation + uses: actions/cache@v3 + with: + # not caching the bin folder to prevent asset duplication and stuff like that + key: cache-build-ios + path: | + .haxelib/ + export/release/ios/haxe/ + export/release/ios/obj/ + restore-keys: | + cache-build-mac - name: Installing/Updating libraries run: | haxe -cp commandline -D analyzer-optimize --run Main setup - name: Building the game run: haxelib run lime build ios -nosign + - name: Clearing already existing cache + uses: actions/github-script@v6 + with: + script: | + const caches = await github.rest.actions.getActionsCacheList({ + owner: context.repo.owner, + repo: context.repo.repo, + }) + for (const cache of caches.data.actions_caches) { + if (cache.key == "cache-build-ios") { + console.log('Clearing ' + cache.key + '...') + await github.rest.actions.deleteActionsCacheById({ + owner: context.repo.owner, + repo: context.repo.repo, + cache_id: cache.id, + }) + console.log("Cache cleared.") + } + } - name: Making ipa file run: | cd export/*/ios/build/*-iphoneos diff --git a/commandline/commands/Update.hx b/commandline/commands/Update.hx index 6ac0f0f3d..b6a3775de 100644 --- a/commandline/commands/Update.hx +++ b/commandline/commands/Update.hx @@ -6,6 +6,8 @@ import sys.io.File; import sys.io.Process; import sys.FileSystem; +using StringTools; + class Update { public static function main(args:Array) { prettyPrint("Preparing installation..."); @@ -14,13 +16,21 @@ class Update { if (!FileSystem.exists('.haxelib')) FileSystem.createDirectory('.haxelib'); + var filename = "./libs.xml"; + for(arg in args) { + if (arg.startsWith("--lib=")) { + filename = arg.substr("--lib=".length); + } + } + var libs:Array = []; - var libsXML:Access = new Access(Xml.parse(File.getContent('./libs.xml')).firstElement()); + var libsXML:Access = new Access(Xml.parse(File.getContent(filename)).firstElement()); for (libNode in libsXML.elements) { var lib:Library = { name: libNode.att.name, - type: libNode.name + type: libNode.name, + skipDeps: libNode.has.skipDeps ? libNode.att.skipDeps == "true" : false }; if (libNode.has.global) lib.global = libNode.att.global; switch (lib.type) { @@ -38,10 +48,10 @@ class Update { switch(lib.type) { case "lib": prettyPrint((lib.global == "true" ? "Globally installing" : "Locally installing") + ' "${lib.name}"...'); - Sys.command('haxelib install ${lib.name} ${lib.version != null ? " " + lib.version : " "}${globalism != null ? ' $globalism' : ''} --always'); + Sys.command('haxelib install ${lib.name} ${lib.version != null ? " " + lib.version : " "}${globalism != null ? ' $globalism' : ''}${lib.skipDeps ? " --skip-dependencies" : ""} --always'); case "git": prettyPrint((lib.global == "true" ? "Globally installing" : "Locally installing") + ' "${lib.name}" from git url "${lib.url}"'); - Sys.command('haxelib git ${lib.name} ${lib.url}${lib.ref != null ? ' ${lib.ref}' : ''}${globalism != null ? ' $globalism' : ''} --always'); + Sys.command('haxelib git ${lib.name} ${lib.url}${lib.ref != null ? ' ${lib.ref}' : ''}${globalism != null ? ' $globalism' : ''}${lib.skipDeps ? " --skip-dependencies" : ""} --always'); default: prettyPrint('Cannot resolve library of type "${lib.type}"'); } @@ -123,6 +133,7 @@ class Update { typedef Library = { var name:String; var type:String; + var skipDeps:Bool; var ?global:String; var ?version:String; var ?ref:String; diff --git a/hmm.json b/hmm.json deleted file mode 100644 index dbd648284..000000000 --- a/hmm.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "dependencies": [ - { - "name": "lime", - "type": "git", - "dir": null, - "ref": "develop", - "url": "https://github.com/mcagabe19-stuff/lime" - }, - { - "name": "hscript-improved", - "type": "git", - "dir": null, - "ref": "custom-classes", - "url": "https://www.github.com/FNF-CNE-Devs/hscript-improved" - }, - { - "name": "openfl", - "type": "haxelib", - "version": "9.2.2" - }, - { - "name": "away3d", - "type": "git", - "dir": null, - "ref": "master", - "url": "https://github.com/FNF-CNE-Devs/away3d" - }, - { - "name": "format", - "type": "haxelib", - "version": null - }, - { - "name": "markdown", - "type": "haxelib", - "version": null - }, - { - "name": "flixel", - "type": "git", - "dir": null, - "ref": "dev", - "url": "https://github.com/FNF-CNE-Devs/flixel" - }, - { - "name": "flixel-addons", - "type": "git", - "dir": null, - "ref": "dev", - "url": "https://github.com/FNF-CNE-Devs/flixel-addons" - }, - { - "name": "hxcpp", - "type": "git", - "dir": null, - "ref": "master", - "url": "https://github.com/mcagabe19-stuff/hxcpp" - }, - { - "name": "hxvlc", - "type": "haxelib", - "version": null - }, - { - "name": "hxdiscord_rpc", - "type": "git", - "dir": null, - "ref": "main", - "url": "https://github.com/FNF-CNE-Devs/hxdiscord_rpc" - }, - { - "name": "extension-androidtools", - "type": "git", - "dir": null, - "ref": "main", - "url": "https://github.com/MAJigsaw77/extension-androidtools" - }, - { - "name": "flxanimate", - "type": "git", - "dir": null, - "ref": "master", - "url": "https://github.com/FNF-CNE-Devs/flxanimate" - } - ] -} diff --git a/libs.android.xml b/libs.android.xml new file mode 100644 index 000000000..1c352515e --- /dev/null +++ b/libs.android.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + From 2a4f793accbe4999f9718b74231b6447b383a3e7 Mon Sep 17 00:00:00 2001 From: Ne_Eo Date: Sun, 22 Sep 2024 15:10:39 +0200 Subject: [PATCH 11/93] Oop --- commandline/commands/Update.hx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/commandline/commands/Update.hx b/commandline/commands/Update.hx index b6a3775de..15247b50b 100644 --- a/commandline/commands/Update.hx +++ b/commandline/commands/Update.hx @@ -16,15 +16,20 @@ class Update { if (!FileSystem.exists('.haxelib')) FileSystem.createDirectory('.haxelib'); - var filename = "./libs.xml"; + var libFile = "./libs.xml"; for(arg in args) { if (arg.startsWith("--lib=")) { - filename = arg.substr("--lib=".length); + libFile = arg.substr("--lib=".length); } } + if(!FileSystem.exists(libFile)) { + Sys.println('File $libFile does not exist.'); + return; + } + var libs:Array = []; - var libsXML:Access = new Access(Xml.parse(File.getContent(filename)).firstElement()); + var libsXML:Access = new Access(Xml.parse(File.getContent(libFile)).firstElement()); for (libNode in libsXML.elements) { var lib:Library = { From c58944ea432479ecbdbe63c7b3ad20221327d47c Mon Sep 17 00:00:00 2001 From: Ne_Eo Date: Sun, 22 Sep 2024 15:16:23 +0200 Subject: [PATCH 12/93] Meow --- .github/workflows/android.yml | 2 +- .github/workflows/ios.yml | 2 +- libs.android.xml => libs.mobile.xml | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename libs.android.xml => libs.mobile.xml (100%) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 58e1fa4bc..f1040fb79 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -28,7 +28,7 @@ jobs: cache-build-android - name: Installing/Updating libraries run: | - haxe -cp commandline -D analyzer-optimize --run Main setup --lib=./libs.android.xml + haxe -cp commandline -D analyzer-optimize --run Main setup --lib=./libs.mobile.xml - name: Configuring Android run: | haxelib run lime config ANDROID_SDK $ANDROID_HOME diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index 1a417565b..54748ede2 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -27,7 +27,7 @@ jobs: cache-build-mac - name: Installing/Updating libraries run: | - haxe -cp commandline -D analyzer-optimize --run Main setup + haxe -cp commandline -D analyzer-optimize --run Main setup --lib=./libs.mobile.xml - name: Building the game run: haxelib run lime build ios -nosign - name: Clearing already existing cache diff --git a/libs.android.xml b/libs.mobile.xml similarity index 100% rename from libs.android.xml rename to libs.mobile.xml From 0d8fe168154eea01c4c8b5f0e28d7c532d27f37a Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 22 Sep 2024 16:21:48 +0300 Subject: [PATCH 13/93] Update libs.mobile.xml --- libs.mobile.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs.mobile.xml b/libs.mobile.xml index 1c352515e..8218d4181 100644 --- a/libs.mobile.xml +++ b/libs.mobile.xml @@ -23,5 +23,5 @@ - + From 64fe36ea0d616f0f88ee963e5a35a3e50566b71a Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 22 Sep 2024 16:50:48 +0300 Subject: [PATCH 14/93] rebuilding lime and hxcpp for mobile --- .github/workflows/android.yml | 6 ++++++ .github/workflows/ios.yml | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index f1040fb79..d15aed501 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -29,6 +29,12 @@ jobs: - name: Installing/Updating libraries run: | haxe -cp commandline -D analyzer-optimize --run Main setup --lib=./libs.mobile.xml + - name: Rebuilding lime and hxcpp + run: | + haxelib run lime rebuild hxcpp + haxelib run lime rebuild linux -release -clean + haxelib run lime rebuild android -release -clean + haxelib run lime rebuild tools - name: Configuring Android run: | haxelib run lime config ANDROID_SDK $ANDROID_HOME diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index 54748ede2..a981ca915 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -30,6 +30,12 @@ jobs: haxe -cp commandline -D analyzer-optimize --run Main setup --lib=./libs.mobile.xml - name: Building the game run: haxelib run lime build ios -nosign + - name: Rebuilding lime and hxcpp + run: | + haxelib run lime rebuild hxcpp + haxelib run lime rebuild mac -release -clean + haxelib run lime rebuild ios -release -clean + haxelib run lime rebuild tools - name: Clearing already existing cache uses: actions/github-script@v6 with: From 909d143432b59881434f2f627e16849bbeedb079 Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 22 Sep 2024 16:53:44 +0300 Subject: [PATCH 15/93] forgor --- libs.mobile.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libs.mobile.xml b/libs.mobile.xml index 8218d4181..0ea1dd44c 100644 --- a/libs.mobile.xml +++ b/libs.mobile.xml @@ -13,6 +13,8 @@ + + From 2b0cb83420e8a5244572cce8ffffa960d7f3ec23 Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 22 Sep 2024 16:57:19 +0300 Subject: [PATCH 16/93] Update libs.mobile.xml --- libs.mobile.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libs.mobile.xml b/libs.mobile.xml index 0ea1dd44c..161340cc2 100644 --- a/libs.mobile.xml +++ b/libs.mobile.xml @@ -4,6 +4,10 @@ + + + + @@ -13,8 +17,6 @@ - - From 8aa37afc2874b8c4dc22351a20ae5c86dbd26b9c Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 22 Sep 2024 17:06:14 +0300 Subject: [PATCH 17/93] ok plan b --- .github/workflows/android.yml | 4 +++- .github/workflows/ios.yml | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index d15aed501..28aaaae4c 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -31,7 +31,9 @@ jobs: haxe -cp commandline -D analyzer-optimize --run Main setup --lib=./libs.mobile.xml - name: Rebuilding lime and hxcpp run: | - haxelib run lime rebuild hxcpp + cd $(haxelib libpath hxcpp)tools/hxcpp + haxe build.hxml + cd ${{ github.workspace }} haxelib run lime rebuild linux -release -clean haxelib run lime rebuild android -release -clean haxelib run lime rebuild tools diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index a981ca915..7e2ff6714 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -32,7 +32,9 @@ jobs: run: haxelib run lime build ios -nosign - name: Rebuilding lime and hxcpp run: | - haxelib run lime rebuild hxcpp + cd $(haxelib libpath hxcpp)tools/hxcpp + haxe build.hxml + cd ${{ github.workspace }} haxelib run lime rebuild mac -release -clean haxelib run lime rebuild ios -release -clean haxelib run lime rebuild tools From a8a65cbf73842dba71cb18a491c8493424a92a06 Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 22 Sep 2024 17:12:07 +0300 Subject: [PATCH 18/93] things why I hate hxcpp compiling --- .github/workflows/android.yml | 2 +- .github/workflows/ios.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 28aaaae4c..e2c421939 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -32,7 +32,7 @@ jobs: - name: Rebuilding lime and hxcpp run: | cd $(haxelib libpath hxcpp)tools/hxcpp - haxe build.hxml + haxe compile.hxml cd ${{ github.workspace }} haxelib run lime rebuild linux -release -clean haxelib run lime rebuild android -release -clean diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index 7e2ff6714..d9087ef7f 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -33,7 +33,7 @@ jobs: - name: Rebuilding lime and hxcpp run: | cd $(haxelib libpath hxcpp)tools/hxcpp - haxe build.hxml + haxe compile.hxml cd ${{ github.workspace }} haxelib run lime rebuild mac -release -clean haxelib run lime rebuild ios -release -clean From def0330f3d118e1bfe85aae7c49b7b67eac81fb1 Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 22 Sep 2024 17:20:27 +0300 Subject: [PATCH 19/93] cmon --- .github/workflows/android.yml | 1 + .github/workflows/ios.yml | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index e2c421939..97ac43fe8 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -31,6 +31,7 @@ jobs: haxe -cp commandline -D analyzer-optimize --run Main setup --lib=./libs.mobile.xml - name: Rebuilding lime and hxcpp run: | + sudo apt-get install -qq libgl1-mesa-dev libglu1-mesa-dev libpulse-dev g++ g++-multilib gcc-multilib libasound2-dev libx11-dev libxext-dev libxi-dev libxrandr-dev libxinerama-dev cd $(haxelib libpath hxcpp)tools/hxcpp haxe compile.hxml cd ${{ github.workspace }} diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index d9087ef7f..876e78262 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -28,8 +28,6 @@ jobs: - name: Installing/Updating libraries run: | haxe -cp commandline -D analyzer-optimize --run Main setup --lib=./libs.mobile.xml - - name: Building the game - run: haxelib run lime build ios -nosign - name: Rebuilding lime and hxcpp run: | cd $(haxelib libpath hxcpp)tools/hxcpp @@ -38,6 +36,8 @@ jobs: haxelib run lime rebuild mac -release -clean haxelib run lime rebuild ios -release -clean haxelib run lime rebuild tools + - name: Building the game + run: haxelib run lime build ios -nosign - name: Clearing already existing cache uses: actions/github-script@v6 with: From 9e79c5f0fa1d11c491f5a41daf7f7666eef7673f Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 22 Sep 2024 17:30:19 +0300 Subject: [PATCH 20/93] uh? --- .github/workflows/android.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 97ac43fe8..ff5f505e4 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -29,6 +29,12 @@ jobs: - name: Installing/Updating libraries run: | haxe -cp commandline -D analyzer-optimize --run Main setup --lib=./libs.mobile.xml + - name: Configuring Android + run: | + haxelib run lime config ANDROID_SDK $ANDROID_HOME + haxelib run lime config ANDROID_NDK_ROOT $ANDROID_NDK_LATEST_HOME + haxelib run lime config JAVA_HOME $JAVA_HOME_17_X64 + haxelib run lime config ANDROID_SETUP true - name: Rebuilding lime and hxcpp run: | sudo apt-get install -qq libgl1-mesa-dev libglu1-mesa-dev libpulse-dev g++ g++-multilib gcc-multilib libasound2-dev libx11-dev libxext-dev libxi-dev libxrandr-dev libxinerama-dev @@ -38,12 +44,6 @@ jobs: haxelib run lime rebuild linux -release -clean haxelib run lime rebuild android -release -clean haxelib run lime rebuild tools - - name: Configuring Android - run: | - haxelib run lime config ANDROID_SDK $ANDROID_HOME - haxelib run lime config ANDROID_NDK_ROOT $ANDROID_NDK_LATEST_HOME - haxelib run lime config JAVA_HOME $JAVA_HOME_17_X64 - haxelib run lime config ANDROID_SETUP true - name: Building the game run: haxelib run lime build android - name: Uploading artifact From c0b03a9af211bd9d6a3855029bf2cf27f5443a0a Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 22 Sep 2024 17:36:08 +0300 Subject: [PATCH 21/93] *sigh* okay --- .github/workflows/android.yml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index ff5f505e4..c63e1af92 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -29,21 +29,22 @@ jobs: - name: Installing/Updating libraries run: | haxe -cp commandline -D analyzer-optimize --run Main setup --lib=./libs.mobile.xml - - name: Configuring Android - run: | - haxelib run lime config ANDROID_SDK $ANDROID_HOME - haxelib run lime config ANDROID_NDK_ROOT $ANDROID_NDK_LATEST_HOME - haxelib run lime config JAVA_HOME $JAVA_HOME_17_X64 - haxelib run lime config ANDROID_SETUP true - - name: Rebuilding lime and hxcpp + - name: Rebuilding lime (linux) and hxcpp run: | sudo apt-get install -qq libgl1-mesa-dev libglu1-mesa-dev libpulse-dev g++ g++-multilib gcc-multilib libasound2-dev libx11-dev libxext-dev libxi-dev libxrandr-dev libxinerama-dev cd $(haxelib libpath hxcpp)tools/hxcpp haxe compile.hxml cd ${{ github.workspace }} haxelib run lime rebuild linux -release -clean - haxelib run lime rebuild android -release -clean haxelib run lime rebuild tools + - name: Configuring Android + run: | + haxelib run lime config ANDROID_SDK $ANDROID_HOME + haxelib run lime config ANDROID_NDK_ROOT $ANDROID_NDK_LATEST_HOME + haxelib run lime config JAVA_HOME $JAVA_HOME_17_X64 + haxelib run lime config ANDROID_SETUP true + - name: Rebuilding lime (android) + run: haxelib run lime rebuild android -release -clean - name: Building the game run: haxelib run lime build android - name: Uploading artifact From 5dc0c99df5d7360d5e5715dda92fe90456b1116c Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 22 Sep 2024 17:51:54 +0300 Subject: [PATCH 22/93] pls work --- .github/workflows/android.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index c63e1af92..225f36365 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -44,7 +44,9 @@ jobs: haxelib run lime config JAVA_HOME $JAVA_HOME_17_X64 haxelib run lime config ANDROID_SETUP true - name: Rebuilding lime (android) - run: haxelib run lime rebuild android -release -clean + run: | + haxelib run lime rebuild android -D HXCPP_ARMV7 -release -clean + haxelib run lime rebuild android -D HXCPP_ARM64 -release -clean - name: Building the game run: haxelib run lime build android - name: Uploading artifact From 4af497692c77f4ae22925312d358a614db43f9d1 Mon Sep 17 00:00:00 2001 From: Ne_Eo Date: Sun, 22 Sep 2024 16:53:56 +0200 Subject: [PATCH 23/93] Fix ios --- source/funkin/backend/system/framerate/Framerate.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/funkin/backend/system/framerate/Framerate.hx b/source/funkin/backend/system/framerate/Framerate.hx index 20f307e3c..d4faeccca 100644 --- a/source/funkin/backend/system/framerate/Framerate.hx +++ b/source/funkin/backend/system/framerate/Framerate.hx @@ -121,7 +121,7 @@ class Framerate extends Sprite { #elseif ios for(camera in FlxG.cameras.list) { var pos = FlxG.mouse.getScreenPosition(camera); - if(posx >= 0 && posx <= 80 && posy >= 0 && posy <= 60) { + if(pos.x >= 0 && pos.x <= 80 && pos.y >= 0 && pos.y <= 60) { if(FlxG.mouse.justPressed) sillyTimer.start(0.4, (tmr:FlxTimer) -> debugMode = (debugMode + 1) % 3); From b1084244c0d7c9f772344106d782c164a4c6c455 Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 22 Sep 2024 18:08:10 +0300 Subject: [PATCH 24/93] welp --- .github/workflows/android.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 225f36365..4b3430c9f 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -14,6 +14,11 @@ jobs: uses: krdlab/setup-haxe@v1 with: haxe-version: 4.2.5 + - name: Install Android NDK + uses: nttld/setup-ndk@v1 + id: setup-ndk + with: + ndk-version: r21e - name: Restore existing build cache for faster compilation uses: actions/cache@v3 with: @@ -40,7 +45,7 @@ jobs: - name: Configuring Android run: | haxelib run lime config ANDROID_SDK $ANDROID_HOME - haxelib run lime config ANDROID_NDK_ROOT $ANDROID_NDK_LATEST_HOME + haxelib run lime config ANDROID_NDK_ROOT ${{ steps.setup-ndk.outputs.ndk-path }} haxelib run lime config JAVA_HOME $JAVA_HOME_17_X64 haxelib run lime config ANDROID_SETUP true - name: Rebuilding lime (android) @@ -48,7 +53,7 @@ jobs: haxelib run lime rebuild android -D HXCPP_ARMV7 -release -clean haxelib run lime rebuild android -D HXCPP_ARM64 -release -clean - name: Building the game - run: haxelib run lime build android + run: haxelib run lime config ANDROID_NDK_ROOT $ANDROID_NDK_LATEST_HOME && haxelib run lime build android - name: Uploading artifact uses: actions/upload-artifact@v4 with: From d10710afd9827e9a5468e1b37698a83fba84a761 Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 22 Sep 2024 18:20:29 +0300 Subject: [PATCH 25/93] ??? --- .github/workflows/android.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 4b3430c9f..01b236088 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -18,7 +18,7 @@ jobs: uses: nttld/setup-ndk@v1 id: setup-ndk with: - ndk-version: r21e + ndk-version: r15c - name: Restore existing build cache for faster compilation uses: actions/cache@v3 with: From a10a2c1b1f839237ea68350acbe29736dd366e37 Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 22 Sep 2024 18:30:45 +0300 Subject: [PATCH 26/93] seriously? --- .github/workflows/android.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 01b236088..1194d110f 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -49,9 +49,7 @@ jobs: haxelib run lime config JAVA_HOME $JAVA_HOME_17_X64 haxelib run lime config ANDROID_SETUP true - name: Rebuilding lime (android) - run: | - haxelib run lime rebuild android -D HXCPP_ARMV7 -release -clean - haxelib run lime rebuild android -D HXCPP_ARM64 -release -clean + run: haxelib run lime rebuild android -release -clean - name: Building the game run: haxelib run lime config ANDROID_NDK_ROOT $ANDROID_NDK_LATEST_HOME && haxelib run lime build android - name: Uploading artifact From 5a718137daa3011266504393f3611d9850a12620 Mon Sep 17 00:00:00 2001 From: Lily <124677802+LilyRoss19@users.noreply.github.com> Date: Sun, 22 Sep 2024 17:39:04 +0000 Subject: [PATCH 27/93] trying to make PlayState hitbox only --- assets/data/scripts/week6-pause.hx | 2 +- source/funkin/backend/MusicBeatState.hx | 68 ++--- source/funkin/backend/MusicBeatSubstate.hx | 70 ++--- source/funkin/backend/system/Controls.hx | 42 +-- source/funkin/backend/system/Main.hx | 2 +- source/funkin/editors/EditorPicker.hx | 8 +- source/funkin/editors/UIDebugState.hx | 2 +- .../editors/character/CharacterEditor.hx | 2 +- .../editors/character/CharacterSelection.hx | 4 +- .../editors/charter/CharterSelection.hx | 4 +- source/funkin/game/GameOverSubstate.hx | 2 +- source/funkin/game/PlayState.hx | 10 +- source/funkin/import.hx | 1 - source/funkin/menus/BetaWarningState.hx | 2 +- source/funkin/menus/FreeplayState.hx | 4 +- source/funkin/menus/MainMenuState.hx | 3 +- source/funkin/menus/PauseSubState.hx | 3 +- source/funkin/menus/TitleState.hx | 2 +- source/funkin/options/OptionsMenu.hx | 2 +- source/funkin/options/OptionsScreen.hx | 9 +- .../options/categories/MobileOptions.hx | 18 +- .../menus/MobileControlSelectSubState.hx | 271 ------------------ source/mobile/objects/MobileControls.hx | 200 ------------- 23 files changed, 97 insertions(+), 634 deletions(-) delete mode 100644 source/mobile/funkin/menus/MobileControlSelectSubState.hx delete mode 100644 source/mobile/objects/MobileControls.hx diff --git a/assets/data/scripts/week6-pause.hx b/assets/data/scripts/week6-pause.hx index 7f49973d5..514a45462 100644 --- a/assets/data/scripts/week6-pause.hx +++ b/assets/data/scripts/week6-pause.hx @@ -64,7 +64,7 @@ function create(event) { FlxG.sound.play(Paths.sound(isThorns ? 'pixel/ANGRY' : 'pixel/clickText')); addVirtualPad('UP_DOWN', 'A'); - addVirtualPadCamera(false); + addVirtualPadCamera(); } function confText(text) { diff --git a/source/funkin/backend/MusicBeatState.hx b/source/funkin/backend/MusicBeatState.hx index aa79c4453..eeb497b89 100644 --- a/source/funkin/backend/MusicBeatState.hx +++ b/source/funkin/backend/MusicBeatState.hx @@ -12,7 +12,7 @@ import funkin.backend.scripting.ScriptPack; import funkin.backend.system.interfaces.IBeatReceiver; import funkin.backend.system.Conductor; import funkin.options.PlayerSettings; -import mobile.objects.MobileControls; +import mobile.objects.Hitbox; import mobile.flixel.FlxVirtualPad; import flixel.FlxCamera; import flixel.input.actions.FlxActionInput; @@ -111,13 +111,13 @@ class MusicBeatState extends FlxState implements IBeatReceiver inline function get_controlsP2():Controls return PlayerSettings.player2.controls; - public var mobileControls:MobileControls; + public var hitbox:Hitbox; public var virtualPad:FlxVirtualPad; - public var camControls:FlxCamera; + public var camHitbox:FlxCamera; public var camVPad:FlxCamera; public static var instance:MusicBeatState; - var trackedInputsMobileControls:Array = []; + var trackedInputsHitbox:Array = []; var trackedInputsVirtualPad:Array = []; public function addVirtualPad(DPad:OneOfTwo, Action:OneOfTwo):Void @@ -142,53 +142,45 @@ class MusicBeatState extends FlxState implements IBeatReceiver remove(virtualPad); } - public function addMobileControls(DefaultDrawTarget:Bool = false) { - if (mobileControls != null) - removeMobileControls(); + public function addHitbox(?defaultDrawTarget:Bool = false) { + if (hitbox != null) + removeHitbox(); - mobileControls = new MobileControls(); + hitbox = new Hitbox(); + controls.setHitBox(hitbox); - switch (MobileControls.mode) - { - case 0 | 1 | 2: - controls.setVirtualPadNOTES(mobileControls.virtualPad, RIGHT_FULL, NONE); - case 3: - controls.setHitBox(mobileControls.hitbox); - case 4: // do nothing - } - - trackedInputsMobileControls = controls.trackedInputsNOTES; + trackedInputsHitbox = controls.trackedInputsNOTES; controls.trackedInputsNOTES = []; - camControls = new FlxCamera(); - camControls.bgColor.alpha = 0; - FlxG.cameras.add(camControls, DefaultDrawTarget); + camHitbox = new FlxCamera(); + camHitbox.bgColor.alpha = 0; + FlxG.cameras.add(camHitbox, defaultDrawTarget); - mobileControls.cameras = [camControls]; - add(mobileControls); + hitbox.cameras = [camHitbox]; + add(hitbox); } - public function removeMobileControls() { - if(trackedInputsMobileControls.length > 0) - controls.removeVirtualControlsInput(trackedInputsMobileControls); + public function removeHitbox() { + if(trackedInputsHitbox.length > 0) + controls.removeVirtualControlsInput(trackedInputsHitbox); - if(mobileControls != null) - remove(mobileControls); + if(hitbox != null) + remove(hitbox); } - public function addVirtualPadCamera(DefaultDrawTarget:Bool = false) { + public function addVirtualPadCamera(?defaultDrawTarget:Bool = false) { if (virtualPad == null) return; camVPad = new FlxCamera(); camVPad.bgColor.alpha = 0; - FlxG.cameras.add(camVPad, DefaultDrawTarget); + FlxG.cameras.add(camVPad, defaultDrawTarget); virtualPad.cameras = [camVPad]; } override function destroy() { - // Mobile Controls Related - if(trackedInputsMobileControls.length > 0) - controls.removeVirtualControlsInput(trackedInputsMobileControls); + // Hitbox Related + if(trackedInputsHitbox.length > 0) + controls.removeVirtualControlsInput(trackedInputsHitbox); if(trackedInputsVirtualPad.length > 0) controls.removeVirtualControlsInput(trackedInputsVirtualPad); @@ -196,11 +188,11 @@ class MusicBeatState extends FlxState implements IBeatReceiver if(virtualPad != null) virtualPad = FlxDestroyUtil.destroy(virtualPad); - if(mobileControls != null) - mobileControls = FlxDestroyUtil.destroy(mobileControls); + if(hitbox != null) + hitbox = FlxDestroyUtil.destroy(hitbox); - if(camControls != null) - camControls = FlxDestroyUtil.destroy(camControls); + if(camHitbox != null) + camHitbox = FlxDestroyUtil.destroy(camHitbox); if(camVPad != null) camVPad = FlxDestroyUtil.destroy(camVPad); @@ -238,7 +230,7 @@ class MusicBeatState extends FlxState implements IBeatReceiver removeVirtualPad(); addVirtualPad(DPadMode, ActionMode); if(addCamera) - addVirtualPadCamera(false); + addVirtualPadCamera(); }); } } diff --git a/source/funkin/backend/MusicBeatSubstate.hx b/source/funkin/backend/MusicBeatSubstate.hx index 71a6ce20e..bb761dd15 100644 --- a/source/funkin/backend/MusicBeatSubstate.hx +++ b/source/funkin/backend/MusicBeatSubstate.hx @@ -10,7 +10,7 @@ import funkin.backend.system.Conductor; import funkin.backend.system.Controls; import funkin.options.PlayerSettings; import flixel.FlxSubState; -import mobile.objects.MobileControls; +import mobile.objects.Hitbox; import mobile.flixel.FlxVirtualPad; import flixel.FlxCamera; import flixel.input.actions.FlxActionInput; @@ -97,13 +97,13 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver inline function get_controlsP2():Controls return PlayerSettings.player2.controls; - public var mobileControls:MobileControls; + public var hitbox:Hitbox; public var virtualPad:FlxVirtualPad; - public var camControls:FlxCamera; + public var camHitbox:FlxCamera; public var camVPad:FlxCamera; public static var instance:MusicBeatSubstate; - var trackedInputsMobileControls:Array = []; + var trackedInputsHitbox:Array = []; var trackedInputsVirtualPad:Array = []; public function addVirtualPad(DPad:OneOfTwo, Action:OneOfTwo) @@ -128,54 +128,46 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver remove(virtualPad); } - public function addMobileControls(DefaultDrawTarget:Bool = false) { - if (mobileControls != null) - removeMobileControls(); + public function addHitbox(?defaultDrawTarget:Bool = false) { + if (hitbox != null) + removeHitbox(); - mobileControls = new MobileControls(); + hitbox = new Hitbox(); + controls.setHitBox(hitbox); - switch (MobileControls.mode) - { - case 0 | 1 | 2: - controls.setVirtualPadNOTES(mobileControls.virtualPad, RIGHT_FULL, NONE); - case 3: - controls.setHitBox(mobileControls.hitbox); - case 4: // do nothing - } - - trackedInputsMobileControls = controls.trackedInputsNOTES; + trackedInputsHitbox = controls.trackedInputsNOTES; controls.trackedInputsNOTES = []; - camControls = new FlxCamera(); - camControls.bgColor.alpha = 0; - FlxG.cameras.add(camControls, DefaultDrawTarget); + camHitbox = new FlxCamera(); + camHitbox.bgColor.alpha = 0; + FlxG.cameras.add(camHitbox, defaultDrawTarget); - mobileControls.cameras = [camControls]; - mobileControls.visible = false; - add(mobileControls); + hitbox.cameras = [camHitbox]; + hitbox.visible = false; + add(hitbox); } - public function removeMobileControls() { - if(trackedInputsMobileControls.length > 0) - controls.removeVirtualControlsInput(trackedInputsMobileControls); + public function removeHitbox() { + if(trackedInputsHitbox.length > 0) + controls.removeVirtualControlsInput(trackedInputsHitbox); - if(mobileControls != null) - remove(mobileControls); + if(hitbox != null) + remove(hitbox); } - public function addVirtualPadCamera(DefaultDrawTarget:Bool = false) { + public function addVirtualPadCamera(?defaultDrawTarget:Bool = false) { if (virtualPad == null) return; camVPad = new FlxCamera(); camVPad.bgColor.alpha = 0; - FlxG.cameras.add(camVPad, DefaultDrawTarget); + FlxG.cameras.add(camVPad, defaultDrawTarget); virtualPad.cameras = [camVPad]; } override function destroy() { - // Mobile Controls Related - if(trackedInputsMobileControls.length > 0) - controls.removeVirtualControlsInput(trackedInputsMobileControls); + // Hitbox Related + if(trackedInputsHitbox.length > 0) + controls.removeVirtualControlsInput(trackedInputsHitbox); if(trackedInputsVirtualPad.length > 0) controls.removeVirtualControlsInput(trackedInputsVirtualPad); @@ -183,11 +175,11 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver if(virtualPad != null) virtualPad = FlxDestroyUtil.destroy(virtualPad); - if(mobileControls != null) - mobileControls = FlxDestroyUtil.destroy(mobileControls); + if(hitbox != null) + hitbox = FlxDestroyUtil.destroy(hitbox); - if(camControls != null) - camControls = FlxDestroyUtil.destroy(camControls); + if(camHitbox != null) + camHitbox = FlxDestroyUtil.destroy(camHitbox); if(camVPad != null) camVPad = FlxDestroyUtil.destroy(camVPad); @@ -225,7 +217,7 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver removeVirtualPad(); addVirtualPad(DPadMode, ActionMode); if(addCamera) - addVirtualPadCamera(false); + addVirtualPadCamera(); }); } } diff --git a/source/funkin/backend/system/Controls.hx b/source/funkin/backend/system/Controls.hx index 8e20d8533..27aa03fd4 100644 --- a/source/funkin/backend/system/Controls.hx +++ b/source/funkin/backend/system/Controls.hx @@ -423,6 +423,12 @@ class Controls extends FlxActionSet super.update(); } + public static var mobileC(get, never):Bool; + + @:noCompletion + private static function get_mobileC():Bool + return Options.controlsAlpha >= 0.1; + public var trackedInputsUI:Array = []; public var trackedInputsNOTES:Array = []; @@ -493,42 +499,6 @@ class Controls extends FlxActionSet } } - public function setVirtualPadNOTES(VirtualPad:FlxVirtualPad, DPad:FlxDPadMode, Action:FlxActionMode):Void - { - if (VirtualPad == null) - return; - - switch (DPad) - { - case UP_DOWN: - inline forEachBound(Control.NOTE_UP, (action, state) -> addButtonNOTES(action, VirtualPad.buttonUp, state)); - inline forEachBound(Control.NOTE_DOWN, (action, state) -> addButtonNOTES(action, VirtualPad.buttonDown, state)); - case LEFT_RIGHT: - inline forEachBound(Control.NOTE_LEFT, (action, state) -> addButtonNOTES(action, VirtualPad.buttonLeft, state)); - inline forEachBound(Control.NOTE_RIGHT, (action, state) -> addButtonNOTES(action, VirtualPad.buttonRight, state)); - case NONE: // do nothing - default: - inline forEachBound(Control.NOTE_UP, (action, state) -> addButtonNOTES(action, VirtualPad.buttonUp, state)); - inline forEachBound(Control.NOTE_DOWN, (action, state) -> addButtonNOTES(action, VirtualPad.buttonDown, state)); - inline forEachBound(Control.NOTE_LEFT, (action, state) -> addButtonNOTES(action, VirtualPad.buttonLeft, state)); - inline forEachBound(Control.NOTE_RIGHT, (action, state) -> addButtonNOTES(action, VirtualPad.buttonRight, state)); - } - - switch (Action) - { - case A: - inline forEachBound(Control.ACCEPT, (action, state) -> addButtonNOTES(action, VirtualPad.buttonA, state)); - case B: - inline forEachBound(Control.BACK, (action, state) -> addButtonNOTES(action, VirtualPad.buttonB, state)); - case P: - inline forEachBound(Control.PAUSE, (action, state) -> addButtonNOTES(action, VirtualPad.buttonP, state)); - case NONE: // do nothing - default: - inline forEachBound(Control.ACCEPT, (action, state) -> addButtonNOTES(action, VirtualPad.buttonA, state)); - inline forEachBound(Control.BACK, (action, state) -> addButtonNOTES(action, VirtualPad.buttonB, state)); - } - } - public function removeVirtualControlsInput(Tinputs:Array):Void { for (action in this.digitalActions) diff --git a/source/funkin/backend/system/Main.hx b/source/funkin/backend/system/Main.hx index f22328586..58693e5f4 100644 --- a/source/funkin/backend/system/Main.hx +++ b/source/funkin/backend/system/Main.hx @@ -170,7 +170,7 @@ class Main extends Sprite FlxG.signals.preStateSwitch.add(onStateSwitch); FlxG.signals.postStateSwitch.add(onStateSwitchPost); - FlxG.mouse.useSystemCursor = !MobileControls.mobileC; + FlxG.mouse.useSystemCursor = !controls.mobileC; ModsFolder.init(); #if MOD_SUPPORT diff --git a/source/funkin/editors/EditorPicker.hx b/source/funkin/editors/EditorPicker.hx index 64a8dc3df..990aac71a 100644 --- a/source/funkin/editors/EditorPicker.hx +++ b/source/funkin/editors/EditorPicker.hx @@ -71,7 +71,7 @@ class EditorPicker extends MusicBeatSubstate { } sprites[0].selected = true; - if (!MobileControls.mobileC) FlxG.mouse.getScreenPosition(subCam, oldMousePos); + if (!controls.mobileC) FlxG.mouse.getScreenPosition(subCam, oldMousePos); addVirtualPad('UP_DOWN', 'A_B'); } @@ -88,14 +88,14 @@ class EditorPicker extends MusicBeatSubstate { } changeSelection(-FlxG.mouse.wheel + (controls.UP_P ? -1 : 0) + (controls.DOWN_P ? 1 : 0)); - if (!MobileControls.mobileC) FlxG.mouse.getScreenPosition(subCam, curMousePos); - if (!MobileControls.mobileC && curMousePos.x != oldMousePos.x || curMousePos.y != oldMousePos.y) { + if (!controls.mobileC) FlxG.mouse.getScreenPosition(subCam, curMousePos); + if (!controls.mobileC && curMousePos.x != oldMousePos.x || curMousePos.y != oldMousePos.y) { oldMousePos.set(curMousePos.x, curMousePos.y); curSelected = -1; changeSelection(Std.int(curMousePos.y / optionHeight)+1); } - if (controls.ACCEPT || !MobileControls.mobileC && FlxG.mouse.justReleased) { + if (controls.ACCEPT || !controls.mobileC && FlxG.mouse.justReleased) { if (options[curSelected].state != null) { selected = true; CoolUtil.playMenuSFX(CONFIRM); diff --git a/source/funkin/editors/UIDebugState.hx b/source/funkin/editors/UIDebugState.hx index f59611f79..8063c6eb4 100644 --- a/source/funkin/editors/UIDebugState.hx +++ b/source/funkin/editors/UIDebugState.hx @@ -7,7 +7,7 @@ class UIDebugState extends UIState { public override function create() { super.create(); - FlxG.mouse.useSystemCursor = !MobileControls.mobileC; + FlxG.mouse.useSystemCursor = !controls.mobileC; FlxG.mouse.visible = true; var bg = new FlxSprite().makeSolid(FlxG.width, FlxG.height, 0xFF444444); diff --git a/source/funkin/editors/character/CharacterEditor.hx b/source/funkin/editors/character/CharacterEditor.hx index 933b9855d..2903ab9cf 100644 --- a/source/funkin/editors/character/CharacterEditor.hx +++ b/source/funkin/editors/character/CharacterEditor.hx @@ -296,7 +296,7 @@ class CharacterEditor extends UIState { closeCurrentContextMenu(); openContextMenu(topMenu[2].childs); } - if (!MobileControls.mobileC && FlxG.mouse.pressed) { + if (!controls.mobileC && FlxG.mouse.pressed) { nextScroll.set(nextScroll.x - FlxG.mouse.deltaScreenX, nextScroll.y - FlxG.mouse.deltaScreenY); currentCursor = HAND; } else diff --git a/source/funkin/editors/character/CharacterSelection.hx b/source/funkin/editors/character/CharacterSelection.hx index bee9aac02..fff0e8395 100644 --- a/source/funkin/editors/character/CharacterSelection.hx +++ b/source/funkin/editors/character/CharacterSelection.hx @@ -18,7 +18,7 @@ class CharacterSelection extends EditorTreeMenu var modsList:Array = Character.getList(true); - final button:String = MobileControls.mobileC ? 'A' : 'ACCEPT'; + final button:String = controls.mobileC ? 'A' : 'ACCEPT'; var list:Array = [ for (char in (modsList.length == 0 ? Character.getList(false) : modsList)) @@ -40,7 +40,7 @@ class CharacterSelection extends EditorTreeMenu ])); })); - main = new OptionsScreen("Character Editor", "Select a character to edit", list, 'UP_DOWN', 'A'); + main = new OptionsScreen("Character Editor", "Select a character to edit", list, 'UP_DOWN', 'A_B'); DiscordUtil.call("onEditorTreeLoaded", ["Character Editor"]); } diff --git a/source/funkin/editors/charter/CharterSelection.hx b/source/funkin/editors/charter/CharterSelection.hx index 08711d27d..6a260d4ba 100644 --- a/source/funkin/editors/charter/CharterSelection.hx +++ b/source/funkin/editors/charter/CharterSelection.hx @@ -16,7 +16,7 @@ using StringTools; class CharterSelection extends EditorTreeMenu { public var freeplayList:FreeplaySonglist; public var curSong:ChartMetaData; - private final button:String = MobileControls.mobileC ? 'A' : 'ACCEPT'; + private final button:String = controls.mobileC ? 'A' : 'ACCEPT'; public override function create() { bgType = "charter"; @@ -64,7 +64,7 @@ class CharterSelection extends EditorTreeMenu { #end })); - main = new OptionsScreen("Chart Editor", "Select a song to modify the charts from.", list, 'UP_DOWN', 'A'); + main = new OptionsScreen("Chart Editor", "Select a song to modify the charts from.", list, 'UP_DOWN', 'A_B'); DiscordUtil.call("onEditorTreeLoaded", ["Chart Editor"]); } diff --git a/source/funkin/game/GameOverSubstate.hx b/source/funkin/game/GameOverSubstate.hx index fa44e5e54..f493fdaf9 100644 --- a/source/funkin/game/GameOverSubstate.hx +++ b/source/funkin/game/GameOverSubstate.hx @@ -91,7 +91,7 @@ class GameOverSubstate extends MusicBeatSubstate gameoverScript.call("postCreate"); addVirtualPad('NONE', 'A_B'); - addVirtualPadCamera(false); + addVirtualPadCamera(); } override function update(elapsed:Float) diff --git a/source/funkin/game/PlayState.hx b/source/funkin/game/PlayState.hx index 042daf43a..42750f9dc 100644 --- a/source/funkin/game/PlayState.hx +++ b/source/funkin/game/PlayState.hx @@ -760,11 +760,11 @@ class PlayState extends MusicBeatState #end startingSong = true; - addMobileControls(); - mobileControls.visible = true; + addHitbox(); + hitbox.visible = true; #if !android addVirtualPad('NONE', 'P'); - addVirtualPadCamera(false); + addVirtualPadCamera(); #end super.create(); @@ -1451,7 +1451,7 @@ class PlayState extends MusicBeatState */ public function endSong():Void { - mobileControls.visible = false; + hitbox.visible = false; scripts.call("onSongEnd"); canPause = false; inst.volume = 0; @@ -1493,7 +1493,7 @@ class PlayState extends MusicBeatState * Immediately switches to the next song, or goes back to the Story/Freeplay menu. */ public function nextSong() { - mobileControls.visible = false; + hitbox.visible = false; if (isStoryMode) { campaignScore += songScore; diff --git a/source/funkin/import.hx b/source/funkin/import.hx index 22fe3fed0..6040eb342 100644 --- a/source/funkin/import.hx +++ b/source/funkin/import.hx @@ -12,7 +12,6 @@ import funkin.game.PlayState; import funkin.backend.scripting.EventManager; import mobile.funkin.backend.utils.MobileUtil; -import mobile.objects.MobileControls; import openfl.utils.Assets; diff --git a/source/funkin/menus/BetaWarningState.hx b/source/funkin/menus/BetaWarningState.hx index b1dafa072..200e7cee6 100644 --- a/source/funkin/menus/BetaWarningState.hx +++ b/source/funkin/menus/BetaWarningState.hx @@ -19,7 +19,7 @@ class BetaWarningState extends MusicBeatState { disclaimer = new FunkinText(16, titleAlphabet.y + titleAlphabet.height + 10, FlxG.width - 32, "", 32); disclaimer.alignment = CENTER; - disclaimer.applyMarkup('This engine is still in a *${Main.releaseCycle}* state. That means *majority of the features* are either *buggy* or *non finished*. If you find any bugs, please report them to the Codename Engine GitHub.\n\n${MobileControls.mobileC ? 'Tap Your Screen' : 'Press ENTER'} to continue', + disclaimer.applyMarkup('This engine is still in a *${Main.releaseCycle}* state. That means *majority of the features* are either *buggy* or *non finished*. If you find any bugs, please report them to the Codename Engine GitHub.\n\n${controls.mobileC ? 'Tap Your Screen' : 'Press ENTER'} to continue', [ new FlxTextFormatMarkerPair(new FlxTextFormat(0xFFFF4444), "*") ] diff --git a/source/funkin/menus/FreeplayState.hx b/source/funkin/menus/FreeplayState.hx index 7bc8cfa98..ae00ed9c9 100644 --- a/source/funkin/menus/FreeplayState.hx +++ b/source/funkin/menus/FreeplayState.hx @@ -352,7 +352,7 @@ class FreeplayState extends MusicBeatState /** * Array containing all labels for Co-Op / Opponent modes. */ - public var coopLabels:Array = MobileControls.mobileC ? ['[X] Solo', '[X] Opponent Mode'] : + public var coopLabels:Array = controls.mobileC ? ['[X] Solo', '[X] Opponent Mode'] : [ '[TAB] Solo', '[TAB] Opponent Mode', @@ -371,7 +371,7 @@ class FreeplayState extends MusicBeatState var bothEnabled = songs[curSelected].coopAllowed && songs[curSelected].opponentModeAllowed; var changeThingy:Int = -1; - if(MobileControls.mobileC) + if(controls.mobileC) changeThingy = FlxMath.wrap(curCoopMode + change, 0, 1); else changeThingy = FlxMath.wrap(curCoopMode + change, 0, bothEnabled ? 3 : 1); diff --git a/source/funkin/menus/MainMenuState.hx b/source/funkin/menus/MainMenuState.hx index a581f053c..7419e0cbc 100644 --- a/source/funkin/menus/MainMenuState.hx +++ b/source/funkin/menus/MainMenuState.hx @@ -12,7 +12,6 @@ import lime.app.Application; import funkin.backend.scripting.events.*; import funkin.options.OptionsMenu; -import mobile.funkin.menus.MobileControlSelectSubState; using StringTools; @@ -76,7 +75,7 @@ class MainMenuState extends MusicBeatState } FlxG.camera.follow(camFollow, null, 0.06); - var modsKey:String = MobileControls.mobileC ? "M" : controls.getKeyName(SWITCHMOD); + var modsKey:String = controls.mobileC ? "M" : controls.getKeyName(SWITCHMOD); versionText = new FunkinText(5, FlxG.height - 2, 0, 'Codename Engine v${Application.current.meta.get('version')}\nCommit ${funkin.backend.system.macros.GitCommitMacro.commitNumber} (${funkin.backend.system.macros.GitCommitMacro.commitHash})\n[$modsKey}] Open Mods menu\n'); versionText.y -= versionText.height; diff --git a/source/funkin/menus/PauseSubState.hx b/source/funkin/menus/PauseSubState.hx index 79e35c044..dce0099ba 100644 --- a/source/funkin/menus/PauseSubState.hx +++ b/source/funkin/menus/PauseSubState.hx @@ -14,7 +14,6 @@ import funkin.options.keybinds.KeybindsOptions; import funkin.menus.StoryMenuState; import funkin.backend.system.Conductor; import funkin.backend.utils.FunkinParentDisabler; -import mobile.funkin.menus.MobileControlSelectSubState; class PauseSubState extends MusicBeatSubstate { @@ -156,7 +155,7 @@ class PauseSubState extends MusicBeatSubstate case "Change Controls": persistentUpdate = false; removeVirtualPad(); - openSubState(MobileControls.mobileC ? new MobileControlSelectSubState() : new KeybindsOptions()); + openSubState(new KeybindsOptions()); case "Change Options": FlxG.switchState(new OptionsMenu()); case "Exit to charter": diff --git a/source/funkin/menus/TitleState.hx b/source/funkin/menus/TitleState.hx index a6e11f518..7782c6d16 100644 --- a/source/funkin/menus/TitleState.hx +++ b/source/funkin/menus/TitleState.hx @@ -121,7 +121,7 @@ class TitleState extends MusicBeatState var pressedEnter:Bool = controls.ACCEPT; - if (MobileControls.mobileC) { + if (controls.mobileC) { for (touch in FlxG.touches.list) if (touch.justPressed) pressedEnter = true; diff --git a/source/funkin/options/OptionsMenu.hx b/source/funkin/options/OptionsMenu.hx index d36aef62b..f36bf8920 100644 --- a/source/funkin/options/OptionsMenu.hx +++ b/source/funkin/options/OptionsMenu.hx @@ -88,7 +88,7 @@ class OptionsMenu extends TreeMenu { } } addVirtualPad('UP_DOWN', 'A_B'); - addVirtualPadCamera(false); + addVirtualPadCamera(); } public override function exit() { diff --git a/source/funkin/options/OptionsScreen.hx b/source/funkin/options/OptionsScreen.hx index b25474792..4d78cea18 100644 --- a/source/funkin/options/OptionsScreen.hx +++ b/source/funkin/options/OptionsScreen.hx @@ -1,7 +1,6 @@ package funkin.options; import funkin.options.type.OptionType; -import mobile.objects.MobileControls; class OptionsScreen extends FlxTypedSpriteGroup { public static var optionHeight:Float = 120; @@ -31,7 +30,7 @@ class OptionsScreen extends FlxTypedSpriteGroup { this.actionMode = actionMode; MusicBeatState.instance.removeVirtualPad(); MusicBeatState.instance.addVirtualPad(dpadMode, actionMode); - MusicBeatState.instance.addVirtualPadCamera(false); + MusicBeatState.instance.addVirtualPadCamera(); } public override function update(elapsed:Float) { @@ -57,14 +56,14 @@ class OptionsScreen extends FlxTypedSpriteGroup { if (members.length > 0) { members[curSelected].selected = true; - if (controls.ACCEPT || (FlxG.mouse.justReleased && !MobileControls.mobileC)) + if (controls.ACCEPT || (FlxG.mouse.justReleased && !controls.mobileC)) members[curSelected].onSelect(); if (controls.LEFT_P) members[curSelected].onChangeSelection(-1); if (controls.RIGHT_P) members[curSelected].onChangeSelection(1); } - if (controls.BACK || (FlxG.mouse.justReleasedRight && !MobileControls.mobileC)) + if (controls.BACK || (FlxG.mouse.justReleasedRight && !controls.mobileC)) close(); } @@ -73,7 +72,7 @@ class OptionsScreen extends FlxTypedSpriteGroup { if(prevVPadModes.length > 0){ MusicBeatState.instance.removeVirtualPad(); MusicBeatState.instance.addVirtualPad(prevVPadModes[0], prevVPadModes[1]); - MusicBeatState.instance.addVirtualPadCamera(false); + MusicBeatState.instance.addVirtualPadCamera(); } } diff --git a/source/funkin/options/categories/MobileOptions.hx b/source/funkin/options/categories/MobileOptions.hx index 534910e28..9dcdc94d9 100644 --- a/source/funkin/options/categories/MobileOptions.hx +++ b/source/funkin/options/categories/MobileOptions.hx @@ -33,10 +33,6 @@ class MobileOptions extends OptionsScreen { dpadMode = 'LEFT_FULL'; actionMode = 'A_B'; super("Mobile", 'Change Mobile Related Things such as Controls alpha, screen timeout....', null, 'LEFT_FULL', 'A_B'); - add(new TextOption( - "Mobile Controls", - "Choose which control to play with (hitbox, vpad left, vpad right, custom...).", - openMobileControlsMenu)); add(new NumOption( "Controls Alpha", "Change how transparent the mobile controls should be", @@ -93,7 +89,7 @@ class MobileOptions extends OptionsScreen { function changeControlsAlpha(alpha) { MusicBeatState.instance.virtualPad.alpha = alpha; - if (mobile.objects.MobileControls.mobileC) { + if (mobile.objects.controls.mobileC) { FlxG.sound.volumeUpKeys = []; FlxG.sound.volumeDownKeys = []; FlxG.sound.muteKeys = []; @@ -104,18 +100,6 @@ class MobileOptions extends OptionsScreen { } } - function openMobileControlsMenu() { - if(!canEnter) return; - canEnter = false; - FlxG.state.persistentUpdate = false; - MusicBeatState.instance.camVPad.visible = false; - FlxG.state.openSubState(new mobile.funkin.menus.MobileControlSelectSubState(() -> { - MusicBeatState.instance.camVPad.visible = true; - FlxG.state.persistentUpdate = true; - new FlxTimer().start(0.2, (tmr:FlxTimer) -> canEnter = true); - })); - } - #if android function onStorageChange():Void { diff --git a/source/mobile/funkin/menus/MobileControlSelectSubState.hx b/source/mobile/funkin/menus/MobileControlSelectSubState.hx deleted file mode 100644 index 7d83e850f..000000000 --- a/source/mobile/funkin/menus/MobileControlSelectSubState.hx +++ /dev/null @@ -1,271 +0,0 @@ -package mobile.funkin.menus; - -import flixel.addons.display.FlxBackdrop; -import flixel.addons.display.FlxGridOverlay; -import flixel.util.FlxGradient; -import mobile.funkin.backend.TouchFunctions; -import mobile.flixel.FlxButton; -import flixel.input.touch.FlxTouch; -import flixel.ui.FlxButton as UIButton; -import funkin.backend.MusicBeatSubstate; -import mobile.objects.MobileControls; -import flixel.FlxSprite; -import flixel.text.FlxText; -import flixel.FlxCamera; -import flixel.util.FlxColor; -import flixel.tweens.*; -import flixel.FlxG; -import funkin.backend.assets.Paths; -import funkin.backend.utils.CoolUtil; -import funkin.menus.ui.Alphabet; - -using StringTools; - -class MobileControlSelectSubState extends MusicBeatSubstate -{ - var options:Array = ['Pad-Right', 'Pad-Left', 'Pad-Custom', 'Hitbox', 'Keyboard']; - var control:MobileControls; - var leftArrow:FlxSprite; - var rightArrow:FlxSprite; - var itemText:Alphabet; - var positionText:FlxText; - var positionTextBg:FlxSprite; - var bg:FlxBackdrop; - var ui:FlxCamera; - var buttonCamera:FlxCamera; - var curOption:Int = MobileControls.mode; - var buttonBinded:Bool = false; - var bindButton:FlxButton; - var reset:UIButton; - var tweenieShit:Float = 0; - var keyboardText:FlxText; - var closeCallBack:Void->Void; - - public function new(?closeCallBack:Void->Void, ?openCallBack:Void->Void) - { - super(); - - this.closeCallBack = closeCallBack; - if(openCallBack != null) openCallBack(); - - bg = new FlxBackdrop(FlxGridOverlay.createGrid(80, 80, 160, 160, true, - FlxColor.fromRGB(FlxG.random.int(0, 255), FlxG.random.int(0, 255), FlxG.random.int(0, 255)), - FlxColor.fromRGB(FlxG.random.int(0, 255), FlxG.random.int(0, 255), FlxG.random.int(0, 255)))); - bg.velocity.set(40, 40); - bg.alpha = 0; - add(bg); - - ui = new FlxCamera(); - ui.bgColor.alpha = 0; - ui.alpha = 0; - FlxG.cameras.add(ui, false); - - buttonCamera = new FlxCamera(); - buttonCamera.bgColor.alpha = 0; - buttonCamera.alpha = 0; - FlxG.cameras.add(buttonCamera, false); - - itemText = new Alphabet(0, 60, ''); - add(itemText); - - leftArrow = new FlxSprite(0, itemText.y - 25); - leftArrow.frames = Paths.getSparrowAtlas('mobile/menu/arrows'); - leftArrow.animation.addByPrefix('idle', 'arrow left'); - leftArrow.animation.addByPrefix('press', "arrow push left"); - leftArrow.animation.play('idle'); - add(leftArrow); - - itemText.x = leftArrow.width + 70; - leftArrow.x = itemText.x - 60; - - rightArrow = new FlxSprite().loadGraphicFromSprite(leftArrow); - rightArrow.flipX = true; - rightArrow.setPosition(itemText.x + itemText.width + 10, itemText.y - 25); - add(rightArrow); - - positionText = new FlxText(0, FlxG.height, FlxG.width / 4, ''); - positionText.setFormat(Paths.font("vcr.ttf"), 18, FlxColor.WHITE, FlxTextAlign.LEFT); - positionText.visible = false; - - positionTextBg = FlxGradient.createGradientFlxSprite(250, 150, [FlxColor.BLACK, FlxColor.BLACK, FlxColor.BLACK, FlxColor.TRANSPARENT], 1, 360); - positionTextBg.setPosition(0, FlxG.height - positionTextBg.height); - positionTextBg.visible = false; - positionTextBg.alpha = 0.8; - add(positionTextBg); - add(positionText); - - keyboardText = new FlxText(0, 0, FlxG.width, "-- No Controls --", 14); - keyboardText.setFormat(Paths.font("vcr.ttf"), 36, FlxColor.WHITE, FlxTextAlign.CENTER); - keyboardText.screenCenter(); - add(keyboardText); - keyboardText.kill(); - - var exit = new UIButton(0, itemText.y - 25, "Exit & Save", () -> - { - MobileControls.mode = curOption; - if (options[curOption] == 'Pad-Custom') - MobileControls.setCustomMode(control.virtualPad); - CoolUtil.playMenuSFX(CANCEL); - if(closeCallBack != null) closeCallBack(); - close(); - }); - exit.color = FlxColor.LIME; - exit.setGraphicSize(Std.int(exit.width) * 3); - exit.updateHitbox(); - exit.x = FlxG.width - exit.width - 70; - exit.label.setFormat(Paths.font('vcr.ttf'), 28, FlxColor.WHITE, FlxTextAlign.CENTER); - exit.label.fieldWidth = exit.width; - exit.label.x = ((exit.width - exit.label.width) / 2) + exit.x; - exit.label.offset.y = -10; // WHY THE FUCK I CAN'T CHANGE THE LABEL Y - add(exit); - - reset = new UIButton(exit.x, exit.height + exit.y + 20, "Reset", () -> - { - changeOption(0); // realods the current control mode ig? - }); - reset.color = FlxColor.RED; - reset.setGraphicSize(Std.int(reset.width) * 3); - reset.updateHitbox(); - reset.label.setFormat(Paths.font('vcr.ttf'), 28, FlxColor.WHITE, FlxTextAlign.CENTER); - reset.label.fieldWidth = reset.width; - reset.label.x = ((reset.width - reset.label.width) / 2) + reset.x; - reset.label.offset.y = -10; - add(reset); - - cameras = [ui]; - leftArrow.cameras = rightArrow.cameras = reset.cameras = exit.cameras = [buttonCamera]; - FlxTween.tween(bg, {alpha: 0.45}, 0.3, { - ease: FlxEase.quadOut, - onComplete: (twn:FlxTween) -> - { - for (camera in [ui, buttonCamera]) - FlxTween.tween(camera, {alpha: 1}, 0.2, {ease: FlxEase.circOut}); - } - }); - changeOption(0); - setOptionText(); - FlxG.mouse.visible = true; - } - - override function update(elapsed:Float) - { - checkArrowButton(leftArrow, () -> changeOption(-1)); - checkArrowButton(rightArrow, () -> changeOption(1)); - - for(touch in FlxG.touches.list){ - if (options[curOption] == 'Pad-Custom') - { - if (buttonBinded) - { - if (touch.justReleased) - { - bindButton = null; - buttonBinded = false; - } - else - moveButton(touch, bindButton); - } - else - { - control.virtualPad.forEachAlive((button:FlxButton) -> - { - if (button.justPressed) - moveButton(touch, button); - }); - } - } - } - - tweenieShit += 180 * elapsed; - keyboardText.alpha = 1 - Math.sin((Math.PI * tweenieShit) / 180); - - super.update(elapsed); - } - - function changeControls(?type:Int = null) - { - if (type == null) - type = curOption; - if (control != null) - control.destroy(); - if (members.contains(control)) - remove(control); - control = new MobileControls(type); - add(control); - control.cameras = [ui]; - } - - function changeOption(change:Int) - { - CoolUtil.playMenuSFX(); - curOption += change; - - if (curOption < 0) - curOption = options.length - 1; - if (curOption >= options.length) - curOption = 0; - - switch (curOption) - { - case 2: - reset.visible = true; - keyboardText.kill(); - changeControls(); - default: - reset.visible = false; - keyboardText.kill(); - changeControls(); - } - updatePosText(); - setOptionText(); - } - - function setOptionText() - { - itemText.text = options[curOption].replace('-', ' '); - itemText.updateHitbox(); - itemText.offset.set(0, 15); - FlxTween.tween(rightArrow, {x: itemText.x + itemText.width + 10}, 0.1, {ease: FlxEase.quintOut}); - } - - function updatePosText() - { - var optionName = options[curOption]; - if (optionName == 'Pad-Custom') - { - positionText.visible = positionTextBg.visible = true; - positionText.text = 'LEFT X: ${control.virtualPad.buttonLeft.x} - Y: ${control.virtualPad.buttonLeft.y}\nDOWN X: ${control.virtualPad.buttonDown.x} - Y: ${control.virtualPad.buttonDown.y}\n\nUP X: ${control.virtualPad.buttonUp.x} - Y: ${control.virtualPad.buttonUp.y}\nRIGHT X: ${control.virtualPad.buttonRight.x} - Y: ${control.virtualPad.buttonRight.y}'; - positionText.setPosition(0, (((positionTextBg.height - positionText.height) / 2) + positionTextBg.y)); - } - else - positionText.visible = positionTextBg.visible = false; - } - - function checkArrowButton(button:FlxSprite, func:Void->Void) - { - // OVERLAPS WON'T WORK IDFK WHY - for(camera in button.cameras) - if (FlxG.mouse.getScreenPosition(camera).x >= button.x && FlxG.mouse.getScreenPosition(camera).x <= button.x + button.width && - FlxG.mouse.getScreenPosition(camera).y >= button.y && FlxG.mouse.getScreenPosition(camera).y <= button.y + button.height) - { - if (FlxG.mouse.justPressed) - func(); - if (FlxG.mouse.pressed) - button.animation.play('press'); - } - if (FlxG.mouse.justReleased && button.animation.curAnim.name == 'press') - button.animation.play('idle'); - - if (FlxG.keys.justPressed.LEFT && button == leftArrow || FlxG.keys.justPressed.RIGHT && button == rightArrow) - func(); - } - - function moveButton(touch:FlxTouch, button:FlxButton):Void - { - bindButton = button; - buttonBinded = bindButton == null ? false : true; - bindButton.x = touch.getScreenPosition(ui).x - Std.int(bindButton.width / 2); - bindButton.y = touch.getScreenPosition(ui).y - Std.int(bindButton.height / 2); - updatePosText(); - } -} diff --git a/source/mobile/objects/MobileControls.hx b/source/mobile/objects/MobileControls.hx deleted file mode 100644 index 0fdf5a870..000000000 --- a/source/mobile/objects/MobileControls.hx +++ /dev/null @@ -1,200 +0,0 @@ -package mobile.objects; - -import flixel.FlxG; -import flixel.math.FlxPoint; -import mobile.flixel.FlxButton; -import flixel.group.FlxSpriteGroup.FlxTypedSpriteGroup; -import mobile.flixel.FlxVirtualPad; -import flixel.util.FlxDestroyUtil; -import funkin.options.Options; - -class MobileControls extends FlxTypedSpriteGroup -{ - public var virtualPad:FlxVirtualPad = new FlxVirtualPad(FlxDPadMode.NONE, FlxActionMode.NONE); - public var hitbox:Hitbox = new Hitbox(); - // YOU CAN'T CHANGE PROPERTIES USING THIS EXCEPT WHEN IN RUNTIME!! (except for the variables it already has like buttonUp, buttonLeft...) - public var current:CurrentManager; - - public static var mode(get, set):Int; - public static var forcedControl:Null; - public static var mobileC(get, never):Bool; - - public function new(?forceType:Int) - { - super(); - forcedControl = mode; - if (forceType != null) - forcedControl = forceType; - switch (forcedControl) - { - case 0: // RIGHT_FULL - initControler(0); - case 1: // LEFT_FULL - initControler(1); - case 2: // CUSTOM - initControler(2); - case 3: // HITBOX - initControler(3); - case 4: // KEYBOARD - } - current = new CurrentManager(this); - //updateButtonsColors(); - } - - private function initControler(virtualPadMode:Int = 0) - { - switch (virtualPadMode) - { - case 0: - virtualPad = new FlxVirtualPad('RIGHT_FULL', 'NONE'); - add(virtualPad); - case 1: - virtualPad = new FlxVirtualPad('LEFT_FULL', 'NONE'); - add(virtualPad); - case 2: - virtualPad = getCustomMode(new FlxVirtualPad('RIGHT_FULL', 'NONE')); - add(virtualPad); - case 3: - hitbox = new Hitbox(); - add(hitbox); - } - } - - public static function setCustomMode(virtualPad:FlxVirtualPad):Void - { - if (FlxG.save.data.buttons == null) - { - FlxG.save.data.buttons = new Array(); - for (buttons in virtualPad) - FlxG.save.data.buttons.push(FlxPoint.get(buttons.x, buttons.y)); - } - else - { - var tempCount:Int = 0; - for (buttons in virtualPad) - { - FlxG.save.data.buttons[tempCount] = FlxPoint.get(buttons.x, buttons.y); - tempCount++; - } - } - - FlxG.save.flush(); - } - - public static function getCustomMode(virtualPad:FlxVirtualPad):FlxVirtualPad - { - var tempCount:Int = 0; - - if (FlxG.save.data.buttons == null) - return virtualPad; - - for (buttons in virtualPad) - { - if(FlxG.save.data.buttons[tempCount] != null){ - buttons.x = FlxG.save.data.buttons[tempCount].x; - buttons.y = FlxG.save.data.buttons[tempCount].y; - } - tempCount++; - } - - return virtualPad; - } - - override public function destroy():Void - { - super.destroy(); - - if (virtualPad != null) - { - virtualPad = FlxDestroyUtil.destroy(virtualPad); - virtualPad = null; - } - - if (hitbox != null) - { - hitbox = FlxDestroyUtil.destroy(hitbox); - hitbox = null; - } - } - - static function set_mode(mode:Int = 0) - { - FlxG.save.data.mobileControlsMode = mode; - FlxG.save.flush(); - return mode; - } - - static function get_mode():Int - { - if (forcedControl != null) - return forcedControl; - - if (FlxG.save.data.mobileControlsMode == null) - { - FlxG.save.data.mobileControlsMode = 0; - FlxG.save.flush(); - } - - return FlxG.save.data.mobileControlsMode; - } - - @:noCompletion - private static function get_mobileC():Bool return Options.controlsAlpha >= 0.1; - /* - public function updateButtonsColors() { - // Dynamic Controls Color - var buttonsColors:Array = []; - var data:Dynamic; - if (ClientPrefs.data.dynamicColors) - data = ClientPrefs.data; - else - data = ClientPrefs.defaultData; - - buttonsColors.push(data.arrowRGB[0][0]); - buttonsColors.push(data.arrowRGB[1][0]); - buttonsColors.push(data.arrowRGB[2][0]); - buttonsColors.push(data.arrowRGB[3][0]); - if (mode == 3) - { - virtualPad.buttonLeft2.color = buttonsColors[0]; - virtualPad.buttonDown2.color = buttonsColors[1]; - virtualPad.buttonUp2.color = buttonsColors[2]; - virtualPad.buttonRight2.color = buttonsColors[3]; - } - current.buttonLeft.color = buttonsColors[0]; - current.buttonDown.color = buttonsColors[1]; - current.buttonUp.color = buttonsColors[2]; - current.buttonRight.color = buttonsColors[3]; - } - */ -} - -class CurrentManager { - public var buttonLeft:FlxButton; - public var buttonDown:FlxButton; - public var buttonUp:FlxButton; - public var buttonRight:FlxButton; - //public var buttonExtra:FlxButton; - //public var buttonExtra2:FlxButton; - public var target:FlxButtonGroup; - - public function new(control:MobileControls){ - if(MobileControls.mode == 3) { - target = control.hitbox; - buttonLeft = control.hitbox.buttonLeft; - buttonDown = control.hitbox.buttonDown; - buttonUp = control.hitbox.buttonUp; - buttonRight = control.hitbox.buttonRight; - //buttonExtra = control.hitbox.buttonExtra; - //buttonExtra2 = control.hitbox.buttonExtra2; - } else { - target = control.virtualPad; - buttonLeft = control.virtualPad.buttonLeft; - buttonDown = control.virtualPad.buttonDown; - buttonUp = control.virtualPad.buttonUp; - buttonRight = control.virtualPad.buttonRight; - //buttonExtra = control.virtualPad.buttonExtra; - //buttonExtra2 = control.virtualPad.buttonExtra2; - } - } -} From 2de6a6c8374501aaa0207357e61d6db27bd04353 Mon Sep 17 00:00:00 2001 From: Lily <124677802+LilyRoss19@users.noreply.github.com> Date: Sun, 22 Sep 2024 17:50:18 +0000 Subject: [PATCH 28/93] uhh oops --- source/funkin/backend/MusicBeatState.hx | 10 +++++----- source/funkin/backend/MusicBeatSubstate.hx | 10 +++++----- source/funkin/backend/system/Controls.hx | 8 +++++--- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/source/funkin/backend/MusicBeatState.hx b/source/funkin/backend/MusicBeatState.hx index eeb497b89..fc58ba062 100644 --- a/source/funkin/backend/MusicBeatState.hx +++ b/source/funkin/backend/MusicBeatState.hx @@ -136,7 +136,7 @@ class MusicBeatState extends FlxState implements IBeatReceiver public function removeVirtualPad():Void { if (trackedInputsVirtualPad.length > 0) - controls.removeVirtualControlsInput(trackedInputsVirtualPad); + controls.removeMobileControlsInput(trackedInputsVirtualPad); if (virtualPad != null) remove(virtualPad); @@ -162,7 +162,7 @@ class MusicBeatState extends FlxState implements IBeatReceiver public function removeHitbox() { if(trackedInputsHitbox.length > 0) - controls.removeVirtualControlsInput(trackedInputsHitbox); + controls.removeMobileControlsInput(trackedInputsHitbox); if(hitbox != null) remove(hitbox); @@ -178,12 +178,12 @@ class MusicBeatState extends FlxState implements IBeatReceiver } override function destroy() { - // Hitbox Related + // Mobile Controls Related if(trackedInputsHitbox.length > 0) - controls.removeVirtualControlsInput(trackedInputsHitbox); + controls.removeMobileControlsInput(trackedInputsHitbox); if(trackedInputsVirtualPad.length > 0) - controls.removeVirtualControlsInput(trackedInputsVirtualPad); + controls.removeMobileControlsInput(trackedInputsVirtualPad); if(virtualPad != null) virtualPad = FlxDestroyUtil.destroy(virtualPad); diff --git a/source/funkin/backend/MusicBeatSubstate.hx b/source/funkin/backend/MusicBeatSubstate.hx index bb761dd15..9b54e1eef 100644 --- a/source/funkin/backend/MusicBeatSubstate.hx +++ b/source/funkin/backend/MusicBeatSubstate.hx @@ -122,7 +122,7 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver public function removeVirtualPad() { if (trackedInputsVirtualPad.length > 0) - controls.removeVirtualControlsInput(trackedInputsVirtualPad); + controls.removeMobileControlsInput(trackedInputsVirtualPad); if (virtualPad != null) remove(virtualPad); @@ -149,7 +149,7 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver public function removeHitbox() { if(trackedInputsHitbox.length > 0) - controls.removeVirtualControlsInput(trackedInputsHitbox); + controls.removeMobileControlsInput(trackedInputsHitbox); if(hitbox != null) remove(hitbox); @@ -165,12 +165,12 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver } override function destroy() { - // Hitbox Related + // Mobile Controls Related if(trackedInputsHitbox.length > 0) - controls.removeVirtualControlsInput(trackedInputsHitbox); + controls.removeMobileControlsInput(trackedInputsHitbox); if(trackedInputsVirtualPad.length > 0) - controls.removeVirtualControlsInput(trackedInputsVirtualPad); + controls.removeMobileControlsInput(trackedInputsVirtualPad); if(virtualPad != null) virtualPad = FlxDestroyUtil.destroy(virtualPad); diff --git a/source/funkin/backend/system/Controls.hx b/source/funkin/backend/system/Controls.hx index 27aa03fd4..19f78a555 100644 --- a/source/funkin/backend/system/Controls.hx +++ b/source/funkin/backend/system/Controls.hx @@ -375,6 +375,8 @@ class Controls extends FlxActionSet inline function set_SWITCHMOD(val) return @:privateAccess _switchMod._checked = val; + public static var instance:Controls; + public function new(name, scheme = None) { super(name); @@ -423,10 +425,10 @@ class Controls extends FlxActionSet super.update(); } - public static var mobileC(get, never):Bool; + public var mobileC(get, never):Bool; @:noCompletion - private static function get_mobileC():Bool + private function get_mobileC():Bool return Options.controlsAlpha >= 0.1; public var trackedInputsUI:Array = []; @@ -499,7 +501,7 @@ class Controls extends FlxActionSet } } - public function removeVirtualControlsInput(Tinputs:Array):Void + public function removeMobileControlsInput(Tinputs:Array):Void { for (action in this.digitalActions) { From c9b8f125df060e6d6c8bcd5bf9fdd5fd3a71c3d4 Mon Sep 17 00:00:00 2001 From: Lily <124677802+LilyRoss19@users.noreply.github.com> Date: Sun, 22 Sep 2024 20:53:43 +0300 Subject: [PATCH 29/93] good thing I added instance --- source/funkin/backend/system/Main.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/funkin/backend/system/Main.hx b/source/funkin/backend/system/Main.hx index 58693e5f4..620e11f9a 100644 --- a/source/funkin/backend/system/Main.hx +++ b/source/funkin/backend/system/Main.hx @@ -170,7 +170,7 @@ class Main extends Sprite FlxG.signals.preStateSwitch.add(onStateSwitch); FlxG.signals.postStateSwitch.add(onStateSwitchPost); - FlxG.mouse.useSystemCursor = !controls.mobileC; + FlxG.mouse.useSystemCursor = !Controls.instance.mobileC; ModsFolder.init(); #if MOD_SUPPORT From 3d66736cdd24036c84d1e15afe3ef38914e7b4ef Mon Sep 17 00:00:00 2001 From: Lily <124677802+LilyRoss19@users.noreply.github.com> Date: Sun, 22 Sep 2024 20:58:54 +0300 Subject: [PATCH 30/93] Update MobileOptions.hx --- source/funkin/options/categories/MobileOptions.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/funkin/options/categories/MobileOptions.hx b/source/funkin/options/categories/MobileOptions.hx index 9dcdc94d9..fcdb4718f 100644 --- a/source/funkin/options/categories/MobileOptions.hx +++ b/source/funkin/options/categories/MobileOptions.hx @@ -89,7 +89,7 @@ class MobileOptions extends OptionsScreen { function changeControlsAlpha(alpha) { MusicBeatState.instance.virtualPad.alpha = alpha; - if (mobile.objects.controls.mobileC) { + if (Controls.instance.mobileC) { FlxG.sound.volumeUpKeys = []; FlxG.sound.volumeDownKeys = []; FlxG.sound.muteKeys = []; From da997898bfef0f8a06eb6f50647a6c9b9f1df35f Mon Sep 17 00:00:00 2001 From: Lily <124677802+LilyRoss19@users.noreply.github.com> Date: Sun, 22 Sep 2024 21:02:57 +0300 Subject: [PATCH 31/93] oh boy --- source/funkin/options/categories/MobileOptions.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/funkin/options/categories/MobileOptions.hx b/source/funkin/options/categories/MobileOptions.hx index fcdb4718f..45a7f0712 100644 --- a/source/funkin/options/categories/MobileOptions.hx +++ b/source/funkin/options/categories/MobileOptions.hx @@ -89,7 +89,7 @@ class MobileOptions extends OptionsScreen { function changeControlsAlpha(alpha) { MusicBeatState.instance.virtualPad.alpha = alpha; - if (Controls.instance.mobileC) { + if (funkin.backend.system.Controls.instance.mobileC) { FlxG.sound.volumeUpKeys = []; FlxG.sound.volumeDownKeys = []; FlxG.sound.muteKeys = []; From 0cbf13ac63899bae72c8ae844253956e994305d9 Mon Sep 17 00:00:00 2001 From: Lily <124677802+LilyRoss19@users.noreply.github.com> Date: Sun, 22 Sep 2024 19:17:51 +0000 Subject: [PATCH 32/93] `instance` to `getState()` for MusicBeat(Sub)state --- source/funkin/backend/MusicBeatState.hx | 5 +++-- source/funkin/backend/MusicBeatSubstate.hx | 5 +++-- source/funkin/options/OptionsMenu.hx | 4 ++-- source/funkin/options/OptionsScreen.hx | 16 ++++++++-------- .../funkin/options/categories/MobileOptions.hx | 2 +- 5 files changed, 17 insertions(+), 15 deletions(-) diff --git a/source/funkin/backend/MusicBeatState.hx b/source/funkin/backend/MusicBeatState.hx index fc58ba062..eaa7a5eb3 100644 --- a/source/funkin/backend/MusicBeatState.hx +++ b/source/funkin/backend/MusicBeatState.hx @@ -115,7 +115,6 @@ class MusicBeatState extends FlxState implements IBeatReceiver public var virtualPad:FlxVirtualPad; public var camHitbox:FlxCamera; public var camVPad:FlxCamera; - public static var instance:MusicBeatState; var trackedInputsHitbox:Array = []; var trackedInputsVirtualPad:Array = []; @@ -206,7 +205,6 @@ class MusicBeatState extends FlxState implements IBeatReceiver public function new(scriptsAllowed:Bool = true, ?scriptName:String) { super(); - instance = this; this.scriptsAllowed = #if SOFTCODED_STATES scriptsAllowed #else false #end; this.scriptName = scriptName; } @@ -286,6 +284,9 @@ class MusicBeatState extends FlxState implements IBeatReceiver return event; } + public static function getState():MusicBeatState + return cast (FlxG.state, MusicBeatState); + override function update(elapsed:Float) { // TODO: DEBUG MODE!! diff --git a/source/funkin/backend/MusicBeatSubstate.hx b/source/funkin/backend/MusicBeatSubstate.hx index 9b54e1eef..b4526cf70 100644 --- a/source/funkin/backend/MusicBeatSubstate.hx +++ b/source/funkin/backend/MusicBeatSubstate.hx @@ -101,7 +101,6 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver public var virtualPad:FlxVirtualPad; public var camHitbox:FlxCamera; public var camVPad:FlxCamera; - public static var instance:MusicBeatSubstate; var trackedInputsHitbox:Array = []; var trackedInputsVirtualPad:Array = []; @@ -193,7 +192,6 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver public function new(scriptsAllowed:Bool = true, ?scriptName:String) { super(); - instance = this; this.scriptsAllowed = #if SOFTCODED_STATES scriptsAllowed #else false #end; this.scriptName = scriptName; } @@ -276,6 +274,9 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver return event; } + public static function getState():MusicBeatSubstate + return cast (FlxG.state, MusicBeatSubstate); + override function update(elapsed:Float) { // TODO: DEBUG MODE!! diff --git a/source/funkin/options/OptionsMenu.hx b/source/funkin/options/OptionsMenu.hx index f36bf8920..8cb6eff57 100644 --- a/source/funkin/options/OptionsMenu.hx +++ b/source/funkin/options/OptionsMenu.hx @@ -149,8 +149,8 @@ class OptionsMenu extends TreeMenu { })); case "virtualPad": var arr = [ - node.getAtt("dpadMode") == null ? MusicBeatState.instance.virtualPad.curDPadMode.getName() : node.getAtt("dpadMode"), - node.getAtt("actionMode") == null ? MusicBeatState.instance.virtualPad.curActionMode.getName() : node.getAtt("actionMode") + node.getAtt("dpadMode") == null ? MusicBeatState.getState().virtualPad.curDPadMode.getName() : node.getAtt("dpadMode"), + node.getAtt("actionMode") == null ? MusicBeatState.getState().virtualPad.curActionMode.getName() : node.getAtt("actionMode") ]; vpadMap.set(node.getAtt("menuName"), arr); } diff --git a/source/funkin/options/OptionsScreen.hx b/source/funkin/options/OptionsScreen.hx index 4d78cea18..489f39b76 100644 --- a/source/funkin/options/OptionsScreen.hx +++ b/source/funkin/options/OptionsScreen.hx @@ -24,13 +24,13 @@ class OptionsScreen extends FlxTypedSpriteGroup { this.name = name; this.desc = desc; if (options != null) for(o in options) add(o); - if(MusicBeatState.instance.virtualPad != null) - prevVPadModes = [MusicBeatState.instance.virtualPad.curDPadMode.getName(), MusicBeatState.instance.virtualPad.curActionMode.getName()]; + if(MusicBeatState.getState().virtualPad != null) + prevVPadModes = [MusicBeatState.getState().virtualPad.curDPadMode.getName(), MusicBeatState.getState().virtualPad.curActionMode.getName()]; this.dpadMode = dpadMode; this.actionMode = actionMode; - MusicBeatState.instance.removeVirtualPad(); - MusicBeatState.instance.addVirtualPad(dpadMode, actionMode); - MusicBeatState.instance.addVirtualPadCamera(); + MusicBeatState.getState().removeVirtualPad(); + MusicBeatState.getState().addVirtualPad(dpadMode, actionMode); + MusicBeatState.getState().addVirtualPadCamera(); } public override function update(elapsed:Float) { @@ -70,9 +70,9 @@ class OptionsScreen extends FlxTypedSpriteGroup { public function close() { onClose(this); if(prevVPadModes.length > 0){ - MusicBeatState.instance.removeVirtualPad(); - MusicBeatState.instance.addVirtualPad(prevVPadModes[0], prevVPadModes[1]); - MusicBeatState.instance.addVirtualPadCamera(); + MusicBeatState.getState().removeVirtualPad(); + MusicBeatState.getState().addVirtualPad(prevVPadModes[0], prevVPadModes[1]); + MusicBeatState.getState().addVirtualPadCamera(); } } diff --git a/source/funkin/options/categories/MobileOptions.hx b/source/funkin/options/categories/MobileOptions.hx index 45a7f0712..b0e0ee5e3 100644 --- a/source/funkin/options/categories/MobileOptions.hx +++ b/source/funkin/options/categories/MobileOptions.hx @@ -88,7 +88,7 @@ class MobileOptions extends OptionsScreen { } function changeControlsAlpha(alpha) { - MusicBeatState.instance.virtualPad.alpha = alpha; + MusicBeatState.getState().virtualPad.alpha = alpha; if (funkin.backend.system.Controls.instance.mobileC) { FlxG.sound.volumeUpKeys = []; FlxG.sound.volumeDownKeys = []; From 1dfa0e7ffcf0c1d6568065bba01524633fce8d35 Mon Sep 17 00:00:00 2001 From: Lily <124677802+LilyRoss19@users.noreply.github.com> Date: Sun, 22 Sep 2024 22:33:48 +0300 Subject: [PATCH 33/93] gwa gwa --- source/funkin/backend/system/Controls.hx | 1 + 1 file changed, 1 insertion(+) diff --git a/source/funkin/backend/system/Controls.hx b/source/funkin/backend/system/Controls.hx index 19f78a555..18c047515 100644 --- a/source/funkin/backend/system/Controls.hx +++ b/source/funkin/backend/system/Controls.hx @@ -380,6 +380,7 @@ class Controls extends FlxActionSet public function new(name, scheme = None) { super(name); + instance = this; add(_up); add(_left); From bc6d95012eb806ffec76741ff6ff1b4fb9094c74 Mon Sep 17 00:00:00 2001 From: Lily <124677802+LilyRoss19@users.noreply.github.com> Date: Sun, 22 Sep 2024 20:21:21 +0000 Subject: [PATCH 34/93] we don't want keybind options on mobile controls --- source/funkin/menus/PauseSubState.hx | 3 +++ source/funkin/options/OptionsMenu.hx | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/source/funkin/menus/PauseSubState.hx b/source/funkin/menus/PauseSubState.hx index dce0099ba..4ec25717f 100644 --- a/source/funkin/menus/PauseSubState.hx +++ b/source/funkin/menus/PauseSubState.hx @@ -44,6 +44,9 @@ class PauseSubState extends MusicBeatSubstate if (menuItems.contains("Exit to charter") && !PlayState.chartingMode) menuItems.remove("Exit to charter"); + if (controls.mobileC) + menuItems.remove("Change Controls"); + add(parentDisabler = new FunkinParentDisabler()); pauseScript = Script.create(Paths.script(script)); diff --git a/source/funkin/options/OptionsMenu.hx b/source/funkin/options/OptionsMenu.hx index 8cb6eff57..d63cc23ab 100644 --- a/source/funkin/options/OptionsMenu.hx +++ b/source/funkin/options/OptionsMenu.hx @@ -41,6 +41,13 @@ class OptionsMenu extends TreeMenu { public override function create() { super.create(); + if (funkin.backend.system.Controls.instance.mobileC) + { + mainOptions = mainOptions.filter(function(option) { + return option.name != "Controls"; + }); + } + CoolUtil.playMenuSong(); DiscordUtil.call("onMenuLoaded", ["Options Menu"]); From a152c3d1872920f5cd08baf22af07d4b57e1472a Mon Sep 17 00:00:00 2001 From: Lily <124677802+LilyRoss19@users.noreply.github.com> Date: Mon, 23 Sep 2024 14:13:00 +0000 Subject: [PATCH 35/93] `TOUCH_CONTROLS` define --- project.xml | 2 ++ source/funkin/backend/MusicBeatState.hx | 26 ++++++++++++++----- source/funkin/backend/MusicBeatSubstate.hx | 24 +++++++++++++---- source/funkin/backend/system/Controls.hx | 22 ++++++++++++---- source/funkin/backend/system/Main.hx | 2 +- source/funkin/editors/EditorPicker.hx | 8 +++--- source/funkin/editors/UIDebugState.hx | 2 +- .../editors/character/CharacterEditor.hx | 2 +- .../editors/character/CharacterSelection.hx | 2 +- .../editors/charter/CharterSelection.hx | 2 +- source/funkin/game/PlayState.hx | 8 +++++- source/funkin/menus/BetaWarningState.hx | 2 +- source/funkin/menus/FreeplayState.hx | 8 +++--- source/funkin/menus/MainMenuState.hx | 6 ++--- source/funkin/menus/PauseSubState.hx | 2 +- source/funkin/menus/TitleState.hx | 2 +- source/funkin/options/OptionsMenu.hx | 6 +++-- source/funkin/options/OptionsScreen.hx | 6 +++-- .../options/categories/MobileOptions.hx | 8 ++++-- 19 files changed, 98 insertions(+), 42 deletions(-) diff --git a/project.xml b/project.xml index 4e77d4626..ad9719c76 100644 --- a/project.xml +++ b/project.xml @@ -150,6 +150,8 @@ + + diff --git a/source/funkin/backend/MusicBeatState.hx b/source/funkin/backend/MusicBeatState.hx index eaa7a5eb3..6d3deafdb 100644 --- a/source/funkin/backend/MusicBeatState.hx +++ b/source/funkin/backend/MusicBeatState.hx @@ -110,7 +110,8 @@ class MusicBeatState extends FlxState implements IBeatReceiver return PlayerSettings.player1.controls; inline function get_controlsP2():Controls return PlayerSettings.player2.controls; - + + #if TOUCH_CONTROLS public var hitbox:Hitbox; public var virtualPad:FlxVirtualPad; public var camHitbox:FlxCamera; @@ -118,9 +119,11 @@ class MusicBeatState extends FlxState implements IBeatReceiver var trackedInputsHitbox:Array = []; var trackedInputsVirtualPad:Array = []; + #end public function addVirtualPad(DPad:OneOfTwo, Action:OneOfTwo):Void { + #if TOUCH_CONTROLS if (virtualPad != null) removeVirtualPad(); @@ -130,18 +133,22 @@ class MusicBeatState extends FlxState implements IBeatReceiver controls.setVirtualPadUI(virtualPad, virtualPad.curDPadMode, virtualPad.curActionMode); trackedInputsVirtualPad = controls.trackedInputsUI; controls.trackedInputsUI = []; + #end } public function removeVirtualPad():Void { + #if TOUCH_CONTROLS if (trackedInputsVirtualPad.length > 0) - controls.removeMobileControlsInput(trackedInputsVirtualPad); + controls.removeTouchControlsInput(trackedInputsVirtualPad); if (virtualPad != null) remove(virtualPad); + #end } public function addHitbox(?defaultDrawTarget:Bool = false) { + #if TOUCH_CONTROLS if (hitbox != null) removeHitbox(); @@ -157,32 +164,38 @@ class MusicBeatState extends FlxState implements IBeatReceiver hitbox.cameras = [camHitbox]; add(hitbox); + #end } public function removeHitbox() { + #if TOUCH_CONTROLS if(trackedInputsHitbox.length > 0) - controls.removeMobileControlsInput(trackedInputsHitbox); + controls.removeTouchControlsInput(trackedInputsHitbox); if(hitbox != null) remove(hitbox); + #end } public function addVirtualPadCamera(?defaultDrawTarget:Bool = false) { + #if TOUCH_CONTROLS if (virtualPad == null) return; camVPad = new FlxCamera(); camVPad.bgColor.alpha = 0; FlxG.cameras.add(camVPad, defaultDrawTarget); virtualPad.cameras = [camVPad]; + #end } override function destroy() { - // Mobile Controls Related + // Touch Controls Related + #if TOUCH_CONTROLS if(trackedInputsHitbox.length > 0) - controls.removeMobileControlsInput(trackedInputsHitbox); + controls.removeTouchControlsInput(trackedInputsHitbox); if(trackedInputsVirtualPad.length > 0) - controls.removeMobileControlsInput(trackedInputsVirtualPad); + controls.removeTouchControlsInput(trackedInputsVirtualPad); if(virtualPad != null) virtualPad = FlxDestroyUtil.destroy(virtualPad); @@ -195,6 +208,7 @@ class MusicBeatState extends FlxState implements IBeatReceiver if(camVPad != null) camVPad = FlxDestroyUtil.destroy(camVPad); + #end // CNE Related super.destroy(); diff --git a/source/funkin/backend/MusicBeatSubstate.hx b/source/funkin/backend/MusicBeatSubstate.hx index b4526cf70..de743f386 100644 --- a/source/funkin/backend/MusicBeatSubstate.hx +++ b/source/funkin/backend/MusicBeatSubstate.hx @@ -97,6 +97,7 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver inline function get_controlsP2():Controls return PlayerSettings.player2.controls; + #if TOUCH_CONTROLS public var hitbox:Hitbox; public var virtualPad:FlxVirtualPad; public var camHitbox:FlxCamera; @@ -104,9 +105,11 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver var trackedInputsHitbox:Array = []; var trackedInputsVirtualPad:Array = []; + #end public function addVirtualPad(DPad:OneOfTwo, Action:OneOfTwo) { + #if TOUCH_CONTROLS if (virtualPad != null) removeVirtualPad(); @@ -116,18 +119,22 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver controls.setVirtualPadUI(virtualPad, virtualPad.curDPadMode, virtualPad.curActionMode); trackedInputsVirtualPad = controls.trackedInputsUI; controls.trackedInputsUI = []; + #end } public function removeVirtualPad() { + #if TOUCH_CONTROLS if (trackedInputsVirtualPad.length > 0) - controls.removeMobileControlsInput(trackedInputsVirtualPad); + controls.removeTouchControlsInput(trackedInputsVirtualPad); if (virtualPad != null) remove(virtualPad); + #end } public function addHitbox(?defaultDrawTarget:Bool = false) { + #if TOUCH_CONTROLS if (hitbox != null) removeHitbox(); @@ -144,32 +151,38 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver hitbox.cameras = [camHitbox]; hitbox.visible = false; add(hitbox); + #end } public function removeHitbox() { + #if TOUCH_CONTROLS if(trackedInputsHitbox.length > 0) - controls.removeMobileControlsInput(trackedInputsHitbox); + controls.removeTouchControlsInput(trackedInputsHitbox); if(hitbox != null) remove(hitbox); + #end } public function addVirtualPadCamera(?defaultDrawTarget:Bool = false) { + #if TOUCH_CONTROLS if (virtualPad == null) return; camVPad = new FlxCamera(); camVPad.bgColor.alpha = 0; FlxG.cameras.add(camVPad, defaultDrawTarget); virtualPad.cameras = [camVPad]; + #end } override function destroy() { - // Mobile Controls Related + // Touch Controls Related + #if TOUCH_CONTROLS if(trackedInputsHitbox.length > 0) - controls.removeMobileControlsInput(trackedInputsHitbox); + controls.removeTouchControlsInput(trackedInputsHitbox); if(trackedInputsVirtualPad.length > 0) - controls.removeMobileControlsInput(trackedInputsVirtualPad); + controls.removeTouchControlsInput(trackedInputsVirtualPad); if(virtualPad != null) virtualPad = FlxDestroyUtil.destroy(virtualPad); @@ -182,6 +195,7 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver if(camVPad != null) camVPad = FlxDestroyUtil.destroy(camVPad); + #end // CNE Related super.destroy(); diff --git a/source/funkin/backend/system/Controls.hx b/source/funkin/backend/system/Controls.hx index 18c047515..70854daea 100644 --- a/source/funkin/backend/system/Controls.hx +++ b/source/funkin/backend/system/Controls.hx @@ -426,37 +426,44 @@ class Controls extends FlxActionSet super.update(); } - public var mobileC(get, never):Bool; + public var touchC(get, never):Bool; @:noCompletion - private function get_mobileC():Bool - return Options.controlsAlpha >= 0.1; - + private function get_touchC():Bool + return #if TOUCH_CONTROLS Options.controlsAlpha >= 0.1 #else false #end; + + #if TOUCH_CONTROLS public var trackedInputsUI:Array = []; public var trackedInputsNOTES:Array = []; + #end public function addButtonNOTES(action:FlxActionDigital, button:Button, state:FlxInputState):Void { + #if TOUCH_CONTROLS if (button == null) return; var input:FlxActionInputDigitalIFlxInput = new FlxActionInputDigitalIFlxInput(button, state); trackedInputsNOTES.push(input); action.add(input); + #end } public function addButtonUI(action:FlxActionDigital, button:Button, state:FlxInputState):Void { + #if TOUCH_CONTROLS if (button == null) return; var input:FlxActionInputDigitalIFlxInput = new FlxActionInputDigitalIFlxInput(button, state); trackedInputsUI.push(input); action.add(input); + #end } public function setHitBox(hitbox:Hitbox):Void { + #if TOUCH_CONTROLS if (Hitbox == null) return; @@ -464,10 +471,12 @@ class Controls extends FlxActionSet inline forEachBound(Control.NOTE_DOWN, (action, state) -> addButtonNOTES(action, hitbox.buttonDown, state)); inline forEachBound(Control.NOTE_UP, (action, state) -> addButtonNOTES(action, hitbox.buttonUp, state)); inline forEachBound(Control.NOTE_RIGHT, (action, state) -> addButtonNOTES(action, hitbox.buttonRight, state)); + #end } public function setVirtualPadUI(vpad:FlxVirtualPad, DPad:FlxDPadMode, Action:FlxActionMode):Void { + #if TOUCH_CONTROLS if (vpad == null) return; @@ -500,10 +509,12 @@ class Controls extends FlxActionSet inline forEachBound(Control.ACCEPT, (action, state) -> addButtonUI(action, vpad.buttonA, state)); inline forEachBound(Control.BACK, (action, state) -> addButtonUI(action, vpad.buttonB, state)); } + #end } - public function removeMobileControlsInput(Tinputs:Array):Void + public function removeTouchControlsInput(Tinputs:Array):Void { + #if TOUCH_CONTROLS for (action in this.digitalActions) { var i = action.inputs.length; @@ -517,6 +528,7 @@ class Controls extends FlxActionSet } } } + #end } // inline diff --git a/source/funkin/backend/system/Main.hx b/source/funkin/backend/system/Main.hx index 620e11f9a..a98fe7ca3 100644 --- a/source/funkin/backend/system/Main.hx +++ b/source/funkin/backend/system/Main.hx @@ -170,7 +170,7 @@ class Main extends Sprite FlxG.signals.preStateSwitch.add(onStateSwitch); FlxG.signals.postStateSwitch.add(onStateSwitchPost); - FlxG.mouse.useSystemCursor = !Controls.instance.mobileC; + FlxG.mouse.useSystemCursor = !Controls.instance.touchC; ModsFolder.init(); #if MOD_SUPPORT diff --git a/source/funkin/editors/EditorPicker.hx b/source/funkin/editors/EditorPicker.hx index 990aac71a..5a4ebfd50 100644 --- a/source/funkin/editors/EditorPicker.hx +++ b/source/funkin/editors/EditorPicker.hx @@ -71,7 +71,7 @@ class EditorPicker extends MusicBeatSubstate { } sprites[0].selected = true; - if (!controls.mobileC) FlxG.mouse.getScreenPosition(subCam, oldMousePos); + if (!controls.touchC) FlxG.mouse.getScreenPosition(subCam, oldMousePos); addVirtualPad('UP_DOWN', 'A_B'); } @@ -88,14 +88,14 @@ class EditorPicker extends MusicBeatSubstate { } changeSelection(-FlxG.mouse.wheel + (controls.UP_P ? -1 : 0) + (controls.DOWN_P ? 1 : 0)); - if (!controls.mobileC) FlxG.mouse.getScreenPosition(subCam, curMousePos); - if (!controls.mobileC && curMousePos.x != oldMousePos.x || curMousePos.y != oldMousePos.y) { + if (!controls.touchC) FlxG.mouse.getScreenPosition(subCam, curMousePos); + if (!controls.touchC && curMousePos.x != oldMousePos.x || curMousePos.y != oldMousePos.y) { oldMousePos.set(curMousePos.x, curMousePos.y); curSelected = -1; changeSelection(Std.int(curMousePos.y / optionHeight)+1); } - if (controls.ACCEPT || !controls.mobileC && FlxG.mouse.justReleased) { + if (controls.ACCEPT || !controls.touchC && FlxG.mouse.justReleased) { if (options[curSelected].state != null) { selected = true; CoolUtil.playMenuSFX(CONFIRM); diff --git a/source/funkin/editors/UIDebugState.hx b/source/funkin/editors/UIDebugState.hx index 8063c6eb4..16c4c194d 100644 --- a/source/funkin/editors/UIDebugState.hx +++ b/source/funkin/editors/UIDebugState.hx @@ -7,7 +7,7 @@ class UIDebugState extends UIState { public override function create() { super.create(); - FlxG.mouse.useSystemCursor = !controls.mobileC; + FlxG.mouse.useSystemCursor = !controls.touchC; FlxG.mouse.visible = true; var bg = new FlxSprite().makeSolid(FlxG.width, FlxG.height, 0xFF444444); diff --git a/source/funkin/editors/character/CharacterEditor.hx b/source/funkin/editors/character/CharacterEditor.hx index 2903ab9cf..33f62f98a 100644 --- a/source/funkin/editors/character/CharacterEditor.hx +++ b/source/funkin/editors/character/CharacterEditor.hx @@ -296,7 +296,7 @@ class CharacterEditor extends UIState { closeCurrentContextMenu(); openContextMenu(topMenu[2].childs); } - if (!controls.mobileC && FlxG.mouse.pressed) { + if (!controls.touchC && FlxG.mouse.pressed) { nextScroll.set(nextScroll.x - FlxG.mouse.deltaScreenX, nextScroll.y - FlxG.mouse.deltaScreenY); currentCursor = HAND; } else diff --git a/source/funkin/editors/character/CharacterSelection.hx b/source/funkin/editors/character/CharacterSelection.hx index fff0e8395..a77eec466 100644 --- a/source/funkin/editors/character/CharacterSelection.hx +++ b/source/funkin/editors/character/CharacterSelection.hx @@ -18,7 +18,7 @@ class CharacterSelection extends EditorTreeMenu var modsList:Array = Character.getList(true); - final button:String = controls.mobileC ? 'A' : 'ACCEPT'; + final button:String = controls.touchC ? 'A' : 'ACCEPT'; var list:Array = [ for (char in (modsList.length == 0 ? Character.getList(false) : modsList)) diff --git a/source/funkin/editors/charter/CharterSelection.hx b/source/funkin/editors/charter/CharterSelection.hx index 6a260d4ba..e92e7711b 100644 --- a/source/funkin/editors/charter/CharterSelection.hx +++ b/source/funkin/editors/charter/CharterSelection.hx @@ -16,7 +16,7 @@ using StringTools; class CharterSelection extends EditorTreeMenu { public var freeplayList:FreeplaySonglist; public var curSong:ChartMetaData; - private final button:String = controls.mobileC ? 'A' : 'ACCEPT'; + private final button:String = controls.touchC ? 'A' : 'ACCEPT'; public override function create() { bgType = "charter"; diff --git a/source/funkin/game/PlayState.hx b/source/funkin/game/PlayState.hx index 42750f9dc..6fc4211d8 100644 --- a/source/funkin/game/PlayState.hx +++ b/source/funkin/game/PlayState.hx @@ -761,7 +761,9 @@ class PlayState extends MusicBeatState startingSong = true; addHitbox(); + #if TOUCH_CONTROLS hitbox.visible = true; + #end #if !android addVirtualPad('NONE', 'P'); addVirtualPadCamera(); @@ -1248,7 +1250,7 @@ class PlayState extends MusicBeatState updateRatingStuff(); - if (#if android FlxG.android.justReleased.BACK || #else virtualPad.buttonP.justPressed || #end controls.PAUSE && startedCountdown && canPause) + if (#if android FlxG.android.justReleased.BACK || #elseif (TOUCH_CONTROLS && !android) virtualPad.buttonP.justPressed || #end controls.PAUSE && startedCountdown && canPause) pauseGame(); if (canAccessDebugMenus) { @@ -1451,7 +1453,9 @@ class PlayState extends MusicBeatState */ public function endSong():Void { + #if TOUCH_CONTROLS hitbox.visible = false; + #end scripts.call("onSongEnd"); canPause = false; inst.volume = 0; @@ -1493,7 +1497,9 @@ class PlayState extends MusicBeatState * Immediately switches to the next song, or goes back to the Story/Freeplay menu. */ public function nextSong() { + #if TOUCH_CONTROLS hitbox.visible = false; + #end if (isStoryMode) { campaignScore += songScore; diff --git a/source/funkin/menus/BetaWarningState.hx b/source/funkin/menus/BetaWarningState.hx index 200e7cee6..f9f512422 100644 --- a/source/funkin/menus/BetaWarningState.hx +++ b/source/funkin/menus/BetaWarningState.hx @@ -19,7 +19,7 @@ class BetaWarningState extends MusicBeatState { disclaimer = new FunkinText(16, titleAlphabet.y + titleAlphabet.height + 10, FlxG.width - 32, "", 32); disclaimer.alignment = CENTER; - disclaimer.applyMarkup('This engine is still in a *${Main.releaseCycle}* state. That means *majority of the features* are either *buggy* or *non finished*. If you find any bugs, please report them to the Codename Engine GitHub.\n\n${controls.mobileC ? 'Tap Your Screen' : 'Press ENTER'} to continue', + disclaimer.applyMarkup('This engine is still in a *${Main.releaseCycle}* state. That means *majority of the features* are either *buggy* or *non finished*. If you find any bugs, please report them to the Codename Engine GitHub.\n\n${controls.touchC ? 'Tap Your Screen' : 'Press ENTER'} to continue', [ new FlxTextFormatMarkerPair(new FlxTextFormat(0xFFFF4444), "*") ] diff --git a/source/funkin/menus/FreeplayState.hx b/source/funkin/menus/FreeplayState.hx index ae00ed9c9..977bbf41b 100644 --- a/source/funkin/menus/FreeplayState.hx +++ b/source/funkin/menus/FreeplayState.hx @@ -223,7 +223,7 @@ class FreeplayState extends MusicBeatState if (canSelect) { changeSelection((controls.UP_P ? -1 : 0) + (controls.DOWN_P ? 1 : 0)); changeDiff((controls.LEFT_P ? -1 : 0) + (controls.RIGHT_P ? 1 : 0)); - changeCoopMode(((virtualPad.buttonX.justPressed || FlxG.keys.justPressed.TAB) ? 1 : 0)); + changeCoopMode(((#if TOUCH_CONTROLS virtualPad.buttonX.justPressed || #end FlxG.keys.justPressed.TAB) ? 1 : 0)); // putting it before so that its actually smooth updateOptionsAlpha(); } @@ -261,7 +261,7 @@ class FreeplayState extends MusicBeatState } #if sys - if (virtualPad.buttonY.justPressed || FlxG.keys.justPressed.EIGHT && Sys.args().contains("-livereload")) + if (#if TOUCH_CONTROLS virtualPad.buttonY.justPressed || #end FlxG.keys.justPressed.EIGHT && Sys.args().contains("-livereload")) convertChart(); #end @@ -352,7 +352,7 @@ class FreeplayState extends MusicBeatState /** * Array containing all labels for Co-Op / Opponent modes. */ - public var coopLabels:Array = controls.mobileC ? ['[X] Solo', '[X] Opponent Mode'] : + public var coopLabels:Array = controls.touchC ? ['[X] Solo', '[X] Opponent Mode'] : [ '[TAB] Solo', '[TAB] Opponent Mode', @@ -371,7 +371,7 @@ class FreeplayState extends MusicBeatState var bothEnabled = songs[curSelected].coopAllowed && songs[curSelected].opponentModeAllowed; var changeThingy:Int = -1; - if(controls.mobileC) + if(controls.touchC) changeThingy = FlxMath.wrap(curCoopMode + change, 0, 1); else changeThingy = FlxMath.wrap(curCoopMode + change, 0, bothEnabled ? 3 : 1); diff --git a/source/funkin/menus/MainMenuState.hx b/source/funkin/menus/MainMenuState.hx index 7419e0cbc..62445f56f 100644 --- a/source/funkin/menus/MainMenuState.hx +++ b/source/funkin/menus/MainMenuState.hx @@ -75,7 +75,7 @@ class MainMenuState extends MusicBeatState } FlxG.camera.follow(camFollow, null, 0.06); - var modsKey:String = controls.mobileC ? "M" : controls.getKeyName(SWITCHMOD); + var modsKey:String = controls.touchC ? "M" : controls.getKeyName(SWITCHMOD); versionText = new FunkinText(5, FlxG.height - 2, 0, 'Codename Engine v${Application.current.meta.get('version')}\nCommit ${funkin.backend.system.macros.GitCommitMacro.commitNumber} (${funkin.backend.system.macros.GitCommitMacro.commitHash})\n[$modsKey}] Open Mods menu\n'); versionText.y -= versionText.height; @@ -98,7 +98,7 @@ class MainMenuState extends MusicBeatState if (!selectedSomethin) { if (canAccessDebugMenus) { - if (FlxG.keys.justPressed.SEVEN || virtualPad.buttonE.justPressed) { + if (FlxG.keys.justPressed.SEVEN #if TOUCH_CONTROLS || virtualPad.buttonE.justPressed #end) { persistentUpdate = false; persistentDraw = true; openSubState(new funkin.editors.EditorPicker()); @@ -122,7 +122,7 @@ class MainMenuState extends MusicBeatState FlxG.switchState(new TitleState()); #if MOD_SUPPORT - if (controls.SWITCHMOD || virtualPad.buttonM.justPressed) { + if (controls.SWITCHMOD #if TOUCH_CONTROLS || virtualPad.buttonM.justPressed #end) { openSubState(new ModSwitchMenu()); persistentUpdate = false; persistentDraw = true; diff --git a/source/funkin/menus/PauseSubState.hx b/source/funkin/menus/PauseSubState.hx index 4ec25717f..16c017862 100644 --- a/source/funkin/menus/PauseSubState.hx +++ b/source/funkin/menus/PauseSubState.hx @@ -44,7 +44,7 @@ class PauseSubState extends MusicBeatSubstate if (menuItems.contains("Exit to charter") && !PlayState.chartingMode) menuItems.remove("Exit to charter"); - if (controls.mobileC) + if (controls.touchC) menuItems.remove("Change Controls"); add(parentDisabler = new FunkinParentDisabler()); diff --git a/source/funkin/menus/TitleState.hx b/source/funkin/menus/TitleState.hx index 7782c6d16..52edf5506 100644 --- a/source/funkin/menus/TitleState.hx +++ b/source/funkin/menus/TitleState.hx @@ -121,7 +121,7 @@ class TitleState extends MusicBeatState var pressedEnter:Bool = controls.ACCEPT; - if (controls.mobileC) { + if (controls.touchC) { for (touch in FlxG.touches.list) if (touch.justPressed) pressedEnter = true; diff --git a/source/funkin/options/OptionsMenu.hx b/source/funkin/options/OptionsMenu.hx index d63cc23ab..8b895cdda 100644 --- a/source/funkin/options/OptionsMenu.hx +++ b/source/funkin/options/OptionsMenu.hx @@ -28,7 +28,7 @@ class OptionsMenu extends TreeMenu { }, { name: 'Mobile Options >', - desc: 'Change Options Related To Mobile & Mobile Controls', + desc: 'Change Options Related To Mobile & Touch Controls', state: MobileOptions }, { @@ -41,7 +41,7 @@ class OptionsMenu extends TreeMenu { public override function create() { super.create(); - if (funkin.backend.system.Controls.instance.mobileC) + if (funkin.backend.system.Controls.instance.touchC) { mainOptions = mainOptions.filter(function(option) { return option.name != "Controls"; @@ -155,11 +155,13 @@ class OptionsMenu extends TreeMenu { optionsTree.add(new OptionsScreen(name, desc, parseOptionsFromXML(node), vpadMap.exists(name) ? vpadMap.get(name)[0] : 'NONE', vpadMap.exists(name) ? vpadMap.get(name)[1] : 'NONE')); })); case "virtualPad": + #if TOUCH_CONTROLS var arr = [ node.getAtt("dpadMode") == null ? MusicBeatState.getState().virtualPad.curDPadMode.getName() : node.getAtt("dpadMode"), node.getAtt("actionMode") == null ? MusicBeatState.getState().virtualPad.curActionMode.getName() : node.getAtt("actionMode") ]; vpadMap.set(node.getAtt("menuName"), arr); + #end } } diff --git a/source/funkin/options/OptionsScreen.hx b/source/funkin/options/OptionsScreen.hx index 489f39b76..fb45061c6 100644 --- a/source/funkin/options/OptionsScreen.hx +++ b/source/funkin/options/OptionsScreen.hx @@ -24,6 +24,7 @@ class OptionsScreen extends FlxTypedSpriteGroup { this.name = name; this.desc = desc; if (options != null) for(o in options) add(o); + #if TOUCH_CONTROLS if(MusicBeatState.getState().virtualPad != null) prevVPadModes = [MusicBeatState.getState().virtualPad.curDPadMode.getName(), MusicBeatState.getState().virtualPad.curActionMode.getName()]; this.dpadMode = dpadMode; @@ -31,6 +32,7 @@ class OptionsScreen extends FlxTypedSpriteGroup { MusicBeatState.getState().removeVirtualPad(); MusicBeatState.getState().addVirtualPad(dpadMode, actionMode); MusicBeatState.getState().addVirtualPadCamera(); + #end } public override function update(elapsed:Float) { @@ -56,14 +58,14 @@ class OptionsScreen extends FlxTypedSpriteGroup { if (members.length > 0) { members[curSelected].selected = true; - if (controls.ACCEPT || (FlxG.mouse.justReleased && !controls.mobileC)) + if (controls.ACCEPT || (FlxG.mouse.justReleased && !controls.touchC)) members[curSelected].onSelect(); if (controls.LEFT_P) members[curSelected].onChangeSelection(-1); if (controls.RIGHT_P) members[curSelected].onChangeSelection(1); } - if (controls.BACK || (FlxG.mouse.justReleasedRight && !controls.mobileC)) + if (controls.BACK || (FlxG.mouse.justReleasedRight && !controls.touchC)) close(); } diff --git a/source/funkin/options/categories/MobileOptions.hx b/source/funkin/options/categories/MobileOptions.hx index b0e0ee5e3..da170f977 100644 --- a/source/funkin/options/categories/MobileOptions.hx +++ b/source/funkin/options/categories/MobileOptions.hx @@ -33,9 +33,10 @@ class MobileOptions extends OptionsScreen { dpadMode = 'LEFT_FULL'; actionMode = 'A_B'; super("Mobile", 'Change Mobile Related Things such as Controls alpha, screen timeout....', null, 'LEFT_FULL', 'A_B'); + #if TOUCH_CONTROLS add(new NumOption( "Controls Alpha", - "Change how transparent the mobile controls should be", + "Change how transparent the touch controls should be", 0.0, // minimum 1.0, // maximum 0.1, // change @@ -47,6 +48,7 @@ class MobileOptions extends OptionsScreen { ['gradient', 'noGradient', 'hidden'], ['Gradient', 'No Gradient', 'Hidden'], 'hitboxType')); + #end #if mobile add(new Checkbox( "Allow Screen Timeout", @@ -88,8 +90,9 @@ class MobileOptions extends OptionsScreen { } function changeControlsAlpha(alpha) { + #if TOUCH_CONTROLS MusicBeatState.getState().virtualPad.alpha = alpha; - if (funkin.backend.system.Controls.instance.mobileC) { + if (funkin.backend.system.Controls.instance.touchC) { FlxG.sound.volumeUpKeys = []; FlxG.sound.volumeDownKeys = []; FlxG.sound.muteKeys = []; @@ -98,6 +101,7 @@ class MobileOptions extends OptionsScreen { FlxG.sound.volumeDownKeys = [FlxKey.MINUS, FlxKey.NUMPADMINUS]; FlxG.sound.muteKeys = [FlxKey.ZERO, FlxKey.NUMPADZERO]; } + #end } #if android From 7f65ab3fb3e600124bd02813258316da9391937b Mon Sep 17 00:00:00 2001 From: Lily <124677802+LilyRoss19@users.noreply.github.com> Date: Mon, 23 Sep 2024 17:22:34 +0300 Subject: [PATCH 36/93] whoops --- source/funkin/backend/MusicBeatState.hx | 2 ++ source/funkin/backend/MusicBeatSubstate.hx | 2 ++ 2 files changed, 4 insertions(+) diff --git a/source/funkin/backend/MusicBeatState.hx b/source/funkin/backend/MusicBeatState.hx index 6d3deafdb..725320b4c 100644 --- a/source/funkin/backend/MusicBeatState.hx +++ b/source/funkin/backend/MusicBeatState.hx @@ -238,11 +238,13 @@ class MusicBeatState extends FlxState implements IBeatReceiver stateScripts.add(script); script.load(); stateScripts.set('setVirtualPadMode', function(DPadMode:String, ActionMode:String, ?addCamera = false){ + #if TOUCH_CONTROLS if(virtualPad == null) return; removeVirtualPad(); addVirtualPad(DPadMode, ActionMode); if(addCamera) addVirtualPadCamera(); + #end }); } } diff --git a/source/funkin/backend/MusicBeatSubstate.hx b/source/funkin/backend/MusicBeatSubstate.hx index de743f386..d5a0cad24 100644 --- a/source/funkin/backend/MusicBeatSubstate.hx +++ b/source/funkin/backend/MusicBeatSubstate.hx @@ -225,11 +225,13 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver stateScripts.add(script); script.load(); stateScripts.set('setVirtualPadMode', function(DPadMode:String, ActionMode:String, ?addCamera = false){ + #if TOUCH_CONTROLS if(virtualPad == null) return; removeVirtualPad(); addVirtualPad(DPadMode, ActionMode); if(addCamera) addVirtualPadCamera(); + #end }); } } From 6c711af0a2bc04b0d3bfe67eb97ef58dbef6a6b0 Mon Sep 17 00:00:00 2001 From: Lily Date: Mon, 23 Sep 2024 17:25:54 +0300 Subject: [PATCH 37/93] forgor --- project.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project.xml b/project.xml index ad9719c76..4597e46d9 100644 --- a/project.xml +++ b/project.xml @@ -150,7 +150,7 @@ - + From 8466e82f0f68e9e43ad2b212e73bc6e34f350c58 Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 29 Sep 2024 15:08:25 +0300 Subject: [PATCH 38/93] comment this out for now --- .github/workflows/ios.yml | 60 +++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index 876e78262..80ef41ba3 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -14,17 +14,17 @@ jobs: uses: krdlab/setup-haxe@v1 with: haxe-version: 4.2.5 - - name: Restore existing build cache for faster compilation - uses: actions/cache@v3 - with: - # not caching the bin folder to prevent asset duplication and stuff like that - key: cache-build-ios - path: | - .haxelib/ - export/release/ios/haxe/ - export/release/ios/obj/ - restore-keys: | - cache-build-mac + # - name: Restore existing build cache for faster compilation + # uses: actions/cache@v3 + # with: + ## not caching the bin folder to prevent asset duplication and stuff like that + # key: cache-build-ios + # path: | + # .haxelib/ + # export/release/ios/haxe/ + # export/release/ios/obj/ + # restore-keys: | + # cache-build-ios - name: Installing/Updating libraries run: | haxe -cp commandline -D analyzer-optimize --run Main setup --lib=./libs.mobile.xml @@ -38,25 +38,25 @@ jobs: haxelib run lime rebuild tools - name: Building the game run: haxelib run lime build ios -nosign - - name: Clearing already existing cache - uses: actions/github-script@v6 - with: - script: | - const caches = await github.rest.actions.getActionsCacheList({ - owner: context.repo.owner, - repo: context.repo.repo, - }) - for (const cache of caches.data.actions_caches) { - if (cache.key == "cache-build-ios") { - console.log('Clearing ' + cache.key + '...') - await github.rest.actions.deleteActionsCacheById({ - owner: context.repo.owner, - repo: context.repo.repo, - cache_id: cache.id, - }) - console.log("Cache cleared.") - } - } + # - name: Clearing already existing cache + # uses: actions/github-script@v6 + # with: + # script: | + # const caches = await github.rest.actions.getActionsCacheList({ + # owner: context.repo.owner, + # repo: context.repo.repo, + # }) + # for (const cache of caches.data.actions_caches) { + # if (cache.key == "cache-build-ios") { + # console.log('Clearing ' + cache.key + '...') + # await github.rest.actions.deleteActionsCacheById({ + # owner: context.repo.owner, + # repo: context.repo.repo, + # cache_id: cache.id, + # }) + # console.log("Cache cleared.") + # } + # } - name: Making ipa file run: | cd export/*/ios/build/*-iphoneos From 55fbc63915a1c2ac3181d589a54a3da48d4457aa Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 29 Sep 2024 15:09:25 +0300 Subject: [PATCH 39/93] Update ios.yml --- .github/workflows/ios.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index 80ef41ba3..59047faf8 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -68,3 +68,14 @@ jobs: with: name: Codename Engine path: export/release/ios/build/Release-iphoneos/*.ipa + # - name: Uploading new cache + # uses: actions/cache@v3 + # with: + # caching again since for some reason it doesnt work with the first post cache shit + # key: cache-build-ios + # path: | + # .haxelib/ + # export/release/ios/haxe/ + # export/release/ios/obj/ + # restore-keys: | + # cache-build-ios From 344401f6581844cfdb56d913d39208ba01a15686 Mon Sep 17 00:00:00 2001 From: Ne_Eo Date: Sun, 29 Sep 2024 14:16:58 +0200 Subject: [PATCH 40/93] Oop --- libs.mobile.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs.mobile.xml b/libs.mobile.xml index 161340cc2..d332a16b7 100644 --- a/libs.mobile.xml +++ b/libs.mobile.xml @@ -25,7 +25,7 @@ - + From 3c2036ca7cf75c21e375fbf62cf5ce9bfc59da00 Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 29 Sep 2024 15:22:14 +0300 Subject: [PATCH 41/93] gradle probably has so much gb on it --- .github/workflows/android.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 1194d110f..a08009707 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -25,7 +25,6 @@ jobs: # not caching the bin folder to prevent asset duplication and stuff like that key: cache-build-android path: | - ~/.gradle .haxelib/ export/release/android/haxe/ export/release/android/obj/ @@ -82,7 +81,6 @@ jobs: # caching again since for some reason it doesnt work with the first post cache shit key: cache-build-android path: | - ~/.gradle .haxelib/ export/release/android/haxe/ export/release/android/obj/ From 24aaa064bb6168c90e66b23e520ba932eed6832f Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 29 Sep 2024 16:28:24 +0300 Subject: [PATCH 42/93] Update Shader.hx --- source/openfl/display/Shader.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/openfl/display/Shader.hx b/source/openfl/display/Shader.hx index 72b017197..30dd45f3b 100644 --- a/source/openfl/display/Shader.hx +++ b/source/openfl/display/Shader.hx @@ -348,7 +348,7 @@ class Shader if (compileStatus == 0) #if (android && !macro) android.Tools.showAlertDialog("Shader Compile Error!", message, null, null) - #elseif !ios + #elseif ios openfl.Lib.application.window.alert('$message', 'Shader Compile Error!') #else Log.error(message) @@ -982,4 +982,4 @@ class Shader } #else typedef Shader = flash.display.Shader; -#end \ No newline at end of file +#end From 8b9007263ad9eda327063e4a4695237ffbff17a6 Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 29 Sep 2024 16:41:24 +0300 Subject: [PATCH 43/93] gles patch --- source/funkin/backend/shaders/FunkinShader.hx | 39 ++++++++++++------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/source/funkin/backend/shaders/FunkinShader.hx b/source/funkin/backend/shaders/FunkinShader.hx index 9c8bcfb17..ccd553556 100644 --- a/source/funkin/backend/shaders/FunkinShader.hx +++ b/source/funkin/backend/shaders/FunkinShader.hx @@ -32,9 +32,9 @@ class FunkinShader extends FlxShader implements IHScriptCustomBehaviour { * Accepts `#pragma header`. * @param frag Fragment source (pass `null` to use default) * @param vert Vertex source (pass `null` to use default) - * @param glslVer Version of GLSL to use (defaults to 120 at desktop, 100 at mobile) + * @param glslVer Version of GLSL to use (defaults to 120 at OpenGL, 100 at OpenGL ES) */ - public override function new(frag:String, vert:String, glslVer:String = #if mobile "100" #else "120" #end) { + public override function new(frag:String, vert:String, glslVer:String = #if lime_opengles "100" #else "120" #end) { if (frag == null) frag = ShaderTemplates.defaultFragmentSource; if (vert == null) vert = ShaderTemplates.defaultVertexSource; this.glFragmentSource = frag; @@ -93,19 +93,30 @@ class FunkinShader extends FlxShader implements IHScriptCustomBehaviour { var gl = __context.gl; - prefix += "#ifdef GL_ES - " - + (precisionHint == FULL ? "#ifdef GL_FRAGMENT_PRECISION_HIGH - precision highp float; - #else - precision mediump float; - #endif" : "precision lowp float;") - + " - #endif - "; - + #if (js && html5) + prefix += (precisionHint == FULL ? "precision mediump float;\n" : "precision lowp float;\n"); + #else + prefix += "#ifdef GL_ES\n" + + (precisionHint == FULL ? "#ifdef GL_FRAGMENT_PRECISION_HIGH\n" + + "precision highp float;\n" + + "#else\n" + + "precision mediump float;\n" + + "#endif\n" : "precision lowp float;\n") + + "#endif\n\n"; + #end + + #if lime_opengles + prefix += 'out vec4 output_FragColor;\n'; + var vertex = prefix + + glVertexSource.replace("attribute", "in") + .replace("varying", "out") + .replace("texture2D", "texture") + .replace("gl_FragColor", "output_FragColor"); + var fragment = prefix + glFragmentSource.replace("varying", "in").replace("texture2D", "texture").replace("gl_FragColor", "output_FragColor"); + #else var vertex = prefix + glVertexSource; var fragment = prefix + glFragmentSource; + #end var id = vertex + fragment; @@ -607,4 +618,4 @@ class ShaderTypeException extends Exception { this.name = name; super('ShaderTypeException - Tried to set the shader uniform "${name}" as a ${Type.getClassName(has)}, but the shader uniform is a ${Std.string(want)}.'); } -} \ No newline at end of file +} From bc0511b817699df355bc426c6d5c6a8a86163c56 Mon Sep 17 00:00:00 2001 From: Ne_Eo Date: Tue, 1 Oct 2024 02:21:47 +0200 Subject: [PATCH 44/93] Small changes --- .github/workflows/android.yml | 2 +- .github/workflows/ios.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index a08009707..8cad6b833 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -32,7 +32,7 @@ jobs: cache-build-android - name: Installing/Updating libraries run: | - haxe -cp commandline -D analyzer-optimize --run Main setup --lib=./libs.mobile.xml + haxe -cp commandline -D analyzer-optimize --run Main setup -s --lib=./libs.mobile.xml - name: Rebuilding lime (linux) and hxcpp run: | sudo apt-get install -qq libgl1-mesa-dev libglu1-mesa-dev libpulse-dev g++ g++-multilib gcc-multilib libasound2-dev libx11-dev libxext-dev libxi-dev libxrandr-dev libxinerama-dev diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index 59047faf8..f9703d8a2 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -27,7 +27,7 @@ jobs: # cache-build-ios - name: Installing/Updating libraries run: | - haxe -cp commandline -D analyzer-optimize --run Main setup --lib=./libs.mobile.xml + haxe -cp commandline -D analyzer-optimize --run Main setup -s --lib=./libs.mobile.xml - name: Rebuilding lime and hxcpp run: | cd $(haxelib libpath hxcpp)tools/hxcpp From 99730656a661adc6b9a74a3e4c59073b35a821c7 Mon Sep 17 00:00:00 2001 From: Lily Date: Tue, 1 Oct 2024 09:44:16 +0300 Subject: [PATCH 45/93] actions ran out of memory --- .github/workflows/android.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 8cad6b833..80d034176 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -56,6 +56,8 @@ jobs: with: name: Codename Engine path: export/release/android/bin/app/build/outputs/apk/release/*.apk + - name: Remove Docker Images + run: docker rmi $(docker image ls -aq) - name: Clearing already existing cache uses: actions/github-script@v6 with: From 9c039a4fa1b802f4b49cd7b056811702b4d2983c Mon Sep 17 00:00:00 2001 From: Lily Date: Tue, 1 Oct 2024 16:21:55 +0300 Subject: [PATCH 46/93] add gradle back --- .github/workflows/android.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 80d034176..ee7cfdf01 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -25,6 +25,7 @@ jobs: # not caching the bin folder to prevent asset duplication and stuff like that key: cache-build-android path: | + ~/.gradle .haxelib/ export/release/android/haxe/ export/release/android/obj/ @@ -83,6 +84,7 @@ jobs: # caching again since for some reason it doesnt work with the first post cache shit key: cache-build-android path: | + ~/.gradle .haxelib/ export/release/android/haxe/ export/release/android/obj/ From 04876ccc4be59b0ec5c092d66ab30e77a24b2a53 Mon Sep 17 00:00:00 2001 From: Lily Date: Sat, 5 Oct 2024 18:20:14 +0300 Subject: [PATCH 47/93] Update Shader.hx --- source/openfl/display/Shader.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/openfl/display/Shader.hx b/source/openfl/display/Shader.hx index 30dd45f3b..2d779b759 100644 --- a/source/openfl/display/Shader.hx +++ b/source/openfl/display/Shader.hx @@ -347,7 +347,7 @@ class Shader #end if (compileStatus == 0) #if (android && !macro) - android.Tools.showAlertDialog("Shader Compile Error!", message, null, null) + android.Tools.showAlertDialog("Shader Compile Error!", message, {name: "OK", func: null}, null) #elseif ios openfl.Lib.application.window.alert('$message', 'Shader Compile Error!') #else From c66860d89fe64d90eb3f7687f2f41608bb938fe5 Mon Sep 17 00:00:00 2001 From: Lily Date: Sat, 5 Oct 2024 19:39:15 +0300 Subject: [PATCH 48/93] use 3xx on glslVer --- source/funkin/backend/shaders/FunkinShader.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/funkin/backend/shaders/FunkinShader.hx b/source/funkin/backend/shaders/FunkinShader.hx index ccd553556..85a3ec76d 100644 --- a/source/funkin/backend/shaders/FunkinShader.hx +++ b/source/funkin/backend/shaders/FunkinShader.hx @@ -32,9 +32,9 @@ class FunkinShader extends FlxShader implements IHScriptCustomBehaviour { * Accepts `#pragma header`. * @param frag Fragment source (pass `null` to use default) * @param vert Vertex source (pass `null` to use default) - * @param glslVer Version of GLSL to use (defaults to 120 at OpenGL, 100 at OpenGL ES) + * @param glslVer Version of GLSL to use (defaults to 330 at OpenGL, 300 es at OpenGL ES) */ - public override function new(frag:String, vert:String, glslVer:String = #if lime_opengles "100" #else "120" #end) { + public override function new(frag:String, vert:String, glslVer:String = #if lime_opengles "300 es" #else "330" #end) { if (frag == null) frag = ShaderTemplates.defaultFragmentSource; if (vert == null) vert = ShaderTemplates.defaultVertexSource; this.glFragmentSource = frag; From 56a4c9d9bc41e4d81c359e5d66c549360a7e4598 Mon Sep 17 00:00:00 2001 From: Lily Date: Sat, 5 Oct 2024 19:43:09 +0300 Subject: [PATCH 49/93] oops --- source/funkin/backend/shaders/FunkinShader.hx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/funkin/backend/shaders/FunkinShader.hx b/source/funkin/backend/shaders/FunkinShader.hx index 85a3ec76d..ef555ad5f 100644 --- a/source/funkin/backend/shaders/FunkinShader.hx +++ b/source/funkin/backend/shaders/FunkinShader.hx @@ -25,16 +25,16 @@ import openfl.display.ShaderInput; class FunkinShader extends FlxShader implements IHScriptCustomBehaviour { private static var __instanceFields = Type.getInstanceFields(FunkinShader); - public var glslVer:String = #if mobile "100" #else "120" #end; + public var glslVer:String = #if mobile "300 es" #else "120" #end; /** * Creates a new shader from the specified fragment and vertex source. * Accepts `#pragma header`. * @param frag Fragment source (pass `null` to use default) * @param vert Vertex source (pass `null` to use default) - * @param glslVer Version of GLSL to use (defaults to 330 at OpenGL, 300 es at OpenGL ES) + * @param glslVer Version of GLSL to use (defaults to 120 at OpenGL, 300 es at OpenGL ES) */ - public override function new(frag:String, vert:String, glslVer:String = #if lime_opengles "300 es" #else "330" #end) { + public override function new(frag:String, vert:String, glslVer:String = #if lime_opengles "300 es" #else "120" #end) { if (frag == null) frag = ShaderTemplates.defaultFragmentSource; if (vert == null) vert = ShaderTemplates.defaultVertexSource; this.glFragmentSource = frag; From 19cdac704b2ba9e10d6778fb0c7cbb0c6045b2b5 Mon Sep 17 00:00:00 2001 From: Lily Date: Thu, 17 Oct 2024 15:43:39 +0300 Subject: [PATCH 50/93] a silly mistake --- source/funkin/backend/shaders/FunkinShader.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/funkin/backend/shaders/FunkinShader.hx b/source/funkin/backend/shaders/FunkinShader.hx index ef555ad5f..9b06cf13c 100644 --- a/source/funkin/backend/shaders/FunkinShader.hx +++ b/source/funkin/backend/shaders/FunkinShader.hx @@ -25,7 +25,7 @@ import openfl.display.ShaderInput; class FunkinShader extends FlxShader implements IHScriptCustomBehaviour { private static var __instanceFields = Type.getInstanceFields(FunkinShader); - public var glslVer:String = #if mobile "300 es" #else "120" #end; + public var glslVer:String = #if lime_opengles "300 es" #else "120" #end; /** * Creates a new shader from the specified fragment and vertex source. From 9b80a3feb6768f1b13085cc640361d637480491d Mon Sep 17 00:00:00 2001 From: Lily Date: Thu, 17 Oct 2024 15:56:46 +0300 Subject: [PATCH 51/93] wait that's for gles 3.0 --- source/funkin/backend/shaders/FunkinShader.hx | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/source/funkin/backend/shaders/FunkinShader.hx b/source/funkin/backend/shaders/FunkinShader.hx index 9b06cf13c..720a117d5 100644 --- a/source/funkin/backend/shaders/FunkinShader.hx +++ b/source/funkin/backend/shaders/FunkinShader.hx @@ -105,18 +105,8 @@ class FunkinShader extends FlxShader implements IHScriptCustomBehaviour { + "#endif\n\n"; #end - #if lime_opengles - prefix += 'out vec4 output_FragColor;\n'; - var vertex = prefix - + glVertexSource.replace("attribute", "in") - .replace("varying", "out") - .replace("texture2D", "texture") - .replace("gl_FragColor", "output_FragColor"); - var fragment = prefix + glFragmentSource.replace("varying", "in").replace("texture2D", "texture").replace("gl_FragColor", "output_FragColor"); - #else var vertex = prefix + glVertexSource; var fragment = prefix + glFragmentSource; - #end var id = vertex + fragment; From 2ea9a0098eb882bafdeed3b242a1dd4e1c8e5e35 Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 20 Oct 2024 15:21:39 +0300 Subject: [PATCH 52/93] Update CopyState.hx --- source/mobile/funkin/backend/system/CopyState.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mobile/funkin/backend/system/CopyState.hx b/source/mobile/funkin/backend/system/CopyState.hx index 99ebdfb5c..e49360461 100644 --- a/source/mobile/funkin/backend/system/CopyState.hx +++ b/source/mobile/funkin/backend/system/CopyState.hx @@ -164,7 +164,7 @@ class CopyState extends funkin.backend.MusicBeatState public function getFileBytes(file:String):ByteArray { - switch (Path.extension(file)) + switch (Path.extension(file).toLowerCase()) { case 'otf' | 'ttf': return ByteArray.fromFile(file); From 9b16699e16b9fe906c224f64ac1503ee0d9ccee7 Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 20 Oct 2024 23:04:25 +0300 Subject: [PATCH 53/93] updating CopyState --- assets/images/menus/funkay.png | Bin 0 -> 367940 bytes .../mobile/funkin/backend/system/CopyState.hx | 69 +++++++++++------- .../mobile/funkin/backend/utils/MobileUtil.hx | 38 +--------- 3 files changed, 45 insertions(+), 62 deletions(-) create mode 100644 assets/images/menus/funkay.png diff --git a/assets/images/menus/funkay.png b/assets/images/menus/funkay.png new file mode 100644 index 0000000000000000000000000000000000000000..1d6b731bd83b3a3893a70effb808115ffaee3c74 GIT binary patch literal 367940 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≫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

Y%%n$KG?m1TyL7 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

gu@cK%w`+h(Gd9$-xY*-Fs>qRb!J6(_{#jFKh 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

&!(f7JOYl)9Sekhj>lohYJbS@Tk6jlh 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

@@ -195,9 +193,6 @@ - - - diff --git a/source/funkin/backend/assets/AssetsLibraryList.hx b/source/funkin/backend/assets/AssetsLibraryList.hx index 0b578d842..7b5ef0696 100644 --- a/source/funkin/backend/assets/AssetsLibraryList.hx +++ b/source/funkin/backend/assets/AssetsLibraryList.hx @@ -1,11 +1,7 @@ package funkin.backend.assets; -import sys.FileSystem; import funkin.backend.assets.IModsAssetLibrary; import lime.utils.AssetLibrary; -import lime.utils.AssetType; - -using StringTools; class AssetsLibraryList extends AssetLibrary { public var libraries:Array = []; @@ -62,30 +58,14 @@ class AssetsLibraryList extends AssetLibrary { l = cast(l, openfl.utils.AssetLibrary).__proxy; } + // TODO: do base folder scanning #if MOD_SUPPORT - if (source == MODS || source == BOTH) { - if (l is IModsAssetLibrary) { - var lib = cast(l, IModsAssetLibrary); - for (e in lib.getFiles(folder)) - content.push(e); - } - } - #else - #if sys - if (source == SOURCE || source == BOTH) { - var fileStuffs = FileSystem.readDirectory(folder); - if (fileStuffs != null && fileStuffs.length > 0) { - for (e in fileStuffs) { - if (!FileSystem.isDirectory(folder + e.toString())) { - content.push(e); - } - } - } else { - Logs.trace('No files/folders found in the requested directory \'${folder}\'', WARNING, YELLOW); - } + if (l is IModsAssetLibrary) { + var lib = cast(l, IModsAssetLibrary); + for(e in lib.getFiles(folder)) + content.push(e); } #end - #end } return content; } @@ -102,30 +82,14 @@ class AssetsLibraryList extends AssetLibrary { l = cast(l, openfl.utils.AssetLibrary).__proxy; } + // TODO: do base folder scanning #if MOD_SUPPORT - if (source == MODS || source == BOTH) { - if (l is IModsAssetLibrary) { - var lib = cast(l, IModsAssetLibrary); - for (e in lib.getFolders(folder)) - content.push(e); - } - } - #else - #if sys - if (source == SOURCE || source == BOTH) { - var fileStuffs = FileSystem.readDirectory(folder); - if (fileStuffs != null && fileStuffs.length > 0) { - for (e in fileStuffs) { - if (FileSystem.isDirectory(folder + e.toString())) { - content.push(e); - } - } - } else { - Logs.trace('No files/folders found in the requested directory \'${folder}\'', WARNING, YELLOW); - } + if (l is IModsAssetLibrary) { + var lib = cast(l, IModsAssetLibrary); + for(e in lib.getFolders(folder)) + content.push(e); } #end - #end } return content; } @@ -198,24 +162,10 @@ class AssetsLibraryList extends AssetLibrary { libraries.insert(0, lib); return lib; } - - override public function list(type:String):Array { - var items = []; - - for(library in libraries) { - var libraryItems = library.list(type); - - if (libraryItems != null) { - items = items.concat(libraryItems); - } - } - - return items; - } } enum abstract AssetSource(Null) from Bool from Null to Null { var SOURCE = true; var MODS = false; var BOTH = null; -} \ No newline at end of file +} diff --git a/source/funkin/backend/system/Main.hx b/source/funkin/backend/system/Main.hx index fb3027849..78fd89f28 100644 --- a/source/funkin/backend/system/Main.hx +++ b/source/funkin/backend/system/Main.hx @@ -71,15 +71,17 @@ class Main extends Sprite CrashHandler.init(); - #if !html5 framerateSprite = new funkin.backend.system.framerate.Framerate(); #end + #if !web framerateSprite = new funkin.backend.system.framerate.Framerate(); #end addChild(game = new FunkinGame(gameWidth, gameHeight, MainState, Options.framerate, Options.framerate, skipSplash, startFullscreen)); #if android FlxG.android.preventDefaultKeys = [BACK]; #end - #if !html5 + #if !web addChild(framerateSprite); + #if mobile FlxG.stage.window.onResize.add((w:Int, h:Int) -> framerateSprite.setScale()); + #end SystemInfo.init(); #end } @@ -163,7 +165,6 @@ class Main extends Sprite Conductor.init(); AudioSwitchFix.init(); EventManager.init(); - FlxG.signals.preStateSwitch.add(onStateSwitch); FlxG.signals.postStateSwitch.add(onStateSwitchPost); diff --git a/source/funkin/backend/system/MainState.hx b/source/funkin/backend/system/MainState.hx index f5f078f6d..1acc6b5f9 100644 --- a/source/funkin/backend/system/MainState.hx +++ b/source/funkin/backend/system/MainState.hx @@ -20,7 +20,9 @@ class MainState extends FlxState { public static var betaWarningShown:Bool = false; public override function create() { super.create(); + #if mobile funkin.backend.system.Main.framerateSprite.setScale(); + #end if (!initiated) { Main.loadGameSettings(); diff --git a/source/funkin/backend/system/framerate/Framerate.hx b/source/funkin/backend/system/framerate/Framerate.hx index d4faeccca..a1c6c0fd3 100644 --- a/source/funkin/backend/system/framerate/Framerate.hx +++ b/source/funkin/backend/system/framerate/Framerate.hx @@ -121,7 +121,11 @@ class Framerate extends Sprite { #elseif ios for(camera in FlxG.cameras.list) { var pos = FlxG.mouse.getScreenPosition(camera); - if(pos.x >= 0 && pos.x <= 80 && pos.y >= 0 && pos.y <= 60) { + if (pos.x >= FlxG.game.x + 10 + offset.x && + pos.x <= FlxG.game.x + offset.x + 80 && + pos.y >= FlxG.game.y + 2 + offset.y && + pos.y <= FlxG.game.y + 2 + offset.y + 60) + { if(FlxG.mouse.justPressed) sillyTimer.start(0.4, (tmr:FlxTimer) -> debugMode = (debugMode + 1) % 3); @@ -163,9 +167,11 @@ class Framerate extends Sprite { } } + #if mobile public inline function setScale(?scale:Float){ if(scale == null) scale = Math.min(FlxG.stage.window.width / FlxG.width, FlxG.stage.window.height / FlxG.height); scaleX = scaleY = #if android (scale > 1 ? scale : 1) #else (scale < 1 ? scale : 1) #end; } -} \ No newline at end of file + #end +} diff --git a/source/funkin/menus/FreeplayState.hx b/source/funkin/menus/FreeplayState.hx index 977bbf41b..118d1ac28 100644 --- a/source/funkin/menus/FreeplayState.hx +++ b/source/funkin/menus/FreeplayState.hx @@ -291,8 +291,7 @@ class FreeplayState extends MusicBeatState public function select() { updateCoopModes(); - if (songs[curSelected].difficulties.length <= 0) - return; + if (songs[curSelected].difficulties.length <= 0) return; var event = event("onSelect", EventManager.get(FreeplaySongSelectEvent).recycle(songs[curSelected].name, songs[curSelected].difficulties[curDifficulty], __opponentMode, __coopMode)); @@ -352,12 +351,12 @@ class FreeplayState extends MusicBeatState /** * Array containing all labels for Co-Op / Opponent modes. */ - public var coopLabels:Array = controls.touchC ? ['[X] Solo', '[X] Opponent Mode'] : + public var coopLabels:Array = controls.touchC ? ["[X] Solo", "[X] Opponent Mode"] : [ - '[TAB] Solo', - '[TAB] Opponent Mode', - '[TAB] Co-Op Mode', - '[TAB] Co-Op Mode (Switched)' + "[TAB] Solo", + "[TAB] Opponent Mode", + "[TAB] Co-Op Mode", + "[TAB] Co-Op Mode (Switched)" ]; /** @@ -468,4 +467,4 @@ class FreeplaySonglist { return songList; } -} \ No newline at end of file +} diff --git a/source/funkin/menus/PauseSubState.hx b/source/funkin/menus/PauseSubState.hx index 45a18a634..e1f885eac 100644 --- a/source/funkin/menus/PauseSubState.hx +++ b/source/funkin/menus/PauseSubState.hx @@ -157,7 +157,7 @@ class PauseSubState extends MusicBeatSubstate game.registerSmoothTransition(); FlxG.resetState(); case "Change Controls": - persistentUpdate = false; + persistentDraw = false; removeVirtualPad(); openSubState(new KeybindsOptions()); case "Change Options": diff --git a/source/funkin/menus/TitleState.hx b/source/funkin/menus/TitleState.hx index 52edf5506..4a5c2cbe9 100644 --- a/source/funkin/menus/TitleState.hx +++ b/source/funkin/menus/TitleState.hx @@ -119,13 +119,12 @@ class TitleState extends MusicBeatState { if (FlxG.keys.justPressed.F) FlxG.fullscreen = !FlxG.fullscreen; - var pressedEnter:Bool = controls.ACCEPT; + var pressedEnter:Bool = FlxG.keys.justPressed.ENTER; - if (controls.touchC) { + if (controls.touchC) for (touch in FlxG.touches.list) if (touch.justPressed) pressedEnter = true; - } var gamepad:FlxGamepad = FlxG.gamepads.lastActive; @@ -383,4 +382,4 @@ typedef TitleStateImage = { @:optional var scale:Null; @:optional var flipX:Null; @:optional var flipY:Null; -} \ No newline at end of file +} diff --git a/source/funkin/options/Options.hx b/source/funkin/options/Options.hx index d4a7934a1..7d0d0140f 100644 --- a/source/funkin/options/Options.hx +++ b/source/funkin/options/Options.hx @@ -38,7 +38,9 @@ class Options public static var lastLoadedMod:String = null; - // mobile options + /** + * MOBILE SETTINGS + */ #if mobile public static var screenTimeOut:Bool = false; #end diff --git a/source/funkin/options/OptionsScreen.hx b/source/funkin/options/OptionsScreen.hx index fb45061c6..77d3e1063 100644 --- a/source/funkin/options/OptionsScreen.hx +++ b/source/funkin/options/OptionsScreen.hx @@ -39,8 +39,8 @@ class OptionsScreen extends FlxTypedSpriteGroup { super.update(elapsed); var controls = PlayerSettings.solo.controls; - var wheel = FlxG.mouse.wheel; - changeSelection((controls.UP_P ? -1 : 0) + (controls.DOWN_P ? 1 : 0) - wheel); + + changeSelection((controls.UP_P ? -1 : 0) + (controls.DOWN_P ? 1 : 0) - FlxG.mouse.wheel); x = id * FlxG.width; for(k=>option in members) { if(option == null) continue; @@ -93,4 +93,4 @@ class OptionsScreen extends FlxTypedSpriteGroup { } public dynamic function onClose(o:OptionsScreen) {} -} \ No newline at end of file +} diff --git a/source/funkin/options/categories/MiscOptions.hx b/source/funkin/options/categories/MiscOptions.hx index 5da7dd85f..1287587d9 100644 --- a/source/funkin/options/categories/MiscOptions.hx +++ b/source/funkin/options/categories/MiscOptions.hx @@ -3,8 +3,6 @@ package funkin.options.categories; class MiscOptions extends OptionsScreen { public override function new() { - dpadMode = 'NONE'; - actionMode = 'A_B'; super("Miscellaneous", "Use this menu to reset save data or engine settings.", null, #if UPDATE_CHECKING 'UP_DOWN' #else 'NONE' #end, 'A_B'); #if UPDATE_CHECKING add(new Checkbox( diff --git a/source/openfl/display/Shader.hx b/source/openfl/display/Shader.hx deleted file mode 100644 index 2d779b759..000000000 --- a/source/openfl/display/Shader.hx +++ /dev/null @@ -1,985 +0,0 @@ -package openfl.display; - -#if !flash -import openfl.display3D._internal.GLProgram; -import openfl.display3D._internal.GLShader; -import openfl.display._internal.ShaderBuffer; -import openfl.utils._internal.Float32Array; -import openfl.utils._internal.Log; -import openfl.display3D.Context3D; -import openfl.display3D.Program3D; -import openfl.utils.ByteArray; - -/** - // TODO: Document GLSL Shaders - A Shader instance represents a Pixel Bender shader kernel in ActionScript. - To use a shader in your application, you create a Shader instance for it. - You then use that Shader instance in the appropriate way according to the - effect you want to create. For example, to use the shader as a filter, you - assign the Shader instance to the `shader` property of a ShaderFilter - object. - A shader defines a function that executes on all the pixels in an image, - one pixel at a time. The result of each call to the function is the output - color at that pixel coordinate in the image. A shader can specify one or - more input images, which are images whose content can be used in - determining the output of the function. A shader can also specify one or - more parameters, which are input values that can be used in calculating - the function output. In a single shader execution, the input and parameter - values are constant. The only thing that varies is the coordinate of the - pixel whose color is the function result. Shader function calls for - multiple output pixel coordinates execute in parallel to improve shader - execution performance. - - The shader bytecode can be loaded at run time using a URLLoader instance. - The following example demonstrates loading a shader bytecode file at run - time and linking it to a Shader instance. - - ```as3 - var loader:URLLoader = new URLLoader(); - loader.dataFormat = URLLoaderDataFormat.BINARY; - loader.addEventListener(Event.COMPLETE, onLoadComplete); - loader.load(new URLRequest("myShader.pbj")); - var shader:Shader; - - function onLoadComplete(event:Event):void { - // Create a new shader and set the loaded data as its bytecode - shader = new Shader(); - shader.byteCode = loader.data; - - // You can also pass the bytecode to the Shader() constructor like this: - // shader = new Shader(loader.data); - - // do something with the shader - } - ``` - - You can also embed the shader into the SWF at compile time using the - `[Embed]` metadata tag. The `[Embed]` metadata tag is only available if - you use the Flex SDK to compile the SWF. The `[Embed]` tag's `source` - parameter points to the shader file, and its `mimeType` parameter is - `"application/octet-stream"`, as in this example: - - ```as3 - [Embed(source="myShader.pbj", mimeType="application/octet-stream)] var MyShaderClass:Class; - - // ... - - // create a new shader and set the embedded shader as its bytecode var - shaderShader = new Shader(); - shader.byteCode = new MyShaderClass(); - - // You can also pass the bytecode to the Shader() constructor like this: - // var shader:Shader = new Shader(new MyShaderClass()); - - // do something with the shader - ``` - - In either case, you link the raw shader (the `URLLoader.data` property or - an instance of the `[Embed]` data class) to the Shader instance. As the - previous examples demonstrate, you can do this in two ways. You can pass - the shader bytecode as an argument to the `Shader()` constructor. - Alternatively, you can set it as the Shader instance's `byteCode` - property. - - Once a Shader instance is created, it can be used in one of several ways: - - * A shader fill: The output of the shader is used as a fill for content - drawn with the drawing API. Pass the Shader instance as an argument to the - `Graphics.beginShaderFill()` method. - * A shader filter: The output of the shader is used as a graphic filter - applied to a display object. Assign the Shader instance to the `shader` - property of a ShaderFilter instance. - * A blend mode: The output of the shader is rendered as the blending - between two overlapping display objects. Assign the Shader instance to the - `blendShader` property of the upper of the two display objects. - * Background shader processing: The shader executes in the background, - avoiding the possibility of freezing the display, and dispatches an event - when processing is complete. Assign the Shader instance to the `shader` - property of a ShaderJob instance. - - Shader fills, filters, and blends are not supported under GPU rendering. - - **Mobile Browser Support:** This feature is not supported in mobile - browsers. - - _Adobe AIR profile support:_ This feature is supported on all desktop operating - systems, but it is not supported on all mobile devices. It is not - supported on AIR for TV devices. See - [AIR Profile Support](https://help.adobe.com/en_US/air/build/WS144092a96ffef7cc16ddeea2126bb46b82f-8000.html) - for more information regarding API support across multiple profiles. -**/ -#if !openfl_debug -@:fileXml('tags="haxe,release"') -@:noDebug -#end -@:access(openfl.display3D.Context3D) -@:access(openfl.display3D.Program3D) -@:access(openfl.display.ShaderInput) -@:access(openfl.display.ShaderParameter) -// #if (!display && !macro) -#if !macro -@:autoBuild(openfl.utils._internal.ShaderMacro.build()) -#end -class Shader -{ - /** - The raw shader bytecode for this Shader instance. - **/ - public var byteCode(null, default):ByteArray; - - /** - Provides access to parameters, input images, and metadata for the - Shader instance. ShaderParameter objects representing parameters for - the shader, ShaderInput objects representing the input images for the - shader, and other values representing the shader's metadata are - dynamically added as properties of the `data` property object when the - Shader instance is created. Those properties can be used to introspect - the shader and to set parameter and input values. - For information about accessing and manipulating the dynamic - properties of the `data` object, see the ShaderData class description. - **/ - public var data(get, set):ShaderData; - - /** - Get or set the fragment source used when compiling with GLSL. - - This property is not available on the Flash target. - **/ - public var glFragmentSource(get, set):String; - - /** - The compiled GLProgram if available. - - This property is not available on the Flash target. - **/ - @SuppressWarnings("checkstyle:Dynamic") public var glProgram(default, null):GLProgram; - - /** - Get or set the vertex source used when compiling with GLSL. - - This property is not available on the Flash target. - **/ - public var glVertexSource(get, set):String; - - /** - The precision of math operations performed by the shader. - The set of possible values for the `precisionHint` property is defined - by the constants in the ShaderPrecision class. - - The default value is `ShaderPrecision.FULL`. Setting the precision to - `ShaderPrecision.FAST` can speed up math operations at the expense of - precision. - - Full precision mode (`ShaderPrecision.FULL`) computes all math - operations to the full width of the IEEE 32-bit floating standard and - provides consistent behavior on all platforms. In this mode, some math - operations such as trigonometric and exponential functions can be - slow. - - Fast precision mode (`ShaderPrecision.FAST`) is designed for maximum - performance but does not work consistently on different platforms and - individual CPU configurations. In many cases, this level of precision - is sufficient to create graphic effects without visible artifacts. - - The precision mode selection affects the following shader operations. - These operations are faster on an Intel processor with the SSE - instruction set: - - * `sin(x)` - * `cos(x)` - * `tan(x)` - * `asin(x)` - * `acos(x)` - * `atan(x)` - * `atan(x, y)` - * `exp(x)` - * `exp2(x)` - * `log(x)` - * `log2(x)` - * `pow(x, y)` - * `reciprocal(x)` - * `sqrt(x)` - **/ - public var precisionHint:ShaderPrecision; - - /** - The compiled Program3D if available. - - This property is not available on the Flash target. - **/ - public var program:Program3D; - - @:noCompletion private var __alpha:ShaderParameter; - @:noCompletion private var __bitmap:ShaderInput; - @:noCompletion private var __colorMultiplier:ShaderParameter; - @:noCompletion private var __colorOffset:ShaderParameter; - @:noCompletion private var __context:Context3D; - @:noCompletion private var __data:ShaderData; - @:noCompletion private var __glFragmentSource:String; - @:noCompletion private var __glSourceDirty:Bool; - @:noCompletion private var __glVertexSource:String; - @:noCompletion private var __hasColorTransform:ShaderParameter; - @:noCompletion private var __inputBitmapData:Array>; - @:noCompletion private var __isGenerated:Bool; - @:noCompletion private var __matrix:ShaderParameter; - @:noCompletion private var __numPasses:Int; - @:noCompletion private var __paramBool:Array>; - @:noCompletion private var __paramFloat:Array>; - @:noCompletion private var __paramInt:Array>; - @:noCompletion private var __position:ShaderParameter; - @:noCompletion private var __textureCoord:ShaderParameter; - @:noCompletion private var __texture:ShaderInput; - @:noCompletion private var __textureSize:ShaderParameter; - - #if openfljs - @:noCompletion private static function __init__() - { - untyped Object.defineProperties(Shader.prototype, { - "data": { - get: untyped #if haxe4 js.Syntax.code #else __js__ #end ("function () { return this.get_data (); }"), - set: untyped #if haxe4 js.Syntax.code #else __js__ #end ("function (v) { return this.set_data (v); }") - }, - "glFragmentSource": { - get: untyped #if haxe4 js.Syntax.code #else __js__ #end ("function () { return this.get_glFragmentSource (); }"), - set: untyped #if haxe4 js.Syntax.code #else __js__ #end ("function (v) { return this.set_glFragmentSource (v); }") - }, - "glVertexSource": { - get: untyped #if haxe4 js.Syntax.code #else __js__ #end ("function () { return this.get_glVertexSource (); }"), - set: untyped #if haxe4 js.Syntax.code #else __js__ #end ("function (v) { return this.set_glVertexSource (v); }") - }, - }); - } - #end - - /** - Creates a new Shader instance. - - @param code The raw shader bytecode to link to the Shader. - **/ - public function new(code:ByteArray = null) - { - byteCode = code; - precisionHint = FULL; - - __glSourceDirty = true; - __numPasses = 1; - __data = new ShaderData(code); - } - - @:noCompletion private function __clearUseArray():Void - { - for (parameter in __paramBool) - { - parameter.__useArray = false; - } - - for (parameter in __paramFloat) - { - parameter.__useArray = false; - } - - for (parameter in __paramInt) - { - parameter.__useArray = false; - } - } - - // private function __clone ():Shader { - // var classType = Type.getClass (this); - // var shader = Type.createInstance (classType, []); - // for (input in __inputBitmapData) { - // if (input.input != null) { - // var field = Reflect.field (shader.data, input.name); - // field.channels = input.channels; - // field.height = input.height; - // field.input = input.input; - // field.smoothing = input.smoothing; - // field.width = input.width; - // } - // } - // for (param in __paramBool) { - // if (param.value != null) { - // Reflect.field (shader.data, param.name).value = param.value.copy (); - // } - // } - // for (param in __paramFloat) { - // if (param.value != null) { - // Reflect.field (shader.data, param.name).value = param.value.copy (); - // } - // } - // for (param in __paramInt) { - // if (param.value != null) { - // Reflect.field (shader.data, param.name).value = param.value.copy (); - // } - // } - // return shader; - // } - @:noCompletion private function __createGLShader(source:String, type:Int):GLShader - { - var gl = __context.gl; - - var shader = gl.createShader(type); - gl.shaderSource(shader, source); - gl.compileShader(shader); - var shaderInfoLog = gl.getShaderInfoLog(shader); - var hasInfoLog = shaderInfoLog != null && StringTools.trim(shaderInfoLog) != ""; - var compileStatus = gl.getShaderParameter(shader, gl.COMPILE_STATUS); - - if (hasInfoLog || compileStatus == 0) - { - final startMessage = '${(compileStatus == 0) ? "Error" : "Info" } ${(type == gl.VERTEX_SHADER) ? "compiling vertex shader" : "compiling fragment shader"}'; - var message = startMessage; - message += "\n" + shaderInfoLog; - message += "\n" + source; - #if sys - if (compileStatus == 0) - { - try - { - if (!sys.FileSystem.exists('logs')) - sys.FileSystem.createDirectory('logs'); - - sys.io.File.saveContent('logs/' + 'ShaderCompileError.txt', '$message'); - } - catch (e:haxe.Exception) - Log.warn('Couldn\'t save error message. (${e.message})', null); - } - #end - if (compileStatus == 0) - #if (android && !macro) - android.Tools.showAlertDialog("Shader Compile Error!", message, {name: "OK", func: null}, null) - #elseif ios - openfl.Lib.application.window.alert('$message', 'Shader Compile Error!') - #else - Log.error(message) - #end; - else if (hasInfoLog) - Log.debug(message); - } - - return shader; - } - - @:noCompletion private function __createGLProgram(vertexSource:String, fragmentSource:String):GLProgram - { - var gl = __context.gl; - - var vertexShader = __createGLShader(vertexSource, gl.VERTEX_SHADER); - var fragmentShader = __createGLShader(fragmentSource, gl.FRAGMENT_SHADER); - - var program = gl.createProgram(); - - // Fix support for drivers that don't draw if attribute 0 is disabled - for (param in __paramFloat) - { - if (param.name.indexOf("Position") > -1 && StringTools.startsWith(param.name, "openfl_")) - { - gl.bindAttribLocation(program, 0, param.name); - break; - } - } - - gl.attachShader(program, vertexShader); - gl.attachShader(program, fragmentShader); - gl.linkProgram(program); - - if (gl.getProgramParameter(program, gl.LINK_STATUS) == 0) - { - var message = "Unable to initialize the shader program"; - message += "\n" + gl.getProgramInfoLog(program); - Log.error(message); - } - - return program; - } - - @:noCompletion private function __disable():Void - { - if (program != null) - { - __disableGL(); - } - } - - @:noCompletion private function __disableGL():Void - { - var gl = __context.gl; - - var textureCount = 0; - - for (input in __inputBitmapData) - { - input.__disableGL(__context, textureCount); - textureCount++; - if (textureCount == gl.MAX_TEXTURE_IMAGE_UNITS) - break; - } - - for (parameter in __paramBool) - { - parameter.__disableGL(__context); - } - - for (parameter in __paramFloat) - { - parameter.__disableGL(__context); - } - - for (parameter in __paramInt) - { - parameter.__disableGL(__context); - } - - __context.__bindGLArrayBuffer(null); - - #if lime - if (__context.__context.type == OPENGL) - { - gl.disable(gl.TEXTURE_2D); - } - #end - } - - @:noCompletion private function __enable():Void - { - __init(); - - if (program != null) - { - __enableGL(); - } - } - - @:noCompletion private function __enableGL():Void - { - var textureCount = 0; - - var gl = __context.gl; - - for (input in __inputBitmapData) - { - gl.uniform1i(input.index, textureCount); - textureCount++; - } - - #if lime - if (__context.__context.type == OPENGL && textureCount > 0) - { - gl.enable(gl.TEXTURE_2D); - } - #end - } - - @:noCompletion private function __init():Void - { - if (__data == null) - { - __data = cast new ShaderData(null); - } - - if (__glFragmentSource != null && __glVertexSource != null && (program == null || __glSourceDirty)) - { - __initGL(); - } - } - - @:noCompletion private function __initGL():Void - { - if (__glSourceDirty || __paramBool == null) - { - __glSourceDirty = false; - program = null; - - __inputBitmapData = new Array(); - __paramBool = new Array(); - __paramFloat = new Array(); - __paramInt = new Array(); - - __processGLData(glVertexSource, "attribute"); - __processGLData(glVertexSource, "uniform"); - __processGLData(glFragmentSource, "uniform"); - } - - if (__context != null && program == null) - { - var gl = __context.gl; - - #if (js && html5) - var prefix = (precisionHint == FULL ? "precision mediump float;\n" : "precision lowp float;\n"); - #else - var prefix = "#ifdef GL_ES\n" - + (precisionHint == FULL ? "#ifdef GL_FRAGMENT_PRECISION_HIGH\n" - + "precision highp float;\n" - + "#else\n" - + "precision mediump float;\n" - + "#endif\n" : "precision lowp float;\n") - + "#endif\n\n"; - #end - - var vertex = prefix + glVertexSource; - var fragment = prefix + glFragmentSource; - - var id = vertex + fragment; - - if (__context.__programs.exists(id)) - { - program = __context.__programs.get(id); - } - else - { - program = __context.createProgram(GLSL); - - // TODO - // program.uploadSources (vertex, fragment); - program.__glProgram = __createGLProgram(vertex, fragment); - - __context.__programs.set(id, program); - } - - if (program != null) - { - glProgram = program.__glProgram; - - for (input in __inputBitmapData) - { - if (input.__isUniform) - { - input.index = gl.getUniformLocation(glProgram, input.name); - } - else - { - input.index = gl.getAttribLocation(glProgram, input.name); - } - } - - for (parameter in __paramBool) - { - if (parameter.__isUniform) - { - parameter.index = gl.getUniformLocation(glProgram, parameter.name); - } - else - { - parameter.index = gl.getAttribLocation(glProgram, parameter.name); - } - } - - for (parameter in __paramFloat) - { - if (parameter.__isUniform) - { - parameter.index = gl.getUniformLocation(glProgram, parameter.name); - } - else - { - parameter.index = gl.getAttribLocation(glProgram, parameter.name); - } - } - - for (parameter in __paramInt) - { - if (parameter.__isUniform) - { - parameter.index = gl.getUniformLocation(glProgram, parameter.name); - } - else - { - parameter.index = gl.getAttribLocation(glProgram, parameter.name); - } - } - } - } - } - - @:noCompletion private function __processGLData(source:String, storageType:String):Void - { - var lastMatch = 0, position, regex, name, type; - - if (storageType == "uniform") - { - regex = ~/uniform ([A-Za-z0-9]+) ([A-Za-z0-9_]+)/; - } - else - { - regex = ~/attribute ([A-Za-z0-9]+) ([A-Za-z0-9_]+)/; - } - - while (regex.matchSub(source, lastMatch)) - { - type = regex.matched(1); - name = regex.matched(2); - - if (StringTools.startsWith(name, "gl_")) - { - continue; - } - - var isUniform = (storageType == "uniform"); - - if (StringTools.startsWith(type, "sampler")) - { - var input = new ShaderInput(); - input.name = name; - input.__isUniform = isUniform; - __inputBitmapData.push(input); - - switch (name) - { - case "openfl_Texture": - __texture = input; - case "bitmap": - __bitmap = input; - default: - } - - Reflect.setField(__data, name, input); - if (__isGenerated) - Reflect.setField(this, name, input); - } - else if (!Reflect.hasField(__data, name) || Reflect.field(__data, name) == null) - { - var parameterType:ShaderParameterType = switch (type) - { - case "bool": BOOL; - case "double", "float": FLOAT; - case "int", "uint": INT; - case "bvec2": BOOL2; - case "bvec3": BOOL3; - case "bvec4": BOOL4; - case "ivec2", "uvec2": INT2; - case "ivec3", "uvec3": INT3; - case "ivec4", "uvec4": INT4; - case "vec2", "dvec2": FLOAT2; - case "vec3", "dvec3": FLOAT3; - case "vec4", "dvec4": FLOAT4; - case "mat2", "mat2x2": MATRIX2X2; - case "mat2x3": MATRIX2X3; - case "mat2x4": MATRIX2X4; - case "mat3x2": MATRIX3X2; - case "mat3", "mat3x3": MATRIX3X3; - case "mat3x4": MATRIX3X4; - case "mat4x2": MATRIX4X2; - case "mat4x3": MATRIX4X3; - case "mat4", "mat4x4": MATRIX4X4; - default: null; - } - - var length = switch (parameterType) - { - case BOOL2, INT2, FLOAT2: 2; - case BOOL3, INT3, FLOAT3: 3; - case BOOL4, INT4, FLOAT4, MATRIX2X2: 4; - case MATRIX3X3: 9; - case MATRIX4X4: 16; - default: 1; - } - - var arrayLength = switch (parameterType) - { - case MATRIX2X2: 2; - case MATRIX3X3: 3; - case MATRIX4X4: 4; - default: 1; - } - - switch (parameterType) - { - case BOOL, BOOL2, BOOL3, BOOL4: - var parameter = new ShaderParameter(); - parameter.name = name; - parameter.type = parameterType; - parameter.__arrayLength = arrayLength; - parameter.__isBool = true; - parameter.__isUniform = isUniform; - parameter.__length = length; - __paramBool.push(parameter); - - if (name == "openfl_HasColorTransform") - { - __hasColorTransform = parameter; - } - - Reflect.setField(__data, name, parameter); - if (__isGenerated) - Reflect.setField(this, name, parameter); - - case INT, INT2, INT3, INT4: - var parameter = new ShaderParameter(); - parameter.name = name; - parameter.type = parameterType; - parameter.__arrayLength = arrayLength; - parameter.__isInt = true; - parameter.__isUniform = isUniform; - parameter.__length = length; - __paramInt.push(parameter); - Reflect.setField(__data, name, parameter); - if (__isGenerated) - Reflect.setField(this, name, parameter); - - default: - var parameter = new ShaderParameter(); - parameter.name = name; - parameter.type = parameterType; - parameter.__arrayLength = arrayLength; - #if lime - if (arrayLength > 0) - parameter.__uniformMatrix = new Float32Array(arrayLength * arrayLength); - #end - parameter.__isFloat = true; - parameter.__isUniform = isUniform; - parameter.__length = length; - __paramFloat.push(parameter); - - if (StringTools.startsWith(name, "openfl_")) - { - switch (name) - { - case "openfl_Alpha": __alpha = parameter; - case "openfl_ColorMultiplier": __colorMultiplier = parameter; - case "openfl_ColorOffset": __colorOffset = parameter; - case "openfl_Matrix": __matrix = parameter; - case "openfl_Position": __position = parameter; - case "openfl_TextureCoord": __textureCoord = parameter; - case "openfl_TextureSize": __textureSize = parameter; - default: - } - } - - Reflect.setField(__data, name, parameter); - if (__isGenerated) - Reflect.setField(this, name, parameter); - } - } - - position = regex.matchedPos(); - lastMatch = position.pos + position.len; - } - } - - @:noCompletion private function __update():Void - { - if (program != null) - { - __updateGL(); - } - } - - @:noCompletion private function __updateFromBuffer(shaderBuffer:ShaderBuffer, bufferOffset:Int):Void - { - if (program != null) - { - __updateGLFromBuffer(shaderBuffer, bufferOffset); - } - } - - @:noCompletion private function __updateGL():Void - { - var textureCount = 0; - - for (input in __inputBitmapData) - { - input.__updateGL(__context, textureCount); - textureCount++; - } - - for (parameter in __paramBool) - { - parameter.__updateGL(__context); - } - - for (parameter in __paramFloat) - { - parameter.__updateGL(__context); - } - - for (parameter in __paramInt) - { - parameter.__updateGL(__context); - } - } - - @:noCompletion private function __updateGLFromBuffer(shaderBuffer:ShaderBuffer, bufferOffset:Int):Void - { - var textureCount = 0; - var input, inputData, inputFilter, inputMipFilter, inputWrap; - - for (i in 0...shaderBuffer.inputCount) - { - input = shaderBuffer.inputRefs[i]; - inputData = shaderBuffer.inputs[i]; - inputFilter = shaderBuffer.inputFilter[i]; - inputMipFilter = shaderBuffer.inputMipFilter[i]; - inputWrap = shaderBuffer.inputWrap[i]; - - if (inputData != null) - { - input.__updateGL(__context, textureCount, inputData, inputFilter, inputMipFilter, inputWrap); - textureCount++; - } - } - - var gl = __context.gl; - - if (shaderBuffer.paramDataLength > 0) - { - if (shaderBuffer.paramDataBuffer == null) - { - shaderBuffer.paramDataBuffer = gl.createBuffer(); - } - - // Log.verbose ("bind param data buffer (length: " + shaderBuffer.paramData.length + ") (" + shaderBuffer.paramCount + ")"); - - __context.__bindGLArrayBuffer(shaderBuffer.paramDataBuffer); - gl.bufferData(gl.ARRAY_BUFFER, shaderBuffer.paramData, gl.DYNAMIC_DRAW); - } - else - { - // Log.verbose ("bind buffer null"); - - __context.__bindGLArrayBuffer(null); - } - - var boolIndex = 0; - var floatIndex = 0; - var intIndex = 0; - - var boolCount = shaderBuffer.paramBoolCount; - var floatCount = shaderBuffer.paramFloatCount; - var paramData = shaderBuffer.paramData; - - var boolRef, floatRef, intRef, hasOverride; - var overrideBoolValue:Array = null, - overrideFloatValue:Array = null, - overrideIntValue:Array = null; - - for (i in 0...shaderBuffer.paramCount) - { - hasOverride = false; - - if (i < boolCount) - { - boolRef = shaderBuffer.paramRefs_Bool[boolIndex]; - - for (j in 0...shaderBuffer.overrideBoolCount) - { - if (boolRef.name == shaderBuffer.overrideBoolNames[j]) - { - overrideBoolValue = shaderBuffer.overrideBoolValues[j]; - hasOverride = true; - break; - } - } - - if (hasOverride) - { - boolRef.__updateGL(__context, overrideBoolValue); - } - else - { - boolRef.__updateGLFromBuffer(__context, paramData, shaderBuffer.paramPositions[i], shaderBuffer.paramLengths[i], bufferOffset); - } - - boolIndex++; - } - else if (i < boolCount + floatCount) - { - floatRef = shaderBuffer.paramRefs_Float[floatIndex]; - - for (j in 0...shaderBuffer.overrideFloatCount) - { - if (floatRef.name == shaderBuffer.overrideFloatNames[j]) - { - overrideFloatValue = shaderBuffer.overrideFloatValues[j]; - hasOverride = true; - break; - } - } - - if (hasOverride) - { - floatRef.__updateGL(__context, overrideFloatValue); - } - else - { - floatRef.__updateGLFromBuffer(__context, paramData, shaderBuffer.paramPositions[i], shaderBuffer.paramLengths[i], bufferOffset); - } - - floatIndex++; - } - else - { - intRef = shaderBuffer.paramRefs_Int[intIndex]; - - for (j in 0...shaderBuffer.overrideIntCount) - { - if (intRef.name == shaderBuffer.overrideIntNames[j]) - { - overrideIntValue = cast shaderBuffer.overrideIntValues[j]; - hasOverride = true; - break; - } - } - - if (hasOverride) - { - intRef.__updateGL(__context, overrideIntValue); - } - else - { - intRef.__updateGLFromBuffer(__context, paramData, shaderBuffer.paramPositions[i], shaderBuffer.paramLengths[i], bufferOffset); - } - - intIndex++; - } - } - } - - // Get & Set Methods - @:noCompletion private function get_data():ShaderData - { - if (__glSourceDirty || __data == null) - { - __init(); - } - - return __data; - } - - @:noCompletion private function set_data(value:ShaderData):ShaderData - { - return __data = cast value; - } - - @:noCompletion private function get_glFragmentSource():String - { - return __glFragmentSource; - } - - @:noCompletion private function set_glFragmentSource(value:String):String - { - if (value != __glFragmentSource) - { - __glSourceDirty = true; - } - - return __glFragmentSource = value; - } - - @:noCompletion private function get_glVertexSource():String - { - return __glVertexSource; - } - - @:noCompletion private function set_glVertexSource(value:String):String - { - if (value != __glVertexSource) - { - __glSourceDirty = true; - } - - return __glVertexSource = value; - } -} -#else -typedef Shader = flash.display.Shader; -#end diff --git a/source/openfl/utils/Assets.hx b/source/openfl/utils/Assets.hx index 13538288c..db92e5303 100644 --- a/source/openfl/utils/Assets.hx +++ b/source/openfl/utils/Assets.hx @@ -614,7 +614,6 @@ class Assets } else { - @:privateAccess LimeAssets.libraries.remove(name); _library = new AssetLibrary(); _library.__proxy = library; LimeAssets.registerLibrary(name, _library); From 8403f45d1cdcae32e958e1e41d4b55a25bfece14 Mon Sep 17 00:00:00 2001 From: Lily Date: Fri, 22 Nov 2024 17:35:00 +0300 Subject: [PATCH 74/93] kinda need --- source/funkin/backend/system/macros/Macros.hx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/funkin/backend/system/macros/Macros.hx b/source/funkin/backend/system/macros/Macros.hx index f8d778e9d..c565a239b 100644 --- a/source/funkin/backend/system/macros/Macros.hx +++ b/source/funkin/backend/system/macros/Macros.hx @@ -20,6 +20,8 @@ class Macros { "flixel.addons.util", // MOBILE "mobile", + // OPENFL SYSTEM + "openfl.system", // OTHER LIBRARIES & STUFF #if THREE_D_SUPPORT "away3d", "flx3d", #end #if VIDEO_CUTSCENES "hxvlc.flixel", "hxvlc.openfl", #end From 21bf2eccc71666ca6bf84962ed47ed0e95440202 Mon Sep 17 00:00:00 2001 From: Lily Date: Fri, 22 Nov 2024 22:49:08 +0300 Subject: [PATCH 75/93] Update ModSwitchMenu.hx --- source/funkin/menus/ModSwitchMenu.hx | 1 + 1 file changed, 1 insertion(+) diff --git a/source/funkin/menus/ModSwitchMenu.hx b/source/funkin/menus/ModSwitchMenu.hx index fcfc38da4..fd792a682 100644 --- a/source/funkin/menus/ModSwitchMenu.hx +++ b/source/funkin/menus/ModSwitchMenu.hx @@ -36,6 +36,7 @@ class ModSwitchMenu extends MusicBeatSubstate { changeSelection(0, true); addVirtualPad('UP_DOWN', 'A_B'); + addVirtualPadCamera(); // dawg wtf } public override function update(elapsed:Float) { From 00b7b47479a8f755ef2a8e6abadeef2693c9888d Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 24 Nov 2024 22:02:09 +0300 Subject: [PATCH 76/93] Update libs.mobile.xml --- libs.mobile.xml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/libs.mobile.xml b/libs.mobile.xml index d332a16b7..437fc2306 100644 --- a/libs.mobile.xml +++ b/libs.mobile.xml @@ -2,7 +2,7 @@ - + @@ -15,7 +15,6 @@ - @@ -27,5 +26,5 @@ - + From 2ec4332fe4307cb2ffd1012e35743ca2b2585f26 Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 24 Nov 2024 22:06:11 +0300 Subject: [PATCH 77/93] no more saveContent ig --- source/funkin/editors/SaveSubstate.hx | 5 ----- .../mobile/funkin/backend/utils/MobileUtil.hx | 19 ------------------- 2 files changed, 24 deletions(-) diff --git a/source/funkin/editors/SaveSubstate.hx b/source/funkin/editors/SaveSubstate.hx index cf0950bfc..628b4072c 100644 --- a/source/funkin/editors/SaveSubstate.hx +++ b/source/funkin/editors/SaveSubstate.hx @@ -26,10 +26,6 @@ class SaveSubstate extends MusicBeatSubstate { public override function create() { super.create(); - #if mobile - MobileUtil.saveContent(options.defaultSaveFile, data); - close(); - #else var fileDialog = new FileDialog(); fileDialog.onCancel.add(function() close()); fileDialog.onSelect.add(function(str) { @@ -37,7 +33,6 @@ class SaveSubstate extends MusicBeatSubstate { close(); }); fileDialog.browse(SAVE, options.saveExt.getDefault(Path.extension(options.defaultSaveFile)), options.defaultSaveFile); - #end } public override function update(elapsed:Float) { diff --git a/source/mobile/funkin/backend/utils/MobileUtil.hx b/source/mobile/funkin/backend/utils/MobileUtil.hx index ff8332e7a..7b62e8fc2 100644 --- a/source/mobile/funkin/backend/utils/MobileUtil.hx +++ b/source/mobile/funkin/backend/utils/MobileUtil.hx @@ -65,25 +65,6 @@ class MobileUtil return daPath; } - public static function saveContent(fileName:String, fileData:String, ?alert:Bool = true):Void - { - try - { - if (!FileSystem.exists('saves')) - FileSystem.createDirectory('saves'); - - File.saveContent('saves/$fileName', fileData); - if (alert) - NativeAPI.showMessageBox("Success!", '$fileName has been saved.', MSG_INFORMATION); - } - catch (e:haxe.Exception) - if (alert) - NativeAPI.showMessageBox("Error!", '$fileName couldn\'t be saved.\n(${e.message})', MSG_ERROR); - else - trace('$fileName couldn\'t be saved. (${e.message})'); - } - - #if android public static function requestPermissionsFromUser():Void { From e68d7c94efcdc14c98d988075b949ea70dd3be48 Mon Sep 17 00:00:00 2001 From: Lily Date: Wed, 27 Nov 2024 16:45:11 +0300 Subject: [PATCH 78/93] Update Main.hx --- source/funkin/backend/system/Main.hx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/funkin/backend/system/Main.hx b/source/funkin/backend/system/Main.hx index 78fd89f28..5f57e49fe 100644 --- a/source/funkin/backend/system/Main.hx +++ b/source/funkin/backend/system/Main.hx @@ -170,6 +170,10 @@ class Main extends Sprite FlxG.mouse.useSystemCursor = !Controls.instance.touchC; + #if DARK_MODE_WINDOW + if(funkin.backend.utils.NativeAPI.hasVersion("Windows 10")) funkin.backend.utils.NativeAPI.redrawWindowHeader(); + #end + ModsFolder.init(); #if MOD_SUPPORT ModsFolder.switchMod(modToLoad.getDefault(Options.lastLoadedMod)); From 976cf71a2b6fac6ccf28bb61b59a792d118599db Mon Sep 17 00:00:00 2001 From: Lily Date: Wed, 27 Nov 2024 16:57:18 +0300 Subject: [PATCH 79/93] Update android.yml --- .github/workflows/android.yml | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 80d034176..993707f3a 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -14,11 +14,6 @@ jobs: uses: krdlab/setup-haxe@v1 with: haxe-version: 4.2.5 - - name: Install Android NDK - uses: nttld/setup-ndk@v1 - id: setup-ndk - with: - ndk-version: r15c - name: Restore existing build cache for faster compilation uses: actions/cache@v3 with: @@ -33,24 +28,14 @@ jobs: - name: Installing/Updating libraries run: | haxe -cp commandline -D analyzer-optimize --run Main setup -s --lib=./libs.mobile.xml - - name: Rebuilding lime (linux) and hxcpp - run: | - sudo apt-get install -qq libgl1-mesa-dev libglu1-mesa-dev libpulse-dev g++ g++-multilib gcc-multilib libasound2-dev libx11-dev libxext-dev libxi-dev libxrandr-dev libxinerama-dev - cd $(haxelib libpath hxcpp)tools/hxcpp - haxe compile.hxml - cd ${{ github.workspace }} - haxelib run lime rebuild linux -release -clean - haxelib run lime rebuild tools - name: Configuring Android run: | haxelib run lime config ANDROID_SDK $ANDROID_HOME haxelib run lime config ANDROID_NDK_ROOT ${{ steps.setup-ndk.outputs.ndk-path }} haxelib run lime config JAVA_HOME $JAVA_HOME_17_X64 haxelib run lime config ANDROID_SETUP true - - name: Rebuilding lime (android) - run: haxelib run lime rebuild android -release -clean - name: Building the game - run: haxelib run lime config ANDROID_NDK_ROOT $ANDROID_NDK_LATEST_HOME && haxelib run lime build android + run: haxelib run lime build android - name: Uploading artifact uses: actions/upload-artifact@v4 with: From c1355077bbd55cd8492f6d0c1c7d6c094e7cc5fb Mon Sep 17 00:00:00 2001 From: Lily Date: Wed, 27 Nov 2024 16:57:53 +0300 Subject: [PATCH 80/93] Update ios.yml --- .github/workflows/ios.yml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index f9703d8a2..948ae8794 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -28,14 +28,6 @@ jobs: - name: Installing/Updating libraries run: | haxe -cp commandline -D analyzer-optimize --run Main setup -s --lib=./libs.mobile.xml - - name: Rebuilding lime and hxcpp - run: | - cd $(haxelib libpath hxcpp)tools/hxcpp - haxe compile.hxml - cd ${{ github.workspace }} - haxelib run lime rebuild mac -release -clean - haxelib run lime rebuild ios -release -clean - haxelib run lime rebuild tools - name: Building the game run: haxelib run lime build ios -nosign # - name: Clearing already existing cache From f1633963fb301a809c636323d8397e7afdc528c2 Mon Sep 17 00:00:00 2001 From: Lily Date: Wed, 27 Nov 2024 16:59:40 +0300 Subject: [PATCH 81/93] Update libs.mobile.xml --- libs.mobile.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs.mobile.xml b/libs.mobile.xml index 437fc2306..e1d83d619 100644 --- a/libs.mobile.xml +++ b/libs.mobile.xml @@ -15,7 +15,7 @@ - + From f88147748f499484f7f7f5adf4f1e3663112ed82 Mon Sep 17 00:00:00 2001 From: Lily Date: Wed, 27 Nov 2024 17:03:09 +0300 Subject: [PATCH 82/93] Update android.yml --- .github/workflows/android.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 993707f3a..4d2a21045 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -31,7 +31,7 @@ jobs: - name: Configuring Android run: | haxelib run lime config ANDROID_SDK $ANDROID_HOME - haxelib run lime config ANDROID_NDK_ROOT ${{ steps.setup-ndk.outputs.ndk-path }} + haxelib run lime config ANDROID_NDK_ROOT $ANDROID_NDK_LATEST_HOME haxelib run lime config JAVA_HOME $JAVA_HOME_17_X64 haxelib run lime config ANDROID_SETUP true - name: Building the game From 707d0805cd2ed29379f7a7117f3a5bc39507e01b Mon Sep 17 00:00:00 2001 From: Lily Date: Wed, 27 Nov 2024 17:19:51 +0300 Subject: [PATCH 83/93] Update Hitbox.hx --- source/mobile/objects/Hitbox.hx | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/source/mobile/objects/Hitbox.hx b/source/mobile/objects/Hitbox.hx index 2784e4a19..02a804007 100644 --- a/source/mobile/objects/Hitbox.hx +++ b/source/mobile/objects/Hitbox.hx @@ -95,7 +95,7 @@ class Hitbox extends FlxButtonGroup hintLaneTween = FlxTween.tween(hint.label, {alpha: 0.00001}, Options.controlsAlpha / 10, { ease: FlxEase.circInOut, - onComplete: (twn:FlxTween) -> hintTween = null + onComplete: (twn:FlxTween) -> hintLaneTween = null }); } @@ -114,7 +114,7 @@ class Hitbox extends FlxButtonGroup hintLaneTween = FlxTween.tween(hint.label, {alpha: Options.controlsAlpha}, Options.controlsAlpha / 100, { ease: FlxEase.circInOut, - onComplete: (twn:FlxTween) -> hintTween = null + onComplete: (twn:FlxTween) -> hintLaneTween = null }); } } @@ -143,13 +143,7 @@ class Hitbox extends FlxButtonGroup shape.graphics.drawRect(0, 0, Width, Height); shape.graphics.endFill(); } - else if (Options.hitboxType == "noGradientOld") - { - shape.graphics.lineStyle(10, 0xFFFFFF, 1); - shape.graphics.drawRect(0, 0, Width, Height); - shape.graphics.endFill(); - } - else // if (Options.hitboxType == 'gradient') + else if (Options.hitboxType == 'gradient') { shape.graphics.lineStyle(3, 0xFFFFFF, 1); shape.graphics.drawRect(0, 0, Width, Height); @@ -163,8 +157,14 @@ class Hitbox extends FlxButtonGroup shape.graphics.drawRect(3, 3, Width - 6, Height - 6); shape.graphics.endFill(); } + else //if (Options.hitboxType == "noGradientOld") + { + shape.graphics.lineStyle(10, 0xFFFFFF, 1); + shape.graphics.drawRect(0, 0, Width, Height); + shape.graphics.endFill(); + } var bitmap:BitmapData = new BitmapData(Width, Height, true, 0); bitmap.draw(shape); return bitmap; } -} \ No newline at end of file +} From c74fe6b4d500301d34b2af39e69138908b859fad Mon Sep 17 00:00:00 2001 From: Lily Date: Thu, 12 Dec 2024 15:19:03 +0300 Subject: [PATCH 84/93] Update libs.mobile.xml --- libs.mobile.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libs.mobile.xml b/libs.mobile.xml index e1d83d619..1b5172b02 100644 --- a/libs.mobile.xml +++ b/libs.mobile.xml @@ -9,16 +9,16 @@ - - + + - - + + - + From e0bc25778972e980eeb2cbee971deb170ae7a380 Mon Sep 17 00:00:00 2001 From: Lily Date: Thu, 12 Dec 2024 15:19:41 +0300 Subject: [PATCH 85/93] right --- libs.mobile.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libs.mobile.xml b/libs.mobile.xml index 1b5172b02..bd15485ec 100644 --- a/libs.mobile.xml +++ b/libs.mobile.xml @@ -9,12 +9,12 @@ - - + + - + From 74ed05dbd97987a3515802131fb8ac263c8261b9 Mon Sep 17 00:00:00 2001 From: Lily Date: Thu, 12 Dec 2024 15:20:51 +0300 Subject: [PATCH 86/93] Update Paths.hx --- source/funkin/backend/assets/Paths.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/funkin/backend/assets/Paths.hx b/source/funkin/backend/assets/Paths.hx index cd691e23b..7a3919672 100644 --- a/source/funkin/backend/assets/Paths.hx +++ b/source/funkin/backend/assets/Paths.hx @@ -182,7 +182,7 @@ class Paths return FlxAtlasFrames.fromAseprite('$key.png', '$key.json'); inline static public function getAssetsRoot():String - return ModsFolder.currentModFolder != null ? '${ModsFolder.modsPath}${ModsFolder.currentModFolder}' : #if (sys &&!mobile && TEST_BUILD) './${Main.pathBack}assets/' #else './assets' #end; + return ModsFolder.currentModFolder != null ? '${ModsFolder.modsPath}${ModsFolder.currentModFolder}' : #if (sys && !mobile && TEST_BUILD) './${Main.pathBack}assets/' #else './assets' #end; /** * Gets frames at specified path. @@ -340,4 +340,4 @@ class ScriptPathInfo { this.file = file; this.library = library; } -} \ No newline at end of file +} From b5a3841c3609f869490126353877e09a831cada3 Mon Sep 17 00:00:00 2001 From: Lily Date: Thu, 12 Dec 2024 18:15:18 +0300 Subject: [PATCH 87/93] Update ios.yml --- .github/workflows/ios.yml | 78 +++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 40 deletions(-) diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index 948ae8794..a8a984f69 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -14,41 +14,40 @@ jobs: uses: krdlab/setup-haxe@v1 with: haxe-version: 4.2.5 - # - name: Restore existing build cache for faster compilation - # uses: actions/cache@v3 - # with: - ## not caching the bin folder to prevent asset duplication and stuff like that - # key: cache-build-ios - # path: | - # .haxelib/ - # export/release/ios/haxe/ - # export/release/ios/obj/ - # restore-keys: | - # cache-build-ios + - name: Restore existing build cache for faster compilation + uses: actions/cache@v3 + with: + # not caching the bin folder to prevent asset duplication and stuff like that + key: cache-build-ios + path: | + .haxelib/ + export/release/ios/CodenameEngine/haxe/ + restore-keys: | + cache-build-ios - name: Installing/Updating libraries run: | haxe -cp commandline -D analyzer-optimize --run Main setup -s --lib=./libs.mobile.xml - name: Building the game run: haxelib run lime build ios -nosign - # - name: Clearing already existing cache - # uses: actions/github-script@v6 - # with: - # script: | - # const caches = await github.rest.actions.getActionsCacheList({ - # owner: context.repo.owner, - # repo: context.repo.repo, - # }) - # for (const cache of caches.data.actions_caches) { - # if (cache.key == "cache-build-ios") { - # console.log('Clearing ' + cache.key + '...') - # await github.rest.actions.deleteActionsCacheById({ - # owner: context.repo.owner, - # repo: context.repo.repo, - # cache_id: cache.id, - # }) - # console.log("Cache cleared.") - # } - # } + - name: Clearing already existing cache + uses: actions/github-script@v6 + with: + script: | + const caches = await github.rest.actions.getActionsCacheList({ + owner: context.repo.owner, + repo: context.repo.repo, + }) + for (const cache of caches.data.actions_caches) { + if (cache.key == "cache-build-ios") { + console.log('Clearing ' + cache.key + '...') + await github.rest.actions.deleteActionsCacheById({ + owner: context.repo.owner, + repo: context.repo.repo, + cache_id: cache.id, + }) + console.log("Cache cleared.") + } + } - name: Making ipa file run: | cd export/*/ios/build/*-iphoneos @@ -60,14 +59,13 @@ jobs: with: name: Codename Engine path: export/release/ios/build/Release-iphoneos/*.ipa - # - name: Uploading new cache - # uses: actions/cache@v3 - # with: + - name: Uploading new cache + uses: actions/cache@v3 + with: # caching again since for some reason it doesnt work with the first post cache shit - # key: cache-build-ios - # path: | - # .haxelib/ - # export/release/ios/haxe/ - # export/release/ios/obj/ - # restore-keys: | - # cache-build-ios + key: cache-build-ios + path: | + .haxelib/ + export/release/ios/CodenameEngine/haxe + restore-keys: | + cache-build-ios From f63cc31c66b0cebc74a82981c73da2c25f21660d Mon Sep 17 00:00:00 2001 From: Lily Date: Sat, 14 Dec 2024 23:13:22 +0300 Subject: [PATCH 88/93] Update AssetsLibraryList.hx --- .../funkin/backend/assets/AssetsLibraryList.hx | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/source/funkin/backend/assets/AssetsLibraryList.hx b/source/funkin/backend/assets/AssetsLibraryList.hx index 7b5ef0696..39658293b 100644 --- a/source/funkin/backend/assets/AssetsLibraryList.hx +++ b/source/funkin/backend/assets/AssetsLibraryList.hx @@ -2,6 +2,7 @@ package funkin.backend.assets; import funkin.backend.assets.IModsAssetLibrary; import lime.utils.AssetLibrary; +import lime.utils.AssetType; class AssetsLibraryList extends AssetLibrary { public var libraries:Array = []; @@ -162,6 +163,23 @@ class AssetsLibraryList extends AssetLibrary { libraries.insert(0, lib); return lib; } + + override public function list(type:String):Array + { + var items = []; + + for (library in libraries) + { + var libraryItems = library.list(type); + + if (libraryItems != null) + { + items = items.concat(libraryItems); + } + } + + return items; + } } enum abstract AssetSource(Null) from Bool from Null to Null { From 7217c91e576b098424e0c3ba47a8aaa00f0df207 Mon Sep 17 00:00:00 2001 From: Lily Date: Sat, 14 Dec 2024 23:41:37 +0300 Subject: [PATCH 89/93] fix the crash --- .../mobile/funkin/backend/system/CopyState.hx | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/source/mobile/funkin/backend/system/CopyState.hx b/source/mobile/funkin/backend/system/CopyState.hx index b3927073f..e114d8965 100644 --- a/source/mobile/funkin/backend/system/CopyState.hx +++ b/source/mobile/funkin/backend/system/CopyState.hx @@ -35,7 +35,6 @@ import haxe.io.Path; import mobile.funkin.backend.utils.MobileUtil; import funkin.backend.assets.Paths; import funkin.backend.utils.NativeAPI; -import funkin.backend.system.MainState; import flixel.ui.FlxBar; import flixel.ui.FlxBar.FlxBarFillDirection; @@ -53,7 +52,7 @@ using StringTools; class CopyState extends funkin.backend.MusicBeatState { private static final textFilesExtensions:Array = ['ini', 'txt', 'xml', 'hxs', 'hx', 'lua', 'json', 'frag', 'vert']; - public static final IGNORE_FOLDER_FILE_NAME:String = "ignore.txt"; + public static final IGNORE_FOLDER_FILE_NAME:String = "CopyState-Ignore.txt"; private static var directoriesToIgnore:Array = []; public static var locatedFiles:Array = []; public static var maxLoopTimes:Int = 0; @@ -76,12 +75,12 @@ class CopyState extends funkin.backend.MusicBeatState checkExistingFiles(); if (maxLoopTimes <= 0) { - FlxG.switchState(new MainState()); + FlxG.resetGame(); return; } NativeAPI.showMessageBox("Notice", "Seems like you have some missing files that are necessary to run the game\nPress OK to begin the copy process"); - + shouldCopy = true; add(new FlxSprite(0, 0).makeGraphic(FlxG.width, FlxG.height, 0xffcaff4d)); @@ -126,8 +125,9 @@ class CopyState extends funkin.backend.MusicBeatState File.saveContent('logs/' + Date.now().toString().replace(' ', '-').replace(':', "'") + '-CopyState' + '.txt', failedFilesStack.join('\n')); } canUpdate = false; - FlxG.sound.play(Paths.sound('menu/confirm')).onComplete = () -> { - FlxG.switchState(new MainState()); + FlxG.sound.play(Paths.sound('menu/confirm')).onComplete = () -> + { + FlxG.resetGame(); }; } @@ -219,7 +219,7 @@ class CopyState extends funkin.backend.MusicBeatState public static function checkExistingFiles():Bool { - locatedFiles = OpenFLAssets.list(); + locatedFiles = Paths.assetsTree.list(null); // removes unwanted assets var assets = locatedFiles.filter(folder -> folder.startsWith('assets/')); @@ -234,7 +234,7 @@ class CopyState extends funkin.backend.MusicBeatState if (filesToRemove.contains(file)) continue; - if(file.endsWith(IGNORE_FOLDER_FILE_NAME) && !directoriesToIgnore.contains(Path.directory(file))) + if (file.endsWith(IGNORE_FOLDER_FILE_NAME) && !directoriesToIgnore.contains(Path.directory(file))) directoriesToIgnore.push(Path.directory(file)); if (directoriesToIgnore.length > 0) @@ -251,6 +251,8 @@ class CopyState extends funkin.backend.MusicBeatState maxLoopTimes = locatedFiles.length; + trace(maxLoopTimes); + return (maxLoopTimes <= 0); } } From b42f4f3ad0d122de2be776070faeed76da21a300 Mon Sep 17 00:00:00 2001 From: Lily Date: Sat, 14 Dec 2024 23:42:06 +0300 Subject: [PATCH 90/93] forgor --- source/mobile/funkin/backend/system/CopyState.hx | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/mobile/funkin/backend/system/CopyState.hx b/source/mobile/funkin/backend/system/CopyState.hx index e114d8965..b9d8e1a0a 100644 --- a/source/mobile/funkin/backend/system/CopyState.hx +++ b/source/mobile/funkin/backend/system/CopyState.hx @@ -251,8 +251,6 @@ class CopyState extends funkin.backend.MusicBeatState maxLoopTimes = locatedFiles.length; - trace(maxLoopTimes); - return (maxLoopTimes <= 0); } } From f46b3c646cd3d3579c1e993c93094e148bfdd63f Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 15 Dec 2024 22:04:22 +0300 Subject: [PATCH 91/93] don't remove if it's EXTERNAL --- source/funkin/options/categories/MobileOptions.hx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/funkin/options/categories/MobileOptions.hx b/source/funkin/options/categories/MobileOptions.hx index 222060cce..414af3241 100644 --- a/source/funkin/options/categories/MobileOptions.hx +++ b/source/funkin/options/categories/MobileOptions.hx @@ -107,7 +107,8 @@ class MobileOptions extends OptionsScreen { try { - Sys.command('rm', ['-rf', lastStoragePath]); + if (Options.storageType != "EXTERNAL") + Sys.command('rm', ['-rf', lastStoragePath]); } catch (e:haxe.Exception) trace('Failed to remove last directory. (${e.message})'); From 7d43df21a821c810b657c938ff25353fe56a48df Mon Sep 17 00:00:00 2001 From: GeXie19 <3449326235@qq.com> Date: Tue, 17 Dec 2024 13:01:30 +0800 Subject: [PATCH 92/93] Update HScript.hx help mobile programmer(yeah --- source/funkin/backend/scripting/HScript.hx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/funkin/backend/scripting/HScript.hx b/source/funkin/backend/scripting/HScript.hx index 0597a32f8..043db836c 100644 --- a/source/funkin/backend/scripting/HScript.hx +++ b/source/funkin/backend/scripting/HScript.hx @@ -106,6 +106,10 @@ class HScript extends Script { Logs.logText(fn, GREEN), Logs.logText(err, RED) ], ERROR); + + #if mobile + funkin.backend.utils.NativeAPI.showMessageBox(fn + err, "HSCRIPT ERROR", MSG_ERROR); + #end } public override function setParent(parent:Dynamic) { From ea182787a06e4ac7c11d5832b398771c61d57da6 Mon Sep 17 00:00:00 2001 From: Lily Date: Wed, 18 Dec 2024 20:49:35 +0300 Subject: [PATCH 93/93] Update TitleState.hx closes: #29 --- source/funkin/menus/TitleState.hx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/source/funkin/menus/TitleState.hx b/source/funkin/menus/TitleState.hx index 4a5c2cbe9..c8cd03f6d 100644 --- a/source/funkin/menus/TitleState.hx +++ b/source/funkin/menus/TitleState.hx @@ -121,10 +121,11 @@ class TitleState extends MusicBeatState var pressedEnter:Bool = FlxG.keys.justPressed.ENTER; - if (controls.touchC) - for (touch in FlxG.touches.list) - if (touch.justPressed) - pressedEnter = true; + #if FLX_TOUCH + for (touch in FlxG.touches.list) + if (touch.justPressed) + pressedEnter = true; + #end var gamepad:FlxGamepad = FlxG.gamepads.lastActive;

e${qeh5A>K<= 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 SSBiqM(d49*B+JFWeE(nHQ9pJ7 literal 0 HcmV?d00001 diff --git a/source/mobile/funkin/backend/system/CopyState.hx b/source/mobile/funkin/backend/system/CopyState.hx index 99ebdfb5c..62514192e 100644 --- a/source/mobile/funkin/backend/system/CopyState.hx +++ b/source/mobile/funkin/backend/system/CopyState.hx @@ -14,6 +14,8 @@ import mobile.funkin.backend.utils.MobileUtil; import funkin.backend.assets.Paths; import funkin.backend.utils.NativeAPI; import funkin.backend.system.MainState; +import flixel.ui.FlxBar; +import flixel.ui.FlxBar.FlxBarFillDirection; #if sys import sys.io.File; @@ -22,24 +24,28 @@ import sys.FileSystem; using StringTools; +/** + * ... + * @author: Karim Akra + */ class CopyState extends funkin.backend.MusicBeatState { + private static final textFilesExtensions:Array = ['ini', 'txt', 'xml', 'hxs', 'hx', 'lua', 'json', 'frag', 'vert']; + public static final IGNORE_FOLDER_FILE_NAME:String = "ignore.txt"; + private static var directoriesToIgnore:Array = []; public static var locatedFiles:Array = []; public static var maxLoopTimes:Int = 0; - public static final IGNORE_FOLDER_FILE_NAME:String = "ignore.txt"; public var loadingImage:FlxSprite; - public var bottomBG:FlxSprite; + public var loadingBar:FlxBar; public var loadedText:FlxText; public var copyLoop:FlxAsyncLoop; - var loopTimes:Int = 0; - var failedFiles:Array = []; var failedFilesStack:Array = []; - var canUpdate:Bool = true; + var failedFiles:Array = []; var shouldCopy:Bool = false; - - private static final textFilesExtensions:Array = ['ini', 'txt', 'xml', 'hxs', 'hx', 'lua', 'json', 'frag', 'vert']; + var canUpdate:Bool = true; + var loopTimes:Int = 0; override function create() { @@ -58,17 +64,17 @@ class CopyState extends funkin.backend.MusicBeatState add(new FlxSprite(0, 0).makeGraphic(FlxG.width, FlxG.height, 0xffcaff4d)); - loadingImage = new FlxSprite(0, 0, Paths.image('funkay')); + loadingImage = new FlxSprite(0, 0, Paths.image('menus/funkay')); loadingImage.setGraphicSize(0, FlxG.height); loadingImage.updateHitbox(); loadingImage.screenCenter(); add(loadingImage); - bottomBG = new FlxSprite(0, FlxG.height - 26).makeGraphic(FlxG.width, 26, 0xFF000000); - bottomBG.alpha = 0.6; - add(bottomBG); + loadingBar = new FlxBar(0, FlxG.height - 26, FlxBarFillDirection.LEFT_TO_RIGHT, FlxG.width, 26); + loadingBar.setRange(0, maxLoopTimes); + add(loadingBar); - loadedText = new FlxText(bottomBG.x, bottomBG.y + 4, FlxG.width, '', 16); + loadedText = new FlxText(loadingBar.x, loadingBar.y + 4, FlxG.width, '', 16); loadedText.setFormat(Paths.font("vcr.ttf"), 16, FlxColor.WHITE, CENTER); add(loadedText); @@ -87,6 +93,7 @@ class CopyState extends funkin.backend.MusicBeatState { if (shouldCopy && copyLoop != null) { + loadingBar.percent = loopTimes / maxLoopTimes * 100; if (copyLoop.finished && canUpdate) { if (failedFiles.length > 0) @@ -102,7 +109,7 @@ class CopyState extends funkin.backend.MusicBeatState }; } - if (maxLoopTimes == 0) + if (loopTimes == maxLoopTimes) loadedText.text = "Completed!"; else loadedText.text = '$loopTimes/$maxLoopTimes'; @@ -118,7 +125,7 @@ class CopyState extends funkin.backend.MusicBeatState { var directory = Path.directory(file); if (!FileSystem.exists(directory)) - MobileUtil.mkDirs(directory); + FileSystem.createDirectory(directory); try { if (OpenFLAssets.exists(getFile(file))) @@ -152,7 +159,7 @@ class CopyState extends funkin.backend.MusicBeatState if (fileData == null) fileData = ''; if (!FileSystem.exists(directory)) - MobileUtil.mkDirs(directory); + FileSystem.createDirectory(directory); File.saveContent(Path.join([directory, fileName]), fileData); } catch (e:haxe.Exception) @@ -164,7 +171,7 @@ class CopyState extends funkin.backend.MusicBeatState public function getFileBytes(file:String):ByteArray { - switch (Path.extension(file)) + switch (Path.extension(file).toLowerCase()) { case 'otf' | 'ttf': return ByteArray.fromFile(file); @@ -175,11 +182,13 @@ class CopyState extends funkin.backend.MusicBeatState public static function getFile(file:String):String { - if(OpenFLAssets.exists(file)) return file; + if (OpenFLAssets.exists(file)) + return file; @:privateAccess - for(library in LimeAssets.libraries.keys()){ - if(OpenFLAssets.exists('$library:$file') && library != 'default') + for (library in LimeAssets.libraries.keys()) + { + if (OpenFLAssets.exists('$library:$file') && library != 'default') return '$library:$file'; } @@ -189,28 +198,38 @@ class CopyState extends funkin.backend.MusicBeatState public static function checkExistingFiles():Bool { locatedFiles = OpenFLAssets.list(); - + // removes unwanted assets var assets = locatedFiles.filter(folder -> folder.startsWith('assets/')); var mods = locatedFiles.filter(folder -> folder.startsWith('mods/')); locatedFiles = assets.concat(mods); + locatedFiles = locatedFiles.filter(file -> !FileSystem.exists(file)); var filesToRemove:Array = []; for (file in locatedFiles) { - if (FileSystem.exists(file) || OpenFLAssets.exists(getFile(Path.join([Path.directory(getFile(file)), IGNORE_FOLDER_FILE_NAME])))) + if (filesToRemove.contains(file)) + continue; + + if(file.endsWith(IGNORE_FOLDER_FILE_NAME) && !directoriesToIgnore.contains(Path.directory(file))) + directoriesToIgnore.push(Path.directory(file)); + + if (directoriesToIgnore.length > 0) { - filesToRemove.push(file); + for (directory in directoriesToIgnore) + { + if (file.startsWith(directory)) + filesToRemove.push(file); + } } } - for (file in filesToRemove) - locatedFiles.remove(file); + locatedFiles = locatedFiles.filter(file -> !filesToRemove.contains(file)); maxLoopTimes = locatedFiles.length; return (maxLoopTimes <= 0); } } -#end +#end \ No newline at end of file diff --git a/source/mobile/funkin/backend/utils/MobileUtil.hx b/source/mobile/funkin/backend/utils/MobileUtil.hx index 731c8b63e..366822962 100644 --- a/source/mobile/funkin/backend/utils/MobileUtil.hx +++ b/source/mobile/funkin/backend/utils/MobileUtil.hx @@ -43,42 +43,6 @@ class MobileUtil return daPath; } - public static function mkDirs(directory:String):Void - { - try { - if (FileSystem.exists(directory) && FileSystem.isDirectory(directory)) - return; - } catch (e:haxe.Exception) { - trace('Something went wrong while looking at folder. (${e.message})'); - } - var total:String = ''; - if (directory.substr(0, 1) == '/') - total = '/'; - - var parts:Array = directory.split('/'); - if (parts.length > 0 && parts[0].indexOf(':') > -1) - parts.shift(); - - for (part in parts) - { - if (part != '.' && part != '') - { - if (total != '' && total != '/') - total += '/'; - - total += part; - - try - { - if (!FileSystem.exists(total)) - FileSystem.createDirectory(total); - } - catch (e:haxe.Exception) - trace('Error while creating folder. (${e.message}'); - } - } - } - #if android public static function requestPermissionsFromUser():Void { @@ -100,7 +64,7 @@ class MobileUtil try { if (!FileSystem.exists(MobileUtil.getStorageDirectory())) - mkDirs(MobileUtil.getStorageDirectory()); + FileSystem.createDirectory(MobileUtil.getStorageDirectory()); } catch (e:Dynamic) { From 2e8ece7575c34071a1e17498633a3e28b76e46e2 Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 20 Oct 2024 23:25:35 +0300 Subject: [PATCH 54/93] update hitbox (did not test) --- .../options/categories/MobileOptions.hx | 4 +- source/mobile/flixel/FlxButton.hx | 166 ++++++------------ source/mobile/objects/Hitbox.hx | 113 ++++++------ 3 files changed, 112 insertions(+), 171 deletions(-) diff --git a/source/funkin/options/categories/MobileOptions.hx b/source/funkin/options/categories/MobileOptions.hx index da170f977..37fe8fd62 100644 --- a/source/funkin/options/categories/MobileOptions.hx +++ b/source/funkin/options/categories/MobileOptions.hx @@ -45,8 +45,8 @@ class MobileOptions extends OptionsScreen { add(new ArrayOption( "Hitbox Design", "Choose how your hitbox should look like!", - ['gradient', 'noGradient', 'hidden'], - ['Gradient', 'No Gradient', 'Hidden'], + ['noGradient', 'noGradientOld', 'gradient', 'hidden'], + ["No Gradient", "No Gradient (Old)", "Gradient", "Hidden"], 'hitboxType')); #end #if mobile diff --git a/source/mobile/flixel/FlxButton.hx b/source/mobile/flixel/FlxButton.hx index f543a2ee8..b6e4482a1 100644 --- a/source/mobile/flixel/FlxButton.hx +++ b/source/mobile/flixel/FlxButton.hx @@ -18,7 +18,7 @@ import flixel.util.FlxDestroyUtil; /** * A simple button class that calls a function when clicked by the touch. */ -class FlxButton extends FlxTypedButton +class FlxButton extends FlxTypedButton { /** * Used with public variable status, means not highlighted or pressed. @@ -49,52 +49,25 @@ class FlxButton extends FlxTypedButton * @param Text The text that you want to appear on the button. * @param OnClick The function to call whenever the button is clicked. */ - public function new(X:Float = 0, Y:Float = 0, ?Text:String, ?OnClick:Void->Void):Void - { + public function new(X:Float = 0, Y:Float = 0, ?Text:String, ?OnClick:Void->Void):Void { super(X, Y, OnClick); for (point in labelOffsets) point.set(point.x - 1, point.y + 3); - - initLabel(Text); } /** * Updates the size of the text field to match the button. */ - override function resetHelpers():Void - { + override function resetHelpers():Void { super.resetHelpers(); - - if (label != null) - { - label.fieldWidth = label.frameWidth = Std.int(width); - label.size = label.size; // Calls set_size(), don't remove! - } - } - - inline function initLabel(Text:String):Void - { - if (Text != null) - { - label = new FlxText(x + labelOffsets[NORMAL].x, y + labelOffsets[NORMAL].y, 80, Text); - label.setFormat(null, 8, 0x333333, 'center'); - label.alpha = labelAlphas[status]; - label.drawFrame(true); - } } - inline function get_text():String - { - return (label != null) ? label.text : null; + inline function get_text():String { + return null; } - inline function set_text(Text:String):String - { - if (label == null) - initLabel(Text); - else - label.text = Text; + inline function set_text(Text:String):String { return Text; } } @@ -129,6 +102,11 @@ class FlxTypedButton extends FlxSprite implements IFlxInput */ public var statusAnimations:Array = ['normal', 'highlight', 'pressed']; + /** + * How much to add/substract from the current indicator value for the label. + **/ + public var labelStatusDiff:Float = 0.05; + /** * Whether you can press the button simply by releasing the touch button over it (default). * If false, the input has to be pressed while hovering over the button. @@ -181,7 +159,7 @@ class FlxTypedButton extends FlxSprite implements IFlxInput /** * We cast label to a `FlxSprite` for internal operations to avoid Dynamic casts in C++ */ - var _spriteLabel:FlxSprite; + public var _spriteLabel:FlxSprite; /** * We don't need an ID here, so let's just use `Int` as the type. @@ -195,6 +173,8 @@ class FlxTypedButton extends FlxSprite implements IFlxInput var lastStatus = -1; + public var canChangeLabelAlpha:Bool = true; + /** * Creates a new `FlxTypedButton` object with a gray background. * @@ -202,8 +182,7 @@ class FlxTypedButton extends FlxSprite implements IFlxInput * @param Y The y position of the button. * @param OnClick The function to call whenever the button is clicked. */ - public function new(X:Float = 0, Y:Float = 0, ?OnClick:Void->Void):Void - { + public function new(X:Float = 0, Y:Float = 0, ?OnClick:Void->Void):Void { super(X, Y); loadDefaultGraphic(); @@ -224,8 +203,7 @@ class FlxTypedButton extends FlxSprite implements IFlxInput input = new FlxInput(0); } - override public function graphicLoaded():Void - { + override public function graphicLoaded():Void { super.graphicLoaded(); setupAnimation('normal', FlxButton.NORMAL); @@ -235,18 +213,16 @@ class FlxTypedButton extends FlxSprite implements IFlxInput function loadDefaultGraphic():Void loadGraphic('flixel/images/ui/button.png', true, 80, 20); - function setupAnimation(animationName:String, frameIndex:Int):Void - { + function setupAnimation(animationName:String, frameIndex:Int):Void { // make sure the animation doesn't contain an invalid frame - frameIndex = Std.int(Math.min(frameIndex, #if (flixel < "5.3.0") animation.frames #else animation.numFrames #end - 1)); + frameIndex = Std.int(Math.min(frameIndex, animation.numFrames - 1)); animation.add(animationName, [frameIndex]); } /** * Called by the game state when state is changed (if this object belongs to the state) */ - override public function destroy():Void - { + override public function destroy():Void { label = FlxDestroyUtil.destroy(label); _spriteLabel = null; @@ -267,20 +243,17 @@ class FlxTypedButton extends FlxSprite implements IFlxInput /** * Called by the game loop automatically, handles touch over and click detection. */ - override public function update(elapsed:Float):Void - { + override public function update(elapsed:Float):Void { super.update(elapsed); - if (visible) - { + if (visible) { // Update the button, but only if at least either touches are enabled #if FLX_POINTER_INPUT updateButton(); #end // Trigger the animation only if the button's input status changes. - if (lastStatus != status) - { + if (lastStatus != status) { updateStatusAnimation(); lastStatus = status; } @@ -295,12 +268,10 @@ class FlxTypedButton extends FlxSprite implements IFlxInput /** * Just draws the button graphic and text label to the screen. */ - override public function draw():Void - { + override public function draw():Void { super.draw(); - if (_spriteLabel != null && _spriteLabel.visible) - { + if (_spriteLabel != null && _spriteLabel.visible) { _spriteLabel.cameras = cameras; _spriteLabel.draw(); } @@ -310,8 +281,7 @@ class FlxTypedButton extends FlxSprite implements IFlxInput /** * Helper function to draw the debug graphic for the label as well. */ - override public function drawDebug():Void - { + override public function drawDebug():Void { super.drawDebug(); if (_spriteLabel != null) @@ -327,21 +297,18 @@ class FlxTypedButton extends FlxSprite implements IFlxInput * @param atlas Atlas to stamp graphic to. * @return Whether the button's graphic and label's graphic were stamped on the atlas successfully. */ - public function stampOnAtlas(atlas:FlxAtlas):Bool - { + public function stampOnAtlas(atlas:FlxAtlas):Bool { var buttonNode:FlxNode = atlas.addNode(graphic.bitmap, graphic.key); var result:Bool = (buttonNode != null); - if (buttonNode != null) - { + if (buttonNode != null) { var buttonFrames:FlxTileFrames = cast frames; var tileSize:FlxPoint = FlxPoint.get(buttonFrames.tileSize.x, buttonFrames.tileSize.y); var tileFrames:FlxTileFrames = buttonNode.getTileFrames(tileSize); this.frames = tileFrames; } - if (result && label != null) - { + if (result && label != null) { var labelNode:FlxNode = atlas.addNode(label.graphic.bitmap, label.graphic.key); result = result && (labelNode != null); @@ -356,8 +323,7 @@ class FlxTypedButton extends FlxSprite implements IFlxInput * Basic button update logic - searches for overlaps with touches and * the touch and calls `updateStatus()`. */ - function updateButton():Void - { + function updateButton():Void { var overlapFound = checkTouchOverlap(); if (currentInput != null && currentInput.justReleased && overlapFound) @@ -367,8 +333,7 @@ class FlxTypedButton extends FlxSprite implements IFlxInput onOutHandler(); } - function checkTouchOverlap():Bool - { + function checkTouchOverlap():Bool { var overlap = false; for (camera in cameras) @@ -379,16 +344,12 @@ class FlxTypedButton extends FlxSprite implements IFlxInput return overlap; } - function checkInput(pointer:FlxPointer, input:IFlxInput, justPressedPosition:FlxPoint, camera:FlxCamera):Bool - { + function checkInput(pointer:FlxPointer, input:IFlxInput, justPressedPosition:FlxPoint, camera:FlxCamera):Bool { if (maxInputMovement != Math.POSITIVE_INFINITY && justPressedPosition.distanceTo(pointer.getScreenPosition(FlxPoint.weak())) > maxInputMovement - && input == currentInput) - { + && input == currentInput) { currentInput = null; - } - else if (overlapsPoint(pointer.getWorldPosition(camera, _point), true, camera)) - { + } else if (overlapsPoint(pointer.getWorldPosition(camera, _point), true, camera)) { updateStatus(input); return true; } @@ -399,15 +360,11 @@ class FlxTypedButton extends FlxSprite implements IFlxInput /** * Updates the button status by calling the respective event handler function. */ - function updateStatus(input:IFlxInput):Void - { - if (input.justPressed) - { + function updateStatus(input:IFlxInput):Void { + if (input.justPressed) { currentInput = input; onDownHandler(); - } - else if (status == FlxButton.NORMAL) - { + } else if (status == FlxButton.NORMAL) { // Allow 'swiping' to press a button (dragging it over the button while pressed) if (allowSwiping && input.pressed) onDownHandler(); @@ -416,8 +373,7 @@ class FlxTypedButton extends FlxSprite implements IFlxInput } } - function updateLabelPosition() - { + function updateLabelPosition() { if (_spriteLabel != null) // Label positioning { _spriteLabel.x = (pixelPerfectPosition ? Math.floor(x) : x) + labelOffsets[status].x; @@ -425,17 +381,15 @@ class FlxTypedButton extends FlxSprite implements IFlxInput } } - function updateLabelAlpha() - { - if (_spriteLabel != null && labelAlphas.length > status) - _spriteLabel.alpha = alpha * labelAlphas[status]; + function updateLabelAlpha() { + if (_spriteLabel != null && canChangeLabelAlpha) + _spriteLabel.alpha = alpha == 0 ? 0 : alpha + labelStatusDiff; } /** * Internal function that handles the onUp event. */ - function onUpHandler():Void - { + function onUpHandler():Void { status = FlxButton.NORMAL; input.release(); currentInput = null; @@ -445,8 +399,7 @@ class FlxTypedButton extends FlxSprite implements IFlxInput /** * Internal function that handles the onDown event. */ - function onDownHandler():Void - { + function onDownHandler():Void { status = FlxButton.PRESSED; input.press(); onDown.fire(); // Order matters here, because onDown.fire() could cause a state change and destroy this object. @@ -455,8 +408,7 @@ class FlxTypedButton extends FlxSprite implements IFlxInput /** * Internal function that handles the onOver event. */ - function onOverHandler():Void - { + function onOverHandler():Void { status = FlxButton.HIGHLIGHT; onOver.fire(); // Order matters here, because onOver.fire() could cause a state change and destroy this object. } @@ -464,17 +416,14 @@ class FlxTypedButton extends FlxSprite implements IFlxInput /** * Internal function that handles the onOut event. */ - function onOutHandler():Void - { + function onOutHandler():Void { status = FlxButton.NORMAL; input.release(); onOut.fire(); // Order matters here, because onOut.fire() could cause a state change and destroy this object. } - function set_label(Value:T):T - { - if (Value != null) - { + function set_label(Value:T):T { + if (Value != null) { // use the same FlxPoint object for both Value.scrollFactor.put(); Value.scrollFactor = scrollFactor; @@ -488,29 +437,25 @@ class FlxTypedButton extends FlxSprite implements IFlxInput return Value; } - function set_status(Value:Int):Int - { + function set_status(Value:Int):Int { status = Value; updateLabelAlpha(); return status; } - override function set_alpha(Value:Float):Float - { + override function set_alpha(Value:Float):Float { super.set_alpha(Value); updateLabelAlpha(); return alpha; } - override function set_x(Value:Float):Float - { + override function set_x(Value:Float):Float { super.set_x(Value); updateLabelPosition(); return x; } - override function set_y(Value:Float):Float - { + override function set_y(Value:Float):Float { super.set_y(Value); updateLabelPosition(); return y; @@ -550,8 +495,7 @@ private class FlxButtonEvent implements IFlxDestroyable * @param Callback The callback function to call when this even fires. * @param sound The sound to play when this event fires. */ - public function new(?Callback:Void->Void, ?sound:FlxSound):Void - { + public function new(?Callback:Void->Void, ?sound:FlxSound):Void { callback = Callback; #if FLX_SOUND_SYSTEM @@ -562,8 +506,7 @@ private class FlxButtonEvent implements IFlxDestroyable /** * Cleans up memory. */ - public inline function destroy():Void - { + public inline function destroy():Void { callback = null; #if FLX_SOUND_SYSTEM @@ -574,8 +517,7 @@ private class FlxButtonEvent implements IFlxDestroyable /** * Fires this event (calls the callback and plays the sound) */ - public inline function fire():Void - { + public inline function fire():Void { if (callback != null) callback(); @@ -584,4 +526,4 @@ private class FlxButtonEvent implements IFlxDestroyable sound.play(true); #end } -} \ No newline at end of file +} diff --git a/source/mobile/objects/Hitbox.hx b/source/mobile/objects/Hitbox.hx index 9d66e5dde..1267cd956 100644 --- a/source/mobile/objects/Hitbox.hx +++ b/source/mobile/objects/Hitbox.hx @@ -1,5 +1,6 @@ package mobile.objects; +import flixel.FlxSprite; import flixel.FlxG; import flixel.tweens.*; import flixel.util.FlxColor; @@ -8,6 +9,7 @@ import funkin.options.Options; import mobile.flixel.FlxButton; import openfl.display.BitmapData; import flixel.util.FlxDestroyUtil; +import openfl.geom.Matrix; /** * A zone with 4 hint's (A hitbox). @@ -17,9 +19,6 @@ import flixel.util.FlxDestroyUtil; */ class Hitbox extends FlxButtonGroup { - //final offsetFir:Int = (ClientPrefs.data.hitbox2 ? Std.int(FlxG.height / 4) * 3 : 0); - //final offsetSec:Int = (ClientPrefs.data.hitbox2 ? 0 : Std.int(FlxG.height / 4)); - public var buttonLeft:FlxButton = new FlxButton(0, 0); public var buttonDown:FlxButton = new FlxButton(0, 0); public var buttonUp:FlxButton = new FlxButton(0, 0); @@ -30,34 +29,14 @@ class Hitbox extends FlxButtonGroup /** * Create the zone. */ - public function new(/*extraMode:ExtraActions*/) + public function new() { super(); - //switch (extraMode) - //{ - // case NONE: - add(buttonLeft = createHint(0, 0, Std.int(FlxG.width / 4), FlxG.height, 0xFFC24B99)); - add(buttonDown = createHint(FlxG.width / 4, 0, Std.int(FlxG.width / 4), FlxG.height, 0xFF00FFFF)); - add(buttonUp = createHint(FlxG.width / 2, 0, Std.int(FlxG.width / 4), FlxG.height, 0xFF12FA05)); - add(buttonRight = createHint((FlxG.width / 2) + (FlxG.width / 4), 0, Std.int(FlxG.width / 4), FlxG.height, 0xFFF9393F)); - /* case SINGLE: - add(buttonLeft = createHint(0, offsetSec, Std.int(FlxG.width / 4), Std.int(FlxG.height / 4) * 3, 0xFFC24B99)); - add(buttonDown = createHint(FlxG.width / 4, offsetSec, Std.int(FlxG.width / 4), Std.int(FlxG.height / 4) * 3, 0xFF00FFFF)); - add(buttonUp = createHint(FlxG.width / 2, offsetSec, Std.int(FlxG.width / 4), Std.int(FlxG.height / 4) * 3, 0xFF12FA05)); - add(buttonRight = createHint((FlxG.width / 2) + (FlxG.width / 4), offsetSec, Std.int(FlxG.width / 4), Std.int(FlxG.height / 4) * 3, - 0xFFF9393F)); - add(buttonExtra = createHint(0, offsetFir, FlxG.width, Std.int(FlxG.height / 4), 0xFF0066FF)); - case DOUBLE: - add(buttonLeft = createHint(0, offsetSec, Std.int(FlxG.width / 4), Std.int(FlxG.height / 4) * 3, 0xFFC24B99)); - add(buttonDown = createHint(FlxG.width / 4, offsetSec, Std.int(FlxG.width / 4), Std.int(FlxG.height / 4) * 3, 0xFF00FFFF)); - add(buttonUp = createHint(FlxG.width / 2, offsetSec, Std.int(FlxG.width / 4), Std.int(FlxG.height / 4) * 3, 0xFF12FA05)); - add(buttonRight = createHint((FlxG.width / 2) + (FlxG.width / 4), offsetSec, Std.int(FlxG.width / 4), Std.int(FlxG.height / 4) * 3, - 0xFFF9393F)); - add(buttonExtra2 = createHint(Std.int(FlxG.width / 2), offsetFir, Std.int(FlxG.width / 2), Std.int(FlxG.height / 4), 0xA6FF00)); - add(buttonExtra = createHint(0, offsetFir, Std.int(FlxG.width / 2), Std.int(FlxG.height / 4), 0xFF0066FF)); - } - */ + add(buttonLeft = createHint(0, 0, Std.int(FlxG.width / 4), FlxG.height, 0xFFC24B99)); + add(buttonDown = createHint(FlxG.width / 4, 0, Std.int(FlxG.width / 4), FlxG.height, 0xFF00FFFF)); + add(buttonUp = createHint(FlxG.width / 2, 0, Std.int(FlxG.width / 4), FlxG.height, 0xFF12FA05)); + add(buttonRight = createHint((FlxG.width / 2) + (FlxG.width / 4), 0, Std.int(FlxG.width / 4), FlxG.height, 0xFFF9393F)); scrollFactor.set(); var guh = Options.controlsAlpha; if (guh >= 0.9) @@ -83,6 +62,7 @@ class Hitbox extends FlxButtonGroup private function createHint(X:Float, Y:Float, Width:Int, Height:Int, Color:Int = 0xFFFFFF):FlxButton { var hintTween:FlxTween = null; + var hintLaneTween:FlxTween = null; var hint = new FlxButton(X, Y); hint.loadGraphic(createHintGraphic(Width, Height)); hint.color = Color; @@ -93,46 +73,47 @@ class Hitbox extends FlxButtonGroup hint.scrollFactor.set(); hint.alpha = 0.00001; hint.antialiasing = Options.antialiasing; + hint.label = new FlxSprite(); + hint.labelStatusDiff = (Options.hitboxType != "hidden") ? Options.controlsAlpha : 0.00001; + hint.label.loadGraphic(createHintGraphic(Width, Math.floor(Height * 0.035), true)); + hint.label.offset.y -= (hint.height - hint.label.height); if (Options.hitboxType != 'hidden') { - var controlsAlpha = Options.hitboxType == 'gradient' ? Options.controlsAlpha : 0.25; // so it won't cover up your whole screen with a solid color hint.onDown.callback = function() { if (hintTween != null) hintTween.cancel(); - hintTween = FlxTween.tween(hint, {alpha: controlsAlpha}, controlsAlpha / 100, { + if (hintLaneTween != null) + hintLaneTween.cancel(); + + hintTween = FlxTween.tween(hint, {alpha: Options.controlsAlpha}, Options.controlsAlpha / 100, { ease: FlxEase.circInOut, - onComplete: function(twn:FlxTween) - { - hintTween = null; - } + onComplete: (twn:FlxTween) -> hintTween = null }); - } - hint.onUp.callback = function() - { - if (hintTween != null) - hintTween.cancel(); - hintTween = FlxTween.tween(hint, {alpha: 0.00001}, controlsAlpha / 10, { + hintLaneTween = FlxTween.tween(hint.label, {alpha: 0.00001}, Options.controlsAlpha / 10, { ease: FlxEase.circInOut, - onComplete: function(twn:FlxTween) - { - hintTween = null; - } + onComplete: (twn:FlxTween) -> hintTween = null }); } - hint.onOut.callback = function() + + hint.onOut.callback = hint.onUp.callback = function() { if (hintTween != null) hintTween.cancel(); - hintTween = FlxTween.tween(hint, {alpha: 0.00001}, controlsAlpha / 10, { + if (hintLaneTween != null) + hintLaneTween.cancel(); + + hintTween = FlxTween.tween(hint, {alpha: 0.00001}, Options.controlsAlpha / 10, { + ease: FlxEase.circInOut, + onComplete: (twn:FlxTween) -> hintTween = null + }); + + hintLaneTween = FlxTween.tween(hint.label, {alpha: Options.controlsAlpha}, Options.controlsAlpha / 100, { ease: FlxEase.circInOut, - onComplete: function(twn:FlxTween) - { - hintTween = null; - } + onComplete: (twn:FlxTween) -> hintTween = null }); } } @@ -142,26 +123,44 @@ class Hitbox extends FlxButtonGroup return hint; } - function createHintGraphic(Width:Int, Height:Int):BitmapData + function createHintGraphic(Width:Int, Height:Int, ?isLane:Bool = false):BitmapData { var guh = Options.controlsAlpha; if (guh >= 0.9) guh = Options.controlsAlpha - 0.07; var shape:Shape = new Shape(); shape.graphics.beginFill(0xFFFFFF); - if(Options.hitboxType == 'gradient'){ + if (Options.hitboxType == "noGradient") + { + var matrix:Matrix = new Matrix(); + matrix.createGradientBox(Width, Height, 0, 0, 0); + + if (isLane) + shape.graphics.beginFill(0xFFFFFF); + else + shape.graphics.beginGradientFill(RADIAL, [0xFFFFFF, 0xFFFFFF], [0, 1], [60, 255], matrix, PAD, RGB, 0); + shape.graphics.drawRect(0, 0, Width, Height); + shape.graphics.endFill(); + } + else if (Options.hitboxType == "noGradientOld") + { + shape.graphics.lineStyle(10, 0xFFFFFF, 1); + shape.graphics.drawRect(0, 0, Width, Height); + shape.graphics.endFill(); + } + else // if (Options.hitboxType == 'gradient') + { shape.graphics.lineStyle(3, 0xFFFFFF, 1); shape.graphics.drawRect(0, 0, Width, Height); shape.graphics.lineStyle(0, 0, 0); shape.graphics.drawRect(3, 3, Width - 6, Height - 6); shape.graphics.endFill(); - shape.graphics.beginGradientFill(RADIAL, [0xFFFFFF, FlxColor.TRANSPARENT], [guh, 0], [0, 255], null, null, null, 0.5); + if (isLane) + shape.graphics.beginFill(0xFFFFFF); + else + shape.graphics.beginGradientFill(RADIAL, [0xFFFFFF, FlxColor.TRANSPARENT], [1, 0], [0, 255], null, null, null, 0.5); shape.graphics.drawRect(3, 3, Width - 6, Height - 6); shape.graphics.endFill(); - } else { - shape.graphics.lineStyle(10, 0xFFFFFF, 1); - shape.graphics.drawRect(0, 0, Width, Height); - shape.graphics.endFill(); } var bitmap:BitmapData = new BitmapData(Width, Height, true, 0); bitmap.draw(shape); From 583022cb1864c7b0c924b8f83ef5d1590a8c4347 Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 20 Oct 2024 23:46:37 +0300 Subject: [PATCH 55/93] fix hitbox --- source/funkin/menus/MainMenuState.hx | 2 +- source/mobile/objects/Hitbox.hx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/source/funkin/menus/MainMenuState.hx b/source/funkin/menus/MainMenuState.hx index 62445f56f..af1ac2b6f 100644 --- a/source/funkin/menus/MainMenuState.hx +++ b/source/funkin/menus/MainMenuState.hx @@ -77,7 +77,7 @@ class MainMenuState extends MusicBeatState FlxG.camera.follow(camFollow, null, 0.06); var modsKey:String = controls.touchC ? "M" : controls.getKeyName(SWITCHMOD); - versionText = new FunkinText(5, FlxG.height - 2, 0, 'Codename Engine v${Application.current.meta.get('version')}\nCommit ${funkin.backend.system.macros.GitCommitMacro.commitNumber} (${funkin.backend.system.macros.GitCommitMacro.commitHash})\n[$modsKey}] Open Mods menu\n'); + versionText = new FunkinText(5, FlxG.height - 2, 0, 'Codename Engine v${Application.current.meta.get('version')}\nCommit ${funkin.backend.system.macros.GitCommitMacro.commitNumber} (${funkin.backend.system.macros.GitCommitMacro.commitHash})\n[$modsKey] Open Mods menu\n'); versionText.y -= versionText.height; versionText.scrollFactor.set(); add(versionText); diff --git a/source/mobile/objects/Hitbox.hx b/source/mobile/objects/Hitbox.hx index 1267cd956..2784e4a19 100644 --- a/source/mobile/objects/Hitbox.hx +++ b/source/mobile/objects/Hitbox.hx @@ -76,6 +76,7 @@ class Hitbox extends FlxButtonGroup hint.label = new FlxSprite(); hint.labelStatusDiff = (Options.hitboxType != "hidden") ? Options.controlsAlpha : 0.00001; hint.label.loadGraphic(createHintGraphic(Width, Math.floor(Height * 0.035), true)); + hint.label.color = Color; hint.label.offset.y -= (hint.height - hint.label.height); if (Options.hitboxType != 'hidden') { From 04a5aba2cca2952be9f33c0946d10701f0f00aff Mon Sep 17 00:00:00 2001 From: Lily Date: Tue, 29 Oct 2024 20:00:05 +0300 Subject: [PATCH 56/93] no idea? --- source/funkin/backend/shaders/FunkinShader.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/funkin/backend/shaders/FunkinShader.hx b/source/funkin/backend/shaders/FunkinShader.hx index 720a117d5..168e5ea00 100644 --- a/source/funkin/backend/shaders/FunkinShader.hx +++ b/source/funkin/backend/shaders/FunkinShader.hx @@ -25,7 +25,7 @@ import openfl.display.ShaderInput; class FunkinShader extends FlxShader implements IHScriptCustomBehaviour { private static var __instanceFields = Type.getInstanceFields(FunkinShader); - public var glslVer:String = #if lime_opengles "300 es" #else "120" #end; + public var glslVer:String = #if lime_opengles "100" #else "120" #end; /** * Creates a new shader from the specified fragment and vertex source. @@ -34,7 +34,7 @@ class FunkinShader extends FlxShader implements IHScriptCustomBehaviour { * @param vert Vertex source (pass `null` to use default) * @param glslVer Version of GLSL to use (defaults to 120 at OpenGL, 300 es at OpenGL ES) */ - public override function new(frag:String, vert:String, glslVer:String = #if lime_opengles "300 es" #else "120" #end) { + public override function new(frag:String, vert:String, glslVer:String = #if lime_opengles "100" #else "120" #end) { if (frag == null) frag = ShaderTemplates.defaultFragmentSource; if (vert == null) vert = ShaderTemplates.defaultVertexSource; this.glFragmentSource = frag; From 4f9dfbc28c836ee64f8f06c4a28f6aeb3e4ce0e3 Mon Sep 17 00:00:00 2001 From: Lily Date: Wed, 30 Oct 2024 21:57:53 +0300 Subject: [PATCH 57/93] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8ada852e0..e4428db52 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,8 @@ Also, the command `.\cne test` uses the source assets folder instead of the expo ## Codename Engine Codename Engine is a new Friday Night Funkin' Engine aimed at simplifying modding, along with extensiblity and ease of use.
-Make sure to read the wiki and join the Discord server linked there!
-#### It includes many new features, as seen [here](FEATURES.md)
+### Before making issues or need help with something, check our website [HERE](https://fnf-cne-devs.github.io/) (it contains a wiki of how to mod with EXAMPLES, an api, lists of mods made with Codename Engine and more)!!! +#### The Engine includes many new features, as seen [here](FEATURES.md)
#### Wanna see the new features added in the most recent update? Click [here](PATCHNOTES.md)
## How to download @@ -94,4 +94,4 @@ In the future (when the engine won't be a WIP anymore) we're gonna also publish - Credits to [Lily](ttps://youtube.com/@mcagabe19) to porting the engine - Credits to [Karim Akra](https://youtube.com/@Karim0690) to helping me to port the engine - Credits to [MAJigsaw77](https://github.com/MAJigsaw77) for mobile controls - \ No newline at end of file + From 49457f5752f22e9b71d4dd551299cde2dc1800e4 Mon Sep 17 00:00:00 2001 From: Lily Date: Sun, 3 Nov 2024 16:03:40 +0300 Subject: [PATCH 58/93] Update MemoryUtil.hx --- source/funkin/backend/utils/MemoryUtil.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/funkin/backend/utils/MemoryUtil.hx b/source/funkin/backend/utils/MemoryUtil.hx index 5a1828239..02f6c59cc 100644 --- a/source/funkin/backend/utils/MemoryUtil.hx +++ b/source/funkin/backend/utils/MemoryUtil.hx @@ -143,7 +143,7 @@ class MemoryUtil { if (line.indexOf("Type:") == 0) { return line.substring("Type:".length).trim(); } - } + }*/ // TODO: sort of unsafe? also requires users to use `sudo` // when launching the engine through the CLI, REIMPLEMENT LATER. #end @@ -170,4 +170,4 @@ class MemoryUtil { // Gc.exitGCFreeZone(); #end } -} \ No newline at end of file +} From b1ebcbef309bef9b7e504799dcb258e23b3a941b Mon Sep 17 00:00:00 2001 From: Lily Date: Thu, 14 Nov 2024 15:15:49 +0300 Subject: [PATCH 59/93] only enable editors when keyboard and mouse is attached --- source/funkin/editors/SaveSubstate.hx | 8 +- .../editors/charter/CharterSelection.hx | 84 +++++++++++-------- .../mobile/funkin/backend/system/CopyState.hx | 2 +- .../mobile/funkin/backend/utils/MobileUtil.hx | 19 +++++ 4 files changed, 72 insertions(+), 41 deletions(-) diff --git a/source/funkin/editors/SaveSubstate.hx b/source/funkin/editors/SaveSubstate.hx index bf9ae8c4f..694909ae4 100644 --- a/source/funkin/editors/SaveSubstate.hx +++ b/source/funkin/editors/SaveSubstate.hx @@ -26,10 +26,10 @@ class SaveSubstate extends MusicBeatSubstate { public override function create() { super.create(); - /*#if mobile - MobileUtil.saveContent(options.defaultSaveFile.replace(options.saveExt, ''), options.saveExt, data); + #if mobile + MobileUtil.saveContent(options.saveExt, data); close(); - #else*/ + #else var fileDialog = new FileDialog(); fileDialog.onCancel.add(function() close()); fileDialog.onSelect.add(function(str) { @@ -37,7 +37,7 @@ class SaveSubstate extends MusicBeatSubstate { close(); }); fileDialog.browse(SAVE, options.saveExt.getDefault(Path.extension(options.defaultSaveFile)), options.defaultSaveFile); - //#end + #end } public override function update(elapsed:Float) { diff --git a/source/funkin/editors/charter/CharterSelection.hx b/source/funkin/editors/charter/CharterSelection.hx index e92e7711b..8c5905ee0 100644 --- a/source/funkin/editors/charter/CharterSelection.hx +++ b/source/funkin/editors/charter/CharterSelection.hx @@ -32,36 +32,42 @@ class CharterSelection extends EditorTreeMenu { var list:Array = [ for(d in s.difficulties) if (d != "") new TextOption(d, "Press " + button + " to edit the chart for the selected difficulty", function() { - #if mobile - openSubState(new UIWarningSubstate("Charter: Not Supported!", "This feature isn't supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Codename Devs", [ - {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} - ])); - #else - FlxG.switchState(new Charter(s.name, d)); + #if TOUCH_CONTROLS + if (FlxG.gamepads.numActiveGamepads == 0) + { + openSubState(new UIWarningSubstate("Charter: Touch Not Supported!", "Please connect a keyboard and mouse to access this editor.", [ + {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} + ])); + } else #end + FlxG.switchState(new Charter(s.name, d)); }) ]; list.push(new NewOption("New Difficulty", "New Difficulty", function() { - #if mobile - openSubState(new UIWarningSubstate("New Difficulty: Not Supported!", "This feature isn't supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Codename Devs", [ - {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} - ])); - #else - FlxG.state.openSubState(new ChartCreationScreen(saveChart)); + #if TOUCH_CONTROLS + if (FlxG.gamepads.numActiveGamepads == 0) + { + openSubState(new UIWarningSubstate("New Difficulty: Touch Not Supported!", "Please connect a keyboard and mouse to access this editor.", [ + {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} + ])); + } else #end + FlxG.state.openSubState(new ChartCreationScreen(saveChart)); })); optionsTree.add(new OptionsScreen(s.name, "Select a difficulty to continue.", list, 'UP_DOWN', 'A_B')); }, s.parsedColor.getDefault(0xFFFFFFFF)) ]; list.insert(0, new NewOption("New Song", "New Song", function() { - #if mobile - openSubState(new UIWarningSubstate("New Song: Not Supported!", "This feature isn't supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Codename Devs", [ - {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} - ])); - #else - FlxG.state.openSubState(new SongCreationScreen(saveSong)); + #if TOUCH_CONTROLS + if (FlxG.gamepads.numActiveGamepads == 0) + { + openSubState(new UIWarningSubstate("New Song: Touch Not Supported!", "Please connect a keyboard and mouse to access this editor.", [ + {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} + ])); + } else #end + FlxG.state.openSubState(new SongCreationScreen(saveSong)); })); main = new OptionsScreen("Chart Editor", "Select a song to modify the charts from.", list, 'UP_DOWN', 'A_B'); @@ -138,23 +144,27 @@ class CharterSelection extends EditorTreeMenu { var list:Array = [ for(d in creation.meta.difficulties) if (d != "") new TextOption(d, "Press " + button + " to edit the chart for the selected difficulty", function() { - #if mobile - openSubState(new UIWarningSubstate("Charter: Not Supported!", "This feature isn't supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Codename Devs", [ - {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} - ])); - #else - FlxG.switchState(new Charter(creation.meta.name, d)); + #if TOUCH_CONTROLS + if (FlxG.gamepads.numActiveGamepads == 0) + { + openSubState(new UIWarningSubstate("Charter: Touch Not Supported!", "Please connect a keyboard and mouse to access this editor.", [ + {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} + ])); + } else #end + FlxG.switchState(new Charter(creation.meta.name, d)); }) ]; list.push(new NewOption("New Difficulty", "New Difficulty", function() { - #if mobile - openSubState(new UIWarningSubstate("New Difficulty: Not Supported!", "This feature isn't supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Codename Devs", [ - {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} - ])); - #else - FlxG.state.openSubState(new ChartCreationScreen(saveChart)); + #if TOUCH_CONTROLS + if (FlxG.gamepads.numActiveGamepads == 0) + { + openSubState(new UIWarningSubstate("New Difficulty: Touch Not Supported!", "Please connect a keyboard and mouse to access this editor.", [ + {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} + ])); + } else #end + FlxG.state.openSubState(new ChartCreationScreen(saveChart)); })); optionsTree.insert(1, new OptionsScreen(creation.meta.name, "Select a difficulty to continue.", list)); }, creation.meta.parsedColor.getDefault(0xFFFFFFFF)); @@ -183,13 +193,15 @@ class CharterSelection extends EditorTreeMenu { // Add to List curSong.difficulties.push(name); var option = new TextOption(name, "Press " + button + " to edit the chart for the selected difficulty", function() { - #if mobile - openSubState(new UIWarningSubstate("Charter: Not Supported!", "This feature isn't supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Codename Devs", [ - {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} - ])); - #else - FlxG.switchState(new Charter(curSong.name, name)); + #if TOUCH_CONTROLS + if (FlxG.gamepads.numActiveGamepads == 0) + { + openSubState(new UIWarningSubstate("Charter: Touch Not Supported!", "Please connect a keyboard and mouse to access this editor.", [ + {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} + ])); + } else #end + FlxG.switchState(new Charter(curSong.name, name)); }); optionsTree.members[optionsTree.members.length-1].insert(optionsTree.members[optionsTree.members.length-1].length-1, option); diff --git a/source/mobile/funkin/backend/system/CopyState.hx b/source/mobile/funkin/backend/system/CopyState.hx index 62514192e..267908f50 100644 --- a/source/mobile/funkin/backend/system/CopyState.hx +++ b/source/mobile/funkin/backend/system/CopyState.hx @@ -98,7 +98,7 @@ class CopyState extends funkin.backend.MusicBeatState { if (failedFiles.length > 0) { - NativeAPI.showMessageBox('Failed To Copy ${failedFiles.length} File.', failedFiles.join('\n')); + NativeAPI.showMessageBox('Failed To Copy ${failedFiles.length} File.', failedFiles.join('\n'), MSG_ERROR); if (!FileSystem.exists('logs')) FileSystem.createDirectory('logs'); File.saveContent('logs/' + Date.now().toString().replace(' ', '-').replace(':', "'") + '-CopyState' + '.txt', failedFilesStack.join('\n')); diff --git a/source/mobile/funkin/backend/utils/MobileUtil.hx b/source/mobile/funkin/backend/utils/MobileUtil.hx index 366822962..68bb4302f 100644 --- a/source/mobile/funkin/backend/utils/MobileUtil.hx +++ b/source/mobile/funkin/backend/utils/MobileUtil.hx @@ -43,6 +43,25 @@ class MobileUtil return daPath; } + public static function saveContent(fileName:String, fileData:String, ?alert:Bool = true):Void + { + try + { + if (!FileSystem.exists('saves')) + FileSystem.createDirectory('saves'); + + File.saveContent('saves/$fileName', fileData); + if (alert) + NativeAPI.showMessageBox("Success!", '$fileName has been saved.', MSG_INFORMATION); + } + catch (e:haxe.Exception) + if (alert) + NativeAPI.showMessageBox("Error!", '$fileName couldn\'t be saved.\n(${e.message})', MSG_ERROR); + else + trace('$fileName couldn\'t be saved. (${e.message})'); + } + + #if android public static function requestPermissionsFromUser():Void { From 146bd258ac4e131558a0405cd30b302924ddaae2 Mon Sep 17 00:00:00 2001 From: Lily Date: Thu, 14 Nov 2024 17:21:38 +0300 Subject: [PATCH 60/93] fixes --- source/funkin/backend/utils/NativeAPI.hx | 2 -- source/funkin/editors/SaveSubstate.hx | 2 +- .../funkin/editors/character/CharacterSelection.hx | 14 ++++++++------ source/funkin/editors/charter/CharterSelection.hx | 12 ++++++------ 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/source/funkin/backend/utils/NativeAPI.hx b/source/funkin/backend/utils/NativeAPI.hx index d5fabb52b..42cf23993 100644 --- a/source/funkin/backend/utils/NativeAPI.hx +++ b/source/funkin/backend/utils/NativeAPI.hx @@ -96,8 +96,6 @@ class NativeAPI { public static function showMessageBox(caption:String, message:String, icon:MessageBoxIcon = MSG_WARNING) { #if windows Windows.showMessageBox(caption, message, icon); - #elseif (ios || iphonesim || web) - trace('$caption - $message'); #elseif android android.Tools.showAlertDialog(caption, message, {name: "OK", func: null}, null); #else diff --git a/source/funkin/editors/SaveSubstate.hx b/source/funkin/editors/SaveSubstate.hx index 694909ae4..41f835112 100644 --- a/source/funkin/editors/SaveSubstate.hx +++ b/source/funkin/editors/SaveSubstate.hx @@ -27,7 +27,7 @@ class SaveSubstate extends MusicBeatSubstate { super.create(); #if mobile - MobileUtil.saveContent(options.saveExt, data); + MobileUtil.saveContent(options.defaultSaveFile + options.saveExt.getDefault(Path.extension(options.defaultSaveFile)), data); close(); #else var fileDialog = new FileDialog(); diff --git a/source/funkin/editors/character/CharacterSelection.hx b/source/funkin/editors/character/CharacterSelection.hx index a77eec466..51bd16315 100644 --- a/source/funkin/editors/character/CharacterSelection.hx +++ b/source/funkin/editors/character/CharacterSelection.hx @@ -24,13 +24,15 @@ class CharacterSelection extends EditorTreeMenu for (char in (modsList.length == 0 ? Character.getList(false) : modsList)) new IconOption(char, "Press " + button + " to edit this character.", Character.getIconFromCharName(char), function() { - #if mobile - openSubState(new UIWarningSubstate("CharacterEditor: Not Supported!", "This feature isn't supported on current platform. We are sorry but you need a PC to do that.\n\n\n- Codename Devs", [ - {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} - ])); - #else - FlxG.switchState(new CharacterEditor(char)); + #if TOUCH_CONTROLS + if (funkin.backend.system.Controls.instance.touchC) + { + openSubState(new UIWarningSubstate("CharacterEditor: Touch Not Supported!", "Please connect a keyboard and mouse to access this editor.", [ + {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} + ])); + } else #end + FlxG.switchState(new CharacterEditor(char)); }) ]; diff --git a/source/funkin/editors/charter/CharterSelection.hx b/source/funkin/editors/charter/CharterSelection.hx index 8c5905ee0..414d484ec 100644 --- a/source/funkin/editors/charter/CharterSelection.hx +++ b/source/funkin/editors/charter/CharterSelection.hx @@ -33,7 +33,7 @@ class CharterSelection extends EditorTreeMenu { for(d in s.difficulties) if (d != "") new TextOption(d, "Press " + button + " to edit the chart for the selected difficulty", function() { #if TOUCH_CONTROLS - if (FlxG.gamepads.numActiveGamepads == 0) + if (funkin.backend.system.Controls.instance.touchC) { openSubState(new UIWarningSubstate("Charter: Touch Not Supported!", "Please connect a keyboard and mouse to access this editor.", [ {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} @@ -45,7 +45,7 @@ class CharterSelection extends EditorTreeMenu { ]; list.push(new NewOption("New Difficulty", "New Difficulty", function() { #if TOUCH_CONTROLS - if (FlxG.gamepads.numActiveGamepads == 0) + if (funkin.backend.system.Controls.instance.touchC) { openSubState(new UIWarningSubstate("New Difficulty: Touch Not Supported!", "Please connect a keyboard and mouse to access this editor.", [ {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} @@ -60,7 +60,7 @@ class CharterSelection extends EditorTreeMenu { list.insert(0, new NewOption("New Song", "New Song", function() { #if TOUCH_CONTROLS - if (FlxG.gamepads.numActiveGamepads == 0) + if (funkin.backend.system.Controls.instance.touchC) { openSubState(new UIWarningSubstate("New Song: Touch Not Supported!", "Please connect a keyboard and mouse to access this editor.", [ {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} @@ -145,7 +145,7 @@ class CharterSelection extends EditorTreeMenu { for(d in creation.meta.difficulties) if (d != "") new TextOption(d, "Press " + button + " to edit the chart for the selected difficulty", function() { #if TOUCH_CONTROLS - if (FlxG.gamepads.numActiveGamepads == 0) + if (funkin.backend.system.Controls.instance.touchC) { openSubState(new UIWarningSubstate("Charter: Touch Not Supported!", "Please connect a keyboard and mouse to access this editor.", [ {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} @@ -157,7 +157,7 @@ class CharterSelection extends EditorTreeMenu { ]; list.push(new NewOption("New Difficulty", "New Difficulty", function() { #if TOUCH_CONTROLS - if (FlxG.gamepads.numActiveGamepads == 0) + if (funkin.backend.system.Controls.instance.touchC) { openSubState(new UIWarningSubstate("New Difficulty: Touch Not Supported!", "Please connect a keyboard and mouse to access this editor.", [ {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} @@ -194,7 +194,7 @@ class CharterSelection extends EditorTreeMenu { curSong.difficulties.push(name); var option = new TextOption(name, "Press " + button + " to edit the chart for the selected difficulty", function() { #if TOUCH_CONTROLS - if (FlxG.gamepads.numActiveGamepads == 0) + if (funkin.backend.system.Controls.instance.touchC) { openSubState(new UIWarningSubstate("Charter: Touch Not Supported!", "Please connect a keyboard and mouse to access this editor.", [ {label: "Ok", color: 0xFFFF0000, onClick: function(t) {}} From 3f988ddf8eff6e9b2cfbba0167bae0babb2f8e3c Mon Sep 17 00:00:00 2001 From: Lily Date: Thu, 14 Nov 2024 17:24:07 +0300 Subject: [PATCH 61/93] umm alright --- source/funkin/editors/SaveSubstate.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/funkin/editors/SaveSubstate.hx b/source/funkin/editors/SaveSubstate.hx index 41f835112..cf0950bfc 100644 --- a/source/funkin/editors/SaveSubstate.hx +++ b/source/funkin/editors/SaveSubstate.hx @@ -27,7 +27,7 @@ class SaveSubstate extends MusicBeatSubstate { super.create(); #if mobile - MobileUtil.saveContent(options.defaultSaveFile + options.saveExt.getDefault(Path.extension(options.defaultSaveFile)), data); + MobileUtil.saveContent(options.defaultSaveFile, data); close(); #else var fileDialog = new FileDialog(); From fb2fe82e00eacbae0961a989f62221c325589ac2 Mon Sep 17 00:00:00 2001 From: Lily Date: Thu, 14 Nov 2024 18:36:07 +0300 Subject: [PATCH 62/93] starting to license our classes --- source/mobile/funkin/backend/CNEJNI.hx | 65 ----------- .../mobile/funkin/backend/TouchFunctions.hx | 73 ------------ source/mobile/funkin/backend/TouchUtil.hx | 109 ++++++++++++++++++ .../mobile/funkin/backend/system/CopyState.hx | 17 +++ .../backend/system/MobileRatioScaleMode.hx | 21 ++++ .../mobile/funkin/backend/utils/MobileUtil.hx | 19 ++- 6 files changed, 165 insertions(+), 139 deletions(-) delete mode 100644 source/mobile/funkin/backend/CNEJNI.hx delete mode 100644 source/mobile/funkin/backend/TouchFunctions.hx create mode 100644 source/mobile/funkin/backend/TouchUtil.hx diff --git a/source/mobile/funkin/backend/CNEJNI.hx b/source/mobile/funkin/backend/CNEJNI.hx deleted file mode 100644 index 99a7141bf..000000000 --- a/source/mobile/funkin/backend/CNEJNI.hx +++ /dev/null @@ -1,65 +0,0 @@ -// fully stolen from PsychJNI bleh -package mobile.backend; - -/** - * ... - * @author Lily Ross (mcagabe19) - */ -#if android -import lime.system.JNI; - -class CNEJNI #if (lime >= "8.0.0") implements JNISafety #end -{ - public static final SDL_ORIENTATION_UNKNOWN:Int = 0; - public static final SDL_ORIENTATION_LANDSCAPE:Int = 1; - public static final SDL_ORIENTATION_LANDSCAPE_FLIPPED:Int = 2; - public static final SDL_ORIENTATION_PORTRAIT:Int = 3; - public static final SDL_ORIENTATION_PORTRAIT_FLIPPED:Int = 4; - - public static inline function setOrientation(width:Int, height:Int, resizeable:Bool, hint:String):Dynamic - return setOrientation_jni(width, height, resizeable, hint); - - public static inline function getCurrentOrientationAsString():String - { - return switch (getCurrentOrientation_jni()) - { - case SDL_ORIENTATION_PORTRAIT: "Portrait"; - case SDL_ORIENTATION_LANDSCAPE: "LandscapeRight"; - case SDL_ORIENTATION_PORTRAIT_FLIPPED: "PortraitUpsideDown"; - case SDL_ORIENTATION_LANDSCAPE_FLIPPED: "LandscapeLeft"; - default: "Unknown"; - } - } - - public static inline function isScreenKeyboardShown():Dynamic - return isScreenKeyboardShown_jni(); - - public static inline function clipboardHasText():Dynamic - return clipboardHasText_jni(); - - public static inline function clipboardGetText():Dynamic - return clipboardGetText_jni(); - - public static inline function clipboardSetText(string:String):Dynamic - return clipboardSetText_jni(string); - - public static inline function manualBackButton():Dynamic - return manualBackButton_jni(); - - public static inline function setActivityTitle(title:String):Dynamic - return setActivityTitle_jni(title); - - @:noCompletion private static var setOrientation_jni:Dynamic = JNI.createStaticMethod('org/libsdl/app/SDLActivity', 'setOrientation', - '(IIZLjava/lang/String;)V'); - @:noCompletion private static var getCurrentOrientation_jni:Dynamic = JNI.createStaticMethod('org/libsdl/app/SDLActivity', 'getCurrentOrientation', '()I'); - @:noCompletion private static var isScreenKeyboardShown_jni:Dynamic = JNI.createStaticMethod('org/libsdl/app/SDLActivity', 'isScreenKeyboardShown', '()Z'); - @:noCompletion private static var clipboardHasText_jni:Dynamic = JNI.createStaticMethod('org/libsdl/app/SDLActivity', 'clipboardHasText', '()Z'); - @:noCompletion private static var clipboardGetText_jni:Dynamic = JNI.createStaticMethod('org/libsdl/app/SDLActivity', 'clipboardGetText', - '()Ljava/lang/String;'); - @:noCompletion private static var clipboardSetText_jni:Dynamic = JNI.createStaticMethod('org/libsdl/app/SDLActivity', 'clipboardSetText', - '(Ljava/lang/String;)V'); - @:noCompletion private static var manualBackButton_jni:Dynamic = JNI.createStaticMethod('org/libsdl/app/SDLActivity', 'manualBackButton', '()V'); - @:noCompletion private static var setActivityTitle_jni:Dynamic = JNI.createStaticMethod('org/libsdl/app/SDLActivity', 'setActivityTitle', - '(Ljava/lang/String;)Z'); -} -#end diff --git a/source/mobile/funkin/backend/TouchFunctions.hx b/source/mobile/funkin/backend/TouchFunctions.hx deleted file mode 100644 index bde52dd6f..000000000 --- a/source/mobile/funkin/backend/TouchFunctions.hx +++ /dev/null @@ -1,73 +0,0 @@ -package mobile.funkin.backend; - -import flixel.FlxG; -import flixel.FlxBasic; -import flixel.FlxObject; -import flixel.FlxCamera; -import flixel.input.touch.FlxTouch; - -class TouchFunctions -{ - public static var touchPressed(get, never):Bool; - public static var touchJustPressed(get, never):Bool; - public static var touchJustReleased(get, never):Bool; - public static var touch(get, never):FlxTouch; - - public static function touchOverlapObject(object:FlxBasic, camera:FlxCamera):Bool - { - for (touch in FlxG.touches.list) - if (touch.overlaps(object, camera)) - return true; - return false; - } - - public static function touchOverlapObjectComplex(object:FlxObject):Bool - { - var overlap = false; - for (camera in object.cameras) - { - for (touch in FlxG.touches.list) - { - @:privateAccess - if (object.overlapsPoint(touch.getWorldPosition(camera, object._point), true, camera)) - overlap = true; - } - } - return overlap; - } - - @:noCompletion - private static function get_touchPressed():Bool - { - for (touch in FlxG.touches.list) - if (touch.pressed) - return true; - return false; - } - - @:noCompletion - private static function get_touchJustPressed():Bool - { - for (touch in FlxG.touches.list) - if (touch.justPressed) - return true; - return false; - } - - @:noCompletion - private static function get_touchJustReleased():Bool - { - for (touch in FlxG.touches.list) - if (touch.justReleased) - return true; - return false; - } - - @:noCompletion - private static function get_touch():FlxTouch - { - for (touch in FlxG.touches.list) - return touch; - return FlxG.touches.list[0]; - } -} diff --git a/source/mobile/funkin/backend/TouchUtil.hx b/source/mobile/funkin/backend/TouchUtil.hx new file mode 100644 index 000000000..48661861e --- /dev/null +++ b/source/mobile/funkin/backend/TouchUtil.hx @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2024 Mobile Porting Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package mobile.funkin.backend; + +import flixel.FlxObject; +import flixel.input.touch.FlxTouch; + +/** + * ... + * @author: Karim Akra + */ +class TouchUtil +{ + public static var pressed(get, never):Bool; + public static var justPressed(get, never):Bool; + public static var justReleased(get, never):Bool; + public static var released(get, never):Bool; + public static var touch(get, never):FlxTouch; + + public static function overlaps(object:FlxObject, ?camera:FlxCamera):Bool + { + for (touch in FlxG.touches.list) + if (touch.overlaps(object, camera ?? object.camera)) + return true; + + return false; + } + + public static function overlapsComplex(object:FlxObject, ?camera:FlxCamera):Bool + { + if (camera == null) + for (camera in object.cameras) + for (touch in FlxG.touches.list) + @:privateAccess + if (object.overlapsPoint(touch.getWorldPosition(camera, object._point), true, camera)) + return true; + else + @:privateAccess + if (object.overlapsPoint(touch.getWorldPosition(camera, object._point), true, camera)) + return true; + + return false; + } + + @:noCompletion + private static function get_pressed():Bool + { + for (touch in FlxG.touches.list) + if (touch.pressed) + return true; + + return false; + } + + @:noCompletion + private static function get_justPressed():Bool + { + for (touch in FlxG.touches.list) + if (touch.justPressed) + return true; + + return false; + } + + @:noCompletion + private static function get_justReleased():Bool + { + for (touch in FlxG.touches.list) + if (touch.justReleased) + return true; + + return false; + } + + @:noCompletion + private static function get_released():Bool + { + for (touch in FlxG.touches.list) + if (touch.released) + return true; + + return false; + } + + @:noCompletion + private static function get_touch():FlxTouch + { + for (touch in FlxG.touches.list) + if (touch != null) + return touch; + + return FlxG.touches.getFirst(); + } +} \ No newline at end of file diff --git a/source/mobile/funkin/backend/system/CopyState.hx b/source/mobile/funkin/backend/system/CopyState.hx index 267908f50..73a87afe1 100644 --- a/source/mobile/funkin/backend/system/CopyState.hx +++ b/source/mobile/funkin/backend/system/CopyState.hx @@ -1,3 +1,20 @@ +/* + * Copyright (C) 2024 Mobile Porting Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package mobile.funkin.backend.system; #if mobile diff --git a/source/mobile/funkin/backend/system/MobileRatioScaleMode.hx b/source/mobile/funkin/backend/system/MobileRatioScaleMode.hx index b5fe45a42..18a296fcb 100644 --- a/source/mobile/funkin/backend/system/MobileRatioScaleMode.hx +++ b/source/mobile/funkin/backend/system/MobileRatioScaleMode.hx @@ -1,8 +1,29 @@ +/* + * Copyright (C) 2024 Mobile Porting Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package mobile.funkin.backend.system; import flixel.FlxG; import flixel.system.scaleModes.BaseScaleMode; +/** + * ... + * @author: Karim Akra + */ class MobileRatioScaleMode extends BaseScaleMode { public static var allowWideScreen(default, set):Bool = true; diff --git a/source/mobile/funkin/backend/utils/MobileUtil.hx b/source/mobile/funkin/backend/utils/MobileUtil.hx index 68bb4302f..7f9204f14 100644 --- a/source/mobile/funkin/backend/utils/MobileUtil.hx +++ b/source/mobile/funkin/backend/utils/MobileUtil.hx @@ -1,3 +1,20 @@ +/* + * Copyright (C) 2024 Mobile Porting Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package mobile.funkin.backend.utils; #if android @@ -19,7 +36,7 @@ using StringTools; /** * A storage class for mobile. - * @author Mihai Alexandru (M.A. Jigsaw) & Lily Ross (mcagabe19) + * @author Lily Ross (mcagabe19) */ class MobileUtil { From 35a01567bcde788159eae8fe7669f336b6e92d3f Mon Sep 17 00:00:00 2001 From: Lily Date: Thu, 14 Nov 2024 18:36:50 +0300 Subject: [PATCH 63/93] o --- source/mobile/funkin/backend/{ => utils}/TouchUtil.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename source/mobile/funkin/backend/{ => utils}/TouchUtil.hx (98%) diff --git a/source/mobile/funkin/backend/TouchUtil.hx b/source/mobile/funkin/backend/utils/TouchUtil.hx similarity index 98% rename from source/mobile/funkin/backend/TouchUtil.hx rename to source/mobile/funkin/backend/utils/TouchUtil.hx index 48661861e..75cb91790 100644 --- a/source/mobile/funkin/backend/TouchUtil.hx +++ b/source/mobile/funkin/backend/utils/TouchUtil.hx @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package mobile.funkin.backend; +package mobile.funkin.backend.utils; import flixel.FlxObject; import flixel.input.touch.FlxTouch; From 289fb2eb2088c468ba287cfeb8b42fa1d577a5ea Mon Sep 17 00:00:00 2001 From: Lily Date: Thu, 14 Nov 2024 18:41:27 +0300 Subject: [PATCH 64/93] gonna use MIT, GPLv3 is brutal --- .../mobile/funkin/backend/system/CopyState.hx | 25 +++++++++++-------- .../backend/system/MobileRatioScaleMode.hx | 25 +++++++++++-------- .../mobile/funkin/backend/utils/MobileUtil.hx | 25 +++++++++++-------- .../mobile/funkin/backend/utils/TouchUtil.hx | 25 +++++++++++-------- 4 files changed, 60 insertions(+), 40 deletions(-) diff --git a/source/mobile/funkin/backend/system/CopyState.hx b/source/mobile/funkin/backend/system/CopyState.hx index 73a87afe1..b3927073f 100644 --- a/source/mobile/funkin/backend/system/CopyState.hx +++ b/source/mobile/funkin/backend/system/CopyState.hx @@ -1,18 +1,23 @@ /* * Copyright (C) 2024 Mobile Porting Team * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. */ package mobile.funkin.backend.system; diff --git a/source/mobile/funkin/backend/system/MobileRatioScaleMode.hx b/source/mobile/funkin/backend/system/MobileRatioScaleMode.hx index 18a296fcb..318c64cde 100644 --- a/source/mobile/funkin/backend/system/MobileRatioScaleMode.hx +++ b/source/mobile/funkin/backend/system/MobileRatioScaleMode.hx @@ -1,18 +1,23 @@ /* * Copyright (C) 2024 Mobile Porting Team * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. */ package mobile.funkin.backend.system; diff --git a/source/mobile/funkin/backend/utils/MobileUtil.hx b/source/mobile/funkin/backend/utils/MobileUtil.hx index 7f9204f14..ff8332e7a 100644 --- a/source/mobile/funkin/backend/utils/MobileUtil.hx +++ b/source/mobile/funkin/backend/utils/MobileUtil.hx @@ -1,18 +1,23 @@ /* * Copyright (C) 2024 Mobile Porting Team * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. */ package mobile.funkin.backend.utils; diff --git a/source/mobile/funkin/backend/utils/TouchUtil.hx b/source/mobile/funkin/backend/utils/TouchUtil.hx index 75cb91790..1a27a5797 100644 --- a/source/mobile/funkin/backend/utils/TouchUtil.hx +++ b/source/mobile/funkin/backend/utils/TouchUtil.hx @@ -1,18 +1,23 @@ /* * Copyright (C) 2024 Mobile Porting Team * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. */ package mobile.funkin.backend.utils; From a457506d3a45fb6aa90ef869799b741bb3f117b2 Mon Sep 17 00:00:00 2001 From: Lily Date: Thu, 21 Nov 2024 21:14:19 +0300 Subject: [PATCH 65/93] Update android.yml --- .github/workflows/android.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index ee7cfdf01..3323986e2 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -6,7 +6,7 @@ jobs: build: name: Android Build permissions: write-all - runs-on: ubuntu-latest + runs-on: macos-latest steps: - name: Pulling the new commit uses: actions/checkout@v2 @@ -25,7 +25,6 @@ jobs: # not caching the bin folder to prevent asset duplication and stuff like that key: cache-build-android path: | - ~/.gradle .haxelib/ export/release/android/haxe/ export/release/android/obj/ @@ -46,7 +45,7 @@ jobs: run: | haxelib run lime config ANDROID_SDK $ANDROID_HOME haxelib run lime config ANDROID_NDK_ROOT ${{ steps.setup-ndk.outputs.ndk-path }} - haxelib run lime config JAVA_HOME $JAVA_HOME_17_X64 + haxelib run lime config JAVA_HOME $JAVA_HOME_17_arm64 haxelib run lime config ANDROID_SETUP true - name: Rebuilding lime (android) run: haxelib run lime rebuild android -release -clean @@ -84,7 +83,6 @@ jobs: # caching again since for some reason it doesnt work with the first post cache shit key: cache-build-android path: | - ~/.gradle .haxelib/ export/release/android/haxe/ export/release/android/obj/ From 4e7655bd82fa7b90cd4eb26d8b7d8a5ace5fba7a Mon Sep 17 00:00:00 2001 From: Lily Date: Thu, 21 Nov 2024 21:15:17 +0300 Subject: [PATCH 66/93] bs --- .github/workflows/android.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 3323986e2..3ab41da56 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -13,7 +13,7 @@ jobs: - name: Setup Haxe uses: krdlab/setup-haxe@v1 with: - haxe-version: 4.2.5 + haxe-version: 4.3.5 - name: Install Android NDK uses: nttld/setup-ndk@v1 id: setup-ndk From 59998fe3a63fe910bdf4089d51acb90d6d5f0c5d Mon Sep 17 00:00:00 2001 From: Lily Date: Thu, 21 Nov 2024 21:16:12 +0300 Subject: [PATCH 67/93] Update android.yml --- .github/workflows/android.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 3ab41da56..16ca073b3 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -11,7 +11,7 @@ jobs: - name: Pulling the new commit uses: actions/checkout@v2 - name: Setup Haxe - uses: krdlab/setup-haxe@v1 + uses: krdlab/setup-haxe@master with: haxe-version: 4.3.5 - name: Install Android NDK From e09da42d4a67251a678e4af840cbefb30b6159e3 Mon Sep 17 00:00:00 2001 From: Lily Date: Thu, 21 Nov 2024 21:19:32 +0300 Subject: [PATCH 68/93] alright whatever --- .github/workflows/android.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 16ca073b3..80d034176 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -6,14 +6,14 @@ jobs: build: name: Android Build permissions: write-all - runs-on: macos-latest + runs-on: ubuntu-latest steps: - name: Pulling the new commit uses: actions/checkout@v2 - name: Setup Haxe - uses: krdlab/setup-haxe@master + uses: krdlab/setup-haxe@v1 with: - haxe-version: 4.3.5 + haxe-version: 4.2.5 - name: Install Android NDK uses: nttld/setup-ndk@v1 id: setup-ndk @@ -45,7 +45,7 @@ jobs: run: | haxelib run lime config ANDROID_SDK $ANDROID_HOME haxelib run lime config ANDROID_NDK_ROOT ${{ steps.setup-ndk.outputs.ndk-path }} - haxelib run lime config JAVA_HOME $JAVA_HOME_17_arm64 + haxelib run lime config JAVA_HOME $JAVA_HOME_17_X64 haxelib run lime config ANDROID_SETUP true - name: Rebuilding lime (android) run: haxelib run lime rebuild android -release -clean From a2c7da7863c3bac215f49f746c99256cd87ce200 Mon Sep 17 00:00:00 2001 From: Lily Date: Thu, 21 Nov 2024 23:39:31 +0300 Subject: [PATCH 69/93] remove wide screen --- source/funkin/backend/system/Main.hx | 3 - source/funkin/options/Options.hx | 1 - .../options/categories/MobileOptions.hx | 6 -- .../backend/system/MobileRatioScaleMode.hx | 79 ------------------- 4 files changed, 89 deletions(-) delete mode 100644 source/mobile/funkin/backend/system/MobileRatioScaleMode.hx diff --git a/source/funkin/backend/system/Main.hx b/source/funkin/backend/system/Main.hx index 8a8fb283d..fb3027849 100644 --- a/source/funkin/backend/system/Main.hx +++ b/source/funkin/backend/system/Main.hx @@ -16,9 +16,6 @@ import flixel.addons.transition.TransitionData; import flixel.math.FlxPoint; import flixel.math.FlxRect; import funkin.backend.system.modules.*; -#if mobile -import mobile.funkin.backend.system.MobileRatioScaleMode as FunkinRatioScaleMode; -#end #if ALLOW_MULTITHREADING import sys.thread.Thread; diff --git a/source/funkin/options/Options.hx b/source/funkin/options/Options.hx index 81b50db84..d4a7934a1 100644 --- a/source/funkin/options/Options.hx +++ b/source/funkin/options/Options.hx @@ -41,7 +41,6 @@ class Options // mobile options #if mobile public static var screenTimeOut:Bool = false; - public static var wideScreen:Bool = false; #end public static var hideHitbox:Bool = false; public static var hitboxType:String = 'gradient'; diff --git a/source/funkin/options/categories/MobileOptions.hx b/source/funkin/options/categories/MobileOptions.hx index 37fe8fd62..222060cce 100644 --- a/source/funkin/options/categories/MobileOptions.hx +++ b/source/funkin/options/categories/MobileOptions.hx @@ -54,10 +54,6 @@ class MobileOptions extends OptionsScreen { "Allow Screen Timeout", "If checked, The phone will enter sleep mode if the player is inactive.", "screenTimeOut")); - add(new Checkbox( - "Wide Screen", - "If checked, It'll change aspect ratio of the game.", - "wideScreen")); #end #if android add(new ArrayOption( @@ -72,9 +68,7 @@ class MobileOptions extends OptionsScreen { override function update(elapsed) { #if mobile final lastScreenTimeOut:Bool = Options.screenTimeOut; - final lastWideScreen:Bool = Options.wideScreen; if (lastScreenTimeOut != Options.screenTimeOut) LimeSystem.allowScreenTimeout = Options.screenTimeOut; - if (lastWideScreen != Options.wideScreen) FlxG.scaleMode = new mobile.funkin.backend.system.MobileRatioScaleMode(); #end super.update(elapsed); } diff --git a/source/mobile/funkin/backend/system/MobileRatioScaleMode.hx b/source/mobile/funkin/backend/system/MobileRatioScaleMode.hx deleted file mode 100644 index 318c64cde..000000000 --- a/source/mobile/funkin/backend/system/MobileRatioScaleMode.hx +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2024 Mobile Porting Team - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package mobile.funkin.backend.system; - -import flixel.FlxG; -import flixel.system.scaleModes.BaseScaleMode; - -/** - * ... - * @author: Karim Akra - */ -class MobileRatioScaleMode extends BaseScaleMode -{ - public static var allowWideScreen(default, set):Bool = true; - - override function updateGameSize(Width:Int, Height:Int):Void - { - if (funkin.options.Options.wideScreen && allowWideScreen) - { - super.updateGameSize(Width, Height); - } - else - { - var ratio:Float = FlxG.width / FlxG.height; - var realRatio:Float = Width / Height; - - var scaleY:Bool = realRatio < ratio; - - if (scaleY) - { - gameSize.x = Width; - gameSize.y = Math.floor(gameSize.x / ratio); - } - else - { - gameSize.y = Height; - gameSize.x = Math.floor(gameSize.y * ratio); - } - } - } - - override function updateGamePosition():Void - { - if (funkin.options.Options.wideScreen && allowWideScreen) - FlxG.game.x = FlxG.game.y = 0; - else - super.updateGamePosition(); - } - - @:noCompletion - private static function set_allowWideScreen(value:Bool):Bool - { - allowWideScreen = value; - FlxG.scaleMode = new MobileRatioScaleMode(); - return value; - } - - public function resetSize() {} -} From 806ed0c0397dd73462e196396506c3431f4745cd Mon Sep 17 00:00:00 2001 From: Lily Date: Fri, 22 Nov 2024 14:31:49 +0300 Subject: [PATCH 70/93] include mobile on addAdditionalClasses --- source/funkin/backend/system/macros/Macros.hx | 2 ++ source/mobile/funkin/backend/utils/TouchUtil.hx | 2 ++ 2 files changed, 4 insertions(+) diff --git a/source/funkin/backend/system/macros/Macros.hx b/source/funkin/backend/system/macros/Macros.hx index 9183e4a4e..f8d778e9d 100644 --- a/source/funkin/backend/system/macros/Macros.hx +++ b/source/funkin/backend/system/macros/Macros.hx @@ -18,6 +18,8 @@ class Macros { "flixel.addons.api", "flixel.addons.display", "flixel.addons.effects", "flixel.addons.ui", "flixel.addons.plugin", "flixel.addons.text", "flixel.addons.tile", "flixel.addons.transition", "flixel.addons.util", + // MOBILE + "mobile", // OTHER LIBRARIES & STUFF #if THREE_D_SUPPORT "away3d", "flx3d", #end #if VIDEO_CUTSCENES "hxvlc.flixel", "hxvlc.openfl", #end diff --git a/source/mobile/funkin/backend/utils/TouchUtil.hx b/source/mobile/funkin/backend/utils/TouchUtil.hx index 1a27a5797..b0dd7cc0e 100644 --- a/source/mobile/funkin/backend/utils/TouchUtil.hx +++ b/source/mobile/funkin/backend/utils/TouchUtil.hx @@ -22,6 +22,8 @@ package mobile.funkin.backend.utils; +import flixel.FlxG; +import flixel.FlxCamera; import flixel.FlxObject; import flixel.input.touch.FlxTouch; From a3f32f231a115885844e927ac349cc537e4c9184 Mon Sep 17 00:00:00 2001 From: Lily Date: Fri, 22 Nov 2024 14:37:16 +0300 Subject: [PATCH 71/93] we can't use `??` operator --- source/mobile/funkin/backend/utils/TouchUtil.hx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/mobile/funkin/backend/utils/TouchUtil.hx b/source/mobile/funkin/backend/utils/TouchUtil.hx index b0dd7cc0e..180659e09 100644 --- a/source/mobile/funkin/backend/utils/TouchUtil.hx +++ b/source/mobile/funkin/backend/utils/TouchUtil.hx @@ -41,13 +41,15 @@ class TouchUtil public static function overlaps(object:FlxObject, ?camera:FlxCamera):Bool { + var cam = (camera != null) ? camera : object.camera; for (touch in FlxG.touches.list) - if (touch.overlaps(object, camera ?? object.camera)) + if (touch.overlaps(object, cam)) return true; return false; } + public static function overlapsComplex(object:FlxObject, ?camera:FlxCamera):Bool { if (camera == null) From 00be383a564a021866bdda46d4350eab6b3c057a Mon Sep 17 00:00:00 2001 From: Lily Date: Fri, 22 Nov 2024 14:37:43 +0300 Subject: [PATCH 72/93] extra space b --- source/mobile/funkin/backend/utils/TouchUtil.hx | 1 - 1 file changed, 1 deletion(-) diff --git a/source/mobile/funkin/backend/utils/TouchUtil.hx b/source/mobile/funkin/backend/utils/TouchUtil.hx index 180659e09..5b818af5c 100644 --- a/source/mobile/funkin/backend/utils/TouchUtil.hx +++ b/source/mobile/funkin/backend/utils/TouchUtil.hx @@ -49,7 +49,6 @@ class TouchUtil return false; } - public static function overlapsComplex(object:FlxObject, ?camera:FlxCamera):Bool { if (camera == null) From 37aca4cadf6e18d27f97ed96ddcf2cef89075504 Mon Sep 17 00:00:00 2001 From: Lily Date: Fri, 22 Nov 2024 17:34:19 +0300 Subject: [PATCH 73/93] matching with upstream --- project.xml | 7 +- .../backend/assets/AssetsLibraryList.hx | 72 +- source/funkin/backend/system/Main.hx | 7 +- source/funkin/backend/system/MainState.hx | 2 + .../backend/system/framerate/Framerate.hx | 10 +- source/funkin/menus/FreeplayState.hx | 15 +- source/funkin/menus/PauseSubState.hx | 2 +- source/funkin/menus/TitleState.hx | 7 +- source/funkin/options/Options.hx | 4 +- source/funkin/options/OptionsScreen.hx | 6 +- .../funkin/options/categories/MiscOptions.hx | 2 - source/openfl/display/Shader.hx | 985 ------------------ source/openfl/utils/Assets.hx | 1 - 13 files changed, 43 insertions(+), 1077 deletions(-) delete mode 100644 source/openfl/display/Shader.hx diff --git a/project.xml b/project.xml index 2bde23221..5bdf6eb21 100644 --- a/project.xml +++ b/project.xml @@ -92,7 +92,7 @@ - + @@ -184,8 +184,6 @@ - -

pQgSd8`qU3gOcEz)&*PQG`cvv)$Or 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 Am;e9( literal 0 HcmV?d00001 diff --git a/assets/images/mobile/virtualpad/m.png b/assets/images/mobile/virtualpad/m.png new file mode 100644 index 0000000000000000000000000000000000000000..a73db43d433d6abda6efd7a33018677ff1769544 GIT binary patch literal 23499 zcmV**Ks3LJP)1`nNxOI>-%G$US`fTNp^H!*SVzGW$nG!Ui(>3 zxu0hVlma0r#HLM~*t~gj=I@(sx+!nJ>$>Q=4se<4x;Fp_A-)6{EiEn7oAa?8iKc1j zI_N^+DhW#S&X+E_E`ZdvU2u`;c>B>+>N*OA!a&b#1Cf8cu1dFaMz?$S>AKQ;oXm59 zQVJnO{`01u*>NQrI+`YMq=TVr=t9F)66vPjQ;dPcDTaoI(q}rFrd{Q_?iO9wbKgw{ z_uhLi)4`@qn==2;9T$^1zq{%osLp+N3sb-kk1ZHSWO`z^LS)LgA2u z%cPV~YMN#&ox7ag!69PFC`0`*M#O>X-rG5pg^p676!^^`i(3~O2TtsN61WX`2-q@P zS1uzQD*5QO$h_zB1kE|j8f5C<-1jmiVNsEQD1pm>8>Ez9YHMmUP7ZW)@K;7gM!v)>35xNA!=_D}v{F0Ms6TXL(f*s? zd;PfQ%m(hh>tR{yx-+%?bm8v19+suH4=sIA7QTzkn>S0c!eUZ_La5a7qF@rpH8Bb_ zh|8puPXb0=sFmYA9W>R=&)MzbDhH)pgz(f{r79N~Lg<;})91gEQL1lTX=nbgYi4F! z`u}MNp`(kmjMuT8C@pnuoEkX>DYJu=keIHCQGm=~DIAQ2f}rpt+IP6`jD1wEG^}3I zTqGn41;^0R2lM_;35zr)6c&@!ATEfu{LShC`Qd<~LJ4g!zSC4qd zq-4I-5}9)}87Mg$p2PUqea!1q-L1~_-|B1DY59WVdMzz93bl(IVNq64Oh!OlCZ&AR z@An%cBO?TZ0fI(7j*8*PWL7Ywgu}Uye&%7CCbn&7`qnf}TxEkKBP7CsCi+KC5DHXN zTU%?4jEv+8iRsv+dBUMmO~KV8T3Q$kiezc+LCbXj7FWgqHAJYF%_itLz?mL`4ZuOGpj45>YUEa2|RHkb>UWAmBeuqWnEO06%y$W;FX5-j9>U{8BJh{$ZgLwO#DVT^_Ncn z$O&r04M=R1QeV(@{i~r+NQcU1jsl3>nI~5`6lw~P6$*nQsfkfr0}z^{5esTm#mCha zlr%E?h2~7&94U8=vvE66w6DT;a{DP4s>YN}ZmpC4JFQ)$wTfI5BrPb$8xQ3KL}oy2 z-n?1fbkj|jN-3XQ*tE=e@!)panpWbd7)d8ung9A6W(|cxC*boO#hNe~jC3=g>~8L&)iFPq$xqpF^E}TK%$S8A=8; zfH8kUhLQp8#EIjiw~zS~6Pj5;SChH@=Jz^n$9!i-Qd7u2IO`EjQ(a{@1p^)+7!R^d%UWF~k&IyOfKzYu_Dzk-!RS->u8Or@poMz2cLb?ot5X+Wg+k_QE#r{KYF&;*Xj85nj1dyy02`x`>u!Oo!dX` zlxb>QC*;lVyqv zDxqnHEfC7oO{J7HTwF~@lTt~c1S0)^O=wC8-AQ$;&_vF_)if7CDKsIFfKUpdiPUza zhSDTLrg~480wokupfq)wwhPeRyzPLuFX#BwBc<=(acz|HzDtSJl~h7#A}cVIP|~$c zrAfbSCw0^GyFp)gv^vo8V!&VhyBg*H^_-PUB3EB{p?~j@LoEO`fm*9`sMD&i4m+9* z$nzI2b#k4Tx$iqAD3o_oDDkD+5xaN4y=WNLAG%TNYWbhf`h)&2cXxL)r*RPgNoV90 ztv%?%B%s$*7g)p_-@l4^tqW6Br9sKkko+D5rXB>IQS*hdi^}C$^~d{n z1t@!Wv;KjcLq62XwyQ=~&b#v0L8JQp%-^YBG5;g2eZvEm3fNAeHc`SSp~{9i)6PjD z#FvI64nco4;7*G4bXG%w->9WNxRiH)Vk0Y-uBEx571Q+P352{;lpg+k%JLpzc{5*TLD1_RRw%^RIOe z?DbLRj+&a9xbm{=GF%xbCd8E*SLL=Bq7;ejOm3eD<2`Ss$P(lrni%4thaRR>5aK}B zlXV^4Pyfl%IT!!oMZED!=Cf<*+=X)hU*}LKjiG>*KDhqSjauQPQC5T4ym_DS(Mjfwte?5L*z&l20gsQ^SglqBp zgZTYHYHRAzbd}-{P?X$M3a&~rCXUd#JwEP-K9f)`tZr{6NSk*Lu4LD~=lII!{)MQ0 zs_6JUe^AbNX{lR5??{KEY1&ouPrZ2yV6MJqodK}#@m+cTh_WOnJgwomCpsO;=%TK{ zJ^%ge{-3X)Krr}xey+d%RRoQC?;Is5rr+zSZLfT`?Cc@ir=}J{Der|p^ZbK&M8+b4 zpq}y2tSQz1kiPjb*nFCQSCMC z8@Rh7VQo7$BhixphU>aFta#PpEr8F~`ZP@jO6C+4Y7S{$!_b36F=0k8-Erjpdpmoc zttq%$F2DRT<}}U+bZi+P=dL`Nr2lVmLCg|d<@KZMjsTu!v9bNt^sP8TG#cgj@#FON zWw5+dbgx`+^#wx@4h=WGs@CV~5iL!wDvWLveGU5#_i4R}!vVko&@_!x zr%thWZVRqTf|xc%8aCAp0=YCm-|7pR|9S*BD3=(7>;63AC+;IaRyY)U? zcj9;9INtsH{eBXO1RakYq4DxSK!$@(69KvJa9@U=Tgs$J3y1C(jyhviR?`zZfA~n> z=#ioez4PXeVmT3#a+Jb8D`zSs-AVYfa?_1+-5KT5kWT0Ja`#heJ30F&(|+N3WOH@W z=83BukYm(^n`x+?$BOxv@U#E^ZeFuHkK8x+)NtpCp5X(5d*9ok?K-i?2OgQg24J?-F7cfjIxb~( zB4tkGT&uvO7!*nE(Dp;f5o_@?hkm-fv~c({Vs<}{j1?v6jjQEUs6iAx7oKJWIZRc@ z&f|rg_U+~Fr*OMH!SMy{7p5=desh_=O(pmldLXM+CSg622MmW42k(;yyo*;eqUtGr5|0XLS#-pkG^;(V{JI11jb*>%gWb>6 zE^fZ?cMB7X-dtz4)DJ~^BaI<1{JHONpSEe!CQSo4(4Cdz{rZT}>{}5V2%LKR15f>Y zE|774jCa%HBIQR|TKj7L_Rddm;kqlRuCAF-I7lgRh!dxq5p55 z8?E6BX$xOQTlg}Xf@=sFEnXlX=Tl4fUv59(1X@ec49yk;fmYU$}0eHdq4_g{HOShg(Dn#hL2jkNaQ>Je@0 zju#AI;Gt(KW3oeCZDaKqySZ;NTYTeip6ulN|Ap91f5e@e>)b&`b;6A1A5x z6N&ZXxE4Ww4L&1?&j_;YGE$-6oX4GIpkdrPe1g}VYB*U zLUS4wW>KoNsxjs9r#dz8$4?A&{E`CU(B9sT?Zz^~!Mo68pXltyj52D6psUAV#ie8D z1kg=CNJwZs#B&(60h(FXwwUFuey+K4Vn*#m8PKk>Gl686BnfAb70Z{iW9QDyF-dz& zyy241{1AAb7`5vOWzRS2=XtMnIF``Ngwkx+UbnsDf37UqVVareaGFRsgv=Jc@bz0u z3J2GfC_RbI5H1mH&CZJ;Ow}AntFq-V7LBm|$zvSo*w3lHV<@GVzikCemMuh}bL>br z$4>4iVs&R9q{MSIKGVX&g>BT=v=I(85H!QAxXeW4Bqh$Yz_78A(klcE5Q|4EI!`GV zM7}WDy8jm+x_ZrfzIO1%E^Fz=<>aPiD``koV|ovw#{S^NBM+Qc*rsJ!d75Qfdnh$n zUrt)XR2j8Fd{j5IvUtIAuD#;*8AdHws8q70=5y%W;Q(D_7_}BKQpBh={Z-6una{jA z3%Tq+URA`XEff-k{hdqbl4Tsm+dF=J%XRDD^ZzSiiATf9>EFp(z!iy+Wi87ke{SAMrZf7%(nd} zdf9*CsmdA~_8N!%{iDa072dEejC@rxg|a4wf(6xA za^bowiaOb{lb&#R{`3n607EmV4K>efqXLp{loP#sInle<+oquLi8eNFcr};5X7P*) ziZr@U9;xj1gq~tEW}#5x_|Qw2tO{P)I1r7*md;(6Jap0%5=-YU)cRvXL1F1j4|F|q zeqnoc_0@TQmm<%dcHwXu8MP7%6+BfkDps0DGd&#L;h@}MR=1l#8@jHsYWaFT^*8S- zV$@dJ?}cWDQc`pc?%7zi=(6e>v&E5G!h#$pWf-5-Y@_wy$!A-No70&LSt#tA!)Lzv z7X1EV8(EpLGom@9;Yf#(vA)^Akbr@~E*^ON7aZugfQv4;g7sI`<2gO2E+m99y&1uk z-2J_SlQ^@OsC2Yz4U+ZAV%-q^cHaK239VXLga@Uaua$Ba#zHfaVxXaw=#<2wf( zBk}22a-`zXTTWWFhBh#F&VrKrEC$bjaPT4)j&vA~^s=Yp#nW@ylxDI2_)~P9I>_F= z7xT6cU4%h^>1q;@=m`Ds{nKkB-ly3zaZPnF^jvi?q#YXB@5pe_=^W~mU;oY@_g;Jc z`~Q#^T@A%}pk}pU~NgvMwMOy1DARESXmCfEK;~ekX!%GLA zXJD}F^m^O{MD0`T==?3l&xX1Ak6wc=if6fru(;hoDbELSs=u3<-8TvY<^~2W4 zZAuzGNSPQ`H|{SF{0+duvS;RCB6V_3QxTsAfM{%p?|)@CZ++{^S+r3-!Qd*J{ZCu; zjT~e5z8!S;9n4b2&r~>0K+nlREGI_LG?=Ou;kuH&2X;&{ajtYO#9*{*!PcWcNGuO; zsv_X=@t-;IEvw33$H~Ec;gTnnFgeHbqUYfpqjp-Tgi%`-6_n%X9XYaS>(L)1E?)93 z4Zvsy$q;HV+65Kn-cA(7u(-mD|a>AjOrM1`dSO5GrYHR8%))b`Xg~Suu;Dj8RS30A% zwmpHCLzpXM)K-GRs8$-o(UalLn;(<)?KdU>WjqG*Jdnz>NoM2|I&z|eRm;~Gy?h}A z%jRwXyqCVB{TLnFhiB}C3E>HcU)}#*l5UD4a25!KTqK3@ zw4m!c{X@MBCo79!OoV7+(0A`YcKCqAO&?!jZQ8U+1x79fa_KVp(1eCN*}_og7_~Ek zN*T4|woxLgl}6ke(E-vmOQ*Uv=eRS)PyYEa)~~*l`E85J9+M{f%p4@Hvf28=V_D&F zHbOvmUkCs8?cegDzj({I4$Cx|W^ubgfCdb=78l8};|C{Qm!nje8X#$p>5p~25IA&b zbCi?<8uIyJ3XY<(VP*9@s)6Adxuy{C?C*|n;?&+5X>V2`;8@Q~-1Sc(-uvgTDJdkB3oF{| z@TqEq@}bEPx~`E-Ci&slpR8Osq-!phpvnVC>C&pVR^73A^C*DqUPqtzP8OFuAqN!^ z=W-dfC4|E{M(yM=RYq+kP%2YpTfsCmi1Faa1l`fCJoM!M@Y?I%R({41lhsqpL6Wq` zczVb0Uq0(~2sqNSlb?Mz#JfIn1BLtup@YK3Q1#wGNPQ@M13mP`_EmnJ3A)&oj*y9X zsc}$(4^tZBrkS5()Sgw0+KC{QOfP%jZr;3kb_4`?@&7x&^-F-VLL$k?3=9m3#O9a( zy8ZNrFQ*AdCOCLvD?1)v&xO}E7db5*;z+EFL&|j}d-gwH@md+cgvTiqLK&Gd=Tc^7 zzChWND#bZQ?ODaBtql2tP%GL}5>u;WopeXI^IJcsf2g>)s;iPXB|OcOg%I$KEC!B_kj}W zU)h&l=-?`+%7=Y(_{(qJT%J*ThJ*v08Ak2DfBX0Bd?H=dX?hEq3+46sL-6O`h zu1ho;;f_z=O{_#E>v1uG_*W==n&$d64WFiYW}o+~_|q-d->sny%$rj>1b5~bwGvlZ zXN*z%n+JZ(e|`UH91=`dNWjc6YI7kFBzyfb+3N{)gNo=AQ%BHfEXj?x7?|b&@l1=& z|GJItzWg;JUKUw|IY>HDj`h97S~eE#v$64O7SULQuE^HO`&cq;($d1X&_S(bwZ*FO zn$?9dA@TSeqqYEN1*0~N@>W4+ZH(=nfSA>#jy#(y{}NJ4Y;Ah8yb!SS(Lp+nZ+%&s z7I_e``@jxft1dyqBv-LJvfW`#dz9L`Foy7xoWipzuJM(v(`JL&4{_+QSbofucl|D+FyZ)WrCYY?^@BNiVc5Xkzxq&8g^Ws38# z^YK^AI-vuDUF?6x;=GM!p0m;;#tcwpE~YWKg0aX{W{dIRS9(U*%~>CJ+F$NDMs0bV zZH(G9gb*Cw_grQ?%(@RE;SO=2b64KBYJ;mZ>hpxHEV&Me2jC84h~W%KKzwSrrdlv6T^$m=@P#V{z_j;WlrlOCpvK5Vmmv{ zs1382T6rET+UuCf6&;0u7oQyBSNDC7y~iIX?hKt3LLnDvMs3U*Wiq~qTt@A1WN^k9 zwVC#nq9^=>(-VFII1MI-D{a1a#{*pQvuiT;sKwNY9YVkhkM*(V@Z%-d=>QODG&Ia* z$->3xx{tn-qnzqHiX)TQDvm7ku^0hC>%3YnY+s8{t4B&nPw!E7K6jA#n1xbuRtK7) zm9|HZ?r>PMAB&GU zm)7Xj2H?Uh@*px0&>!2&{(~=a-l`2q64OvACALbiWyhmLty3jCMiT}t4GXyG?U%BA z!TD%H$HivHV*@0u7>5oWc>4tYhPK7qe{HQUZzP_yRD-5$^ld zvpjOoOAJR(VrhdU6E=48^e$p-F+zZ5{6;OwRH?U_LjTBM*2Kt$QpTM)DsfVtW7JN7 z)5)kULizEV?Dc1>T2rA9VmhmOJ2JsPeDNOs;pc5grkZN&MJ;~z-KWZ$7P>HLZCc77 z+;TY!=d1*wp#Tk&_Ul>!xJ)hJmp=%y|LD_!%d2_yHE$*yu0~Tf3I8#Y z*l5z=yz^JFYVC54?j2?4i(46vo}%->5#otSEE`t=9BEO`^xyw%f(tM6Q|n(qZ*1}c zqP&Tb?}Lz8gLv9rfiuOZeRju#=NPq9y&a)t61AXWqSW+pDz=jYryiwaXa5w=&iWnp zAAdSi@;eur&}nI0z+2ya6$@KE;gGWzrMzFD%Ew#YeF^OsT}E9^BLGb;ja+=el{C~h z;xl~+H;51r9f@@kMg)e@VTR(CuH@^Bc)YjC`XzwNMSlNBL>EMba zje!+YYP+0?AXxS!W}0w)(~M(yt&{bfmi1k606wr}vn%R@M% zkY&{N6>(u8%cxBwk5M}Xj5paUCHeE$|D*5EU;mGQCm>E!SLy@*3aWj@3?|_%}Xg~%b9*f+wv-woHw8M{OOyy<^6A>p>__sX5urea+^b- zh(~RbaqmO0lNK>`3|qxmx_Ak1-SkG@{_dNotD8BxZY(jen*Fv<6x9@-Q3y??e={~N z(u~@^fu5p$=NPpfPA8+baGjL=eZ@qn*@uF~bJr3%+&sy!Nme*K-*Ip090Ubbz9!CJ zc>#;tRx@5;CJ@%}X<Z;#}l9Gq++lH=XJ54ExEaas7yz*+w*3nHrt<4L# z>hf1}th2RtL*Y5O3(aJ< zrx>-kH~^+z#iG{px#7(hA|`5EX=wN`46k!Sp%CrsuSQR_5UMKA3sO>| z6pZ#OTqi5tTbkx@;rW-+*f_P1wh+2rUS2P5H_()ynsDvZ+8!s0p)5yJmV>e!lu+s4 zjCx^%MkA(idKtAZH>4T0rC?(t3mLVu0Hxd_6JvIvV8#4PS$|diBnTniOaIUBJ;n1K zcQfXc77m)wncKXSKX}gtc^+V2m7=D_`}wMJMX}dzt}Wc!I**&*wUJ;jm_1B)0Vi`! z+qOBj3xf3)Nhd#awr1spti5;%{^0bPK0&j(>^>6{Lj>>#f@O~x597`H!e>a~GY~!_ zT@)HM!(&4iCaPdAl2R7cSez_`fSr#Ga`42qm$h&JGK^ZUgnhA@;fgGycFNB>;Wv1i zb1_0@3+vZzKnOBRkc|(|i~H~2{ym-D+eN#)qI_j%iGHv^+6mypwsmi@N zQd*qYAIC`=B;yiGj$&wGbZP*v=;s9&Y{2Ks&Tg)-kvRj`@GIu65)AiPG`EeCv}!Vo zv9vU|vTEsh?5sb)srV36hJxDgoU*$`D)+xs;@k8f^1_@su7|QiFulIQWMI27VzIH5 zAIif_GHMg{@XKF7;4y0VJ!5hHY%yvl=%eXHF(&&06fACA%lTJUPA3&YWB-;I`;R|W zUO3>DOrJMrIU8TQEYr5HN-=M_kAT)hfcaF(HUe4`(u|;_#EJ<9x)UVDAeNo=3fI=w zQSan&TY(E*yv|#Wc z5HtpBjK*LMjlr6VoRpIl4v=Eh9y$Yz+Ls$D74gsZ&^~l;lKAVaq7eEX^fw zT^ENqgWWDx%)1H4wQ*z|D<&8`>0lGZcCs4Ayg3V5x^N}cwNq37{YEVtFM4e%#8uo+ z9=+BR5Qg#c%2Z9ml{R>a_coIklX(dL6>4MoG!QNEb(sA3^uIM29TmvD3fO)@(9r zJ>*9*D$2#kIJhblzCp8|&wk?;>dZy-t5GJ_9z5sakMFvhOR8CHH(2JKqD~*j*R2e;}kL%m9S9K&X^YfWARb! z#29k|^HOGtMeFDt5UQs*D$qebf-E`CpvokAWv?6kYk7Y*!^rj zi{7#lrND{_`nzoAEr?-~?|)F(^dHZf7XaNS29W+i8s?qnh3YhgOAIBFr0c4*G`Fy9 z$tt$h?xHU~T2VjEZCTE{{_Og3g@bazlnt{QZwmPQS*KJ5PRi*Z&8Ss9Q(=To%&1Lc zrfBy7>mimL0wjqj zxH5^OWr~?9HKbGgmXlq@}g;y-)ME8-@b<01;qSkd>aBai5{u$*$fc#aHTz6_JZMn#U zKoAawG994Y%4&s7DS2-O7_~1Pyl(=w7$y)J_alWMWLngQz667d&tL zpZ(2MNEFT_$_eDo?BhWQjVf~vbLY%Kpb_wC7{ZTF)*`g*h#4In;)R!N;p^zXsI_Z(e!+Qppb~1>_RJ411Ol+yn^-TU(D67TQ#9+vAVq(pF1}%ud;7oiWJ*%;76a-bUrDQGY7eh z+R8XFkTyZ@x$7V=9-M$mJsY%pscf(#-IvQ&vi^DId-y>txxRE zItvAiMdIvzW+X3LPD7B}1xl#`wx1+!M;Pdj;wYQ0u2aOU2;gxl`cK%{B0p5Obm2-? ztecz9iBJ$STG+7c4Se_$o4D@vYsVE104v&qn6fc1McQ>Gciz6W@(!y2h3rP5Yw6$2 zIw@z7QJcnW(eBeTXuuD4!XZB90us&4KFCbc?q`!xTM2SajEaa-l_uv@8BG|P4@GoV zN}Bt$5Dm4hRMi0H7&UV!3jal;qwG7dlm6a(RnJvPV#yq@Z+c-dnH@+{DkM&(K7kOh z=jjn*kr<#D8XjclquG>Pp*uJ#o=3WBX`aX8`O65^_%hdN46b0~dAIOKAKHk|2&HDv z@&kC$1_K|B2$k>2wrz_eBac_oRg-`siK``XN#f!v(!a6-Vk*g69;5bxvRsd1WEr*l zjy*BqdaJWbyLYjZ0x1QW&x>$5(!v$_&gdDT-7BaGm0#3sCK$D@EN}kKYA%LP_ayIh z`Sm5CAZRwy*x17S3zF2g7${+2QkOZzvK)H)Pq5{&y~JZy-s!Hih+EODI8*{1GjCB> zsa#}%>KsW7U`sC@*><7~MS3!AB*s9h1Q^+LWxwCgq6I6c@_W&dklDhzWv}8@??{I# z$M15_@6dqmHWXZlmQA!{%a!ag%?jVGlIoEP5Mq~ZB(i1i=79;UKl1>tz5%f3_ zT@JnlWBAD0gbU^^AzalAs-M=DMZEf5^HNQg7Y@pWmF;!-X+XH)qUuXsCy(%*ul@Iw z!)fD1F$UtJnU^IrmEAEDm?EQg^k_ZL@7P??U5rP&_iGL4RHI1^M~fiMJ*apsR!n1{ zJApob5M>AOrEJ3SX!nNC^GQGB2`S*ubI-70Olkd;yG{ zCD4^pL?WX+^Y8(pk>X;dN=a-xj+GZCEYzYMRHjy+B%U0l_v8R+ZCgs0zMeti$!sO! zbhtE^dfiw*hqaf^$6uv0x2*xC@_ij?*tU&r+br8q%?0hN39%T1nj+yaG&IE5KlRHQ zuV4(>C`LFKA{-2%T$%or{gNvt&gC#_O;JUq3Tvf|+RQah6YbuLL9o%rRWnb!Ki!Pl z@>-zEGcjgVgNWKENhIPJzD5E*!J-XbcH{VzS`7`8i(fSlfOS_ja_>(}=NM@OHWk##|4D~b^`>-oz&-Z^WG zS~$J5d&h#&p*TsRRLvmm{&X>FE5j^CF_KP{u2aV_bw9e@L=|mR(Z=HTiL{9(8Fa%uNz?IBIO50s(Z$J{~E8ep1s?}e)i9-##7 z-f|-h410c{H0|CIUbUw*(zN@EoRtdZHZSLoKl-Z57_~Em@f^*Qj$%{{0sr#FM*#4d ze*DzqFCh9%3=LhFEL=P&vV#bZ48=wZfUWeUG4uT#3KF9dttvt^*^N_R^SjbwEIE={;W|y4a){>*lKFF&@UD+u zOG85gWj~H_$ch~u9lZVRZ%>_H8cPe zf=9a#nXNR|Evo9Z@`PO405Q?HOP&(v9t;91MB1dk<;aeNFAS zs}}-UMs3>CwKp-9VH`$WcnMb?a6>{_&5OeU4nz)zd9}R&;sAM(%8VFX;KJ9*Zbcii8MY}%(jM~ikWi^Od zt|&ET_wv%d?OcBGb<=7`*RwOCKv2`@M-wJ8nIgF4?s$OVk*uArPjhAxLc?bS@TF!2 z4HJ>mrfu8w^mZ{iG`{9yjVTU4FByNu2gzWxk7LJ=mnM`bh2_R^tgN<>wnZ&5gsmdP z6JtnY7+1zfl)0s&I~?}!=w;{jeY~)J2SdEXn0A<--usQbAlxg=VKSmzy z-b0plUz6KlKBM*x>&_ZRZSGA@t)kQg{m8CtJ^k)b3pJAcvDL`-4H5#r(mG5-O^WH%@F zC-dyrQV_cLJG#T6b4P?D&pZ6|zHej%#V0@cNp|nvJ#HH#qeBcQkBxiGcu1QVm0}{I z)NC_q0jg?DTAJs96F_K^+PNAg)%f&mc=4>F-DeoJ?>tKxwQ0=4x){1JX>DA@`t=u* zNF><0bqhcJ?jx*Sc?rvxtxVBFC$~6?>t;W8r6iUcOVOZBL_v|4cs#<;SPv5^LqaK# z;|U1K=-2=UI}c#V@~d2pMdIvvc8GazS_CRLaH$VBGJ(2Me2*z% zv2=r>PCS6ggER^Sk-Sh{4!n#WrAp}SlnrfEtpF?6{W}5AUuot-v8J~ z-(VNxb&KUj*t7oy7OvA-x#$A&{TY(({vjUz?M~kC)+?w9H)3c;$_Z7uCe^t;$;$Q- z7BsElH^2Qg`wqRpTi)^(0KWEjUt;c@1w=+i_~*ZRm}8MAr?JYj7sbfklBy~-7-)=)LoHTk}WJlcIuJ2OkW_rme{w0loLWNG(L5j;y6wZORJ zWJ(pKO1A_xRW1DSJKw{?6^)tAnhqPTn#;+fmvVA&FQcQQRM$?PKORfuvfC7q(GljK zZxYf1B-JnoKPDkuJVeNB)x-OY`J$4 zOK){B4Fg9y=$eKtlRWy1BOExso1X7Di43DQc?+7*>FhX8 z=ZO~>P8=zEHh-1D>J80^L^ZxDMMJBB7^}+rn9erZeRFLCt|QQl(u`Vw)t597qAkmo zESOMdlTn+6nA+;zh0ryVO>es;PdKEZ>7YAa5>7q>7RJw?Kb(%(DAslH>_GRDAAj3>8s@q+OJM>}ugruVF1GC~5f zCWmr|SgyYkwt=Q8%zzJ{ z%4!djq1^|4Y3J_LY4<+E8%w#g`*bv;zP5#RSIh@jl;ypgEsR>2VicoP3_YONGqfojvw}3>bE}mG(wpyYp>MH?s<++cIDfRW6?OfcE7++e()O}`t@!e{COw$|9mI^ z@q^!R=+M#1T2>C-eVzRB``d}xBe*h&<;3ag@8s7%d6M42<5Vmw1w^eL_8xtlho1Ni zTed&J^Dl1U=*bs}+xcwHF}s)NJMQJ@-+va%8AAw(5b1Dhg_qNzWBUlfDj#3?`&(!X zuB!Ol@gHO6qZqTss7=8%0)&GNNLOL_6b3$gzU=s#6z!gT+IAxb8d})b}#f^3>8LUWoY+kf|nkYlcU{hamZo%*6XVYEb5}`V40|v z5@pA4M@I)A|M7B913hEUPjgHZn;27qqmrCBG(_E;`~;Grlaf3C z>$bdYFYVe(`z05!ygg3mj$)OssBLMHC{gp@wp<1WMj51lz%&`vN`S56^z?Vq(+8>C z+L=mj9v7~%IW>5cQ_mj7Z#>Da-Iwyt4_`ScA)%`Px~_5l%8RJ+FJvguIjwtAsG@Z- zCW>NIf;6Kx94}|K*2GYbw1C^9AOjyy0S4)}+ z2!PWg915?SbVuko{tTPHzb#deWc=@O(FTLn?aknLGgBZC;9VcPb_Qr}iiDLk5>{3n zoG2F~{S4zF&8VF&av8Ph3)j~9nZG7Tb+e>pse#7XO}jS@)4RtqJ_tudkYvZZl#-in zx@n|R;gCj}Q9B(-<;+knhJfy&ef;L$yZO=AwxQ|ZkDSN7_uk9TfBthm_qosK9j<8t zQ`S~shr(#QGDqRd9Z4t3{$o$G`TN^&NKj5lWMblWleaEM3hUQgnp&iIVvJX2Y_deD ziZBa|TCZ6_ZL^<1*lSA@214dkfSMBR-h&krjP{B=GoVu1eHt0sJy`+axK0l3J|E*S zYHNWELvFSiwOQm7rKYtmhO2CJ;p4-9eJL9@Y@oWj8X*ML)zw^m^;LZ4GoQ&jK9~Ji z4vusfj?NCx{H%k3xHH5{M;>D9gIy&#Rq=S7=Jpc=nTOBx=Y`_xY8vqA(=9>fMKK0) z7W>f!=o40bofxyhs1-uP8VOJp)-eJKfe)dwlg`;jyH8m032FCGmQj2DY%yxfCGSmX zU5s+@>tR0le_zeo^VXNRkYM%d)kWJ)Oe!MJRJso6%N+_@8WwQrjcp|}`mAJ7O zcYNnHd9@P3n=wLWD{*IHl2|#USNG1lCGUft^w%8lRdM0^OS$2-*I@b#o_OTh8D-R_ zp`qhAURJMxp3i?cL$v!k8cBCqnszU>IMOGPuH@u_tl3ftW}8tvUi$x}*TpCWLkqB= z`bsXp`1&HYR~n&EaX!3BBaBmNM;8XKzxi?^{c!Na){3eMy`14U!d$lDRhS}BvJPQY zD8wiJbpgqE3|~QdxM7(1^(hue9S4(kQYu)uU20*mZ@@6U7xttZ-biJj0WTwC>QqunR12!~!u($ZRk&os|sMr|515XI1i$(*VS_`84mQ~dt& zHqYRY7iRj{$3B)(jg2yE4rZa@GeX?*k!!gB-xu1a0 z9qf$}x1uQJN2N;F>$-N9((e2C%`di48=S}bwPz2bwycRUl_*9be0rGw_pSGgD;!)` z@=srQ2wenNwk*4jpiZ!YNQTF%d)<2$vwrz&2$?N2os@p&p7{y3I*GyjX>eo|KARN+27jNzE?#ib!SAbHCT2KrR4f4e10ebfO zaFv79qc|jR^pP2(-9P*L9NPUj$kOina9jr=B(AbRIM^!AqrW&pcV8zj9{C-=zW+zu z`|lm;JE))sa_%W*a&&ATCS0fSl^@>1{P3k-X6+Ov&vGWlj6^Zo!k5xEcX8SMt}FT7 zqrc?f&;wNaT4`%*o5EE*A@RodE@$3w$spfmOz;D!Y(fZ3$?6;|D1-5NX%m0u@ zz~^@YzNvY?1A0BJ^Xn+*f9^fur9jUVqZT0U4sxvf0G(SkdUiBbBnvlZ<@4(_PLS>*|dn?Jagliz%a?*5L6PkEVO zPSXO`U0VSF8~^0_LNX>MLYa93b|gA918KkB>fX6qCYy_)Bt?lu0FI^j!GHcO;4y0B z$v>JlqZYg{;y`>qFCKb;x|gowXh#hRJIay1ty7}izv)lT$FEo6N=e_)iD}X9JC6Ht zWD-|dC?!!!=BfW@Gou!Yb1^Dg-Mhf?@xTvh5s;l!^a%tgkXyo^q)sQ~;|1K@E zn{}$G+?%aoiU1d!e;M76cH~QR<*i(`aPDg6FPZ~@WhY2FV?+~!^qm}Hcw}J0W!p|0 z6wGN{#Of96x&Dpo@|K7j_cRwwT8hHN2M_JZyc@q>%iPcfeBg7}5by{2;om&RvC*fp z{+lv0VW}v_WZcvNs<{E9pbi+{+Q#Dr}93?)|LfD=W8X3wT^qs3a)wG z8tTHIVmR8vfsXxj_Z~zSKF(Wm4R3niYD|%Df;iGa2t~&h7gxF-_uh$AGnk>5TBq6Wh4<#>?^fJvp- zbI)(_=?y41GNBfcVbqohF*?d(Fw(>tcY%s0~mLb{Nbo zqxPS^(K$o+Jp)mUsNKUqfAts44R!LyKb^-t-|41jYzL#(i6T|UXBG>C$qERs!z346 zT@TcA&Fj|CxdkLPD=zcGT!kS*UHAaW>dVt%un=S_1FuM(107pzEGNcGdv?=tY}@1` zCd%_C7{Z?|astIQ42)XVt-gr5>Xwq>%yRI`jx`i%4~LH);8bi^=I@W*ek1eeF3K!C z>+|{f@Rv67g-<>`Zfv|%6hp~02fYFac;eXyIC8j)cYpdK+L~A5i>%?^d+#M0jq<_^ zJNVkyzM45amr*-Woru%Qs6A7(dvY1I@U{)en5^JNi^M z*(FsmE1=ghr+Fc53tFhHYR2yiVH!aU-G?T$OpQi~ODr+MuH8F0)ct&x!=a$AwvP7e z+9tj5?UC&ctJ`C^Zf(X?OD2n_UCGV382<`?4#H+hx~LP$;P5W$Ynw9yITjn^c=utPaY#OyYfO>{QJDUJj!`=UIKzzEEM};p zRHgXG&ppZ=|F*cuQR$-*<(`hQ@enq1~C{=96lyAx8!fW%>;3vzVD}<}XF$i$7 z=Q!WG?Po<5gns-_4`Y17;JlR=VVEXIjve66JMPCy`GXv%{6Z;(Q4HZ_9hQAFxf;Yd zM(xbtY+=++DT)z~#|Z|4Q+h#Nk!_spxqK1 zGHO5i(T|>E)Rusu1z5Y}#xu&O%_2XFQBgK$GFhf{R0W7wU3~3Rza$#XAE2715vZ^} z#7tx9h5$}%Mk@ZF7Wk=SINHZw-a1ajAOT4?O2q17IC+G)GvpnY8gN$9Dn19VFiFui zO`x=iX^)d-)GlA1EgyG|QJX@VQTu@nsSRg}QJcl2*Tu-x>Px?zNl0;5*>pvo;lU^7 z@cQfjFmEvFb|cF!iqrZ0#38Sl!lDfZ1|e2$jMI4*XfNrHBwZ&%M@OPk%eZI={JgYp z2Y>gOyNM*b%JzM_GICzs!_@n7rHw3;n50lsE;&~TqxOMEel=r^TI&a6>^ywmtcGn* zH*y)ZlZkHSVk(T<^7TQ)Z{NNffE%y=gG?DRpXo|D=rM1@+3gstjonzFVIYw={ zLPMpZ7!x`vqtPhMOfUp;{?4lF6BA&OF zWBP;Kzb#9=DpeV{Qg|P!V0bV>puuL*1|xI5+)7s_CJFknv}K5osw zQrAs7QI3p0#$Vn#%%{J;iRFvepz9hw(~s^hL26^HZXd-Vfk6O`Doj~Rdpjs$V~GK5 zMl!SaWU#p1W1#7F6EzK4GpD}2f|EDUDwd5 zE?zt&(;0q(%p-^whRpr2rIbi4TrGb#(q#}K1iHv^qRqt80aHY}^jb7JLRZgGe(>e3 z^o;EwVs+t2YuucPa>&)Fbdgm(UFiw+v9XDrS4oj?Vx;=KtOQQaR_7SCIe3{fYI7eX z&&2rB?Feok-^7T=<2bH^>$r?L-hlIjgf{u47RY$q4-DPIr*7THM?U)o+SgxMR7R^( zXqtvbAf>A1?x^hi^oKjsa2y+@6eH0g`ucnL!Iz(*H}(=knWfWmx_zoMSE`9ztsyNO z63IlS{JNCo6#~D{mnRHT3;IrI6`y0&zRVc46(KtiH*MN9xm=8NG$TDL1$;qVrI>2$ z$yGM}vAulb%iS~upWsiw_!?F%T{rEu6bdmsGQ`f8p5@oyKFn)A&`c;;gJBprw#9G1 z*GJqQ^ePOMT!qO&lzExu_F3*2ad&{R3X((-dLG^GRO!#uWaPx`%|W7KBPKa-5wiQu^T zuib!DM&CGZ+voFT23s1r#G9!`7L<~RRGl)VTpShSc;p#w|J+up&AH64xtu@!>&uxt zXCY?FhAky9(k6m!TMUm5(s^VrKl$cX`r`*kxWjpxL8a?R%mmWcn(b?*J<@66U?r`x zyoW*vArR7#pZ&*IXSQixxOJf1IgaCG7N@Ng=NPp!gXu78D}fLiLrWjb=3<<;d*XRO z)3nThbJLuD!ypk)X%SNnJ(j+-QZA#`3HJ2=f=~SE-S~}K8Uo9x4J_mhA8y7-3kyvr znT+$B@1A5Z-buvjCh3eID@g)+g&^%Pv~ABJnKmWT?@2c%QW6CtZuc13aJSH;P{71% z%uj+3lV;T3@%<0wnUGmV?Zj24{HjCifJV+ek&H!D}0lK1F z*)xGN?3ISH@#<8Ero))ASPa`Lrc=9)gEo$nN(jN#t2RatZrY@!2Zn37056q0$8nu3 z7pBtZILjEdX)N6k;K0)kM%9^}RA!1%TPeyX@8u&sy(pg%1W=X}FS>Lj5+NKeU9#MD z99+lo>{8Q2H*^f$Yt|?+d*$AkVHhQEv~YWFJC#1zMD3TlmvZ-5xV`YXa<@5Xrb2}C*{d#>ym9m^Tn>KBNLpe^$`fwY7 zeQNk%(R34uM3_5w?zq=Y3yO1?8g#?Jb({)Jf_zlk=ka*yNI^rmEioGFW%V`djMYn; z<-Wsx+Uh0E{#LUp5e_t{XkxHvI3^NP%!N3M7`4mV{RjfMu@IulMWxEypH+<7uRc!C z*v^U=wUs@1stKVpI$FHeC_rQN!gw?>0H6;oebCMHMqA?=fK#W24;EA2@NC61ka+pO z2I&udHiWE{l4O}|&er->$3OnZ-wyO94hP(05lg39?mDr@2Uu;5=a1~~dZLIbT2oVl z5IVY+GJz(On{$>hYJIB7BhXa=G;rZ7h*4V-1rCHrq;&d!Yu)nhKe+gPzWGZQ`G819 zK+LN@58#pK`OSL@Pl`mMjE;^HoFb9w9L_8T2Zyjq_$L6GY8E}yn>ZX;R=>@mgeGYVAP($x)QU&sLe&% z+%E-PGtq^?$ViE5;XqT}(x4DjF=|ss%mAY{2St5fke_p+=Wt01zTXV1pg;6TU9!4f7uBaAM?n1R zQ-8?^uKe4`f~Iw`BfT#amHX-L?xwNPvlsOWijJPc*@NER;?=1D<~Oa2IGVO+xF$BB zB}h*xwL){Wrnw8HesE7`Tf_N@69c<~h39skJV|To+*&IyT^ z0ZgBd!-o%3CW5UNG_BnYJe%IouX{2=Nkdu*YYe5i3!BgHIx(uy}cYha+vw^ z=M(T%6_LRvy~=cIjfk$u7H1+f5XWhr@@DWGXDTw6tVO0YJgvgh@Fu9hsmjx`n^`%PoX`tt_g&nvZ;G zBlG7io;0KO$A7nlfy4o#b}v~seuek)azeozP$(QC(FmbXh-aVOQu6eWzh2dc+kPtz zB+vzL=k^a{XeDUCuUdEO5AWG_#|IRus4IJijuPyHrlzKI{)n>}gM&lmW(oiJF6ZrTgD{g-M)BAo_q(xY%6~P-C8WvAQ6g3sNoN#WPBjVa>_$oIeomTy?!Rdw zUBDk;@7}$X<3p}r^7?%mzJ~%n|H&72KTi;^O1ANvZC~e2mwdMH_z$gF^r|=SIr?yO zQA@zlqsIVm)<`7IX%c4>bi<&(zd!SiN?}p+hFEjmivLrIPwwYW-43v_v3j935II(4 zXz$v!izQ2zvTD^z!1JKnjtypUa@urqQWT1~Gf3PSq-X5;iWs%CnFEtf#5#*4dN zO#e9{%6%w>(1r1e{-yh3GJR6ApENV`8y*>E%a$#4baZ4)!9w_qpt^R=`|mY1-+usm zN*yy1ulE+yG?&`8eOdWK6dfHM)YsQznkJ!8m~c2$v^>~3%q%R+A{rednM@Fi#Tg!+ zxa|4H)wev-R6p-$V`K4OrnkNC>aP|a<|pNcFy`(m+;_uOYi>F44*j-*MJ@!PP!&F(57RU=$!58=D$-TT%8ijq>sq|rksec}5**XXTcwV( zEDP6lu`CPQc2eVF;xTc}+CO=IPTjIE*tWV~*FZB2Toj?8j~_qq>CABz2cJTr(Ek_E z8b4afQFRVyFM_@rb=~?8JX~ege>xlvy?}zWfT%xoW2sY2AYC*hGi?Q;VTv)f4$te=8qqm)3WSelCkLBwynq&5Wjlj3wg(I~Y6<;oDEY~*? z3Wd07{b$yl9O?M^)&sv-RVpp~9L_E*Xj&J)WYt^#y(!W5=L5b|b~qfOQUQ@do|iGL zcBUZSeCg+Y{Mhch-Z4DZeXi8Y%K!_T*2gw1dE-xfzR=x)P}P0OSd?4=vH6M57oC&V z1}a_Qd)JeDeth2BHh$@YdyYT)wY|q5X`IOiIER@*b+B1pvHFjms145jhD-9d<&GO# z`e3Qe8J)iV(2XVqLLvtWc-IZTsh=$gO&>m8lH`)Jp|-rA%+CLA|O zDRR|0%pP>jRN-KwoL9ekxUF%`uDWpB4}S5~U;Xrf7yg+|8^1Eyiimo;suaMcO%nR7~{R8N%x;XC|x)48zI$LvoNt@ z?j?KX)Ghmk<=Rh+dApu=y4DwYJAYX^iV5UIF@Ce{>zR!uh*PDYfWO+`_2d^fUGet; z!;Jr*{?U`y4n&Tw>K#7ZJUrIzk0u8Hce$fa0|Y{agN>@TYK~PGo;%uHv*>VrsO`RA zJ^SS^w>7S*NFe;;nZGKxOOi8SH*el7#}g8w%8!d8>W=OU`$9FV7hV0ts`(oik0m4P zktUSXG+|mo(_DcPx~2(*x5T_irMW4D$n|EMhOQJsD3lP0 zq6d7rYq^Vegz4&<=B=12G^uN*0-+R2D3!hc^zoXZYbYhsE5ZqZGBi^ufv9wQxpsuoq!Lmq zyl$y>()*M`NGUZTymxLG+4r9rJE?s_Wj|6)XbQkpu5Q^09T1vkIDRt}sSVEA6EMS1 zNJBg=gx;%5%fu8uBW^~}8FyT4e)5Zjn~KIj`G~~)@^RF7otN+t2|vS4H{Haj`#S*4 zuzuNV=e+g?fDxVoh-tMv97woLcEWCUrK{OrbQ_RRPy^4Z|>!hF>3(w(_~I8*rto`TV{SGidgsk&sgA%2CxysVbRp z!;b3)6iVotZfUw^Yhasz&~-~`%FyO3;RZOzdoq>w9?f) z=qKSge#bD9x~}hcUH1m+xLDWqhi3l?1f&&O1-+*|Ue$t5<7oY9;lKjt&Qi02UBlw{Bg1e}8}2bzPs&=Q9BkiG-$< z5`d<17US^we7cm<4`|_V_}GOl?|p6(eaSDL`a-GA*}Bp>`2PWq&33%DmX^~10000< KMNUMnLSTYI8Fr@t literal 0 HcmV?d00001 diff --git a/assets/images/mobile/virtualpad/n.png b/assets/images/mobile/virtualpad/n.png new file mode 100644 index 0000000000000000000000000000000000000000..4844e113aeaaea443af40c7fe2042118b53b2114 GIT binary patch literal 21499 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 T1ho4n00000NkvXXu0mjfk}&qJ literal 0 HcmV?d00001 diff --git a/assets/images/mobile/virtualpad/o.png b/assets/images/mobile/virtualpad/o.png new file mode 100644 index 0000000000000000000000000000000000000000..d53a7d63bc4dc11ceb05fd4e3216f87a83a9a129 GIT binary patch literal 24691 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℘ZFC? zYc57KhyOYdT9uFGYu3|i_oYL@X-t8(U3t}q_;-bCag>Bw7`yZj{Px*bbFRS|iHn1p z3DAotWxrS!g2)70fGq}Y7k**$tw&eqt*D(nestnH4f2|op)1KLSKrJ@nw1=4u~^nXq%E|p zW}?EW2O;uYW*`|eROf(-+UK_HbriKkDT&)8$=aEGpexDgSKrLheTF}j+WwD3v{PoF6#C9Jva3hEm7^V*(P zc2a_!W1fGm3`IUjUl&8~S2j8`&bdGP%Hw^C+OJ>=4;S3>(|!(ZZ$}4375N3Kb@73s z7NEN~(yy$AM&XLuY>R5=@5#5-iz+t)cfp20_IrIdK%%caHQt3M~MmlO~2+F^thMUV8L zg}a!v@Jc+M)R&?ZZ2j9WkwxWL#Z@U8g}$B4#Ceo$GvT}?1hu~NB)@2h?Z)Pg6h-Z1dic*jKA%%jo3CafuP0`jW}+bm;^F6fOPwVn zg27*JzmD$f?%;xxk7HucNrQQGIPAk8ArvnZ8k6AFz-K~ne6X;9ZOb3PE+3y5y$eD# z>XdCee@V(J&G{gce=P*e_}J$QJ5d^xfN%)**)d*NznQ0Q{~A4Rs%j9Euv~IZ9vxz_ z7`A047H7$X-n5ER@uLR}i)T~R{@}vn*(l0W6}5g(Kes}U<*%p(P*QQ`HQ%9j#j=cw z+B2@YA*BYS;3Dc*JQ)8?2cM$$gp@Tp2S%u6A17a$s;EW6{hwKw7)Ykk%~u|IZP1EZ z4Y+q}U$7@Hg0M{!+p^-3@IVSlWV0Bu!9?T9AKt{XSbXC4pK|6AGpLRi!6`PJzXXyv zzzfV?xFq8_m2ze_M$`I$&*Sv7K0-LT;3>zsknLRA{A-CbMY|^iEi%R%TXyl}($CYT zd{{zbFe_vwKmTN6a4m;W9vP@enouh4Vq~={+<_shqL#}3>vu}}nZUYPc!5>b_uE1^U**adX?LJ?2qawM(X6n2n5%v0!!rW?go5MR{$<4xYaGi+yQI zA;_jcEfkr^AsP;2TNb)uVCS$P0s(Id8RRRqE<{nAX`3GE!B#TwnVktpi2`aCe4_83 zvyH+7jLzxjnY;k>du|_bMXg?-`bc{G*uIi@RJqSRz3IY}FhxaTzkw9B10nr2737q; z*^G3OfWZ-kEi@V^=6hEz=FG2upR?x7Wa5}ok_35!9`TcjpgRN`8uqfiqm$7=KP5#$ z46g^XH$rPqh?Z~|i9*`_-x{K3iPGeeiDTddHQMf3? zq?b7Ua6@w!|Ju2m<+oo;k1~dBLd!tVl|L~@!L9gH@SOhwkxmY_Ww`@R_G1)CBh|%- zKccKEwpc7yuxt63wcGg2ant$*D*Y`xpuD_rD`EtZyhdmyQUH0EQP(nS~p!Z*RuU`Q0t;yivE47k+RZJ;D>Oo|Ebl9SFGBIuOJFB*-CVnt5BV zLV#xJ^1q%~lm1oKQqZ<#L4gGE>`hnlsVD!LQtC_yIQEh&S^q{JYjz%JjDU4AWatLe zOho|yz3>#8RY|{2?<#78SQsdJF^CkfW~Ta@o)Fubn|b5M zH_{^vq+3E8&j`*kIXI9^4xvye@qUuu(?Br8y}k6MyM^xjf9G)CXRGpY;{_-1{pGKx zS`h*wjl1zqnt4!J5eFNDfM|OwYo1%dZ~y1JacxX?MQut-H-qJnEj_LYSf)~443j)3 zY*|TuZ1TVDjt+cYFS=pmWlaGw@kZ0PC!ePf*>|q@sNS@r4 zFCrNH^t#W%4}X#W$tX$BQ%$ol8X{cz@*q&(V)lQ!_ z8>0Oaz+Ii4jH|89dC`dP*Z&<(r%X|o>Lv%zT#hrAhZy0+K1<}`k5yvuBdc6T^w$Q^d+q< zHWWoIO48Ha12`QVNL(+u+F5sR1Yt!nB0cDlF6LcwrDLEbKM@6Mm;DkuSdLj-h0^=K zKVe&m^I+SYuxN?H6Qb`N2>JrbhKJo9z1*|pbaqngC~9HYh*J~Ll|@-Q#!I*>J{|#f z;@3=ap8dXtC=)UrIE?zD50C-rv4i1+BKvI434Zq6@n4Jm+v+y?$5(d7{MBW0{jRlM zAT~Kb=lUKh(vK-CD|3R4gDi6v!Qfp{$$y`J3b#MLni3(+hO>5rp%cpI;51Nk6D39Hy(Qi$L%o zi!^_LywKL#N-PWUjPdfywz^IJNn=NQ_cZrfboOe>7tx|7l~V(}wZ4ZBrysMmu8y(Q zCjpry_pXJJD-~*@QAZh{x$s;ryybqbIB{lQ_^8^kRug9}t4`^d$6uU99jW5|E}gUD zOw&gQrvQW3*rcOSMXeByry+1i;jy=N@WL%$h%0KVhI~J{($Kn+=t9!j*_rYCab8{? zf6P38i*#lsCI}+nw4bYV!KdvEDiAjgF%l!(2N+po8!h}A%BS&C8C2}tysNu*@>JOv zX*Eo+$Tx{8V;};t^5QLgr_moHVF!>7X}5 z7$Bgb{5sE;KPBn|<141?`Ec4YfnO$+ia@T$9^G2#$Ox8Ea6q}_|a zo>n9pc7)aR^n>@ewz6aUcE;D%67U%Ph+;6Y33rW+t3L5DrqJyWMQKr*dr+83@9w+1 zqnDq3;!Ji>LZ=wT8=2OT5b=@*Bhhi+gCJh|^oNd)4kD2VyXyN-`U2Fn02@rfe#7hS zz5DLFV*ti4`U&V*T%u!Vie9(2wo)7jFuJDZ1Clt%VHgI@O-;0Bu^x(b)MzjN=XUF( zk3Qf1D)QF$e@20J6z@zd(w2K#?W@cTZs(5e+Y>46F=NIId2WsiH$L%SpZGWxD$0V} zf62$^P9x|c(b2Mzfs%1j5U_Dy8^8SQLK+Fi3#ts=zduxv{`|W;I|&AZy!z^^8TT*I zQKJl=)CCe~aJQ#e5bnIAkBsIw5A5Yim4WwM_8C=E^Fch~AVynjYqpUBfK$s@5BxsE zSIKiQ-U6;Uqe`6rOiO<&!VP>@S5*-Tg|L&va+zf2gCUD{;o~niUBxmbDH0}Qh_K-9 zKQp$p2%ooa0#a|(DU`ZT&FbsqJO-(t;VS13zxB&m1 zPnPdDyKI1&qrJqMWBuF9yYIfs)G1S#IcpZsR~s{Z5+4jrU8{f|<)H@;_h0v4Iri+E z-KdXX{mS8*Rxq5%M!=S7vZbz$#w@Xi$pIphg506Q4j`q9Ps$nns_*ZpAd4%E>~l1B z)z`Cg#}0yle(|dh@E*Z13^u*{ZccKj@?f7>#vghbc%i2OdK&ugv!iK!`X;ronj3VH zIZC&E#|~DkSV1@x!t3>>%*`njnm9E6Jjh`^pZnW~8+-Qb;a~syS5|T;){&=IaKF@8 z2kZry_Mwv#-=~ZS!h)pb5MMZN6c7Eii6xo*PjCWN`&(O?F=GZrMVS}$_y8jh(=-W( zLb(Ex0F>y+vn%+UN8{O8Qc1bFHK+93_lae%P%=Jc(_J4MD;6wkRA-XKV1MDo7a3Pm z!`!2f&g;JO?GPhr2^?)ogTNZerGZg--yY2F;uTJ01M?4PE-QT)6``l`+?jJ3327S}wQkryQ zQxlypyui5HT1Hn_Q(jtvCi-`BO{uIC>xNs8aIiyoHaSQNfwtez>72?8Cta^Mur{=M50>yyGAZ4Vtj}(lg z_>N_o7##P>a2sK0lH!t};FeboITmeGQ41mR62XoK(i1 zS34P>eqbgP1p;_Hp2VMNnkiJ_mcq-{M&4(WbF;#2Q$~h(o}RSLb=usxU(__QO%pTz zmv6f`zlybEyxgcftT2RQrFaCCM&Ry!{qJkQ`@ej$@#7~OtuJQ^RDFPh7eO7haFlqi z%%{E)@C4t~g~BC>ig_6i@j#+zNWu+CCyDb%Yi~WXUmlUo{rmt2CrWhWIaNG6z9jh5 zo>1sf<#9>@x&-lyU8(!WGsgXi`tlkG3wU5}{PSc3Wm!k=jcO15vsKQ@G%frC99)uo=}Kng81$3{>Ql1KtGcBZ4)dR+i(B%Pw$t9T``u=t?l8?b=~~?C{GR{lo`mg ztMyeCx_y@oPiEV%y}w8fl8Ss+%)>(xNh~JCl2E{ZTr`@O>w5Y2%N9RYqrEIcuoj!=()Y4dudR>FV}VRtItjG-uBx5*q3)jD2vz#Q}s=#`v3<9 zhCr1X$ccVBCiz)k<>Obssprp+G}&A^zTkJOFH0hb#cTSLL~Z3%}l# z=}ZoW5>HUT()B&u^tD?2y}I$=`@_~5`(n)68)Z~W3}1J@)l)veP$58-8mI~nu__N; zHC}d9d0GDZM!q}ApC2LoE`# z*>Y~LB_?-Ra(q)*Rkg$jc39{i#49plNY6wUs3ILzZeUh<=pOCYT7tT2D)nhQ0=lu@ z>+!6+XLHX#KQ}gW+xUO|Er%3uVmJbh3J3#t0C%kJaDMQW<2c1qoZo44QrMze3N&31 z)16A|Lf3VnlrwEk2%!L!Qo^$P#vPBYtN1<{<0Oa5cFUHU0Hy01ww<&@fUc3ezhz5= zQ=nT3fl>+~1s+@C(F8JJ=siKr-d^JKZt>{aHeINuupNCX7G+=hHM8L-Te4RB%9ykn zh$Q0JDWfsJtx+12yyk%iDh+&@rfly5# z4MEJSYqq8EN`(=#rKS`@i1;MSB!W>YQA=3?BKbRae@zGtg|Om60wGWyT_~v#`EJj4 zp7{M}>DNs^PtrOT3J_AE5f_{pxro+;=CRCxCZ$)` zR7wC%Nu1XmhudFu4P|4*OphMXl@cD?_S?49rKZJVy0_OWZLe3^0ZSrcx~DU&`&*=@ zMKmdOkCG+Awu3$*#U5FOq0zWjcUy38hu}LlkGR?Y1vJetiBIwhQQHeIX ze4J?PXk`588V%c7Nxh-9*(x?vcTtpBN08!C#Z?uNSh(00x>rYe0HUU)X$C?_G`IZ& z=$fuuHa?*#E#UL+-rwH&#z4PTh9A4u@{@L*tINHWqADqvvXu%Pe0u+X5pzWoO;=D8%khqt-dz~QLH-%0JW#R}Dj#m4tDI?=>* z4hzNg?KHE3O8PW2BV2ef6er6sp@Ci6Q6)i7D|sm)K__|J`@p!n&_XcSKIjTCQagl# zsOOt!?FlKs{&C`TZ<+)xI@#g@8>-a`|7hccr$s#fj}kM;;x3$s=P%W5o|ox)=!ziJ z05~yl%)XHps3=J)?&e+H6!it?Kt;Lu^MfWu%|rgebI~?)DO}5)K55+_of^ zMBC!fl=Lb=r9p)nI~Djt~4}?8)7$-6|M+}PYb>Cidmk~tK z1l|ap=E3XLe6QAmHNrG1$_A*>jxvrK?Zj92-ho0jaJGq-OB`RJycYj2(X+G4h)e}b z@)S&Xc&Wsa$Nq?6+0Nas?=HV5UL^S-B-XE<^XTXKVo-M;)X`$4lEsV@pd{?=3If~` zP+1QQRo6Y*!f>5svb7qn8B{W5|m=s0f?qPv0$F)>Wi?0_sCoAy)N3&Atz zBXwu960ijljZlN$!G8Y=I)CEUYc<%p{+^g)#7t-b&TTCkK?O6NFqcB8!C{3I5Ms+<0Whr?r?`nObFH!4)U%5|U7X9M`s>vJzPmSDMa2 zUH!qkO2c!XTlb6O2ed@yasoLaJJ+`p4EO?Nwa7N4Z=~34SQHusCpC_ucKwHQNyjE= zji%0&+Z=Ht`(PQzQA{+=IV!u6XD#f7Bl7P#v&`r^l9_Nxn3ykb;zHnLj>a}%kJ-G= z({*-ll1qXB8wb4~W=l7gVDR-N^8k)bF%RaqgNI`W`}rQJN< z*>XKz7%HJSMW${djfFg?7v8MMkgzBp+}&}s*hphncfGcd_K7NafJHc;7S#k8iM5gE z?{P5jzI|GB{vi5IToFUERTg$F=%R&&W`uI@QTRUTbp`r`C+w4M*De4bfFHe@Hc@o3 z-J3V$#D#sjGO5BftZ2tm0ITZ?x6oqRU`L~nUJS_W*06f%(rruV!%=gR%x|_)ORy8bVpo4NX*ztO#v|)%iI>&So6FQxVP1@!L(2 zmSrYG`Ne>(i%ksm|&bOmxZTg3-=ht2lgLKM|3YuVIeJGzSeaxn|>Wt z3@(a|Gk=-S|B@~GRT*yhPcWVLBz!0ihF?9Wxuv_E`O5_ywC{c~wbu6N6Z$U)qZ_`R zohOfSL~k@)A&@)y^Lm)P30+U_kE(O4$Im&61Gh95bnVh}%k3RZc(`KK9~Bx|9OdKu zCS!$4Rrt^^2$|bFM-GMV@Z7=iB*oL($V)q}|;OKXO5s;UxZ60lQXWa{d_(RGstR6^8j>Fff7q~DoC z$iG#>k$w}qXPd1HH3p~6Usc>Npe40U@zDCKn2io5R^F1L^4*`|7M2J{tX$*OsqFD| zMcn$M#O%8RBB|Zdi{3pPB3W@tSPd-DP6wc_x`|y`s~J)1FH?OclXvRpGTF5Mew;0^ z(0y6GsQ{Kco~dPVU8B`~#zDbF>@9l<)ktz&5+VeiIJ2zE-1~kTYTxRuEjIyPSvd-x zPbYY7ec7MJ7pDGWh;URex@>m#dt7Cul#AxKj;n#oN2*$`DO_-Wm~dpfhyNMw7fzGI0n&@YqMi92Ea@Ji1CW*sIqYA;ok;F;$~!NrimQ03xwHQCdI(DN}IE zpdO(>T?Rq#4P)x-G-rQyq#9YlnZ9i&I@oU@1iu6){dJB1ww;`&K=0h-6((qC)9g@o+Cm)A^M)VgxVr$Tzs1n3=zUGXS- zu#m!k@6lQ1kB7PWQz?U)X}shz;Omn0a1(Wv3UOMbA}`#Ce#*Sy8_2{YG` z69^tuZziB5JS8AksOK*1-{yXlyJ-4Szdu4h1bG_RURhs8cvc~C$YuR~l=&-WG#%pn z%j&N~q2&^3b&|Bw4=&1dHzYC>2;p`M?jor?2|Hho(u&=OqqL0v{Mb>V9VLIkp%AtT zv0K*5OJ!fnq1L<*%yfWw)G%EMK1wIf_|Ml;kqM1cOcCr1Rc? za`X>Gp5aCV8yK>fwmg|vT2D+wxUsFn4dY_o#jIdWp24%iAlUxnDeB6zxO=ODF*-J;b)R5!65PL_Ff`IxVLBGPlNa9 za8MRW^y9k`dq$9`N85eUlZlq=blxiR4~lQ-Sb?ec$z9>|iR-1M_esw?4xi^%>+8r# z;)c>n`mcRdlxpe#ltj#*8;^;p0Dh)c_R(tiH$L88l3MLkshMD;6MG7iY!KR5VM0tAR z8(!`qR>?sgKe_jRNX~NxLP3b8N>AcZ#JWOH#s1I`X=yqC>9s3?8rO#a&7`mULF&HM z$u6gLjE)+HCJs0UEQusx7;*aypPxq3!eMcoXLx!bDY?6bRw5JgQEYTur{Z~)@O?1% z|IuzNuOYsK1w*_1I)taMzb-I{h*6^9l0O}exuC*DtaEnHfR43y{M|SWREJBDpClCHcLvb_-BN2GOO4YA{`{;y6jQr9Srj^!+VMYP09kRiw=~gt3TLSr7HXNy3K>K#?WJCDwLsvBfjP(ST=}{?`I?}^*nM(x!(Q1XEB8% z^r23Pc=9UpBhcTqD<)!9Ht}B4$cV=FU(S-xztbJd(FxxPy)K_oPGJ}oqDfTYhE*9; za-1t2w_Et7Y1mGF4Z$*WoZIQNdY4Xa604aQ90an;Nz>Ld)X1z<|^ z^wIIVbOcwZR+6;*cKp@)s-qcAL9RBLg7977b|rYSSK!ysWN`n`L0v|v=n%g}Xe+)Xl*h*d5AV$o2G>FhOHCE;Rkfi@uiiEWz>73CH_J*TL=0fI z*|GV&QGa9fC4T-3A)IAj0|-b_UMBDEXO(H(LioWEgjrgNCbu6-c=KOaJO!3#9`Fun zwt4QpS0KD)`!k)&SYyFcGY{{)BlP|ys1=lVaA5a`)v)c9s}iU>r(qH1|5MpK$hCjq z)KW%c+(CoP0V=wQ#N=SZt94tc`G@u?h1_uc~n*kWP) zyy%KXbD?C-^urCQ2@6nndJI~fM`HBB%=0pTi5B%g1JJIzXAF1!W8^wlF1g#k0+FXP zJ#FD(9ObjrJi6(hz6`OqUlsELXeCs6s_`GMw`UIMj@L8iKcC`qx8T2VV50*hD{fXp zu~pTP3C<%=`6HkWKC-Yj&lJ0BIy&MOEcD=As1>3nCA~8UV|^YN7vq2BObDbsziqk+ z-1$`I|HZ_opQf~z86}iVKas_;n0zHw62AMs8ffZiZs{6p@ia-ZdDhmh!nx$CWA{1k zM)Q7ZnRJ)JxH}63R^@nKwUh0bfcslCI&=D4R%-1Uu5&TA9UA9)+?z|qW`(v^RvPRY z0=ZX>dfG3*lmt6Nn;kC9A1k^ob*?M}FuuVaf465Vq;s2uhv{RBH0^-aG{|Fyy{mqa z9&S_;rqthZtZD7&Az$C%lniz;+BuD+REScht-QF7^4gekt7Yo+GkyKyqi^g=R_a6! zjID%93KB(=n#WYQ>^p=HcSkD5P>jbdI*FY;;K=))HRH2q3sG++F-2`#QHInk@mA7e zLa!1}Wco{m&ttI8o?J2 zv_yZ@&Yd~1kNj#bg?tb$Pea3gH{EkaS$x5cK=^fcW=tvX*8t0&3UXnRI0@6 z=t+#|aDN91U$i49v{=Ew;Ucg|%pIqknFq^0vh?iTzT_?nC-2()3mnH=SD?%Hufll& zuKE^kY_m}%Ju<~5vMqmDsX9d{j11Mvq&g~|oOYOw<@;lzVolb{G2<+!dtlXD0-ix@ z?8o}qaqdgSgsQ6vqcOKfNN%&*I>yrFO3SrMA5q*l_xDJ|UB~fBRluI7NRr3zL~;(i z=7(65H{9k-gjSkRfXy)Mz1ystZHEfz0G{CI(_;qb4ishCq{b9qfz zXz(h?1nK6$?b;BV+V8O$WgTd;F$gTsbS8w>=Y^|v7nzWGW`b1rP&7RZY!G3ANx7eL-_C;mqOd<^?6Qa<0EUF zv}DXI)uw)xteN&=v_h(gS&vMf`Gwm&fX7~e)*#Y1w0|b4DkdXkXQ$3lB&D=>Xu%>* zOFsk35qgJhkBY|(wKw_YFB_E7wUt^OksfkV-l_B9#jL89pBvCYs?=#YCp z5h50IPvbF%+#0swif#KACxb$&ytaSJ_AguaFk<7-#4AVyH6rcTf0CJar%5vi-k&~b zu>JAG4k9Kcu8!z6R%Cgfi$RpS{5!W$QSFS|{33P~7!V4?+DRM*rn6En9WP0FyKnRJ z$Emu)w7)P}-1;TX(Q#!opA!AD^g+?~iO?&{Zms&Eq@CFfCW)_APAV@I zlRc27>sFe9r(s*B*mN#jqT_G!6sUoM8i>^bJ-fMCo$a=6Rr70@u?T5|N+3<>X2I+y{smGr!j=sjjLLOFj#6 zbbN@+IP~mRxAH&EOpR-Eq)h^xyS))gRaeCW&X=jgT!Wzs?yo8CUJyT@cDWVPai{T5 z#6=5j>^a*k-DtL7bEmtbfA9rWdGhtX*PcJWD?F93Sx4JFF>*la;?_?!GT4}_(|IMI zo<vvcD4u+o01Vlmk2!`@# z!Y<75H$BbaNN2xfJTlN0HnbaP(W8wrDfIQ+Rm7)%>m997Y)M{5tR=y|>-I0~6w}T_ zMZWnXDch`DU(Bl5Y7A_=ufU_p3uMYEc7nS!`pXe`Xt?Or?TTE~QV8EV8eaLpX3dc( zN087Gs%&f++Wt^egDGYAT>(RyG!+0`G{jtlfF{VKZacYPt~(dK*}1dgj28-(M3|l! zE1wE-d<|$srj)(=YlQ~^aq*8}&;+Y-bYkP50q+dW15*7+#e2Qm#1I{P-U9Pt= zK}qL9N@+wl6$=e=rw673`oe-1MogBHdb|A?wfpjGz?+h~t<4lpfk57o-Z{agx(=`0k)0Hf!RvL>Xq&UpeU-pJ6wQ~bBp22X_k>6M!^rjHHY zRV?sUw+PFb{rA__O`o&m-=q^--&VJ(X?#)jh+rJ8>^`=VMS3Iw^R_P{66e}SY&Jfi z{f^;*%iL^F&Ghbu_qu-5mw`jo2Zf3(7{G78cZyuZ9WKsFVhfb2=WoC6x0Slg*|ry1 zS>Vzdb>BIj>uq8Gx()Gkv<=m7z-{i?h*|eJarjngchO5)_`vAqNyyg#&FXr#7~=Q6 zB|ZGUOmTT7e%f;*#b&W90m^4s%cCXsk;ow2~*w5vv8MS4O{itI5UCH#Q{f@qS37N!y7{wnKvaV3q zxBY6&>=*WJp+%2K5a6vUPk)cqTG9*v0gf(4*5`}T;yi*lD#Q1-m?FAm$?B(;PO_1g z1$b*TaR0SDX}jHDA0#hTJyT}JW_?!};XkZccAkK2yMZD$pe7{?P6?E%XPuRF9YqD)oHGFOp!N#5O0(Cap%NRLY$3f?lq2gUKK9lx@UrPw*h~%8u2Rw>pSw6_=Jd<-Z*j_hNyz>VmoK^UPnQdF zheGb8OSnO$2o3zy^99^_f%;dSvHcNI5&?^^_QOJ0(q>-gqwhom{rOEB19p_kmpq0>xlJ`LL7 zd2eV_WuT%6u8%G52mSPxWcM|3nrV8oSd^vP&!P*Kpp;Qqdzi`bsoD_~2UEaM^kA11 zdG;x>Drzs%LALE2#pAlkE-^!y65|-=!4@7R@#jIP<>@t5#S9HKNc-bkw1ICbZroru z;aqO*1Xbt`1p#7UZ2g_FemYS_ydzIYcy&D5=g{QUTC6u&7dKhjZE7cZ?h5d@W6G|J zx=y6=2q+16lZ*TWx2ti2%wEmRi7zF+eT-~#^!SHkP-?Wg=ob=uiPP`R61qr(B@UpAY06o>hkt-Z1sU+e zW_P>BFC8cMH9oswnlc3Cgg84~cFfNGntHwa+XL+);XEnn#r9BAXBVTkhtqUejZZ)vCN{p>q-KUx_obE9?iysBAe49V8{XhNhrB*>`>5w@Q6riTz&3o zACU?U0%EM`z+k`aT9|NFDz>$TLstQv2{x=|l~mY*8comV`W91ZZY+$EP(Vu019E@< zaF5{myvE~0wBNcoIh&pi`&2vm#ZY|NzZ^-@>GB)_F5s~tF5t?477h72V!`n*UNeK% z*IE2p-I1cc?+p%Phc~}rKvSZp2JG+XxWVB4_+JV7JXGh>$Oj0C4=@UsyDet^q}bEL zKVw+Q!pquCrN`W_ctd*6WBaj?f6(%GRzj_IyfkOW+x+2rJ}VT$nB4xrZuL3N5cO3G zBt3{fwa|Zs`tNE%jm+yJ5nSj`oq0lS4!c_kubs3qKeIj|!a!yxh8CWWSvPYR8oo`{ z8{})jOE^cC6EIcF6zBh09EyOLZWeXbsichHjb-;@8X8{4C&UQpz|mv zQs)ghLBh|^P+4H*cqZd#>-~LBIRZuRjn?%FT`>GZO_jXDjX}mJ|K4?@P>}aUK4$A= z?78xnvoWF6Wg-@`FB(EJ@XE@26t9^(6_T5`nDBcMHx@+TpHm?3&m!7ai5C#lh$#q6 zf4ii}F+22@4jnQ*UvAd+mMDgUffLFLN23_|_gJ8_&fjTSX;W4K5TCQ={rcnOqwcDv zp|StVdyWeys*oH_+R8+ix)hHJ9}X?@84k+J~|q9Rb^o-15?&n_Z$;L#0ulrY6j%PBPSTC`S?=$rkxGGP3&FWmzuCdw6%OoGO4 zM}vMK6+ONx`JvM4i8Z@-CJ9AMKhEPe`>N9!VijM+7O)MCyD-bv+X1y>>Qu;zO<%^{ zg7j(&vC_|ddc1`0#yB#54cK<6o3wxYsP=hpsHUa&sKQSe2)C=iJiD~-)4l9Mnm0VV zXH8Vb2}ilKSX$ucb*T##aRfU`3doInc>k8nt!`1eAgo^T6h9lQO_k#jw z;Md6TE4~3Z)=T) z6UAo>zUJ$>Vp8ZD-`bkM%C7Nwt^wcgZ4}=eq=q)wnUY5u)T7d;U5*@97)?6uzr0(N zHdw4c``!JchWJF5_|&^V7$|BcHBFhslU&%jeR2Dlm{13q*x3z)wq#}Y#J-z|Ag7c$%HtRQ1t()J? zW1p-CQzcb;7u&6Dm#dpkC<%geRMFR4()sQ-pY=@ND5Mk)nzWrODqN+hrWEKisquJp zjML#dth~TK^W{G&Kc~Y)3JupF=)%~HZreBhwcp*mNRgUlDCp$-t7&GC7SzAo-;RfM zQA4W~o>o?$((5EHE*R%5hwHeb!kP-N9IICR5y}YtVv9r3XN@g0s8O1z<5Y&FL;<1y z=GhnZoU^Wllf2sA zttOoaM6|T$d|q4$dVgpg{r%Mpe_^O@u2=px`4sAY}<6L+$YXY@(K0X+ce}o}9Q{x!PI=nw>792q(_y zk?j0N>5?a%`9zo;v;Gr+w2&h3@ki`X2Sb$>(4{MIz`8s7UKd2WaV(XDmwJRe;QOY7gSLzXHIRb@W zR?WYPWBfpnD9y;l%dpbg7#cJE(#%Nqzb4!FJB74h?NPH z9}?xW*pu*R7FBgsBZU*n?O@V_e|M;iTXZOj{VkhQ8|5 zR`o2)`Bvj3DFXev%)db?(xb<$^Q;JGE|7pbZU=Wmx~Wi)De3Bu7Ih1HtOL<-i9id6 zgxF@{H2$yYA~XcG!=-08r<5H$yyD}0n2fL++vzCl=_qfPi#Swd)GYnqRy2j(EUMPc zZX*9t=Wid#aI{_&3R4*KDC=aLQ&4QM8mY6Q72^h5(xSemuFo(Rg-9vS{5`7jQ$cPc8swA zf)gU#B5vor6i(RPbX+d`awigS5~%N{CF`e?y}vw8GjjF^$X4s=+fhVz&%bq8a4s#; z33yu>qfz5Rus2}C1hEM)BPei)=mg+>@tB>P?e;ebN)$5tY+)*hs}*(#Wb;l;l`6dL zJ;B;eNbc9wb1pjclQ8xJ%#XLeII)Bb#BUBu$Q>{Tr52jzeNZK>Q8J#|oY}0WLD?NAgjoTTh968}U0#s(KDyK(32gXWj89%&A? zux#3IhO4fV>27JsuiYsGCH;2pb~LLmYEA>-|6W{bGC8mrT&ojf8jMU3^)y8)$9_SG z5|9D4df7sNW(5`8ndU|G=mqynoaW^&uHN4-OlstR9IfN4*7F__0{3e-rIhSJCIz) z9DCEEOxtE<0kWb@0$G2Llu!MW{&v|22@9l+NxMfx;$jg)F38#vFKf1A`E&In8)X0r0l|i|g)0sV z3lz!1y9tq{P^)z}tWis1jO)3(0gKA6N&+TnCgvwK)|k~%D&|rJ>W6|WTP2WKZJSt< zzklm{d}y&#tFK{eh`?a8dTT))gdo}s z2@M5|;KA}s2U29(D8QL}in5+?&I{FnK4u@NRFm*BIOEYtJol{Bh~;7Wkr!!3043fo ztl=FlW)~|S!v4lqt=A#3x7UDhexqJe^*SGwUnYT2(v;wNi+fb*K13MGbY}yDV2}H( zkKayKeyeVy-eX&1JpQ<>AHpDCu z1i2M@!sOZ>WfN5sGO6>wXNuRP){jD9A_{$__TC*BOedvYhW*x>wVa}m9D z$|7y7Ogzj}!3?RGvB}OZ|R&8nVdThj?M}@5ZRl#VWpZYn25$g;`5*CjOTJ6s>7DGu&*G**;iqiO; zy7}Ecr#E1y%Ro+?9EEb_ENW0KDnu4$5_)*k*x7}i4z?`bEN72{%q@iWlEgmu+xU06 z4AAg5IXQQv_>o7Mw9tB%-(%K$Z^t=`+8%PXM%>(o``MU4yJhawH@xOhSmz?CMZOST zFqL=mk5?Rw5MGo@m8m8=aNEW#p4NxiO^kx^W3n996){718<}6qs70hjY2d7&?9m3q zK#(Xc5gF=<8rtStqP;h_kK;x*dX0C%V zLW@T`rF>cJBug?qT#zn-xjC5gapBk5X7)@t|%`7Jcq3c~uM?_3wmJ|5`e zz0oFUA7!qR7HPc#jm`K z_@Rkp|0?knf=^@jGu`nzEfAuJp^z)xDcSRmN4C$_&dZg@#T_-Hrl*Dct6=Y<%nuu}OFpj(zg&2aAp zMH*Z!Sg=y#@F?s8jp(3)na#6Lq|{xCXHm-)O=Jk_66c4~plw!0%d4FT)hgFDODhA= zJhP^<^mk^e+^|~ssXS~H_s$py5TxAYF>?JX;^bIldCh;f!t?tdh$^4Tj7`!;PhhDm z?{$AKdOTyu+S}bGcaXzCR>G9b5{+<_Q4#ZQjvVoyhe*iHS2HYxlp!%=i`=;*d!Y-jTuf=gTSN1; zC`$ZWKt1Z=7BDphrm1aGE?RMsVs`83WXBHsk8wb{-jB&YBfnE>eM8y}XU9d;85995ljW{~XN3(7@=|taN-V-rb0~!x z6jPu^zM7x!f?+u_esn=MvHXez*c3!WC z-4-ACqvdw2TEbyHK{c6Eh#I#lQN&BGL3ctixkM&uKk##4N(L_j=t&q6x@bAl z`cP&k8EqJM(a2V&jOVwhJ|cBU)I{>-ee(Pew{E>1Mr#$i+^Z0{obLb?`TCX7z&0kF515+v%}@z>z^ zIF;iz!C znH^4y`m7xW$pf6b8JcHWj^acMrJjwC91rfj!?CRbQYAM3if}(g9HJyh4rrzDi(0;4 z8s*2Vn?T_1L{g0&(8fkg%BfUGa=LWD2dhUL>U?`*x3QM1W`lk6{s_L z6iIBq5a<;6IvL-=t7?U)7SG$99$*tY6F)@De7WuIcI5K#GEC*XIH)79uIy{t9^)6) z5#69oXc?jaj84p$_#bYwXS)Ij>7qh( z1*I7Y&Bs>owLHpp3LA66tp0Gpzfp!vb7{s!Y1SqJuWr#V5cij5?^hYFum}yPkbS6cY#^p^%e?T*@4LaKu+pUJZl*&4($t3(6At5 zh?z^{YcsPCmM?}ewoy%A6%B54GQ-x*F8V_Ys9Fc`jF=(mdbKc|$F zZAGsjaK4s%?znBC-FNqfvD+C1&EE<_OmwEg3r`A)F5Xa$O2}DbDR=1M&LY9aooyjx z!8{Hcp!HpXoQ;~q-)9^Udz6S_N$g3nuf|JTJ_^&VRfhBQ6j0!}Hy(reinXSmkSt14sLG_xMtP33N8NC)q50NlDHj|JEuI}S`(7$cftLhjU%bdT&G`@`dE z8DmIRoqrX|!(x#wGDceHjG$qms=Hd$U1X`k!-qfG6G^o2Vj`}0-Hhm5wVAN-Y(0~F z2v>Eag_Atv=Doh>2FXakvysSgv%QLA7q$FF6PAuyFUn>8u}#s?JT6WYqK)Ehg-2{FXav%{{s%TF1>saWW|wlh?l6<(5# zZe5F~9{7=XA)(6-BK{WV+c8yyG&60!7REYfbx~6ZHqrvSR3_5@LDuNM>TB1VL^+tW z`VK|1g&`qsn#RB)W~TMgar1c1N0W4%;T=L|lO^lb}yJwa;OicRkbdSbWcP zYtMuFRo9)qqR`7wmzkCn3f8Nx*-C2{t<>j2*iuB2=_0ZAE*NMm?UY3=PRP+X$nJz0 znAphGmwYRF>Pn>fH13N*WX6lsY)}A1-7{PbBDN|xGDeq@U|`Q1ir-Too=11G74L!h z>w&V2nQW(8EQO+JqO6a(bVZ)ou<&T2Xq^R7>!vS#D~sjTZ_-pa1?Q0AXv*YwpFx05 zTT!2z9A)?|;K6wG1EI)KTn(BlP$a{Ch0~u{#L%mkJPVufj=b}$! zGpK*^0%H8~qevs%;{e{A=ttIPBlVVngAa7YTFaMqQ}OI-rQ)8)iL zJ;jJsnfygK04S#mH2M#8^sO zFH9Ui8az|Bd*gx2W=&4g^)BW2F=6&>vQY1wVxUnXx4Fr0(7`_821pG?d3a}Fv)-r$ zcO30zAu|nFI=6n^Oow*-r6y#)u<2X(6}?~&6$$S4IIpAb`pD=pO4?W5jCT4#P}_Cy zowo6S-fOT1XEtTdM(i(}02@ZyW|t>ftR0qAjsTVVy(WO^17Q<)eeP!nox7*d~NX~Y}{u0tliKz~j*@mb( zJf&ec+vG(|U*(b5*ql)uC#I2d!8O(T-S=~iuOJYcrW}^wxPMm>ljQ+#WO6~eC`lZkCmQ4*@pLSPbB2?$BO_PyZe^e;;zq6WxEa=bS#GsI`ugbg ze)HE*Cz>Eh4>v;k(+vfB`DI`5W#0lH3~^Pj^1DB~ukAowAfe$H%0LY9mW=8HpBhzw z*;`Vy=i?Xz=vs$19glNeXR{3w7-MAaMCwc314&n5~T z9kicLkT?u95s{s{b-sMg-@#mYrzTlaR!UN6%itm)MEGGgfGUW5+Gqd)&Ho2kG2M+& zMeV**`7*6URGMsMt!3(w$^R&hAN%)x*DeJ$I=AfolbMJt$HWjV3WUI`evj{)HMhg& zWDWwuEQ8W{nxO%t$xh@Gi+Zix=n8B5M{P2Vb-4BpmR5v>%T!W z(3u&Wt&|VkN}q?gQto`d?*K&qe4e|>fI%UlCu;6Lx{{?o z=zz&zoPf$TN_xLB-6q01&f?#gArhz8fvHDh&4p42;oIr`v{cbW8^+{Xj4QKHj)3dC z5!xn5(SF(am0xDVGyB`I88cKxacNIP6}(wQaVOr2Xw8;CvPP zwc^{B`#^BlNJ+)FV!$6g>@Hq@u1-^>49BNPIy*e$-<_FA@fd_k_}wuep*P2PA(O;P zt0n%-h{W)7V?6sEHg9HPNi%kMKTbr7+IVo5wR(@Rm#RRx(v=!SXknQ9r11WhH`D5l zN~t@$zTQ9W6&_z&`2wj*TgqeWJbZFGc>v_1M@zE*&?x$@zV#r0#}%R za`VZxac9Iz;O1F&U1z0?)%v#ziN&J*+WkczZnF&HfDWiec`oAcIKAd6c8JLY_s_@B zJKeQ-QaqO%sJx%4Op)c1!|urgUJ=XHnW)cYm4J~_ihdcjyb+Bt)ostgT99eAz$k4F zGwLSzTU^uEPT#0fJAT#jKTkII{4s5T3@2Q@+5*YQRL(W~LC!y@IYi;WE%JC{1RZi_ zfSttTm}e#Q9Bbxiv>+ocC)yE6kD>xSz2t0@sDjNz$*J%kJpa)H%6PX%KV)Tj?nTmg zytAO(meg)&a~E;vMUtWZRf$x|sIw)B7rGw{8X!Y$TJ5^QL!}-JFSF⩔my(9+Sc| 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 N002ovPDHLkV1l8NSpon6 literal 0 HcmV?d00001 diff --git a/assets/images/mobile/virtualpad/q.png b/assets/images/mobile/virtualpad/q.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6ae7743433773fd2d34f4ae27d21d206a4c3c5 GIT binary patch literal 25687 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 F{6BBqC8+=a literal 0 HcmV?d00001 diff --git a/assets/images/mobile/virtualpad/right.png b/assets/images/mobile/virtualpad/right.png new file mode 100644 index 0000000000000000000000000000000000000000..95a8a4ff8a521f2b195d5b94679df689dabbe42d GIT binary patch literal 20549 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 literal 0 HcmV?d00001 diff --git a/assets/images/mobile/virtualpad/s.png b/assets/images/mobile/virtualpad/s.png new file mode 100644 index 0000000000000000000000000000000000000000..02d386f99efb4e97fb46f3071bb4e3f77a6dc71c GIT binary patch literal 24206 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 literal 0 HcmV?d00001 diff --git a/assets/images/mobile/virtualpad/t.png b/assets/images/mobile/virtualpad/t.png new file mode 100644 index 0000000000000000000000000000000000000000..af9f5103cfadf7a5b8362310c403a9c480a7c11b GIT binary patch literal 21122 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 literal 0 HcmV?d00001 diff --git a/assets/images/mobile/virtualpad/v.png b/assets/images/mobile/virtualpad/v.png new file mode 100644 index 0000000000000000000000000000000000000000..2e9ccf775f4c6eb6c6ef840f8f37f6426e3fe65d GIT binary patch literal 21434 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 KMNUMnLSTYBPID~) literal 0 HcmV?d00001 diff --git a/assets/images/mobile/virtualpad/w.png b/assets/images/mobile/virtualpad/w.png new file mode 100644 index 0000000000000000000000000000000000000000..3c84a137de2bdfab13ecb2c9e0301af89e14724c GIT binary patch literal 23909 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 iNP^Y?M1@1lIQaj3{p#ivk4q>30000 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%0Di9*ww3T36 zg+fV!K0Hloh~Nep3LykaiLie!BGxOMKBAPZ`E5&6D4`=w1KCz6v<-%>y=@!f9o?_$ zg{d2gfE&|nBgaVDFBY3|nnPS4NGc!}ELgyzMUe_;`nc_Z-}Cm5ZhIGa7hsh-IBD>p z!4rKxpVTz1B{w(M=kxh&A%tCDUmt!E6%`e(j*gCeKx&%S-q_f`&RR@~qq~?yNB=_o*pB!&lg3ZdHg4S5HB}TQ zRhfeI3oHgsm@pv^VDsk9)`STYG%2N>mzSqn+uF3y@kx^=iM+f#_2Gvf+LIxrUJ0eoOJm*8ZPv;leY$tTMXKm3qMlO_qX;ELw5;cK-3lA74^mUteI` zw#(&mxdFUhuT)Aovxrg>BtmGmVHmn)Ssp;<=jT^X+R?r`-FFGF*lK{bxK|Pq4pIH! Z{{vxuYyyh#Tdn{A002ovPDHLkV1lT*az6k7 literal 0 HcmV?d00001 diff --git a/assets/images/mobile/virtualpad/y.png b/assets/images/mobile/virtualpad/y.png new file mode 100644 index 0000000000000000000000000000000000000000..4ac65849e915dd2b9fc80cda77c83b881131ff45 GIT binary patch literal 22654 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 literal 0 HcmV?d00001 diff --git a/assets/images/mobile/virtualpad/z.png b/assets/images/mobile/virtualpad/z.png new file mode 100644 index 0000000000000000000000000000000000000000..99bca74b218cabb5183e3151b1ef490091e23503 GIT binary patch literal 21804 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 dW|>;`6zWj=`TbB_ - + @@ -92,7 +92,7 @@ - + @@ -141,7 +141,7 @@