1
0
mirror of https://github.com/soarqin/DSP_Mods.git synced 2025-12-09 02:13:29 +08:00
Files
DSP_Mods/UniverseGenTweaks/BirthPlanetPatch.cs
2024-08-25 14:41:17 +08:00

178 lines
5.7 KiB
C#

using System.Collections.Generic;
using BepInEx.Configuration;
using HarmonyLib;
using UXAssist.Common;
namespace UniverseGenTweaks;
public static class BirthPlanetPatch
{
public static ConfigEntry<bool> SitiVeinsOnBirthPlanet;
public static ConfigEntry<bool> FireIceOnBirthPlanet;
public static ConfigEntry<bool> KimberliteOnBirthPlanet;
public static ConfigEntry<bool> FractalOnBirthPlanet;
public static ConfigEntry<bool> OrganicOnBirthPlanet;
public static ConfigEntry<bool> OpticalOnBirthPlanet;
public static ConfigEntry<bool> SpiniformOnBirthPlanet;
public static ConfigEntry<bool> UnipolarOnBirthPlanet;
public static ConfigEntry<bool> FlatBirthPlanet;
public static ConfigEntry<bool> HighLuminosityBirthStar;
private static BackupData _backupData;
private static bool _initialized;
private static Harmony _patch;
private struct BackupData
{
public void FromTheme(ThemeProto theme)
{
_algos = theme.Algos.Clone() as int[];
_veinSpot = theme.VeinSpot.Clone() as int[];
_veinCount = theme.VeinCount.Clone() as float[];
_veinOpacity = theme.VeinOpacity.Clone() as float[];
_rareVeins = theme.RareVeins.Clone() as int[];
_rareSettings = theme.RareSettings.Clone() as float[];
_specifyBirthStarMass = StarGen.specifyBirthStarMass;
_specifyBirthStarAge = StarGen.specifyBirthStarAge;
_inited = true;
}
public void ToTheme(ThemeProto theme)
{
if (!_inited) return;
theme.Algos = _algos.Clone() as int[];
theme.VeinSpot = _veinSpot.Clone() as int[];
theme.VeinCount = _veinCount.Clone() as float[];
theme.VeinOpacity = _veinOpacity.Clone() as float[];
theme.RareVeins = _rareVeins.Clone() as int[];
theme.RareSettings = _rareSettings.Clone() as float[];
StarGen.specifyBirthStarMass = _specifyBirthStarMass;
StarGen.specifyBirthStarAge = _specifyBirthStarAge;
}
private bool _inited;
private int[] _algos;
private int[] _veinSpot;
private float[] _veinCount;
private float[] _veinOpacity;
private int[] _rareVeins;
private float[] _rareSettings;
private float _specifyBirthStarMass;
private float _specifyBirthStarAge;
}
public static void Init()
{
SitiVeinsOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData();
FireIceOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData();
KimberliteOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData();
FractalOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData();
OrganicOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData();
OpticalOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData();
SpiniformOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData();
UnipolarOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData();
FlatBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData();
HighLuminosityBirthStar.SettingChanged += (_, _) => PatchBirthThemeData();
PatchBirthThemeData();
_patch ??= Harmony.CreateAndPatchAll(typeof(BirthPlanetPatch));
GameLogic.OnDataLoaded += VFPreload_InvokeOnLoadWorkEnded_Postfix;
}
public static void Uninit()
{
GameLogic.OnDataLoaded -= VFPreload_InvokeOnLoadWorkEnded_Postfix;
_patch?.UnpatchSelf();
_patch = null;
}
private static void VFPreload_InvokeOnLoadWorkEnded_Postfix()
{
PatchBirthThemeData();
}
private static void PatchBirthThemeData()
{
var theme = LDB.themes.Select(1);
if (!_initialized)
{
_backupData.FromTheme(theme);
}
else
{
_backupData.ToTheme(theme);
}
if (FlatBirthPlanet.Value)
{
theme.Algos[0] = 2;
}
if (SitiVeinsOnBirthPlanet.Value)
{
theme.VeinSpot[2] = 2;
theme.VeinSpot[3] = 2;
theme.VeinCount[2] = 0.7f;
theme.VeinCount[3] = 0.7f;
theme.VeinOpacity[2] = 1f;
theme.VeinOpacity[3] = 1f;
}
List<int> veins = [];
List<float> settings = [];
if (FireIceOnBirthPlanet.Value)
{
veins.Add(8);
settings.AddRange(new[] { 1f, 1f, 0.5f, 1f });
}
if (KimberliteOnBirthPlanet.Value)
{
veins.Add(9);
settings.AddRange(new[] { 1f, 1f, 0.5f, 1f });
}
if (FractalOnBirthPlanet.Value)
{
veins.Add(10);
settings.AddRange(new[] { 1f, 1f, 0.5f, 1f });
}
if (OrganicOnBirthPlanet.Value)
{
veins.Add(11);
settings.AddRange(new[] { 1f, 1f, 0.5f, 1f });
}
if (OpticalOnBirthPlanet.Value)
{
veins.Add(12);
settings.AddRange(new[] { 1f, 1f, 0.5f, 1f });
}
if (SpiniformOnBirthPlanet.Value)
{
veins.Add(13);
settings.AddRange(new[] { 1f, 1f, 0.5f, 1f });
}
if (UnipolarOnBirthPlanet.Value)
{
veins.Add(14);
settings.AddRange(new[] { 1f, 1f, 0.5f, 1f });
}
if (veins.Count > 0)
{
theme.RareVeins = veins.ToArray();
theme.RareSettings = settings.ToArray();
}
if (HighLuminosityBirthStar.Value)
{
StarGen.specifyBirthStarMass = 53.81f;
StarGen.specifyBirthStarAge = 0.01f;
}
_initialized = true;
}
}