From 84e709a3f341fad0c044c9c4006ee8800168e382 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 4 Mar 2023 10:50:45 +0100 Subject: [PATCH] removed external online services --- Android/Activity1.cs | 37 +----- Android/Android.csproj | 2 - Android/AndroidPlatform.cs | 118 +----------------- TouchyTickets/Achievement.cs | 60 --------- .../Attractions/AttractionModifier.cs | 1 - TouchyTickets/GameImpl.cs | 20 --- TouchyTickets/Platform.cs | 11 +- TouchyTickets/TouchyTickets.csproj | 6 +- TouchyTickets/Ui.cs | 26 ---- 9 files changed, 10 insertions(+), 271 deletions(-) delete mode 100644 TouchyTickets/Achievement.cs diff --git a/Android/Activity1.cs b/Android/Activity1.cs index 11a6641..8f5c7a4 100644 --- a/Android/Activity1.cs +++ b/Android/Activity1.cs @@ -1,21 +1,16 @@ using Android.App; using Android.Content; using Android.Content.PM; -using Android.Gms.Games; using Android.OS; using Android.Views; -using Android.Widget; -using GameAnalyticsSDK; -using Java.Lang; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using MLEM.Extensions; using MLEM.Misc; using TouchyTickets; -using static Android.Views.ViewGroup; using Uri = Android.Net.Uri; -namespace Android; +namespace Android; [Activity( Label = "@string/app_name", @@ -30,18 +25,14 @@ public class Activity1 : AndroidGameActivity { private GameImpl game; private AndroidPlatform platform; - private LinearLayout mainView; + private View view; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); - // ad layout - var adLayout = new LinearLayout(this) {Orientation = Orientation.Vertical}; - adLayout.SetGravity(GravityFlags.Bottom); - // set up the game MlemPlatform.Current = new MlemPlatform.Mobile(KeyboardInput.Show, l => this.StartActivity(new Intent(Intent.ActionView, Uri.Parse(l)))); - this.platform = new AndroidPlatform(this, adLayout); + this.platform = new AndroidPlatform(this); this.game = new GameImpl(this.platform); this.game.GraphicsDeviceManager.ResetWidthAndHeight(this.game.Window); this.game.GraphicsDeviceManager.IsFullScreen = true; @@ -59,30 +50,12 @@ public class Activity1 : AndroidGameActivity { if (Build.VERSION.SdkInt >= BuildVersionCodes.P) this.Window.Attributes.LayoutInDisplayCutoutMode = LayoutInDisplayCutoutMode.Never; - // total layout that is displayed - this.mainView = new LinearLayout(this) {Orientation = Orientation.Vertical}; - this.mainView.LayoutParameters = new LinearLayout.LayoutParams(LayoutParams.MatchParent, LayoutParams.MatchParent); - this.mainView.AddView(gameView); - // height of 0 but high weight causes this element so scale based on the ad's height - gameView.LayoutParameters = new LinearLayout.LayoutParams(LayoutParams.MatchParent, 0, 1); - this.mainView.AddView(adLayout); - adLayout.LayoutParameters = new LinearLayout.LayoutParams(LayoutParams.MatchParent, LayoutParams.WrapContent); - this.SetContentView(this.mainView); + this.view = this.game.Services.GetService(typeof(View)) as View; + this.SetContentView(this.view); this.game.Run(); } - protected override void OnActivityResult(int requestCode, Result result, Intent data) { - base.OnActivityResult(requestCode, result, data); - // Connect again after logging in to Google Play game services, but only if we haven't tried yet - try { - if (requestCode == AndroidPlatform.GooglePlayLoginRequest && (int) result != GamesActivityResultCodes.ResultSignInFailed) - this.platform.GoogleApi.Connect(); - } catch (Exception e) { - GameAnalytics.NewErrorEvent(GAErrorSeverity.Error, "OnActivityResult " + e); - } - } - public override void OnWindowFocusChanged(bool hasFocus) { base.OnWindowFocusChanged(hasFocus); #pragma warning disable CS0618 diff --git a/Android/Android.csproj b/Android/Android.csproj index 55262c2..a27e40e 100644 --- a/Android/Android.csproj +++ b/Android/Android.csproj @@ -13,8 +13,6 @@ - - diff --git a/Android/AndroidPlatform.cs b/Android/AndroidPlatform.cs index 739e6ab..505ec46 100644 --- a/Android/AndroidPlatform.cs +++ b/Android/AndroidPlatform.cs @@ -1,110 +1,17 @@ -using System.Collections; -using System.Collections.Generic; using Android.App; using Android.Content; -using Android.Gms.Common.Apis; -using Android.Gms.Games; -using Android.Runtime; using Android.Views; -using Android.Widget; -using GameAnalyticsSDK; -using GameAnalyticsSDK.Utilities; -using Java.Lang; using TouchyTickets; -using Achievement = TouchyTickets.Achievement; using Uri = Android.Net.Uri; namespace Android; public class AndroidPlatform : Platform { - public const int GooglePlayLoginRequest = 9001; - public const int ShowAchievementsRequest = 9002; - - private static readonly Dictionary AchievementIds = new() { - {"1Stars", "CgkI_Lyp7PcEEAIQAw"}, - {"10Stars", "CgkI_Lyp7PcEEAIQBA"}, - {"100Stars", "CgkI_Lyp7PcEEAIQBQ"}, - {"FullMap", "CgkI_Lyp7PcEEAIQBg"}, - {"OnlySmallRides", "CgkI_Lyp7PcEEAIQBw"}, - {"OnlyRelaxedRides", "CgkI_Lyp7PcEEAIQCA"}, - {"OnlyWalkingRides", "CgkI_Lyp7PcEEAIQCQ"}, - {"OnlyNonTechnologyRides", "CgkI_Lyp7PcEEAIQCg"}, - {"100Modifiers", "CgkI_Lyp7PcEEAIQCw"}, - {"500Modifiers", "CgkI_Lyp7PcEEAIQDA"}, - {"1000Modifiers", "CgkI_Lyp7PcEEAIQDQ"}, - {"5000Modifiers", "CgkI_Lyp7PcEEAIQDg"}, - {"1ExpTickets", "CgkI_Lyp7PcEEAIQDw"}, - {"2ExpTickets", "CgkI_Lyp7PcEEAIQEA"}, - {"3ExpTickets", "CgkI_Lyp7PcEEAIQEQ"}, - {"4ExpTickets", "CgkI_Lyp7PcEEAIQEg"}, - {"5ExpTickets", "CgkI_Lyp7PcEEAIQEw"}, - {"6ExpTickets", "CgkI_Lyp7PcEEAIQFA"}, - {"7ExpTickets", "CgkI_Lyp7PcEEAIQFQ"}, - {"8ExpTickets", "CgkI_Lyp7PcEEAIQFg"}, - {"9ExpTickets", "CgkI_Lyp7PcEEAIQFw"}, - {"10ExpTickets", "CgkI_Lyp7PcEEAIQGA"} - }; - private readonly Activity activity; - private readonly LinearLayout adLayout; - public GoogleApiClient GoogleApi { get; private set; } - public AndroidPlatform(Activity activity, LinearLayout adLayout) { + public AndroidPlatform(Activity activity) { this.activity = activity; - this.adLayout = adLayout; - } - - public override void SetupOnlineInteractions(Dictionary analyticsJson) { - // Analytics - GameAnalytics.SetAutoDetectAppVersion(true); - GameAnalytics.Initialize(this.activity, GA_MiniJSON.Serialize(new Hashtable(analyticsJson))); - AndroidEnvironment.UnhandledExceptionRaiser += (_, args) => GameAnalytics.NewErrorEvent(GAErrorSeverity.Critical, args.Exception.ToString()); - - // TODO fix ads - // Ads - /*try { - var ad = new AdView(this.activity) { - AdUnitId = "ca-app-pub-5754829579653773/7841535920", - AdSize = AdSize.SmartBanner - }; - ad.LoadAd(new AdRequest.Builder() - .AddTestDevice("14B965C6457E17D2808061ADF7E34923") - .Build()); - this.adLayout.AddView(ad); - } catch (Exception e) { - GameAnalytics.NewErrorEvent(GAErrorSeverity.Error, "Ads " + e); - }*/ - - // TODO fix google play game services - /*// Google Play game services - try { - this.GoogleApi = new GoogleApiClient.Builder(this.activity) - .AddApi(GamesClass.API) - .AddScope(GamesClass.ScopeGames) - .AddOnConnectionFailedListener(res => { - if (res.HasResolution) { - res.StartResolutionForResult(this.activity, GooglePlayLoginRequest); - } else { - throw new GoogleApiClientConnectionException(res); - } - }) - .Build(); - this.GoogleApi.Connect(); - } catch (Exception e) { - GameAnalytics.NewErrorEvent(GAErrorSeverity.Error, "GoogleApiClient " + e); - }*/ - -#if DEBUG - // Sanity check to ensure that all achievements are mapped - foreach (var achievement in Achievement.Achievements.Values) { - var _ = AndroidPlatform.AchievementIds[achievement.Name]; - } -#endif - } - - public override void AddResourceEvent(bool sink, string currency, float amount, string itemType, string itemId) { - GameAnalytics.NewResourceEvent(sink ? GAResourceFlowType.Sink : GAResourceFlowType.Source, currency, amount, itemType, itemId); } public override void SetKeepScreenOn(bool keep) { @@ -119,27 +26,4 @@ public class AndroidPlatform : Platform { this.activity.StartActivity(new Intent(Intent.ActionView, Uri.Parse("https://play.google.com/store/apps/details?id=de.ellpeck.touchytickets"))); } - public override bool GainAchievement(Achievement achievement) { - try { - if (this.GoogleApi != null && this.GoogleApi.IsConnected) { - GamesClass.Achievements.Unlock(this.GoogleApi, AndroidPlatform.AchievementIds[achievement.Name]); - return true; - } - } catch (Exception e) { - GameAnalytics.NewErrorEvent(GAErrorSeverity.Error, "GainAchievement " + e); - } - return false; - } - - public override void ShowAchievements() { - try { - if (this.GoogleApi == null || !this.GoogleApi.IsConnected) - return; - var intent = GamesClass.Achievements.GetAchievementsIntent(this.GoogleApi); - this.activity.StartActivityForResult(intent, AndroidPlatform.ShowAchievementsRequest); - } catch (Exception e) { - GameAnalytics.NewErrorEvent(GAErrorSeverity.Error, "ShowAchievements " + e); - } - } - } \ No newline at end of file diff --git a/TouchyTickets/Achievement.cs b/TouchyTickets/Achievement.cs deleted file mode 100644 index afd443e..0000000 --- a/TouchyTickets/Achievement.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Numerics; -using Microsoft.Xna.Framework; -using TouchyTickets.Attractions; - -namespace TouchyTickets; - -public class Achievement { - - public static readonly Dictionary Achievements = new(); - - static Achievement() { - foreach (var amount in new[] {1, 10, 100}) - Achievement.Register(new Achievement($"{amount}Stars", g => g.Stars >= amount)); - Achievement.Register(new Achievement("FullMap", g => { - for (var x = 0; x < g.Map.Width; x++) { - for (var y = 0; y < g.Map.Height; y++) { - if (g.Map.GetAttractionAt(new Point(x, y)) == null) - return false; - } - } - return true; - })); - foreach (var flag in new[] {AttractionFlags.Small, AttractionFlags.Relaxed, AttractionFlags.Walking, AttractionFlags.NonTechnology}) - Achievement.Register(new Achievement($"Only{flag}Rides", g => g.Map.GetAttractionAmount(null) >= 100 && g.Map.GetAttractions().All(a => a.Item2.Type.Flags.HasFlag(flag)))); - foreach (var amount in new[] {100, 500, 1000, 5000}) - Achievement.Register(new Achievement($"{amount}Modifiers", g => g.Map.GetAttractionAmount(null) > 0 && g.Map.GetAttractions().All(a => a.Item2.GetModifierAmount(null) >= amount))); - for (var i = 1; i <= 10; i++) { - var amount = BigInteger.Pow(1000, i + 1); - Achievement.Register(new Achievement($"{i}ExpTickets", g => g.Tickets >= amount)); - } - } - - public readonly string Name; - private readonly Func condition; - // this value doesn't save between game runs, since achievements - // are only displayed inside of the respective stores anyway - private bool unlocked; - - public Achievement(string name, Func condition) { - this.Name = name; - this.condition = condition; - } - - public void Update() { - if (this.unlocked) - return; - if (!this.condition.Invoke(GameImpl.Instance)) - return; - if (GameImpl.Instance.Platform.GainAchievement(this)) - this.unlocked = true; - } - - public static void Register(Achievement achievement) { - Achievement.Achievements.Add(achievement.Name, achievement); - } - -} \ No newline at end of file diff --git a/TouchyTickets/Attractions/AttractionModifier.cs b/TouchyTickets/Attractions/AttractionModifier.cs index 1c751e3..e10615c 100644 --- a/TouchyTickets/Attractions/AttractionModifier.cs +++ b/TouchyTickets/Attractions/AttractionModifier.cs @@ -44,7 +44,6 @@ public class AttractionModifier { if (GameImpl.Instance.Tickets < price) return false; GameImpl.Instance.Tickets -= price; - GameImpl.Instance.Platform.AddResourceEvent(true, "Tickets", (float) price, "Modifier", this.Name); attraction.ApplyModifier(this); return true; } diff --git a/TouchyTickets/GameImpl.cs b/TouchyTickets/GameImpl.cs index 93606bf..5159d8e 100644 --- a/TouchyTickets/GameImpl.cs +++ b/TouchyTickets/GameImpl.cs @@ -27,7 +27,6 @@ public class GameImpl : MlemGame { public DateTime LastUpdate; public TimeSpan PlayTime; private double saveCounter; - private double achievementCounter; public GameImpl(Platform platform) { this.Platform = platform; @@ -45,17 +44,6 @@ public class GameImpl : MlemGame { } private void LoadGame() { - // set up online stuff - var analytics = new Dictionary(); - analytics["InfoLog"] = true; - analytics["VerboseLog"] = true; - analytics["ResourceCurrencies"] = new[] {"Tickets", "Stars"}; - analytics["ResourceItemTypes"] = new[] {"Attraction", "Restart", "Upgrade", "Modifier"}; - // ios comes first, then android. For now they're the same - analytics["GameKey"] = new[] {"cc18de06eebbc5d5e987c384fcd28000", "cc18de06eebbc5d5e987c384fcd28000"}; - analytics["SecretKey"] = new[] {"82ca1a930ee38e2383ffb02db7631e16033b511d", "82ca1a930ee38e2383ffb02db7631e16033b511d"}; - this.Platform.SetupOnlineInteractions(analytics); - this.Tutorial = new Tutorial(); if (!SaveHandler.Load(this)) @@ -82,14 +70,6 @@ public class GameImpl : MlemGame { // update the map this.UpdateMapOnce(); - // achievements - this.achievementCounter += gameTime.ElapsedGameTime.TotalSeconds; - if (this.achievementCounter >= 5) { - this.achievementCounter = 0; - foreach (var achievement in Achievement.Achievements.Values) - achievement.Update(); - } - // save every 3 seconds this.saveCounter += gameTime.ElapsedGameTime.TotalSeconds; if (this.saveCounter >= 3) { diff --git a/TouchyTickets/Platform.cs b/TouchyTickets/Platform.cs index 0b759fb..9ee8b84 100644 --- a/TouchyTickets/Platform.cs +++ b/TouchyTickets/Platform.cs @@ -1,19 +1,10 @@ -using System.Collections.Generic; - namespace TouchyTickets; public abstract class Platform { - - public abstract void SetupOnlineInteractions(Dictionary analyticsJson); - - public abstract void AddResourceEvent(bool sink, string currency, float amount, string itemType, string itemId); - + public abstract void SetKeepScreenOn(bool keep); public abstract void OpenRateLink(); - public abstract bool GainAchievement(Achievement achievement); - - public abstract void ShowAchievements(); } \ No newline at end of file diff --git a/TouchyTickets/TouchyTickets.csproj b/TouchyTickets/TouchyTickets.csproj index 8e972e9..2c45e3f 100644 --- a/TouchyTickets/TouchyTickets.csproj +++ b/TouchyTickets/TouchyTickets.csproj @@ -5,9 +5,9 @@ - - - + + + all diff --git a/TouchyTickets/Ui.cs b/TouchyTickets/Ui.cs index d6366a0..5556540 100644 --- a/TouchyTickets/Ui.cs +++ b/TouchyTickets/Ui.cs @@ -175,7 +175,6 @@ public class Ui { ActionSound = new SoundEffectInfo(Assets.PlaceSound), OnPressed = e2 => { GameImpl.Instance.Tickets -= price; - GameImpl.Instance.Platform.AddResourceEvent(true, "Tickets", (float) price, "Attraction", attraction.Key); map.Place(map.PlacingPosition, map.PlacingAttraction); map.PlacingAttraction.Wobble(); @@ -342,9 +341,6 @@ public class Ui { this.uiSystem.Remove(e2.Root.Name); var game = GameImpl.Instance; - game.Platform.AddResourceEvent(true, "Tickets", (float) game.Tickets, "Restart", "Restart" + game.TimesRestarted); - game.Platform.AddResourceEvent(false, "Stars", game.GetBuyableStars(), "Restart", "Restart" + game.TimesRestarted); - game.Stars += game.GetBuyableStars(); game.TimesRestarted++; game.Tickets = 0; @@ -393,10 +389,6 @@ public class Ui { } })); num.PositionOffset = new Vector2(0, 1); - optionList.AddChild(new Button(Anchor.AutoLeft, new Vector2(1, 30), Localization.Get("Achievements")) { - PositionOffset = new Vector2(0, 1), - OnPressed = _ => GameImpl.Instance.Platform.ShowAchievements() - }); optionList.AddChild(new Paragraph(Anchor.AutoCenter, 1, Localization.Get("OtherOptions"), true) { PositionOffset = new Vector2(0, 10), @@ -553,22 +545,6 @@ public class Ui { } yield return new Wait(0.5); - var analyticsFlag = new FileInfo(Path.Combine(SaveHandler.GetGameDirectory(true).FullName, "_ReadGdpr")); - if (!analyticsFlag.Exists) { - var evt = new Event(); - var panel = splash.AddChild(new Panel(Anchor.Center, new Vector2(0.8F), Vector2.Zero, true)); - panel.AddChild(new Paragraph(Anchor.AutoLeft, 1, Localization.Get("GDPRInfo"))); - panel.AddChild(new Button(Anchor.AutoLeft, new Vector2(1, 30), Localization.Get("Okay")) { - OnPressed = _ => { - // create the (empty) flag file - using (analyticsFlag.Create()) {} - splash.RemoveChild(panel); - CoroutineHandler.RaiseEvent(evt); - } - }); - yield return new Wait(evt); - } - yield return new Wait(0.25); loadGame(); yield return new Wait(0.25); @@ -699,8 +675,6 @@ public class Ui { ActionSound = new SoundEffectInfo(Assets.BuySound), OnPressed = _ => { GameImpl.Instance.Stars -= upgrade.Price; - GameImpl.Instance.Platform.AddResourceEvent(true, "Stars", upgrade.Price, "Upgrade", upgrade.Name); - GameImpl.Instance.AppliedUpgrades.Add(upgrade); upgrade.OnApplied(); Ui.PopulateUpgradeList(upgradeList);