[go: up one dir, main page]

Skip to content

Commit

Permalink
Changes made as part of "Instrument Your Game with Remote Config"
Browse files Browse the repository at this point in the history
  • Loading branch information
joefspiro committed Feb 21, 2023
1 parent 212463c commit 9101f21
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 8 deletions.
49 changes: 45 additions & 4 deletions Assets/Hamster/Scripts/MainGame.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Firebase.Extensions;
using Firebase.RemoteConfig;

namespace Hamster
{
Expand Down Expand Up @@ -178,7 +179,7 @@ private void InitializeFirebaseAndStartGame()
if (dependencyStatus == Firebase.DependencyStatus.Available) {
// Create and hold a reference to your FirebaseApp,
app = Firebase.FirebaseApp.DefaultInstance;
InitializeCommonDataAndStartGame();
SetRemoteConfigDefaults();
} else {
UnityEngine.Debug.LogError(
$"Could not resolve all Firebase dependencies: {dependencyStatus}\n" +
Expand All @@ -191,21 +192,61 @@ private void InitializeFirebaseAndStartGame()
// before starting the game.
private void SetRemoteConfigDefaults()
{
throw new System.NotImplementedException();
var defaults = new System.Collections.Generic.Dictionary < string, object > ();
defaults.Add(
Hamster.MapObjects.AccelerationTile.AccelerationTileForceKey,
Hamster.MapObjects.AccelerationTile.AccelerationTileForceDefault);
defaults.Add(
Hamster.States.MainMenu.SubtitleOverrideKey,
Hamster.States.MainMenu.SubtitleOverrideDefault);
var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
remoteConfig.SetDefaultsAsync(defaults).ContinueWithOnMainThread(
previousTask =>
{
FetchRemoteConfig(InitializeCommonDataAndStartGame);
}
);
}

// (Re)fetches Remote Config values and pass down the onFetchAndActivateSuccessful callback.
// Called during the initialization flow but can also be called indepedently.
public void FetchRemoteConfig(System.Action onFetchAndActivateSuccessful)
{
throw new System.NotImplementedException();
if(app==null)
{
Debug.LogError($"Do not use Firebase until it is properly initialized by calling {nameof(InitializeFirebaseAndStartGame)}.");
return;
}

Debug.Log("Fetching data...");
var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
remoteConfig.FetchAsync(System.TimeSpan.Zero).ContinueWithOnMainThread(
previousTask=>
{
if (!previousTask.IsCompleted)
{
Debug.LogError($"{nameof(remoteConfig.FetchAsync)} incomplete: Status '{previousTask.Status}'");
return;
}
ActivateRetrievedRemoteConfigValues(onFetchAndActivateSuccessful);
});
}

// The final method in the initialization flow that will activate fetched values
// and on Success will call onFetchAndActivateSuccessful.
private void ActivateRetrievedRemoteConfigValues(System.Action onFetchAndActivateSuccessful)
{
throw new System.NotImplementedException();
var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
var info = remoteConfig.Info;
if(info.LastFetchStatus == LastFetchStatus.Success)
{
remoteConfig.ActivateAsync().ContinueWithOnMainThread(
previousTask =>
{
Debug.Log($"Remote data loaded and ready (last fetch time {info.FetchTime}).");
onFetchAndActivateSuccessful();
});
}
}
}
}
4 changes: 3 additions & 1 deletion Assets/Hamster/Scripts/MapObjects/AccelerationTile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
// limitations under the License.

using UnityEngine;
using Firebase.RemoteConfig;

namespace Hamster.MapObjects {

Expand All @@ -32,7 +33,8 @@ public class AccelerationTile : MapObject {
public float Acceleration { get; private set; }

private void Start() {
Acceleration = AccelerationTileForceDefault;
var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
Acceleration = (float)remoteConfig.GetValue(AccelerationTileForceKey).DoubleValue;
}

public void FixedUpdate() {
Expand Down
2 changes: 1 addition & 1 deletion Assets/Hamster/Scripts/States/BaseLevelSelect.cs
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ class BaseLevelSelect : BaseState {
}

public override void Resume(StateExitValue results) {
ShowUI();
CommonData.mainGame.FetchRemoteConfig(ShowUI);
}

public override void Suspend() {
Expand Down
7 changes: 5 additions & 2 deletions Assets/Hamster/Scripts/States/MainMenu.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

using UnityEngine;
using System.Collections.Generic;
using Firebase.RemoteConfig;

namespace Hamster.States {
class MainMenu : BaseState {
Expand Down Expand Up @@ -53,15 +54,17 @@ class MainMenu : BaseState {

public override void Resume(StateExitValue results) {
CommonData.mainGame.SelectAndPlayMusic(CommonData.prefabs.menuMusic, true);
InitializeUI();
CommonData.mainGame.FetchRemoteConfig(InitializeUI);
}

private void InitializeUI() {
if (menuComponent == null) {
menuComponent = SpawnUI<Menus.MainMenuGUI>(StringConstants.PrefabMainMenu);
}

var subtitleOverride = JsonUtility.FromJson<Menus.MainMenuGUI.SubtitleOverride>(SubtitleOverrideDefault);
var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
var subtitleOverride = JsonUtility.FromJson<Menus.MainMenuGUI.SubtitleOverride>(
remoteConfig.GetValue(SubtitleOverrideKey).StringValue);
// Only sets values if all fields of the override are non-default.
if(subtitleOverride != null &&subtitleOverride.IsValidOverride())
{
Expand Down

0 comments on commit 9101f21

Please sign in to comment.