mirror of
https://github.com/soarqin/DSP_Mods.git
synced 2025-12-09 16:13:31 +08:00
work in progress
This commit is contained in:
175
UniverseGenTweaks/BirthPlanetPatch.cs
Normal file
175
UniverseGenTweaks/BirthPlanetPatch.cs
Normal file
@@ -0,0 +1,175 @@
|
||||
using System.Collections.Generic;
|
||||
using BepInEx.Configuration;
|
||||
using HarmonyLib;
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
public static void Uninit()
|
||||
{
|
||||
_patch?.UnpatchSelf();
|
||||
_patch = null;
|
||||
}
|
||||
|
||||
[HarmonyPostfix, HarmonyPatch(typeof(VFPreload), "InvokeOnLoadWorkEnded")]
|
||||
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 = new();
|
||||
List<float> settings = new();
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user