diff --git a/.gitignore b/.gitignore index 154a7d41f..39cdddabb 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ .vs/ APIStuff.hx dump/ +temp/ +docs/temp/ export/ astc-textures/ RECOVER_*.fla diff --git a/docs/COMPILING_MOBILE.md b/docs/COMPILING_MOBILE.md index 236df0844..2f8024ece 100644 --- a/docs/COMPILING_MOBILE.md +++ b/docs/COMPILING_MOBILE.md @@ -5,8 +5,6 @@ Check [COMPILING.md](./COMPILING.md) if you haven’t done that yet. ## Android -### Windows - 0. **Create a new folder** – this will store Android tools (remember where you put it!). 1. **Open a terminal as Administrator.** 2. Run this in the terminal (replace the path with your actual folder): @@ -18,8 +16,9 @@ Check [COMPILING.md](./COMPILING.md) if you haven’t done that yet. 5. (Optional) Close and reopen the terminal if needed. 6. Run: ``` - sdkmanager --install "build-tools;32.0.0" "build-tools;32.1.0-rc1" "ndk;28.0.13004108" "platforms;android-29" + sdkmanager --install "build-tools;32.0.0" "build-tools;32.1.0-rc1" "ndk;21.4.7075529" "platforms;android-29" ``` + - The latest NDK is not compatible with Lime you have to use the old one. 7. Download and install [JDK 17 (MSI)](https://adoptium.net/temurin/releases/?version=17&os=windows). 8. Run: ``` diff --git a/project.hxp b/project.hxp index 5a380526a..959533c00 100644 --- a/project.hxp +++ b/project.hxp @@ -28,7 +28,7 @@ class Project extends HXProject { * REMEMBER TO CHANGE THIS WHEN THE GAME UPDATES! * You only have to change it here, the rest of the game will query this value. */ - static final VERSION:String = "0.6.3"; + static final VERSION:String = "0.7.0"; /** * The game's name. Used as the default window title. @@ -118,6 +118,17 @@ class Project extends HXProject { */ static final ANDROID_MINIMUM_SDK_VERSION:Int = 24; + /** + * The contents of the user's environment config. + * Read from the `.env` file. + */ + static var envConfig:Null> = null; + + /** + * A list of asset file globs to exclude from ASTC compression. + */ + static var astcExcludes:Array = []; + // // FEATURE FLAGS // Inverse feature flags are automatically populated. @@ -152,6 +163,12 @@ class Project extends HXProject { */ static final EMBED_ASSETS:FeatureFlag = "EMBED_ASSETS"; + /** + * `-DEXCLUDE_ARMV7` + * If this flag is enabled, armv7 won't be compiled when building android. + */ + static final EXCLUDE_ARMV7:FeatureFlag = "EXCLUDE_ARMV7"; + /** * `-DHARDCODED_CREDITS` * If this flag is enabled, the credits will be parsed and encoded in the game at compile time, @@ -159,6 +176,18 @@ class Project extends HXProject { */ static final HARDCODED_CREDITS:FeatureFlag = "HARDCODED_CREDITS"; + /** + * `-DTESTING_ADS` + * If this flag is enabled, mobile advertisements will use testing mode. + */ + static final TESTING_ADS:FeatureFlag = "TESTING_ADS"; + + /** + * `-DUNLOCK_EVERYTHING` + * If this flag is enabled, the game will assume all songs have been beaten and all content is available. + */ + static final UNLOCK_EVERYTHING:FeatureFlag = "UNLOCK_EVERYTHING"; + /** * `-DFEATURE_DEBUG_FUNCTIONS` * If this flag is enabled, the game will have all playtester-only debugging functionality enabled. @@ -304,13 +333,20 @@ class Project extends HXProject { */ static final FEATURE_HAPTICS:FeatureFlag = "FEATURE_HAPTICS"; - /** + /** + * `-DFEATURE_TOUCH_CONTROLS` + * If this flag is enabled, the touch controls for the game is also enabled. + * Works with desktop builds. + */ + static final FEATURE_TOUCH_CONTROLS:FeatureFlag = "FEATURE_TOUCH_CONTROLS"; + + /** * `-DFEATURE_COMPRESSED_TEXTURES` * If this flag is enabled, ASTC compressed textures will be used over uncompressed PNGs. * Compressed ASTC textures provide lower memory usage but at the cost of a higher files size. * ASTC textures are GPU Rendered so they have a few cons: * - Pixel Data cannot be read directly. - * - Some filters specifically the ones in openfl.filters package won't work proprely because they directly modify the bitmap pixels. + * - Some filters specifically the ones in openfl.filters package won't work properly because they directly modify the bitmap pixels. * - ASync loading for GPU Textures seem bugged and results in a black texture (This is meant to be fixed soon because it's not supposed to happen.). * One thing to note is that ASTC textures aren't available on all platforms: * - For iOS it's available starting from phones with A8 chips, so anything from iPhone 6 and beyond has it. @@ -319,47 +355,17 @@ class Project extends HXProject { */ static final FEATURE_COMPRESSED_TEXTURES:FeatureFlag = "FEATURE_COMPRESSED_TEXTURES"; - /** - * `-DTOUCH_CONTROLS` - * If this flag is enabled, the touch controls for the game is also enabled. - * Works with desktop builds. - */ - static final TOUCH_CONTROLS:FeatureFlag = "TOUCH_CONTROLS"; - /** - * `-DEXCLUDE_ARMV7` - * If this flag is enabled, armv7 won't be compiled when building android. + * `-DFEATURE_MOBILE_ADVERTISEMENTS` + * If this flag is enabled, Google AdMob will be enabled. Banner and interstitial ads will some */ - static final EXCLUDE_ARMV7:FeatureFlag = "EXCLUDE_ARMV7"; - - /** - * `-DFEATURE_ADMOB_ADS` - * If this flag is disabled, ADs from AdMob will be disabled. - */ - static final FEATURE_ADMOB_ADS:FeatureFlag = "FEATURE_ADMOB_ADS"; + static final FEATURE_MOBILE_ADVERTISEMENTS:FeatureFlag = "FEATURE_MOBILE_ADVERTISEMENTS"; /** - * `-DFEATURE_IAP` + * `-DFEATURE_MOBILE_IAP` * If this flag is enabled, ADs from AdMob will be disabled. */ - static final FEATURE_IAP:FeatureFlag = "FEATURE_IAP"; - - /** - * `-DTESTING_ADS` - * If this flag is enabled, ADs will use testing mode. - */ - static final TESTING_ADS:FeatureFlag = "TESTING_ADS"; - - /** - * `-DUNLOCK_EVERYTHING` - * If this flag is enabled, all the unlockable features will be unlocked. - */ - static final UNLOCK_EVERYTHING:FeatureFlag = "UNLOCK_EVERYTHING"; - - - static var astcExcludes:Array = []; - - static var envConfig:Null> = null; + static final FEATURE_MOBILE_IAP:FeatureFlag = "FEATURE_MOBILE_IAP"; // // CONFIGURATION FUNCTIONS @@ -369,7 +375,7 @@ class Project extends HXProject { super(); envConfig = readEnvironmentFile("./.env"); - readASTCExcludsion(); + readASTCExclusion(); flair(); configureApp(); @@ -385,7 +391,7 @@ class Project extends HXProject { configureAssets(); configureIcons(); - if (FEATURE_ADMOB_ADS.isEnabled(this)) + if (FEATURE_MOBILE_ADVERTISEMENTS.isEnabled(this)) { configureAdMobKeys(); } @@ -395,29 +401,7 @@ class Project extends HXProject { { if (isRelease()) { - if (envConfig != null) - { - keystore = new Keystore(); - keystore.path = Std.string(envConfig.get('ANDROID_KEYSTORE_PATH')); - keystore.alias = Std.string(envConfig.get('ANDROID_KEYSTORE_ALIAS')); - keystore.password = Std.string(envConfig.get('ANDROID_KEYSTORE_PASSWORD')); - } - - Reflect.setField(config.get('android.manifest'), 'xmlns:tools', 'http://schemas.android.com/tools'); - - final permissionsConfig:Array = ['', '']; - - final xmlChildren:Null> = config.get('android.manifest').xmlChildren; - - if (xmlChildren != null) - config.get('android.manifest').xmlChildren = xmlChildren.concat(permissionsConfig); - else - config.get('android.manifest').xmlChildren = permissionsConfig; - - if (isBundle()) - { - config.set("android.gradle-build-directory", "bin-bundle"); - } + configureAndroidRelease(); } } @@ -427,6 +411,8 @@ class Project extends HXProject { launchStoryboard = new LaunchStoryboard(); launchStoryboard.path = "./LaunchScreen.storyboard"; } + + info("Done configuring project."); } /** @@ -698,16 +684,16 @@ class Project extends HXProject { FEATURE_COMPRESSED_TEXTURES.apply(this, false); // Should be true only on mobile builds. - TOUCH_CONTROLS.apply(this, isMobile()); + FEATURE_TOUCH_CONTROLS.apply(this, isMobile()); // Should be true only on mobile builds. - FEATURE_ADMOB_ADS.apply(this, isMobile()); + FEATURE_MOBILE_ADVERTISEMENTS.apply(this, isMobile()); // Should be true only on android builds for now. - FEATURE_IAP.apply(this, isAndroid()); + FEATURE_MOBILE_IAP.apply(this, isAndroid()); // Should be true only on debug mobile builds. - TESTING_ADS.apply(this, (isTest() || isDebug()) && FEATURE_ADMOB_ADS.isEnabled(this)); + TESTING_ADS.apply(this, (isTest() || isDebug()) && FEATURE_MOBILE_ADVERTISEMENTS.isEnabled(this)); // For now needed only on mobile for testing. UNLOCK_EVERYTHING.apply(this, isMobile()); @@ -817,6 +803,31 @@ class Project extends HXProject { app.path = buildDir; } + function configureAndroidRelease() { + if (envConfig != null) { + keystore = new Keystore(); + keystore.path = Std.string(envConfig.get('ANDROID_KEYSTORE_PATH')); + keystore.alias = Std.string(envConfig.get('ANDROID_KEYSTORE_ALIAS')); + keystore.password = Std.string(envConfig.get('ANDROID_KEYSTORE_PASSWORD')); + } + + Reflect.setField(config.get('android.manifest'), 'xmlns:tools', 'http://schemas.android.com/tools'); + + final permissionsConfig:Array = ['', '']; + + final xmlChildren:Null> = config.get('android.manifest').xmlChildren; + + if (xmlChildren != null) { + config.get('android.manifest').xmlChildren = xmlChildren.concat(permissionsConfig); + } else { + config.get('android.manifest').xmlChildren = permissionsConfig; + } + + if (isBundle()) { + config.set("android.gradle-build-directory", "bin-bundle"); + } + } + function configurePolymod() { // The file extension to use for script files. setHaxedef("POLYMOD_SCRIPT_EXT", ".hscript"); @@ -893,7 +904,7 @@ class Project extends HXProject { addHaxelib('FlxPartialSound'); // Partial sound } - if (FEATURE_ADMOB_ADS.isEnabled(this)) { + if (FEATURE_MOBILE_ADVERTISEMENTS.isEnabled(this)) { addHaxelib('extension-admob'); // Ads Extension } @@ -901,7 +912,7 @@ class Project extends HXProject { addHaxelib('extension-haptics'); // Haptic feedback } - if (FEATURE_IAP.isEnabled(this)) { + if (FEATURE_MOBILE_IAP.isEnabled(this)) { addHaxelib('extension-iapcore'); // In-app purchases Extension } } @@ -965,6 +976,8 @@ class Project extends HXProject { addAsset("art/readme.txt", "do NOT readme.txt", "art", shouldEmbedArt); addAsset("LICENSE.md", "LICENSE.md", "art", shouldEmbedArt); addAsset("CHANGELOG.md", "CHANGELOG.md", "art", shouldEmbedArt); + + info('Done configuring assets.'); } /** @@ -972,6 +985,7 @@ class Project extends HXProject { */ function configureIcons() { + info('Configuring application icons...'); if (!isIOS()) { addIcon("art/icon16.png", 16); addIcon("art/icon32.png", 32); @@ -983,6 +997,7 @@ class Project extends HXProject { addIcon("art/icon64_noalpha.png", 64); addIcon("art/iconOG_noalpha.png"); } + info('Done configuring icons.'); } /** @@ -1336,7 +1351,16 @@ class Project extends HXProject { if(command != "display") { Log.info('[INFO] ${message}'); } } + /** + * Read the contents of the `.env` file into a map. + * This is used to store secret keys as environment variables. + */ public function readEnvironmentFile(file:String):Null> { + if (!FileSystem.exists(file)) { + info('Environment file does not exist: ${file}'); + return null; + } + var envFile = File.getContent(file); if (envFile == null) { @@ -1357,7 +1381,7 @@ class Project extends HXProject { return env; } - public function readASTCExcludsion():Void { + public function readASTCExclusion():Void { astcExcludes = File.getContent('./compression-excludes.txt').trim().split('\n'); for (i in 0...astcExcludes.length) diff --git a/source/Main.hx b/source/Main.hx index 7ee847ed5..fb5ca064a 100644 --- a/source/Main.hx +++ b/source/Main.hx @@ -133,7 +133,7 @@ class Main extends Sprite @:privateAccess game._customSoundTray = funkin.ui.options.FunkinSoundTray; - #if FEATURE_ADMOB_ADS + #if FEATURE_MOBILE_ADVERTISEMENTS funkin.mobile.util.AdMobUtil.init(); #end diff --git a/source/funkin/InitState.hx b/source/funkin/InitState.hx index 47292a119..34bf83eb6 100644 --- a/source/funkin/InitState.hx +++ b/source/funkin/InitState.hx @@ -96,12 +96,12 @@ class InitState extends FlxState extension.haptics.Haptic.initialize(); #end - #if FEATURE_ADMOB_ADS + #if FEATURE_MOBILE_ADVERTISEMENTS // Setup Admob funkin.mobile.util.AdMobUtil.init(); #end - #if FEATURE_IAP + #if FEATURE_MOBILE_IAP // Setup In-App purchases funkin.mobile.util.InAppPurchasesUtil.init(); #end @@ -126,7 +126,7 @@ class InitState extends FlxState FlxG.game.focusLostFramerate = 30; // Makes Flixel use frame times instead of locked movements per frame for things like tweens - FlxG.fixedTimestep = false; + FlxG.fixedTimestep = false; setupFlixelDebug(); diff --git a/source/funkin/mobile/util/AdMobUtil.hx b/source/funkin/mobile/util/AdMobUtil.hx index ecad83c37..228ece26f 100644 --- a/source/funkin/mobile/util/AdMobUtil.hx +++ b/source/funkin/mobile/util/AdMobUtil.hx @@ -1,6 +1,6 @@ -package funkin.mobile.util; +package funkin.api.mobile; -#if FEATURE_ADMOB_ADS +#if FEATURE_MOBILE_ADVERTISEMENTS import extension.admob.Admob; import extension.admob.AdmobBannerAlign; import extension.admob.AdmobBannerSize; diff --git a/source/funkin/mobile/util/InAppPurchasesUtil.hx b/source/funkin/mobile/util/InAppPurchasesUtil.hx index 1e1b9156c..7510daba5 100644 --- a/source/funkin/mobile/util/InAppPurchasesUtil.hx +++ b/source/funkin/mobile/util/InAppPurchasesUtil.hx @@ -1,6 +1,6 @@ package funkin.mobile.util; -#if FEATURE_IAP +#if FEATURE_MOBILE_IAP import extension.iapcore.android.IAPAndroid; import extension.iapcore.android.IAPProductDetails; import extension.iapcore.android.IAPPurchase; diff --git a/source/funkin/modding/PolymodHandler.hx b/source/funkin/modding/PolymodHandler.hx index c9b916028..648705d02 100644 --- a/source/funkin/modding/PolymodHandler.hx +++ b/source/funkin/modding/PolymodHandler.hx @@ -284,13 +284,20 @@ class PolymodHandler // Can load and execute compiled binaries. Polymod.blacklistImport('lime.system.JNI'); - #if ("extension-androidtools") // `android.jni.JNICache` // Same as `lime.system.JNI` Polymod.blacklistImport('android.jni.JNICache'); - #end - #if FEATURE_ADMOB_ADS + // Disable access to in-app purchases + Polymod.blacklistImport('funkin.mobile.util.InAppPurchasesUtil'); + for (cls in ClassMacro.listClassesInPackage('extension.iapcore')) + { + if (cls == null) continue; + var className:String = Type.getClassName(cls); + Polymod.blacklistImport(className); + } + + // Disable access to Google AdMob Polymod.blacklistImport('funkin.mobile.util.AdMobUtil'); for (cls in ClassMacro.listClassesInPackage('extension.admob')) { @@ -298,7 +305,6 @@ class PolymodHandler var className:String = Type.getClassName(cls); Polymod.blacklistImport(className); } - #end // `lime.system.System` // System.load() can load malicious DLLs diff --git a/source/funkin/play/PauseSubState.hx b/source/funkin/play/PauseSubState.hx index b42edf490..c02adeeca 100644 --- a/source/funkin/play/PauseSubState.hx +++ b/source/funkin/play/PauseSubState.hx @@ -21,7 +21,7 @@ import funkin.ui.MusicBeatSubState; import funkin.ui.transition.stickers.StickerSubState; import funkin.util.SwipeUtil; import funkin.util.TouchUtil; -#if FEATURE_ADMOB_ADS +#if FEATURE_MOBILE_ADVERTISEMENTS import funkin.mobile.util.AdMobUtil; #end @@ -208,7 +208,7 @@ class PauseSubState extends MusicBeatSubState public override function create():Void { // Add banner ad when game is state is first loaded. - #if FEATURE_ADMOB_ADS + #if FEATURE_MOBILE_ADVERTISEMENTS AdMobUtil.addBanner(extension.admob.AdmobBannerSize.BANNER, extension.admob.AdmobBannerAlign.TOP_LEFT); #end @@ -487,7 +487,7 @@ class PauseSubState extends MusicBeatSubState var prevEntry:Int = currentEntry; currentEntry += change; - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS if (currentEntry < 0) currentEntry = 0; if (currentEntry >= currentMenuEntries.length) currentEntry = currentMenuEntries.length - 1; #else @@ -536,7 +536,7 @@ class PauseSubState extends MusicBeatSubState clearAndAddMenuEntries(); updateMetadataText(); changeSelection(); - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS SwipeUtil.calculateSwipeThreshold(menuEntryText.members, Y); #end } @@ -669,7 +669,7 @@ class PauseSubState extends MusicBeatSubState { // Resume a paused video if it exists. VideoCutscene.resumeVideo(); - #if FEATURE_ADMOB_ADS + #if FEATURE_MOBILE_ADVERTISEMENTS AdMobUtil.removeBanner(); #end state.close(); @@ -706,7 +706,7 @@ class PauseSubState extends MusicBeatSubState PlayState.instance.needsReset = true; - #if FEATURE_ADMOB_ADS + #if FEATURE_MOBILE_ADVERTISEMENTS AdMobUtil.removeBanner(); #end state.close(); @@ -719,7 +719,7 @@ class PauseSubState extends MusicBeatSubState static function restartPlayState(state:PauseSubState):Void { PlayState.instance.needsReset = true; - #if FEATURE_ADMOB_ADS + #if FEATURE_MOBILE_ADVERTISEMENTS AdMobUtil.removeBanner(); #end state.close(); @@ -744,7 +744,7 @@ class PauseSubState extends MusicBeatSubState static function restartVideoCutscene(state:PauseSubState):Void { VideoCutscene.restartVideo(); - #if FEATURE_ADMOB_ADS + #if FEATURE_MOBILE_ADVERTISEMENTS AdMobUtil.removeBanner(); #end state.close(); @@ -757,7 +757,7 @@ class PauseSubState extends MusicBeatSubState static function skipVideoCutscene(state:PauseSubState):Void { VideoCutscene.finishVideo(); - #if FEATURE_ADMOB_ADS + #if FEATURE_MOBILE_ADVERTISEMENTS AdMobUtil.removeBanner(); #end state.close(); @@ -772,7 +772,7 @@ class PauseSubState extends MusicBeatSubState if (PlayState.instance?.currentConversation == null) return; PlayState.instance.currentConversation.resetConversation(); - #if FEATURE_ADMOB_ADS + #if FEATURE_MOBILE_ADVERTISEMENTS AdMobUtil.removeBanner(); #end state.close(); @@ -787,7 +787,7 @@ class PauseSubState extends MusicBeatSubState if (PlayState.instance?.currentConversation == null) return; PlayState.instance.currentConversation.skipConversation(); - #if FEATURE_ADMOB_ADS + #if FEATURE_MOBILE_ADVERTISEMENTS AdMobUtil.removeBanner(); #end state.close(); @@ -828,7 +828,7 @@ class PauseSubState extends MusicBeatSubState } } - #if FEATURE_ADMOB_ADS + #if FEATURE_MOBILE_ADVERTISEMENTS AdMobUtil.removeBanner(); #end @@ -841,7 +841,7 @@ class PauseSubState extends MusicBeatSubState */ static function quitToChartEditor(state:PauseSubState):Void { - #if FEATURE_ADMOB_ADS + #if FEATURE_MOBILE_ADVERTISEMENTS AdMobUtil.removeBanner(); #end state.close(); diff --git a/source/funkin/play/PlayState.hx b/source/funkin/play/PlayState.hx index 14a743abb..6c96eee69 100644 --- a/source/funkin/play/PlayState.hx +++ b/source/funkin/play/PlayState.hx @@ -61,7 +61,7 @@ import haxe.Int64; import funkin.util.TouchUtil; import funkin.mobile.ui.FunkinHitbox; import funkin.mobile.ui.FunkinHitbox.FunkinHitboxControlSchemes; -#if FEATURE_ADMOB_ADS +#if FEATURE_MOBILE_ADVERTISEMENTS import funkin.mobile.util.AdMobUtil; #end #end @@ -1215,7 +1215,7 @@ class PlayState extends MusicBeatSubState function moveToGameOver():Void { // Shows an interstital ad on mobile devices each 3 blueballs - #if FEATURE_ADMOB_ADS + #if FEATURE_MOBILE_ADVERTISEMENTS Constants.GLOBAL_BLUEBALL_COUNTER++; if (Constants.GLOBAL_BLUEBALL_COUNTER > 0 && Constants.GLOBAL_BLUEBALL_COUNTER % 3 == 0) AdMobUtil.loadInterstitial(); #end diff --git a/source/funkin/play/ResultState.hx b/source/funkin/play/ResultState.hx index 2056601a3..935e10a5d 100644 --- a/source/funkin/play/ResultState.hx +++ b/source/funkin/play/ResultState.hx @@ -39,7 +39,7 @@ import funkin.api.newgrounds.Medals; #end #if mobile import funkin.util.TouchUtil; -#if FEATURE_ADMOB_ADS +#if FEATURE_MOBILE_ADVERTISEMENTS import funkin.mobile.util.AdMobUtil; #end #end @@ -1003,7 +1003,7 @@ class ResultState extends MusicBeatSubState ease: FlxEase.expoOut, onComplete: function(_) { // Shows a interstital ad on mobile devices each week victory. - #if FEATURE_ADMOB_ADS + #if FEATURE_MOBILE_ADVERTISEMENTS if (PlayStatePlaylist.isStoryMode || (Constants.GLOBAL_FREEPLAY_VICTORY_COUNTER > 0 && ++Constants.GLOBAL_FREEPLAY_VICTORY_COUNTER % 3 == 0)) { @@ -1025,7 +1025,7 @@ class ResultState extends MusicBeatSubState else { // Shows a interstital ad on mobile devices each week victory. - #if FEATURE_ADMOB_ADS + #if FEATURE_MOBILE_ADVERTISEMENTS if (PlayStatePlaylist.isStoryMode || (Constants.GLOBAL_FREEPLAY_VICTORY_COUNTER > 0 && ++Constants.GLOBAL_FREEPLAY_VICTORY_COUNTER % 3 == 0)) { diff --git a/source/funkin/ui/MenuList.hx b/source/funkin/ui/MenuList.hx index 0bf9cc67e..3a7c8c714 100644 --- a/source/funkin/ui/MenuList.hx +++ b/source/funkin/ui/MenuList.hx @@ -125,7 +125,7 @@ class MenuTypedList extends FlxTypedGroup case Rows(num): navGrid(num, inputUp, inputDown, wrapY, inputLeft, inputRight, wrapX); }; - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS // Update touch position if (TouchUtil.pressed) { diff --git a/source/funkin/ui/freeplay/FreeplayState.hx b/source/funkin/ui/freeplay/FreeplayState.hx index baec2a639..796c5402e 100644 --- a/source/funkin/ui/freeplay/FreeplayState.hx +++ b/source/funkin/ui/freeplay/FreeplayState.hx @@ -153,7 +153,7 @@ class FreeplayState extends MusicBeatSubState var curPlaying:Bool = false; var dj:Null = null; - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS var djHitbox:FlxSprite = new FlxSprite((FullScreenScaleMode.gameCutoutSize.x * DJ_POS_MULTI) + 58, 358); #end @@ -715,7 +715,7 @@ class FreeplayState extends MusicBeatSubState rankAnimStart(fromResultsParams, grpCapsules.members[curSelected]); } - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS SwipeUtil.calculateSwipeThreshold(grpCapsules.members, Y); FlxG.touches.swipeThreshold.x = 60; #end @@ -1429,7 +1429,7 @@ class FreeplayState extends MusicBeatSubState } #end // ^<-- FEATURE_DEBUG_FUNCTIONS - if ((controls.FREEPLAY_CHAR_SELECT #if TOUCH_CONTROLS + if ((controls.FREEPLAY_CHAR_SELECT #if FEATURE_TOUCH_CONTROLS || (TouchUtil.overlaps(djHitbox, funnyCam) && TouchUtil.justReleased && !SwipeUtil.swipeAny) #end) && !busy) { @@ -1499,7 +1499,7 @@ class FreeplayState extends MusicBeatSubState final downP:Bool = controls.UI_DOWN_P; final accepted:Bool = controls.ACCEPT; - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS handleTouchCapsuleClick(); handleTouchSelectionScroll(elapsed); handleTouchFavoritesAndDifficulties(); @@ -1574,7 +1574,7 @@ class FreeplayState extends MusicBeatSubState function handleDifficultySwitch():Void { - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS final leftPressed:Bool = controls.UI_LEFT_P || (diffSelLeft != null && TouchUtil.overlaps(diffSelLeft, funnyCam) && TouchUtil.justReleased); @@ -1600,7 +1600,7 @@ class FreeplayState extends MusicBeatSubState } } - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS private function handleTouchCapsuleClick():Void { if (diffSelRight == null) return; @@ -2600,7 +2600,7 @@ class DifficultySelector extends FlxSprite var parent:FreeplayState; - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS public var pressed:Bool = false; #end @@ -2630,7 +2630,7 @@ class DifficultySelector extends FlxSprite super.update(elapsed); } - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS public function setPress(press:Bool):Void { if (!press) diff --git a/source/funkin/ui/freeplay/LetterSort.hx b/source/funkin/ui/freeplay/LetterSort.hx index 8811693a3..1ec9cd67a 100644 --- a/source/funkin/ui/freeplay/LetterSort.hx +++ b/source/funkin/ui/freeplay/LetterSort.hx @@ -100,7 +100,7 @@ class LetterSort extends FlxSpriteGroup override function update(elapsed:Float):Void { super.update(elapsed); - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS @:privateAccess if (TouchUtil.justPressed) inputEnabled = instance != null && TouchUtil.overlaps(swipeBounds, instance.funnyCam); #end diff --git a/source/funkin/ui/mainmenu/MainMenuState.hx b/source/funkin/ui/mainmenu/MainMenuState.hx index 2f6911b67..6e8de758f 100644 --- a/source/funkin/ui/mainmenu/MainMenuState.hx +++ b/source/funkin/ui/mainmenu/MainMenuState.hx @@ -188,7 +188,7 @@ class MainMenuState extends MusicBeatState } #end - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS SwipeUtil.calculateSwipeThreshold(menuItems.members, Y); #end } @@ -229,7 +229,7 @@ class MainMenuState extends MusicBeatState override function closeSubState():Void { magenta.visible = false; - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS SwipeUtil.calculateSwipeThreshold(menuItems.members, Y); #end super.closeSubState(); diff --git a/source/funkin/ui/story/StoryMenuState.hx b/source/funkin/ui/story/StoryMenuState.hx index 619abc3ec..92053ab38 100644 --- a/source/funkin/ui/story/StoryMenuState.hx +++ b/source/funkin/ui/story/StoryMenuState.hx @@ -229,7 +229,7 @@ class StoryMenuState extends MusicBeatState addBackButton(FlxG.width * 0.77, FlxG.height * 0.85, FlxColor.WHITE, goBack); #end - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS FlxG.touches.swipeThreshold.y = 100; #end } @@ -431,7 +431,7 @@ class StoryMenuState extends MusicBeatState currentIndex += change; - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS // Dont wrap around w/ touch. if (currentIndex < 0) currentIndex = 0; if (currentIndex >= levelList.length) currentIndex = levelList.length - 1; diff --git a/source/funkin/ui/title/AttractState.hx b/source/funkin/ui/title/AttractState.hx index 44dcbd49e..000cb87ba 100644 --- a/source/funkin/ui/title/AttractState.hx +++ b/source/funkin/ui/title/AttractState.hx @@ -6,7 +6,7 @@ import funkin.graphics.video.FlxVideo; #if hxvlc import funkin.graphics.video.FunkinVideoSprite; #end -#if TOUCH_CONTROLS +#if FEATURE_TOUCH_CONTROLS import funkin.util.TouchUtil; #end import funkin.ui.MusicBeatState; @@ -105,7 +105,7 @@ class AttractState extends MusicBeatState super.update(elapsed); // If the user presses any button or hold their screen for 1.5 seconds, skip the video. - if ((FlxG.keys.justPressed.ANY && !controls.VOLUME_MUTE && !controls.VOLUME_UP && !controls.VOLUME_DOWN) #if TOUCH_CONTROLS + if ((FlxG.keys.justPressed.ANY && !controls.VOLUME_MUTE && !controls.VOLUME_UP && !controls.VOLUME_DOWN) #if FEATURE_TOUCH_CONTROLS || TouchUtil.touch != null && TouchUtil.touch.ticksDeltaSincePress >= 1500 #end) { diff --git a/source/funkin/util/Constants.hx b/source/funkin/util/Constants.hx index 20b3d574b..16485a3ac 100644 --- a/source/funkin/util/Constants.hx +++ b/source/funkin/util/Constants.hx @@ -608,7 +608,7 @@ class Constants */ public static final DEFAULT_CAMERA_FOLLOW_RATE:Float = 0.04; - #if FEATURE_ADMOB_ADS + #if FEATURE_MOBILE_ADVERTISEMENTS /** * A Counter that is increased by 1 each blueball. * Only used for interstital ads each 3 blueballs on mobile. diff --git a/source/funkin/util/SwipeUtil.hx b/source/funkin/util/SwipeUtil.hx index 0b57a30d8..ecddd76b0 100644 --- a/source/funkin/util/SwipeUtil.hx +++ b/source/funkin/util/SwipeUtil.hx @@ -111,7 +111,7 @@ class SwipeUtil */ public static function calculateSwipeThreshold(items:Array, axes:FlxAxes, ?multiplier:Float = 1):Void { - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS final itemCount:Int = items.length - 1; if (itemCount <= 0) @@ -141,7 +141,7 @@ class SwipeUtil @:noCompletion inline static function get_swipeUp():Bool { - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS #if mobile return TouchUtil.touch != null && TouchUtil.touch.justMovedUp; #else @@ -155,7 +155,7 @@ class SwipeUtil @:noCompletion inline static function get_swipeRight():Bool { - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS #if mobile return TouchUtil.touch != null && TouchUtil.touch.justMovedRight; #else @@ -169,7 +169,7 @@ class SwipeUtil @:noCompletion inline static function get_swipeLeft():Bool { - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS #if mobile return TouchUtil.touch != null && TouchUtil.touch.justMovedLeft; #else @@ -183,7 +183,7 @@ class SwipeUtil @:noCompletion inline static function get_swipeDown():Bool { - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS #if mobile return TouchUtil.touch != null && TouchUtil.touch.justMovedDown; #else @@ -201,7 +201,7 @@ class SwipeUtil @:noCompletion inline static function get_justSwipedUp():Bool { - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS final swipe:FlxSwipe = (FlxG.swipes.length > 0) ? FlxG.swipes[0] : null; return (swipe?.degrees > 45 && swipe?.degrees < 135 && swipe?.distance > 20); #else @@ -212,7 +212,7 @@ class SwipeUtil @:noCompletion inline static function get_justSwipedRight():Bool { - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS final swipe:FlxSwipe = (FlxG.swipes.length > 0) ? FlxG.swipes[0] : null; return (swipe?.degrees > -45 && swipe?.degrees < 45 && swipe?.distance > 20); #else @@ -223,7 +223,7 @@ class SwipeUtil @:noCompletion inline static function get_justSwipedLeft():Bool { - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS final swipe:FlxSwipe = (FlxG.swipes.length > 0) ? FlxG.swipes[0] : null; return ((swipe?.degrees > 135 || swipe?.degrees < -135) && swipe?.distance > 20); #else @@ -234,7 +234,7 @@ class SwipeUtil @:noCompletion inline static function get_justSwipedDown():Bool { - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS final swipe:FlxSwipe = (FlxG.swipes.length > 0) ? FlxG.swipes[0] : null; return (swipe?.degrees > -135 && swipe?.degrees < -45 && swipe?.distance > 20); #else @@ -249,7 +249,7 @@ class SwipeUtil @:noCompletion inline static function get_flickUp():Bool { - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS #if mobile return FlxG.touches.flickManager.flickUp; #else @@ -263,7 +263,7 @@ class SwipeUtil @:noCompletion inline static function get_flickRight():Bool { - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS #if mobile return FlxG.touches.flickManager.flickRight; #else @@ -277,7 +277,7 @@ class SwipeUtil @:noCompletion inline static function get_flickLeft():Bool { - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS #if mobile return FlxG.touches.flickManager.flickLeft; #else @@ -291,7 +291,7 @@ class SwipeUtil @:noCompletion inline static function get_flickDown():Bool { - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS #if mobile return FlxG.touches.flickManager.flickDown; #else diff --git a/source/funkin/util/TouchUtil.hx b/source/funkin/util/TouchUtil.hx index c38f1bd65..20bea7473 100644 --- a/source/funkin/util/TouchUtil.hx +++ b/source/funkin/util/TouchUtil.hx @@ -68,7 +68,7 @@ class TouchUtil */ public static function overlaps(object:FlxBasic, ?camera:FlxCamera):Bool { - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS if (object == null || touch == null) return false; return touch.overlaps(object, camera ?? object.camera); @@ -87,7 +87,7 @@ class TouchUtil */ public static function overlapsComplex(object:FlxObject, ?camera:FlxCamera):Bool { - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS if (object == null || touch == null) return false; if (camera == null) camera = object.cameras[0]; @@ -111,7 +111,7 @@ class TouchUtil */ public static function overlapsComplexPoint(object:FlxObject, point:FlxPoint, ?inScreenSpace:Bool = false, ?camera:FlxCamera):Bool { - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS if (object == null || point == null) return false; if (camera == null) camera = object.cameras[0]; @@ -165,7 +165,7 @@ class TouchUtil @:noCompletion inline static function get_touch():FlxMouse { - #if TOUCH_CONTROLS + #if FEATURE_TOUCH_CONTROLS FlxG.mouse.visible = true; return FlxG.mouse; #end