1
0
mirror of https://github.com/soarqin/DSP_Mods.git synced 2025-12-08 21:33:28 +08:00

tweaks for Dyson Shell dismantling

This commit is contained in:
2024-10-15 15:59:17 +08:00
parent 26df57f911
commit 54f04eb5d7
3 changed files with 63 additions and 48 deletions

View File

@@ -0,0 +1,44 @@
namespace UXAssist.Functions;
public static class DysonSphereFunctions
{
public static StarData CurrentStarForDysonSystem()
{
StarData star = null;
var dysonEditor = UIRoot.instance?.uiGame?.dysonEditor;
if (dysonEditor != null && dysonEditor.gameObject.activeSelf)
{
star = dysonEditor.selection.viewStar;
}
return star ?? GameMain.data?.localStar;
}
public static void InitCurrentDysonLayer(StarData star, int index)
{
star ??= CurrentStarForDysonSystem();
if (star == null) return;
var dysonSpheres = GameMain.data?.dysonSpheres;
if (dysonSpheres == null) return;
if (index < 0)
{
if (dysonSpheres[star.index] == null) return;
var dysonSphere = new DysonSphere();
dysonSpheres[star.index] = dysonSphere;
dysonSphere.Init(GameMain.data, star);
dysonSphere.ResetNew();
return;
}
var ds = dysonSpheres[star.index];
if (ds?.layersIdBased[index] == null) return;
var pool = ds.rocketPool;
for (var id = ds.rocketCursor - 1; id > 0; id--)
{
if (pool[id].id != id) continue;
if (pool[id].nodeLayerId != index) continue;
ds.RemoveDysonRocket(id);
}
ds.RemoveLayer(index);
}
}

View File

@@ -40,35 +40,6 @@ public class DysonSpherePatch: PatchImpl<DysonSpherePatch>
Enable(false);
}
public static void InitCurrentDysonSphere(int index)
{
var star = GameMain.localStar;
if (star == null) return;
var dysonSpheres = GameMain.data?.dysonSpheres;
if (dysonSpheres == null) return;
if (index < 0)
{
if (dysonSpheres[star.index] == null) return;
var dysonSphere = new DysonSphere();
dysonSpheres[star.index] = dysonSphere;
dysonSphere.Init(GameMain.data, star);
dysonSphere.ResetNew();
return;
}
var ds = dysonSpheres[star.index];
if (ds?.layersIdBased[index] == null) return;
var pool = ds.rocketPool;
for (var id = ds.rocketCursor - 1; id > 0; id--)
{
if (pool[id].id != id) continue;
if (pool[id].nodeLayerId != index) continue;
ds.RemoveDysonRocket(id);
}
ds.RemoveLayer(index);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(DysonSwarm), nameof(DysonSwarm.AutoConstruct))]
private static bool DysonSwarm_AutoConstruct_Prefix(DysonSwarm __instance)

View File

@@ -12,6 +12,7 @@ public static class UIConfigWindow
{
private static RectTransform _windowTrans;
private static RectTransform _dysonTab;
private static UIButton _dysonInitBtn;
private static readonly UIButton[] DysonLayerBtn = new UIButton[10];
public static void Init()
@@ -365,9 +366,9 @@ public static class UIConfigWindow
wnd.AddCheckBox(x, y, tab4, DysonSpherePatch.OnlyConstructNodesEnabled, "Construct only structure points but frames");
x = 400f;
y = 10f;
wnd.AddButton(x, y, tab4, "Initialize Dyson Sphere", 16, "init-dyson-sphere", () =>
_dysonInitBtn = wnd.AddButton(x, y, tab4, "Initialize Dyson Sphere", 16, "init-dyson-sphere", () =>
UIMessageBox.Show("Initialize Dyson Sphere".Translate(), "Initialize Dyson Sphere Confirm".Translate(), "取消".Translate(), "确定".Translate(), 2, null,
() => { DysonSpherePatch.InitCurrentDysonSphere(-1); })
() => { DysonSphereFunctions.InitCurrentDysonLayer(null, -1); })
);
y += 36f;
wnd.AddText2(x, y, tab4, "Click to dismantle selected layer", 16, "text-dismantle-layer");
@@ -376,8 +377,11 @@ public static class UIConfigWindow
{
var id = i + 1;
var btn = wnd.AddFlatButton(x, y, tab4, id.ToString(), 12, "dismantle-layer-" + id, () =>
UIMessageBox.Show("Dismantle selected layer".Translate(), "Dismantle selected layer Confirm".Translate(), "取消".Translate(), "确定".Translate(), 2, null,
() => { DysonSpherePatch.InitCurrentDysonSphere(id); })
{
var star = DysonSphereFunctions.CurrentStarForDysonSystem();
UIMessageBox.Show("Dismantle selected layer".Translate(), "Dismantle selected layer Confirm".Translate(), "取消".Translate(), "确定".Translate(), 2, null,
() => { DysonSphereFunctions.InitCurrentDysonLayer(star, id); });
}
);
((RectTransform)btn.transform).sizeDelta = new Vector2(40f, 20f);
DysonLayerBtn[i] = btn;
@@ -440,26 +444,22 @@ public static class UIConfigWindow
private static void UpdateDysonShells()
{
if (!_dysonTab.gameObject.activeSelf) return;
var star = GameMain.localStar;
if (star != null)
var star = DysonSphereFunctions.CurrentStarForDysonSystem();
if (star == null)
{
var dysonSpheres = GameMain.data?.dysonSpheres;
if (dysonSpheres?[star.index] != null)
for (var i = 0; i < 10; i++)
{
var ds = dysonSpheres[star.index];
for (var i = 1; i <= 10; i++)
{
var layer = ds.layersIdBased[i];
DysonLayerBtn[i - 1].button.interactable = layer != null && layer.id == i;
}
return;
DysonLayerBtn[i].button.interactable = false;
}
return;
}
for (var i = 0; i < 10; i++)
var dysonSpheres = GameMain.data?.dysonSpheres;
if (dysonSpheres?[star.index] == null) return;
var ds = dysonSpheres[star.index];
for (var i = 1; i <= 10; i++)
{
DysonLayerBtn[i].button.interactable = false;
var layer = ds.layersIdBased[i];
DysonLayerBtn[i - 1].button.interactable = layer != null && layer.id == i;
}
}
}