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);