Unstable 0.16.1.0
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
#nullable enable
|
||||
using Barotrauma.IO;
|
||||
using Microsoft.Xna.Framework;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@@ -9,7 +10,7 @@ using System.Text;
|
||||
|
||||
namespace Barotrauma
|
||||
{
|
||||
public static partial class GameAnalyticsManager
|
||||
static partial class GameAnalyticsManager
|
||||
{
|
||||
public enum ErrorSeverity
|
||||
{
|
||||
@@ -29,6 +30,61 @@ namespace Barotrauma
|
||||
Fail = 3
|
||||
}
|
||||
|
||||
public enum CustomDimensions01
|
||||
{
|
||||
Vanilla,
|
||||
Modded
|
||||
}
|
||||
|
||||
public enum CustomDimensions02
|
||||
{
|
||||
None,
|
||||
Difficulty0to10,
|
||||
Difficulty10to20,
|
||||
Difficulty20to30,
|
||||
Difficulty30to40,
|
||||
Difficulty40to50,
|
||||
Difficulty50to60,
|
||||
Difficulty60to70,
|
||||
Difficulty70to80,
|
||||
Difficulty80to90,
|
||||
Difficulty90to100,
|
||||
}
|
||||
|
||||
public enum ResourceCurrency
|
||||
{
|
||||
Money
|
||||
}
|
||||
|
||||
public enum ResourceFlowType
|
||||
{
|
||||
Undefined = 0,
|
||||
Source = 1,
|
||||
Sink = 2
|
||||
}
|
||||
|
||||
public enum MoneySource
|
||||
{
|
||||
Unknown,
|
||||
MissionReward,
|
||||
Store,
|
||||
Event,
|
||||
Ability,
|
||||
Cheat
|
||||
}
|
||||
|
||||
public enum MoneySink
|
||||
{
|
||||
Unknown,
|
||||
Store,
|
||||
Service,
|
||||
Crew,
|
||||
SubmarineUpgrade,
|
||||
SubmarineWeapon,
|
||||
SubmarinePurchase,
|
||||
SubmarineSwitch
|
||||
}
|
||||
|
||||
private readonly static HashSet<string> sentEventIdentifiers = new HashSet<string>();
|
||||
|
||||
private class Implementation : IDisposable
|
||||
@@ -69,13 +125,29 @@ namespace Barotrauma
|
||||
internal void AddProgressionEvent(ProgressionStatus status, string progression01, string progression02, string progression03)
|
||||
=> addProgressionEvent03(status, progression01, progression02, progression03);
|
||||
|
||||
private readonly Action<ResourceFlowType, string, float, string, string> addResourceEvent;
|
||||
internal void AddResourceEvent(ResourceFlowType flowType, string currency, float amount, string itemType, string itemId)
|
||||
=> addResourceEvent(flowType, currency, amount, itemType, itemId);
|
||||
|
||||
private readonly Action<string> setCustomDimension01;
|
||||
internal void SetCustomDimension01(string dimension01)
|
||||
=> setCustomDimension01(dimension01);
|
||||
|
||||
private readonly Action<string[]> configureAvailableCustomDimensions01;
|
||||
internal void ConfigureAvailableCustomDimensions01(params string[] customDimensions)
|
||||
=> configureAvailableCustomDimensions01(customDimensions);
|
||||
internal void ConfigureAvailableCustomDimensions01(params CustomDimensions01[] customDimensions)
|
||||
=> configureAvailableCustomDimensions01(customDimensions.Select(d => d.ToString()).ToArray());
|
||||
|
||||
private readonly Action<string> setCustomDimension02;
|
||||
internal void SetCustomDimension02(string dimension02)
|
||||
=> setCustomDimension02(dimension02);
|
||||
|
||||
private readonly Action<string[]> configureAvailableCustomDimensions02;
|
||||
internal void ConfigureAvailableCustomDimensions02(params CustomDimensions02[] customDimensions)
|
||||
=> configureAvailableCustomDimensions02(customDimensions.Select(d => d.ToString()).ToArray());
|
||||
|
||||
private readonly Action<string[]> configureAvailableResourceCurrencies;
|
||||
internal void ConfigureAvailableResourceCurrencies(params ResourceCurrency[] customDimensions)
|
||||
=> configureAvailableResourceCurrencies(customDimensions.Select(d => d.ToString()).ToArray());
|
||||
|
||||
private readonly Action<bool> setEnabledInfoLog;
|
||||
internal void SetEnabledInfoLog(bool enabled)
|
||||
@@ -94,6 +166,7 @@ namespace Barotrauma
|
||||
private readonly object?[] args2 = new object?[2];
|
||||
private readonly object?[] args3 = new object?[3];
|
||||
private readonly object?[] args4 = new object?[4];
|
||||
private readonly object?[] args5 = new object?[5];
|
||||
|
||||
private Action Call(MethodInfo methodInfo)
|
||||
=> () => methodInfo?.Invoke(null, null);
|
||||
@@ -131,6 +204,17 @@ namespace Barotrauma
|
||||
args4[3] = arg4;
|
||||
methodInfo.Invoke(null, args4);
|
||||
};
|
||||
|
||||
private Action<T1, T2, T3, T4, T5> Call<T1, T2, T3, T4, T5>(MethodInfo methodInfo)
|
||||
=> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5) =>
|
||||
{
|
||||
args5[0] = arg1;
|
||||
args5[1] = arg2;
|
||||
args5[2] = arg3;
|
||||
args5[3] = arg4;
|
||||
args5[4] = arg5;
|
||||
methodInfo.Invoke(null, args5);
|
||||
};
|
||||
#endregion
|
||||
|
||||
private AssemblyLoadContext? loadContext;
|
||||
@@ -165,9 +249,15 @@ namespace Barotrauma
|
||||
var mainClass = getType(MainClass);
|
||||
var errorSeverityEnumType = getType($"{EnumPrefix}{nameof(ErrorSeverity)}");
|
||||
var progressionStatusEnumType = getType($"{EnumPrefix}{nameof(ProgressionStatus)}");
|
||||
var resourceFlowTypeEnumType = getType($"{EnumPrefix}{nameof(ResourceFlowType)}");
|
||||
|
||||
MethodInfo getMethod(string name, Type[] types)
|
||||
{
|
||||
foreach (var me in mainClass.GetMethods())
|
||||
{
|
||||
var aksjdnakjsdnf = me;
|
||||
}
|
||||
|
||||
return mainClass?.GetMethod(name, BindingFlags.Public | BindingFlags.Static, binder: null, types: types, modifiers: null)
|
||||
?? throw new Exception($"Could not find method \"{name}\" with types {string.Join(',', types.Select(t => t.Name))}");
|
||||
}
|
||||
@@ -190,10 +280,20 @@ namespace Barotrauma
|
||||
new Type[] { progressionStatusEnumType, typeof(string), typeof(string) }));
|
||||
addProgressionEvent03 = Call<ProgressionStatus, string, string, string>(getMethod(nameof(AddProgressionEvent),
|
||||
new Type[] { progressionStatusEnumType, typeof(string), typeof(string), typeof(string) }));
|
||||
|
||||
setCustomDimension01 = Call<string>(getMethod(nameof(SetCustomDimension01),
|
||||
new Type[] { typeof(string) }));
|
||||
configureAvailableCustomDimensions01 = Call<string[]>(getMethod(nameof(ConfigureAvailableCustomDimensions01),
|
||||
new Type[] { typeof(string[]) }));
|
||||
setCustomDimension02 = Call<string>(getMethod(nameof(SetCustomDimension02),
|
||||
new Type[] { typeof(string) }));
|
||||
configureAvailableCustomDimensions02 = Call<string[]>(getMethod(nameof(ConfigureAvailableCustomDimensions02),
|
||||
new Type[] { typeof(string[]) }));
|
||||
|
||||
configureAvailableResourceCurrencies = Call<string[]>(getMethod(nameof(ConfigureAvailableResourceCurrencies),
|
||||
new Type[] { typeof(string[]) }));
|
||||
addResourceEvent = Call<ResourceFlowType, string, float, string, string>(getMethod(nameof(AddResourceEvent),
|
||||
new Type[] { resourceFlowTypeEnumType, typeof(string), typeof(float), typeof(string), typeof(string) }));
|
||||
setEnabledInfoLog = Call<bool>(getMethod(nameof(SetEnabledInfoLog),
|
||||
new Type[] { typeof(bool) }));
|
||||
|
||||
@@ -204,8 +304,7 @@ namespace Barotrauma
|
||||
private void OnQuit()
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
{
|
||||
if (assembly != null) { onQuit?.Invoke(); }
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -298,10 +397,40 @@ namespace Barotrauma
|
||||
loadedImplementation?.AddProgressionEvent(progressionStatus, progression01, progression02, progression03);
|
||||
}
|
||||
|
||||
public static void SetCustomDimension01(string dimension)
|
||||
public static void SetCustomDimension01(CustomDimensions01 dimension)
|
||||
{
|
||||
if (!SendUserStatistics) { return; }
|
||||
loadedImplementation?.SetCustomDimension01(dimension);
|
||||
loadedImplementation?.SetCustomDimension01(dimension.ToString());
|
||||
}
|
||||
|
||||
public static void SetCurrentLevel(LevelData levelData)
|
||||
{
|
||||
if (!SendUserStatistics) { return; }
|
||||
|
||||
CustomDimensions02 customDimension = CustomDimensions02.None;
|
||||
if (levelData != null)
|
||||
{
|
||||
float levelDifficulty = levelData.Difficulty;
|
||||
customDimension = (CustomDimensions02)MathHelper.Clamp((int)(levelDifficulty / 10) + 1, 0, Enum.GetValues(typeof(CustomDimensions02)).Length - 1);
|
||||
}
|
||||
|
||||
loadedImplementation?.SetCustomDimension02(customDimension.ToString());
|
||||
}
|
||||
|
||||
public static void AddMoneyGainedEvent(int amount, MoneySource moneySource, string eventId)
|
||||
{
|
||||
AddResourceEvent(ResourceFlowType.Source, ResourceCurrency.Money, amount, moneySource.ToString(), eventId);
|
||||
}
|
||||
|
||||
public static void AddMoneySpentEvent(int amount, MoneySink moneySink, string eventId)
|
||||
{
|
||||
AddResourceEvent(ResourceFlowType.Sink, ResourceCurrency.Money, amount, moneySink.ToString(), eventId);
|
||||
}
|
||||
|
||||
private static void AddResourceEvent(ResourceFlowType flowType, ResourceCurrency currency, float amount, string eventType, string eventId)
|
||||
{
|
||||
if (!SendUserStatistics) { return; }
|
||||
loadedImplementation?.AddResourceEvent(flowType, currency.ToString(), amount, eventType, eventId);
|
||||
}
|
||||
|
||||
private static void Init()
|
||||
@@ -359,7 +488,8 @@ namespace Barotrauma
|
||||
+ exeName + ":"
|
||||
+ AssemblyInfo.GitRevision + ":"
|
||||
+ buildConfiguration);
|
||||
loadedImplementation?.ConfigureAvailableCustomDimensions01("singleplayer", "multiplayer", "editor");
|
||||
loadedImplementation?.ConfigureAvailableCustomDimensions01(Enum.GetValues(typeof(CustomDimensions01)).Cast<CustomDimensions01>().ToArray());
|
||||
loadedImplementation?.ConfigureAvailableResourceCurrencies(Enum.GetValues(typeof(ResourceCurrency)).Cast<ResourceCurrency>().ToArray());
|
||||
|
||||
InitKeys();
|
||||
|
||||
@@ -380,15 +510,16 @@ namespace Barotrauma
|
||||
var allPackages = GameMain.Config?.AllEnabledPackages.ToList();
|
||||
if (allPackages?.Count > 0)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder("ContentPackage: ");
|
||||
int i = 0;
|
||||
List<string> packageNames = new List<string>();
|
||||
foreach (ContentPackage cp in allPackages)
|
||||
{
|
||||
string trimmedName = cp.Name.Replace(":", "").Replace(" ", "");
|
||||
sb.Append(trimmedName.Substring(0, Math.Min(32, trimmedName.Length)));
|
||||
if (i < allPackages.Count - 1) { sb.Append(" "); }
|
||||
string sanitizedName = cp.Name.Replace(":", "").Replace(" ", "");
|
||||
sanitizedName = sanitizedName.Substring(0, Math.Min(32, sanitizedName.Length));
|
||||
packageNames.Add(sanitizedName);
|
||||
loadedImplementation?.AddDesignEvent("ContentPackage:" + sanitizedName);
|
||||
}
|
||||
loadedImplementation?.AddDesignEvent(sb.ToString());
|
||||
packageNames.Sort();
|
||||
loadedImplementation?.AddDesignEvent("AllContentPackages:" + string.Join(", ", packageNames));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user