mirror of
https://github.com/soarqin/DSP_Mods.git
synced 2025-12-10 07:23:28 +08:00
UXAssist v1.0.2, UniverseGenTweaks v1.2.1, CheatEnabler v2.3.4
This commit is contained in:
@@ -5,7 +5,7 @@
|
|||||||
<TargetFramework>net472</TargetFramework>
|
<TargetFramework>net472</TargetFramework>
|
||||||
<BepInExPluginGuid>org.soardev.cheatenabler</BepInExPluginGuid>
|
<BepInExPluginGuid>org.soardev.cheatenabler</BepInExPluginGuid>
|
||||||
<Description>DSP MOD - CheatEnabler</Description>
|
<Description>DSP MOD - CheatEnabler</Description>
|
||||||
<Version>2.3.2</Version>
|
<Version>2.3.4</Version>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<LangVersion>latest</LangVersion>
|
<LangVersion>latest</LangVersion>
|
||||||
<PackageId>CheatEnabler</PackageId>
|
<PackageId>CheatEnabler</PackageId>
|
||||||
|
|||||||
@@ -197,9 +197,8 @@ public static class DysonSpherePatch
|
|||||||
{
|
{
|
||||||
var index = swarm.starData.index;
|
var index = swarm.starData.index;
|
||||||
var delta1 = endVec - swarm.starData.uPosition;
|
var delta1 = endVec - swarm.starData.uPosition;
|
||||||
var delta2 = VectorLF3.Cross(endVec - uPos, swarm.orbits[orbitId].up).normalized * Math.Sqrt(swarm.dysonSphere.gravity / swarm.orbits[orbitId].radius)
|
var delta2 = VectorLF3.Cross(endVec - uPos, swarm.orbits[orbitId].up).normalized * Math.Sqrt(swarm.dysonSphere.gravity / swarm.orbits[orbitId].radius);
|
||||||
+ RandomTable.SphericNormal(ref swarm.randSeed, 0.5);
|
lock (swarm)
|
||||||
lock(swarm)
|
|
||||||
{
|
{
|
||||||
var cache = _sailsCache[index];
|
var cache = _sailsCache[index];
|
||||||
var len = _sailsCacheLen[index];
|
var len = _sailsCacheLen[index];
|
||||||
@@ -218,7 +217,7 @@ public static class DysonSpherePatch
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
_sailsCacheLen[index] = len + 1;
|
_sailsCacheLen[index] = len + 1;
|
||||||
cache[len].FromData(delta1, delta2, orbitId);
|
cache[len].FromData(delta1, delta2 + RandomTable.SphericNormal(ref swarm.randSeed, 0.5), orbitId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -108,7 +108,22 @@ public static class FactoryPatch
|
|||||||
[HarmonyPatch(typeof(PlanetData), nameof(PlanetData.NotifyFactoryLoaded))]
|
[HarmonyPatch(typeof(PlanetData), nameof(PlanetData.NotifyFactoryLoaded))]
|
||||||
private static void PlanetData_NotifyFactoryLoaded_Postfix(PlanetData __instance)
|
private static void PlanetData_NotifyFactoryLoaded_Postfix(PlanetData __instance)
|
||||||
{
|
{
|
||||||
ArrivePlanet(__instance.factory);
|
var main = GameMain.instance;
|
||||||
|
if (main != null && main._running)
|
||||||
|
{
|
||||||
|
ArrivePlanet(__instance.factory);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HarmonyPostfix]
|
||||||
|
[HarmonyPatch(typeof(GameMain), nameof(GameMain.Begin))]
|
||||||
|
private static void GameMain_Begin_Postfix_For_ImmBuild()
|
||||||
|
{
|
||||||
|
var factory = GameMain.mainPlayer?.factory;
|
||||||
|
if (factory != null)
|
||||||
|
{
|
||||||
|
ArrivePlanet(factory);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class ImmediateBuild
|
private static class ImmediateBuild
|
||||||
|
|||||||
@@ -4,6 +4,12 @@
|
|||||||
#### 添加一些作弊功能,同时屏蔽异常检测
|
#### 添加一些作弊功能,同时屏蔽异常检测
|
||||||
|
|
||||||
## Changlog
|
## Changlog
|
||||||
|
* 2.3.4
|
||||||
|
+ Use new tab layout of UXAssist 1.0.2
|
||||||
|
+ Minor bug fixes
|
||||||
|
* 2.3.3
|
||||||
|
+ Fix a crash in `Skip bullet period`.
|
||||||
|
+ Unlock techs with Alt unlocks VeinUtil to 10000 instead of 7200 now, as bug fixed in UXAssist.
|
||||||
* 2.3.2
|
* 2.3.2
|
||||||
+ Birth star options moved to [UniverseGenTweaks](https://dsp.thunderstore.io/package/soarqin/UniverseGenTweaks/)
|
+ Birth star options moved to [UniverseGenTweaks](https://dsp.thunderstore.io/package/soarqin/UniverseGenTweaks/)
|
||||||
+ Optimize `Quick absorb`, consumes less CPU time and take turns firing to nodes.
|
+ Optimize `Quick absorb`, consumes less CPU time and take turns firing to nodes.
|
||||||
@@ -74,8 +80,8 @@
|
|||||||
+ Build without condition
|
+ Build without condition
|
||||||
+ No collision
|
+ No collision
|
||||||
+ Belt signal item generation
|
+ Belt signal item generation
|
||||||
+ Count all raws and intermediates in statistics
|
- Count all raws and intermediates in statistics
|
||||||
+ Belt signal alt format
|
- Belt signal alt format
|
||||||
+ Remove space limit between wind turbines and solar panels
|
+ Remove space limit between wind turbines and solar panels
|
||||||
+ Boost power generations for kinds of power generators
|
+ Boost power generations for kinds of power generators
|
||||||
+ Planet:
|
+ Planet:
|
||||||
@@ -100,6 +106,12 @@
|
|||||||
* [Multifunction_mod](https://github.com/blacksnipebiu/Multifunction_mod): Some cheat functions
|
* [Multifunction_mod](https://github.com/blacksnipebiu/Multifunction_mod): Some cheat functions
|
||||||
|
|
||||||
## 更新日志
|
## 更新日志
|
||||||
|
* 2.3.4
|
||||||
|
+ 使用UXAssist 1.0.2的新页签布局
|
||||||
|
+ 修复了一些小bug
|
||||||
|
* 2.3.3
|
||||||
|
+ 修复了`跳过子弹阶段`可能导致崩溃的问题
|
||||||
|
+ 使用Alt解锁科技时,现在`矿物利用`的科技解锁到10000级而不是7200级,因为UXAssist已修复对应bug
|
||||||
* 2.3.2
|
* 2.3.2
|
||||||
+ 母星系的选项移动到了[UniverseGenTweaks](https://dsp.thunderstore.io/package/soarqin/UniverseGenTweaks/)
|
+ 母星系的选项移动到了[UniverseGenTweaks](https://dsp.thunderstore.io/package/soarqin/UniverseGenTweaks/)
|
||||||
+ 优化了`快速吸收`,现在消耗更少的CPU,并且会轮流打向各节点
|
+ 优化了`快速吸收`,现在消耗更少的CPU,并且会轮流打向各节点
|
||||||
@@ -170,8 +182,8 @@
|
|||||||
+ 无条件建造
|
+ 无条件建造
|
||||||
+ 无碰撞
|
+ 无碰撞
|
||||||
+ 传送带信号物品生成
|
+ 传送带信号物品生成
|
||||||
+ 统计面板中计算所有原材料和中间产物
|
- 统计面板中计算所有原材料和中间产物
|
||||||
+ 传送带信号替换格式
|
- 传送带信号替换格式
|
||||||
+ 风力发电机和太阳能板无间距限制
|
+ 风力发电机和太阳能板无间距限制
|
||||||
+ 提升各种发电设备发电量
|
+ 提升各种发电设备发电量
|
||||||
+ 行星:
|
+ 行星:
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Reflection.Emit;
|
using System.Reflection.Emit;
|
||||||
using BepInEx.Configuration;
|
using BepInEx.Configuration;
|
||||||
using HarmonyLib;
|
using HarmonyLib;
|
||||||
|
using JetBrains.Annotations;
|
||||||
|
|
||||||
namespace CheatEnabler;
|
namespace CheatEnabler;
|
||||||
|
|
||||||
@@ -37,22 +38,16 @@ public static class TechPatch
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void UnlockTechRecursive(TechProto proto, int maxLevel = 10000)
|
private static void UnlockTechRecursive([NotNull] TechProto techProto, int maxLevel = 10000)
|
||||||
{
|
{
|
||||||
var history = GameMain.history;
|
var history = GameMain.history;
|
||||||
var techStates = history.techStates;
|
var techStates = history.techStates;
|
||||||
var techID = proto.ID;
|
var techID = techProto.ID;
|
||||||
if (techStates == null || !techStates.ContainsKey(techID))
|
if (techStates == null || !techStates.ContainsKey(techID))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var techProto = LDB.techs.Select(techID);
|
|
||||||
if (techProto == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var value = techStates[techID];
|
var value = techStates[techID];
|
||||||
if (value.unlocked)
|
if (value.unlocked)
|
||||||
{
|
{
|
||||||
@@ -128,7 +123,7 @@ public static class TechPatch
|
|||||||
}
|
}
|
||||||
else if (VFInput.alt)
|
else if (VFInput.alt)
|
||||||
{
|
{
|
||||||
UnlockTechRecursive(node.techProto, node.techProto.ID == 3606 ? 7200 : 10000);
|
UnlockTechRecursive(node.techProto, 10000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,8 @@ public static class UIConfigWindow
|
|||||||
|
|
||||||
public static void Init()
|
public static void Init()
|
||||||
{
|
{
|
||||||
I18N.Add("General", "*General*", "*常规*");
|
I18N.Add("Factory", "Factory", "工厂");
|
||||||
|
I18N.Add("Planet", "Planet", "行星");
|
||||||
I18N.Add("Enable Dev Shortcuts", "Enable Dev Shortcuts", "开发模式快捷键");
|
I18N.Add("Enable Dev Shortcuts", "Enable Dev Shortcuts", "开发模式快捷键");
|
||||||
I18N.Add("Disable Abnormal Checks", "Disable Abnormal Checks", "关闭数据异常检查");
|
I18N.Add("Disable Abnormal Checks", "Disable Abnormal Checks", "关闭数据异常检查");
|
||||||
I18N.Add("Hotkey", "Hotkey", "快捷键");
|
I18N.Add("Hotkey", "Hotkey", "快捷键");
|
||||||
@@ -25,7 +26,6 @@ public static class UIConfigWindow
|
|||||||
"Click tech on tree while holding:\n Shift: Tech level + 1\n Ctrl: Tech level + 10\n Ctrl + Shift: Tech level + 100\n Alt: Tech level to MAX\n\nNote: all direct prerequisites will be unlocked as well.",
|
"Click tech on tree while holding:\n Shift: Tech level + 1\n Ctrl: Tech level + 10\n Ctrl + Shift: Tech level + 100\n Alt: Tech level to MAX\n\nNote: all direct prerequisites will be unlocked as well.",
|
||||||
"按住以下组合键点击科技树:\n Shift:科技等级+1\n Ctrl:科技等级+10\n Ctrl+Shift:科技等级+100\n Alt:科技等级升到最大\n\n注意:所有直接前置科技也会被解锁");
|
"按住以下组合键点击科技树:\n Shift:科技等级+1\n Ctrl:科技等级+10\n Ctrl+Shift:科技等级+100\n Alt:科技等级升到最大\n\n注意:所有直接前置科技也会被解锁");
|
||||||
I18N.Add("Assign game to current account", "Assign game to current account", "将游戏绑定给当前账号");
|
I18N.Add("Assign game to current account", "Assign game to current account", "将游戏绑定给当前账号");
|
||||||
I18N.Add("Factory", "*Factory*", "*工厂*");
|
|
||||||
I18N.Add("Finish build immediately", "Finish build immediately", "建造秒完成");
|
I18N.Add("Finish build immediately", "Finish build immediately", "建造秒完成");
|
||||||
I18N.Add("Architect mode", "Architect mode", "建筑师模式");
|
I18N.Add("Architect mode", "Architect mode", "建筑师模式");
|
||||||
I18N.Add("Build without condition", "Build without condition check", "无条件建造");
|
I18N.Add("Build without condition", "Build without condition check", "无条件建造");
|
||||||
@@ -42,11 +42,9 @@ public static class UIConfigWindow
|
|||||||
I18N.Add("Boost fuel power", "Boost fuel power(x50,000)", "提升燃料发电(x50,000)");
|
I18N.Add("Boost fuel power", "Boost fuel power(x50,000)", "提升燃料发电(x50,000)");
|
||||||
I18N.Add("Boost fuel power 2", "(x20,000 for deuteron, x10,000 for antimatter)", "(氘核燃料棒x20,000,反物质燃料棒x10,000)");
|
I18N.Add("Boost fuel power 2", "(x20,000 for deuteron, x10,000 for antimatter)", "(氘核燃料棒x20,000,反物质燃料棒x10,000)");
|
||||||
I18N.Add("Boost geothermal power", "Boost geothermal power(x50,000)", "提升地热发电(x50,000)");
|
I18N.Add("Boost geothermal power", "Boost geothermal power(x50,000)", "提升地热发电(x50,000)");
|
||||||
I18N.Add("Planet", "*Planet*", "*行星*");
|
|
||||||
I18N.Add("Infinite Natural Resources", "Infinite natural resources", "自然资源采集不消耗");
|
I18N.Add("Infinite Natural Resources", "Infinite natural resources", "自然资源采集不消耗");
|
||||||
I18N.Add("Fast Mining", "Fast mining", "高速采集");
|
I18N.Add("Fast Mining", "Fast mining", "高速采集");
|
||||||
I18N.Add("Pump Anywhere", "Pump anywhere", "平地抽水");
|
I18N.Add("Pump Anywhere", "Pump anywhere", "平地抽水");
|
||||||
I18N.Add("Dyson Sphere", "*Dyson Sphere*", "*戴森球*");
|
|
||||||
I18N.Add("Skip bullet period", "Skip bullet period", "跳过子弹阶段");
|
I18N.Add("Skip bullet period", "Skip bullet period", "跳过子弹阶段");
|
||||||
I18N.Add("Skip absorption period", "Skip absorption period", "跳过吸收阶段");
|
I18N.Add("Skip absorption period", "Skip absorption period", "跳过吸收阶段");
|
||||||
I18N.Add("Quick absorb", "Quick absorb", "快速吸收");
|
I18N.Add("Quick absorb", "Quick absorb", "快速吸收");
|
||||||
@@ -54,17 +52,6 @@ public static class UIConfigWindow
|
|||||||
I18N.Add("Overclock Ejectors", "Overclock Ejectors (10x)", "高速弹射器(10倍射速)");
|
I18N.Add("Overclock Ejectors", "Overclock Ejectors (10x)", "高速弹射器(10倍射速)");
|
||||||
I18N.Add("Overclock Silos", "Overclock Silos (10x)", "高速发射井(10倍射速)");
|
I18N.Add("Overclock Silos", "Overclock Silos (10x)", "高速发射井(10倍射速)");
|
||||||
I18N.Add("Terraform without enough sands", "Terraform without enough sands", "沙土不够时依然可以整改地形");
|
I18N.Add("Terraform without enough sands", "Terraform without enough sands", "沙土不够时依然可以整改地形");
|
||||||
I18N.Add("Birth", "*Birth Sys*", "*母星系*");
|
|
||||||
I18N.Add("Silicon/Titanium on birth planet", "Silicon/Titanium on birth planet", "母星有硅和钛");
|
|
||||||
I18N.Add("Fire ice on birth planet", "Fire ice on birth planet", "母星有可燃冰");
|
|
||||||
I18N.Add("Kimberlite on birth planet", "Kimberlite on birth planet", "母星有金伯利矿");
|
|
||||||
I18N.Add("Fractal silicon on birth planet", "Fractal silicon on birth planet", "母星有分形硅");
|
|
||||||
I18N.Add("Organic crystal on birth planet", "Organic crystal on birth planet", "母星有有机晶体");
|
|
||||||
I18N.Add("Optical grating crystal on birth planet", "Optical grating crystal on birth planet", "母星有光栅石");
|
|
||||||
I18N.Add("Spiniform stalagmite crystal on birth planet", "Spiniform stalagmite crystal on birth planet", "母星有刺笋结晶");
|
|
||||||
I18N.Add("Unipolar magnet on birth planet", "Unipolar magnet on birth planet", "母星有单极磁石");
|
|
||||||
I18N.Add("Birth planet is solid flat (no water at all)", "Birth planet is solid flat (no water at all)", "母星是纯平的(没有水)");
|
|
||||||
I18N.Add("Birth star has high luminosity", "Birth star has high luminosity", "母星系恒星高亮");
|
|
||||||
I18N.Apply();
|
I18N.Apply();
|
||||||
MyConfigWindow.OnUICreated += CreateUI;
|
MyConfigWindow.OnUICreated += CreateUI;
|
||||||
MyConfigWindow.OnUpdateUI += UpdateUI;
|
MyConfigWindow.OnUpdateUI += UpdateUI;
|
||||||
@@ -76,6 +63,8 @@ public static class UIConfigWindow
|
|||||||
// General tab
|
// General tab
|
||||||
var x = 0f;
|
var x = 0f;
|
||||||
var y = 10f;
|
var y = 10f;
|
||||||
|
wnd.AddSplitter(trans, 10f);
|
||||||
|
wnd.AddTabGroup(trans, "Cheat Enabler", "tab-group-cheatenabler");
|
||||||
var tab1 = wnd.AddTab(_windowTrans, "General");
|
var tab1 = wnd.AddTab(_windowTrans, "General");
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab1, DevShortcuts.Enabled, "Enable Dev Shortcuts");
|
MyCheckBox.CreateCheckBox(x, y, tab1, DevShortcuts.Enabled, "Enable Dev Shortcuts");
|
||||||
y += 36f;
|
y += 36f;
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"name": "CheatEnabler",
|
"name": "CheatEnabler",
|
||||||
"version_number": "2.3.2",
|
"version_number": "2.3.4",
|
||||||
"website_url": "https://github.com/soarqin/DSP_Mods/tree/master/CheatEnabler",
|
"website_url": "https://github.com/soarqin/DSP_Mods/tree/master/CheatEnabler",
|
||||||
"description": "Add various cheat functions while disabling abnormal determinants / 添加一些作弊功能,同时屏蔽异常检测",
|
"description": "Add various cheat functions while disabling abnormal determinants / 添加一些作弊功能,同时屏蔽异常检测",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
"xiaoye97-BepInEx-5.4.17",
|
"xiaoye97-BepInEx-5.4.17",
|
||||||
"soarqin-UXAssist-1.0.0"
|
"soarqin-UXAssist-1.0.2"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
76
UXAssist/Common/WinApi.cs
Normal file
76
UXAssist/Common/WinApi.cs
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace UXAssist.Common;
|
||||||
|
|
||||||
|
[Flags]
|
||||||
|
public enum WindowStyles: int
|
||||||
|
{
|
||||||
|
WS_BORDER = 0x00800000,
|
||||||
|
WS_CAPTION = 0x00C00000,
|
||||||
|
WS_CHILD = 0x40000000,
|
||||||
|
WS_CHILDWINDOW = 0x40000000,
|
||||||
|
WS_CLIPCHILDREN = 0x02000000,
|
||||||
|
WS_CLIPSIBLINGS = 0x04000000,
|
||||||
|
WS_DISABLED = 0x08000000,
|
||||||
|
WS_DLGFRAME = 0x00400000,
|
||||||
|
WS_GROUP = 0x00020000,
|
||||||
|
WS_HSCROLL = 0x00100000,
|
||||||
|
WS_ICONIC = 0x20000000,
|
||||||
|
WS_MAXIMIZE = 0x01000000,
|
||||||
|
WS_MAXIMIZEBOX = 0x00010000,
|
||||||
|
WS_MINIMIZE = 0x20000000,
|
||||||
|
WS_MINIMIZEBOX = 0x00020000,
|
||||||
|
WS_OVERLAPPED = 0x00000000,
|
||||||
|
WS_OVERLAPPEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,
|
||||||
|
WS_POPUP = unchecked((int)0x80000000),
|
||||||
|
WS_POPUPWINDOW = WS_POPUP | WS_BORDER | WS_SYSMENU,
|
||||||
|
WS_SIZEBOX = 0x00040000,
|
||||||
|
WS_SYSMENU = 0x00080000,
|
||||||
|
WS_TABSTOP = 0x00010000,
|
||||||
|
WS_THICKFRAME = 0x00040000,
|
||||||
|
WS_TILED = 0x00000000,
|
||||||
|
WS_TILEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,
|
||||||
|
WS_VISIBLE = 0x10000000,
|
||||||
|
WS_VSCROLL = 0x00200000
|
||||||
|
}
|
||||||
|
|
||||||
|
[Flags]
|
||||||
|
public enum WindowLongFlags: int
|
||||||
|
{
|
||||||
|
GWL_EXSTYLE = -20,
|
||||||
|
GWLP_HINSTANCE = -6,
|
||||||
|
GWLP_HWNDPARENT = -8,
|
||||||
|
GWLP_ID = -12,
|
||||||
|
GWL_STYLE = -16,
|
||||||
|
GWLP_USERDATA = -21,
|
||||||
|
GWLP_WNDPROC = -4,
|
||||||
|
DWLP_DLGPROC = 0x4,
|
||||||
|
DWLP_MSGRESULT = 0,
|
||||||
|
DWLP_USER = 0x8
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class WinApi
|
||||||
|
{
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct Rect
|
||||||
|
{
|
||||||
|
public int Left, Top, Right, Bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
[DllImport("user32", CharSet = CharSet.Unicode)]
|
||||||
|
public static extern int GetWindowLong(IntPtr hwnd, int nIndex);
|
||||||
|
|
||||||
|
[DllImport("user32", CharSet = CharSet.Unicode)]
|
||||||
|
public static extern int SetWindowLong(IntPtr hwnd, int nIndex, int dwNewLong);
|
||||||
|
|
||||||
|
[DllImport("user32", CharSet = CharSet.Unicode)]
|
||||||
|
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
|
||||||
|
|
||||||
|
[DllImport("user32", ExactSpelling = true)]
|
||||||
|
public static extern bool GetWindowRect(IntPtr hwnd, out Rect lpRect);
|
||||||
|
|
||||||
|
[DllImport("user32", ExactSpelling = true)]
|
||||||
|
public static extern bool SetWindowPos(IntPtr hwnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, int flags);
|
||||||
|
}
|
||||||
103
UXAssist/GamePatch.cs
Normal file
103
UXAssist/GamePatch.cs
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
using System;
|
||||||
|
using BepInEx.Configuration;
|
||||||
|
using HarmonyLib;
|
||||||
|
using UnityEngine;
|
||||||
|
using UXAssist.Common;
|
||||||
|
|
||||||
|
namespace UXAssist;
|
||||||
|
|
||||||
|
public static class GamePatch
|
||||||
|
{
|
||||||
|
private const string GameWindowClass = "UnityWndClass";
|
||||||
|
private const string GameWindowTitle = "Dyson Sphere Program";
|
||||||
|
|
||||||
|
public static ConfigEntry<bool> EnableWindowResizeEnabled;
|
||||||
|
public static ConfigEntry<bool> LoadLastWindowRectEnabled;
|
||||||
|
public static ConfigEntry<Vector4> LastWindowRect;
|
||||||
|
private static Harmony _gamePatch;
|
||||||
|
|
||||||
|
public static void Init()
|
||||||
|
{
|
||||||
|
EnableWindowResizeEnabled.SettingChanged += (_, _) => EnableWindowResize.Enable(EnableWindowResizeEnabled.Value);
|
||||||
|
LoadLastWindowRectEnabled.SettingChanged += (_, _) => LoadLastWindowRect.Enable(LoadLastWindowRectEnabled.Value);
|
||||||
|
EnableWindowResize.Enable(EnableWindowResizeEnabled.Value);
|
||||||
|
LoadLastWindowRect.Enable(LoadLastWindowRectEnabled.Value);
|
||||||
|
_gamePatch ??= Harmony.CreateAndPatchAll(typeof(GamePatch));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Uninit()
|
||||||
|
{
|
||||||
|
LoadLastWindowRect.Enable(false);
|
||||||
|
EnableWindowResize.Enable(false);
|
||||||
|
_gamePatch?.UnpatchSelf();
|
||||||
|
_gamePatch = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HarmonyPrefix, HarmonyPatch(typeof(Application), nameof(Application.Quit), new Type[]{})]
|
||||||
|
private static void Application_Quit_Prefix()
|
||||||
|
{
|
||||||
|
var wnd = WinApi.FindWindow(GameWindowClass, GameWindowTitle);
|
||||||
|
if (wnd == IntPtr.Zero) return;
|
||||||
|
WinApi.GetWindowRect(wnd, out var rect);
|
||||||
|
LastWindowRect.Value = new Vector4(rect.Left, rect.Top, Screen.width, Screen.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class EnableWindowResize
|
||||||
|
{
|
||||||
|
public static void Enable(bool on)
|
||||||
|
{
|
||||||
|
var wnd = WinApi.FindWindow(GameWindowClass, GameWindowTitle);
|
||||||
|
if (wnd == IntPtr.Zero) return;
|
||||||
|
if (on)
|
||||||
|
WinApi.SetWindowLong(wnd, (int)WindowLongFlags.GWL_STYLE,
|
||||||
|
WinApi.GetWindowLong(wnd, (int)WindowLongFlags.GWL_STYLE) | (int)WindowStyles.WS_THICKFRAME | (int)WindowStyles.WS_MAXIMIZEBOX);
|
||||||
|
else
|
||||||
|
WinApi.SetWindowLong(wnd, (int)WindowLongFlags.GWL_STYLE,
|
||||||
|
WinApi.GetWindowLong(wnd, (int)WindowLongFlags.GWL_STYLE) & ~((int)WindowStyles.WS_THICKFRAME | (int)WindowStyles.WS_MAXIMIZEBOX));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class LoadLastWindowRect
|
||||||
|
{
|
||||||
|
private static Harmony _patch;
|
||||||
|
public static void Enable(bool on)
|
||||||
|
{
|
||||||
|
if (on)
|
||||||
|
{
|
||||||
|
_patch ??= Harmony.CreateAndPatchAll(typeof(LoadLastWindowRect));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_patch?.UnpatchSelf();
|
||||||
|
_patch = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HarmonyPrefix]
|
||||||
|
[HarmonyPatch(typeof(Screen), nameof(Screen.SetResolution), typeof(int), typeof(int), typeof(FullScreenMode), typeof(int))]
|
||||||
|
private static void Screen_SetResolution_Prefix(ref int width, ref int height, FullScreenMode fullscreenMode)
|
||||||
|
{
|
||||||
|
if (fullscreenMode is FullScreenMode.ExclusiveFullScreen or FullScreenMode.FullScreenWindow or FullScreenMode.MaximizedWindow || GameMain.isRunning) return;
|
||||||
|
var rect = LastWindowRect.Value;
|
||||||
|
if (rect.z == 0f && rect.w == 0f) return;
|
||||||
|
var w = Mathf.RoundToInt(rect.z);
|
||||||
|
var h = Mathf.RoundToInt(rect.w);
|
||||||
|
width = w;
|
||||||
|
height = h;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HarmonyPostfix]
|
||||||
|
[HarmonyPatch(typeof(Screen), nameof(Screen.SetResolution), typeof(int), typeof(int), typeof(FullScreenMode), typeof(int))]
|
||||||
|
private static void Screen_SetResolution_Postfix()
|
||||||
|
{
|
||||||
|
var wnd = WinApi.FindWindow(GameWindowClass, GameWindowTitle);
|
||||||
|
if (wnd == IntPtr.Zero) return;
|
||||||
|
var rect = LastWindowRect.Value;
|
||||||
|
if (rect.z == 0f && rect.w == 0f) return;
|
||||||
|
var x = Mathf.RoundToInt(rect.x);
|
||||||
|
var y = Mathf.RoundToInt(rect.y);
|
||||||
|
WinApi.SetWindowPos(wnd, IntPtr.Zero, x, y, 0, 0, 0x0235);
|
||||||
|
if (EnableWindowResizeEnabled.Value)
|
||||||
|
WinApi.SetWindowLong(wnd, (int)WindowLongFlags.GWL_STYLE,
|
||||||
|
WinApi.GetWindowLong(wnd, (int)WindowLongFlags.GWL_STYLE) | (int)WindowStyles.WS_THICKFRAME | (int)WindowStyles.WS_MAXIMIZEBOX);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,6 +4,11 @@
|
|||||||
#### 一些提升用户体验的功能和补丁
|
#### 一些提升用户体验的功能和补丁
|
||||||
|
|
||||||
## Changlog
|
## Changlog
|
||||||
|
* 1.0.2
|
||||||
|
+ Redesign config tabs, for clearer layout.
|
||||||
|
+ Add 2 new options:
|
||||||
|
- Enable game window resize.
|
||||||
|
- Remember window position and size on last exit.
|
||||||
* 1.0.1
|
* 1.0.1
|
||||||
+ Fix config button text and tips while returning to title menu.
|
+ Fix config button text and tips while returning to title menu.
|
||||||
+ Fix that error occurs while returning to title menu, with `Stop ejectors when available nodes are all filled up` enabled.
|
+ Fix that error occurs while returning to title menu, with `Stop ejectors when available nodes are all filled up` enabled.
|
||||||
@@ -20,20 +25,25 @@
|
|||||||
+ Strict hotkey dectection for build menu, thus building hotkeys(0~9, F1~F10, X, U) are not triggered while holding Ctrl/Alt/Shift.
|
+ Strict hotkey dectection for build menu, thus building hotkeys(0~9, F1~F10, X, U) are not triggered while holding Ctrl/Alt/Shift.
|
||||||
+ Fix a bug that warning popup on `Veins Utilization` upgraded to level 8000+
|
+ Fix a bug that warning popup on `Veins Utilization` upgraded to level 8000+
|
||||||
* Features:
|
* Features:
|
||||||
+ Unlimited interactive range
|
+ General
|
||||||
+ Sunlight at night
|
- Enable game window resize
|
||||||
+ Remove some build conditions
|
- Remember window position and size on last exit
|
||||||
+ Remove build count and range limit
|
+ Planet/Factory
|
||||||
+ Larger area for upgrade and dismantle(30x30 at max)
|
- Unlimited interactive range
|
||||||
+ Larger area for terraform(30x30 at max)
|
- Sunlight at night
|
||||||
+ Enable player actions in globe view
|
- Remove some build conditions
|
||||||
+ Enhanced count control for hand-make
|
- Remove build count and range limit
|
||||||
+ Re-intialize planet (without reseting veins)
|
- Larger area for upgrade and dismantle(30x30 at max)
|
||||||
+ Quick dismantle all buildings (without drops)
|
- Larger area for terraform(30x30 at max)
|
||||||
+ Stop ejectors when available nodes are all filled up
|
- Enable player actions in globe view
|
||||||
+ Construct only nodes but frames
|
- Enhanced count control for hand-make
|
||||||
+ Re-initialize Dyson Spheres
|
- Re-intialize planet (without reseting veins)
|
||||||
+ Quick dismantle Dyson Shells
|
- Quick dismantle all buildings (without drops)
|
||||||
|
+ Dyson Sphere
|
||||||
|
- Stop ejectors when available nodes are all filled up
|
||||||
|
- Construct only nodes but frames
|
||||||
|
- Re-initialize Dyson Spheres
|
||||||
|
- Quick dismantle Dyson Shells
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
* Please upgrade `BepInEx` 5.4.21 or later if using with [BlueprintTweaks](https://dsp.thunderstore.io/package/kremnev8/BlueprintTweaks/) to avoid possible conflicts.
|
* Please upgrade `BepInEx` 5.4.21 or later if using with [BlueprintTweaks](https://dsp.thunderstore.io/package/kremnev8/BlueprintTweaks/) to avoid possible conflicts.
|
||||||
@@ -46,6 +56,11 @@
|
|||||||
* [LSTM](https://github.com/hetima/DSP_LSTM) & [PlanetFinder](https://github.com/hetima/DSP_PlanetFinder): UI implementations
|
* [LSTM](https://github.com/hetima/DSP_LSTM) & [PlanetFinder](https://github.com/hetima/DSP_PlanetFinder): UI implementations
|
||||||
|
|
||||||
## 更新日志
|
## 更新日志
|
||||||
|
* 1.0.2
|
||||||
|
+ 重新设计了配置面板,使布局更清晰
|
||||||
|
+ 添加了两个新选项:
|
||||||
|
- 可调整游戏窗口大小(可最大化和拖动边框)
|
||||||
|
- 记住上次退出时的窗口位置和大小
|
||||||
* 1.0.1
|
* 1.0.1
|
||||||
+ 修复了返回标题界面后设置按钮文本和提示信息不正确的问题
|
+ 修复了返回标题界面后设置按钮文本和提示信息不正确的问题
|
||||||
+ 修复了`当可用节点全部造完时停止弹射`选项启用时返回标题界面可能导致崩溃的问题
|
+ 修复了`当可用节点全部造完时停止弹射`选项启用时返回标题界面可能导致崩溃的问题
|
||||||
@@ -62,20 +77,25 @@
|
|||||||
+ 更严格的建造菜单热键检测,因此在按住Ctrl/Alt/Shift时不再会触发建造热键(0~9, F1~F10, X, U)
|
+ 更严格的建造菜单热键检测,因此在按住Ctrl/Alt/Shift时不再会触发建造热键(0~9, F1~F10, X, U)
|
||||||
+ 修复了`矿物利用`升级到8000级以上时弹出警告的bug
|
+ 修复了`矿物利用`升级到8000级以上时弹出警告的bug
|
||||||
* 功能:
|
* 功能:
|
||||||
+ 无限交互距离
|
+ 通用
|
||||||
+ 夜间日光灯
|
-可调整游戏窗口大小(可最大化和拖动边框)
|
||||||
+ 移除部分不影响游戏逻辑的建造条件
|
- 记住上次退出时的窗口位置和大小
|
||||||
+ 移除建造数量和范围限制
|
+ 行星/工厂
|
||||||
+ 范围升级和拆除的最大区域扩大(最大30x30)
|
- 无限交互距离
|
||||||
+ 范围铺设地基的最大区域扩大(最大30x30)
|
- 夜间日光灯
|
||||||
+ 在行星视图中允许玩家操作
|
- 移除部分不影响游戏逻辑的建造条件
|
||||||
+ 手动制造物品的数量控制改进
|
- 移除建造数量和范围限制
|
||||||
+ 初始化本行星(不重置矿脉)
|
- 范围升级和拆除的最大区域扩大(最大30x30)
|
||||||
+ 快速拆除所有建筑(不掉落)
|
- 范围铺设地基的最大区域扩大(最大30x30)
|
||||||
+ 可用节点全部造完时停止弹射
|
- 在行星视图中允许玩家操作
|
||||||
+ 只建造节点不建造框架
|
- 手动制造物品的数量控制改进
|
||||||
+ 初始化戴森球
|
- 初始化本行星(不重置矿脉)
|
||||||
+ 快速拆除戴森壳
|
- 快速拆除所有建筑(不掉落)
|
||||||
|
+ 戴森球
|
||||||
|
- 可用节点全部造完时停止弹射
|
||||||
|
- 只建造节点不建造框架
|
||||||
|
- 初始化戴森球
|
||||||
|
- 快速拆除戴森壳
|
||||||
|
|
||||||
## 注意事项
|
## 注意事项
|
||||||
* 如果和[BlueprintTweaks](https://dsp.thunderstore.io/package/kremnev8/BlueprintTweaks/)一起使用,请升级`BepInEx`到5.4.21或更高版本,以避免可能的冲突。
|
* 如果和[BlueprintTweaks](https://dsp.thunderstore.io/package/kremnev8/BlueprintTweaks/)一起使用,请升级`BepInEx`到5.4.21或更高版本,以避免可能的冲突。
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ public class MyConfigWindow : MyWindowWithTabs
|
|||||||
public override void _OnCreate()
|
public override void _OnCreate()
|
||||||
{
|
{
|
||||||
_windowTrans = GetComponent<RectTransform>();
|
_windowTrans = GetComponent<RectTransform>();
|
||||||
_windowTrans.sizeDelta = new Vector2(700f, 472f);
|
_windowTrans.sizeDelta = new Vector2(810f, 440f);
|
||||||
|
|
||||||
OnUICreated?.Invoke(this, _windowTrans);
|
OnUICreated?.Invoke(this, _windowTrans);
|
||||||
SetCurrentTab(0);
|
SetCurrentTab(0);
|
||||||
|
|||||||
@@ -211,7 +211,7 @@ public class MyWindow: ManualBehaviour
|
|||||||
public class MyWindowWithTabs : MyWindow
|
public class MyWindowWithTabs : MyWindow
|
||||||
{
|
{
|
||||||
private readonly List<Tuple<RectTransform, UIButton>> _tabs = new();
|
private readonly List<Tuple<RectTransform, UIButton>> _tabs = new();
|
||||||
private float _tabX = 36f;
|
private float _tabY = 54f;
|
||||||
public override void TryClose()
|
public override void TryClose()
|
||||||
{
|
{
|
||||||
_Close();
|
_Close();
|
||||||
@@ -222,18 +222,18 @@ public class MyWindowWithTabs : MyWindow
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private RectTransform AddTabInternal(float x, int index, RectTransform parent, string label)
|
private RectTransform AddTabInternal(float y, int index, RectTransform parent, string label)
|
||||||
{
|
{
|
||||||
var tab = new GameObject();
|
var tab = new GameObject();
|
||||||
var tabRect = tab.AddComponent<RectTransform>();
|
var tabRect = tab.AddComponent<RectTransform>();
|
||||||
Util.NormalizeRectWithMargin(tabRect, 54f + 28f, 36f, 0f, 0f, parent);
|
Util.NormalizeRectWithMargin(tabRect, 48f, 145f, 0f, 0f, parent);
|
||||||
tab.name = "tab-" + index;
|
tab.name = "tab-" + index;
|
||||||
var swarmPanel = UIRoot.instance.uiGame.dysonEditor.controlPanel.hierarchy.swarmPanel;
|
var swarmPanel = UIRoot.instance.uiGame.dysonEditor.controlPanel.hierarchy.swarmPanel;
|
||||||
var src = swarmPanel.orbitButtons[0];
|
var src = swarmPanel.orbitButtons[0];
|
||||||
var btn = Instantiate(src);
|
var btn = Instantiate(src);
|
||||||
var btnRect = Util.NormalizeRectWithTopLeft(btn, x, 54f, parent);
|
var btnRect = Util.NormalizeRectWithTopLeft(btn, 30, y, parent);
|
||||||
btn.name = "tab-btn-" + index;
|
btn.name = "tab-btn-" + index;
|
||||||
btnRect.sizeDelta = new Vector2(105f, 24f);
|
btnRect.sizeDelta = new Vector2(105f, 27f);
|
||||||
btn.transform.Find("frame").gameObject.SetActive(false);
|
btn.transform.Find("frame").gameObject.SetActive(false);
|
||||||
if (btn.transitions.Length >= 3)
|
if (btn.transitions.Length >= 3)
|
||||||
{
|
{
|
||||||
@@ -258,11 +258,27 @@ public class MyWindowWithTabs : MyWindow
|
|||||||
|
|
||||||
public RectTransform AddTab(RectTransform parent, string label)
|
public RectTransform AddTab(RectTransform parent, string label)
|
||||||
{
|
{
|
||||||
var result = AddTabInternal(_tabX, _tabs.Count, parent, label);
|
var result = AddTabInternal(_tabY, _tabs.Count, parent, label);
|
||||||
_tabX += 105f;
|
_tabY += 28f;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void AddSplitter(RectTransform parent, float spacing)
|
||||||
|
{
|
||||||
|
var img = Instantiate(UIRoot.instance.optionWindow.transform.Find("tab-line").Find("bar"));
|
||||||
|
Destroy(img.Find("tri").gameObject);
|
||||||
|
_tabY += spacing;
|
||||||
|
var rect = Util.NormalizeRectWithTopLeft(img, 28, _tabY, parent);
|
||||||
|
rect.sizeDelta = new Vector2(107, 2);
|
||||||
|
_tabY += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddTabGroup(RectTransform parent, string label, string objName = "tabl-group-label")
|
||||||
|
{
|
||||||
|
AddText(28, _tabY - 2, parent, label, 16, objName);
|
||||||
|
_tabY += 28f;
|
||||||
|
}
|
||||||
|
|
||||||
public override void _OnRegEvent()
|
public override void _OnRegEvent()
|
||||||
{
|
{
|
||||||
if (!EventRegistered)
|
if (!EventRegistered)
|
||||||
|
|||||||
@@ -7,12 +7,17 @@ namespace UXAssist;
|
|||||||
public static class UIConfigWindow
|
public static class UIConfigWindow
|
||||||
{
|
{
|
||||||
private static RectTransform _windowTrans;
|
private static RectTransform _windowTrans;
|
||||||
private static RectTransform _tab;
|
private static RectTransform _dysonTab;
|
||||||
private static readonly UIButton[] DysonLayerBtn = new UIButton[10];
|
private static readonly UIButton[] DysonLayerBtn = new UIButton[10];
|
||||||
|
|
||||||
public static void Init()
|
public static void Init()
|
||||||
{
|
{
|
||||||
I18N.Add("UXAssist", "UXAssist", "UX助手");
|
I18N.Add("UXAssist", "UXAssist", "UX助手");
|
||||||
|
I18N.Add("General", "General", "常规");
|
||||||
|
I18N.Add("Planet/Factory", "Planet/Factory", "行星/工厂");
|
||||||
|
I18N.Add("Dyson Sphere", "Dyson Sphere", "戴森球");
|
||||||
|
I18N.Add("Enable game window resize", "Enable game window resize (maximum box and thick frame)", "可调整游戏窗口大小(可最大化和拖动边框)");
|
||||||
|
I18N.Add("Remeber window position and size on last exit", "Remeber window position and size on last exit", "记住上次退出时的窗口位置和大小");
|
||||||
I18N.Add("Unlimited interactive range", "Unlimited interactive range", "无限交互距离");
|
I18N.Add("Unlimited interactive range", "Unlimited interactive range", "无限交互距离");
|
||||||
I18N.Add("Night Light", "Sunlight at night", "夜间日光灯");
|
I18N.Add("Night Light", "Sunlight at night", "夜间日光灯");
|
||||||
I18N.Add("Remove some build conditions", "Remove some build conditions", "移除部分不影响游戏逻辑的建造条件");
|
I18N.Add("Remove some build conditions", "Remove some build conditions", "移除部分不影响游戏逻辑的建造条件");
|
||||||
@@ -36,47 +41,59 @@ public static class UIConfigWindow
|
|||||||
private static void CreateUI(MyConfigWindow wnd, RectTransform trans)
|
private static void CreateUI(MyConfigWindow wnd, RectTransform trans)
|
||||||
{
|
{
|
||||||
_windowTrans = trans;
|
_windowTrans = trans;
|
||||||
var tab1 = wnd.AddTab(_windowTrans, "UXAssist");
|
wnd.AddTabGroup(trans, "UXAssist", "tab-group-uxassist");
|
||||||
|
var tab1 = wnd.AddTab(trans, "General");
|
||||||
var x = 0f;
|
var x = 0f;
|
||||||
var y = 10f;
|
var y = 10f;
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab1, FactoryPatch.UnlimitInteractiveEnabled, "Unlimited interactive range");
|
MyCheckBox.CreateCheckBox(x, y, tab1, GamePatch.EnableWindowResizeEnabled, "Enable game window resize");
|
||||||
y += 36f;
|
y += 36f;
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab1, FactoryPatch.NightLightEnabled, "Night Light");
|
MyCheckBox.CreateCheckBox(x, y, tab1, GamePatch.LoadLastWindowRectEnabled, "Remeber window position and size on last exit");
|
||||||
|
x += 10f;
|
||||||
|
y = 278f;
|
||||||
|
MyKeyBinder.CreateKeyBinder(x, y, tab1, UXAssist.Hotkey, "Hotkey");
|
||||||
|
var tab2 = wnd.AddTab(trans, "Planet/Factory");
|
||||||
|
x = 0f;
|
||||||
|
y = 10f;
|
||||||
|
MyCheckBox.CreateCheckBox(x, y, tab2, FactoryPatch.UnlimitInteractiveEnabled, "Unlimited interactive range");
|
||||||
y += 36f;
|
y += 36f;
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab1, FactoryPatch.RemoveSomeConditionEnabled, "Remove some build conditions");
|
MyCheckBox.CreateCheckBox(x, y, tab2, FactoryPatch.RemoveSomeConditionEnabled, "Remove some build conditions");
|
||||||
y += 36f;
|
y += 36f;
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab1, FactoryPatch.RemoveBuildRangeLimitEnabled, "Remove build range limit");
|
MyCheckBox.CreateCheckBox(x, y, tab2, FactoryPatch.RemoveBuildRangeLimitEnabled, "Remove build range limit");
|
||||||
y += 36f;
|
y += 36f;
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab1, FactoryPatch.LargerAreaForUpgradeAndDismantleEnabled, "Larger area for upgrade and dismantle");
|
MyCheckBox.CreateCheckBox(x, y, tab2, FactoryPatch.NightLightEnabled, "Night Light");
|
||||||
y += 36f;
|
y += 36f;
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab1, FactoryPatch.LargerAreaForTerraformEnabled, "Larger area for terraform");
|
MyCheckBox.CreateCheckBox(x, y, tab2, FactoryPatch.LargerAreaForUpgradeAndDismantleEnabled, "Larger area for upgrade and dismantle");
|
||||||
y += 36f;
|
y += 36f;
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab1, PlanetPatch.PlayerActionsInGlobeViewEnabled, "Enable player actions in globe view");
|
MyCheckBox.CreateCheckBox(x, y, tab2, FactoryPatch.LargerAreaForTerraformEnabled, "Larger area for terraform");
|
||||||
y += 36f;
|
y += 36f;
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab1, PlayerPatch.EnhancedMechaForgeCountControlEnabled, "Enhanced count control for hand-make");
|
MyCheckBox.CreateCheckBox(x, y, tab2, PlanetPatch.PlayerActionsInGlobeViewEnabled, "Enable player actions in globe view");
|
||||||
|
y += 36f;
|
||||||
|
MyCheckBox.CreateCheckBox(x, y, tab2, PlayerPatch.EnhancedMechaForgeCountControlEnabled, "Enhanced count control for hand-make");
|
||||||
x = 240f;
|
x = 240f;
|
||||||
y += 6f;
|
y += 6f;
|
||||||
MyWindow.AddTipsButton(x, y, tab1, "Enhanced count control for hand-make", "Enhanced count control for hand-make tips", "enhanced-count-control-tips");
|
MyWindow.AddTipsButton(x, y, tab2, "Enhanced count control for hand-make", "Enhanced count control for hand-make tips", "enhanced-count-control-tips");
|
||||||
x = 0f;
|
|
||||||
y += 30f;
|
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab1, DysonSpherePatch.StopEjectOnNodeCompleteEnabled, "Stop ejectors when available nodes are all filled up");
|
|
||||||
y += 36f;
|
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab1, DysonSpherePatch.OnlyConstructNodesEnabled, "Construct only nodes but frames");
|
|
||||||
x = 400f;
|
x = 400f;
|
||||||
y = 10f;
|
y = 10f;
|
||||||
wnd.AddButton(x, y, tab1, "Initialize This Planet", 16, "button-init-planet", () => { PlanetFunctions.RecreatePlanet(true); });
|
wnd.AddButton(x, y, tab2, "Initialize This Planet", 16, "button-init-planet", () => { PlanetFunctions.RecreatePlanet(true); });
|
||||||
y += 36f;
|
y += 36f;
|
||||||
wnd.AddButton(x, y, tab1, "Dismantle All Buildings", 16, "button-dismantle-all", () => { PlanetFunctions.DismantleAll(false); });
|
wnd.AddButton(x, y, tab2, "Dismantle All Buildings", 16, "button-dismantle-all", () => { PlanetFunctions.DismantleAll(false); });
|
||||||
|
|
||||||
|
var tab3 = wnd.AddTab(trans, "Dyson Sphere");
|
||||||
|
x = 0f;
|
||||||
|
y = 10f;
|
||||||
|
MyCheckBox.CreateCheckBox(x, y, tab3, DysonSpherePatch.StopEjectOnNodeCompleteEnabled, "Stop ejectors when available nodes are all filled up");
|
||||||
y += 36f;
|
y += 36f;
|
||||||
|
MyCheckBox.CreateCheckBox(x, y, tab3, DysonSpherePatch.OnlyConstructNodesEnabled, "Construct only nodes but frames");
|
||||||
|
x = 400f;
|
||||||
|
y = 10f;
|
||||||
|
wnd.AddButton(x, y, tab3, "Initialize Dyson Sphere", 16, "init-dyson-sphere", () => { DysonSpherePatch.InitCurrentDysonSphere(-1); });
|
||||||
y += 36f;
|
y += 36f;
|
||||||
wnd.AddButton(x, y, tab1, "Initialize Dyson Sphere", 16, "init-dyson-sphere", () => { DysonSpherePatch.InitCurrentDysonSphere(-1); });
|
MyWindow.AddText(x, y, tab3, "Click to dismantle selected layer", 16, "text-dismantle-layer");
|
||||||
y += 36f;
|
|
||||||
MyWindow.AddText(x, y, tab1, "Click to dismantle selected layer", 16, "text-dismantle-layer");
|
|
||||||
y += 26f;
|
y += 26f;
|
||||||
for (var i = 0; i < 10; i++)
|
for (var i = 0; i < 10; i++)
|
||||||
{
|
{
|
||||||
var id = i + 1;
|
var id = i + 1;
|
||||||
var btn = wnd.AddFlatButton(x, y, tab1, id.ToString(), 12, "dismantle-layer-" + id, () => { DysonSpherePatch.InitCurrentDysonSphere(id); });
|
var btn = wnd.AddFlatButton(x, y, tab3, id.ToString(), 12, "dismantle-layer-" + id, () => { DysonSpherePatch.InitCurrentDysonSphere(id); });
|
||||||
((RectTransform)btn.transform).sizeDelta = new Vector2(40f, 20f);
|
((RectTransform)btn.transform).sizeDelta = new Vector2(40f, 20f);
|
||||||
DysonLayerBtn[i] = btn;
|
DysonLayerBtn[i] = btn;
|
||||||
if (i == 4)
|
if (i == 4)
|
||||||
@@ -89,11 +106,7 @@ public static class UIConfigWindow
|
|||||||
x += 40f;
|
x += 40f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
x = 400f;
|
_dysonTab = tab3;
|
||||||
y += 72f;
|
|
||||||
MyKeyBinder.CreateKeyBinder(x, y, tab1, UXAssist.Hotkey, "Hotkey");
|
|
||||||
|
|
||||||
_tab = tab1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void UpdateUI()
|
private static void UpdateUI()
|
||||||
@@ -103,7 +116,7 @@ public static class UIConfigWindow
|
|||||||
|
|
||||||
private static void UpdateDysonShells()
|
private static void UpdateDysonShells()
|
||||||
{
|
{
|
||||||
if (!_tab.gameObject.activeSelf) return;
|
if (!_dysonTab.gameObject.activeSelf) return;
|
||||||
var star = GameMain.localStar;
|
var star = GameMain.localStar;
|
||||||
if (star != null)
|
if (star != null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -25,6 +25,12 @@ public class UXAssist : BaseUnityPlugin
|
|||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
Hotkey = Config.Bind("General", "Shortcut", KeyboardShortcut.Deserialize("BackQuote + LeftAlt"), "Shortcut to open config window");
|
Hotkey = Config.Bind("General", "Shortcut", KeyboardShortcut.Deserialize("BackQuote + LeftAlt"), "Shortcut to open config window");
|
||||||
|
GamePatch.EnableWindowResizeEnabled = Config.Bind("Game", "EnableWindowResize", false,
|
||||||
|
"Enable game window resize (maximum box and thick frame)");
|
||||||
|
GamePatch.LoadLastWindowRectEnabled = Config.Bind("Game", "LoadLastWindowRect", false,
|
||||||
|
"Load last window position and size when game starts");
|
||||||
|
GamePatch.LastWindowRect = Config.Bind("Game", "LastWindowRect", new Vector4(0f, 0f, 0f, 0f),
|
||||||
|
"Last window position and size");
|
||||||
FactoryPatch.UnlimitInteractiveEnabled = Config.Bind("Factory", "UnlimitInteractive", false,
|
FactoryPatch.UnlimitInteractiveEnabled = Config.Bind("Factory", "UnlimitInteractive", false,
|
||||||
"Unlimit interactive range");
|
"Unlimit interactive range");
|
||||||
FactoryPatch.RemoveSomeConditionEnabled = Config.Bind("Factory", "RemoveSomeBuildConditionCheck", false,
|
FactoryPatch.RemoveSomeConditionEnabled = Config.Bind("Factory", "RemoveSomeBuildConditionCheck", false,
|
||||||
@@ -55,6 +61,7 @@ public class UXAssist : BaseUnityPlugin
|
|||||||
|
|
||||||
MyWindowManager.Init();
|
MyWindowManager.Init();
|
||||||
UIConfigWindow.Init();
|
UIConfigWindow.Init();
|
||||||
|
GamePatch.Init();
|
||||||
FactoryPatch.Init();
|
FactoryPatch.Init();
|
||||||
PlanetPatch.Init();
|
PlanetPatch.Init();
|
||||||
PlayerPatch.Init();
|
PlayerPatch.Init();
|
||||||
@@ -67,6 +74,7 @@ public class UXAssist : BaseUnityPlugin
|
|||||||
PlayerPatch.Uninit();
|
PlayerPatch.Uninit();
|
||||||
PlanetPatch.Uninit();
|
PlanetPatch.Uninit();
|
||||||
FactoryPatch.Uninit();
|
FactoryPatch.Uninit();
|
||||||
|
GamePatch.Uninit();
|
||||||
MyWindowManager.Uninit();
|
MyWindowManager.Uninit();
|
||||||
|
|
||||||
_patch?.UnpatchSelf();
|
_patch?.UnpatchSelf();
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<TargetFramework>net472</TargetFramework>
|
<TargetFramework>net472</TargetFramework>
|
||||||
<BepInExPluginGuid>org.soardev.uxassist</BepInExPluginGuid>
|
<BepInExPluginGuid>org.soardev.uxassist</BepInExPluginGuid>
|
||||||
<Description>DSP MOD - UXAssist</Description>
|
<Description>DSP MOD - UXAssist</Description>
|
||||||
<Version>1.0.1</Version>
|
<Version>1.0.2</Version>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<LangVersion>latest</LangVersion>
|
<LangVersion>latest</LangVersion>
|
||||||
<PackageId>UXAssist</PackageId>
|
<PackageId>UXAssist</PackageId>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "UXAssist",
|
"name": "UXAssist",
|
||||||
"version_number": "1.0.1",
|
"version_number": "1.0.2",
|
||||||
"website_url": "https://github.com/soarqin/DSP_Mods/tree/master/UXAssist",
|
"website_url": "https://github.com/soarqin/DSP_Mods/tree/master/UXAssist",
|
||||||
"description": "Some functions and patches for better user experience / 一些提升用户体验的功能和补丁",
|
"description": "Some functions and patches for better user experience / 一些提升用户体验的功能和补丁",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
#### 宇宙生成参数调节
|
#### 宇宙生成参数调节
|
||||||
|
|
||||||
## Changelog
|
## Changelog
|
||||||
|
* 1.2.1
|
||||||
|
+ Use new tab layout of UXAssist 1.0.2
|
||||||
* 1.2.0
|
* 1.2.0
|
||||||
+ Depends on [UXAssist](https://dsp.thunderstore.io/package/soarqin/UXAssist/) now.
|
+ Depends on [UXAssist](https://dsp.thunderstore.io/package/soarqin/UXAssist/) now.
|
||||||
+ Add `Birth star` options
|
+ Add `Birth star` options
|
||||||
@@ -18,8 +20,8 @@
|
|||||||
## Features
|
## Features
|
||||||
* Depends on [UXAssist](https://dsp.thunderstore.io/package/soarqin/UXAssist/), all tabs around with '+' are options for this mod.
|
* Depends on [UXAssist](https://dsp.thunderstore.io/package/soarqin/UXAssist/), all tabs around with '+' are options for this mod.
|
||||||
* More options on universe generation
|
* More options on universe generation
|
||||||
* Can set maximum star count(128 by default, up to 1024) in config file.
|
+ Can set maximum star count(128 by default, up to 1024) in config file.
|
||||||
+ Note: there is performance issue on galaxy view with large amount of stars.
|
- Note: there is performance issue on galaxy view with large amount of stars.
|
||||||
* Epic difficulty
|
* Epic difficulty
|
||||||
* 0.01x resources and 0.25x oils (very hard difficulty has 0.5x oils).
|
* 0.01x resources and 0.25x oils (very hard difficulty has 0.5x oils).
|
||||||
* Same oil mining speed as very hard difficuly
|
* Same oil mining speed as very hard difficuly
|
||||||
@@ -29,6 +31,8 @@
|
|||||||
* High luminosity for birth star
|
* High luminosity for birth star
|
||||||
|
|
||||||
## 更新日志
|
## 更新日志
|
||||||
|
* 1.2.1
|
||||||
|
+ 使用UXAssist 1.0.2的新页签布局
|
||||||
* 1.2.0
|
* 1.2.0
|
||||||
+ 现在依赖于[UXAssist](https://dsp.thunderstore.io/package/soarqin/UXAssist/)
|
+ 现在依赖于[UXAssist](https://dsp.thunderstore.io/package/soarqin/UXAssist/)
|
||||||
+ 增加`母星系`选项
|
+ 增加`母星系`选项
|
||||||
@@ -43,8 +47,8 @@
|
|||||||
## 功能
|
## 功能
|
||||||
* 依赖于[UXAssist](https://dsp.thunderstore.io/package/soarqin/UXAssist/),所有带有'+'的页签都是本mod的选项
|
* 依赖于[UXAssist](https://dsp.thunderstore.io/package/soarqin/UXAssist/),所有带有'+'的页签都是本mod的选项
|
||||||
* 生成宇宙时提供更多选项
|
* 生成宇宙时提供更多选项
|
||||||
* 可以在配置文件中设置最大恒星数(默认128, 最多1024)
|
+可以在配置文件中设置最大恒星数(默认128, 最多1024)
|
||||||
+ 注意: 大量恒星会导致宇宙视图出现性能问题
|
- 注意: 大量恒星会导致宇宙视图出现性能问题
|
||||||
* 史诗难度
|
* 史诗难度
|
||||||
* 资源0.01倍,油井储量0.25倍(极难是0.5倍)
|
* 资源0.01倍,油井储量0.25倍(极难是0.5倍)
|
||||||
* 采油速度和极难相同
|
* 采油速度和极难相同
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ public static class UIConfigWindow
|
|||||||
|
|
||||||
public static void Init()
|
public static void Init()
|
||||||
{
|
{
|
||||||
I18N.Add("GalaxyGen", "+UniverseGen+", "+宇宙生成+");
|
I18N.Add("UniverseGen", "UniverseGen", "宇宙生成");
|
||||||
|
I18N.Add("Birth Star", "Birth Star", "母星系");
|
||||||
I18N.Add("Enable more settings on UniverseGen", "Enable more settings on UniverseGen", "启用更多宇宙生成设置");
|
I18N.Add("Enable more settings on UniverseGen", "Enable more settings on UniverseGen", "启用更多宇宙生成设置");
|
||||||
I18N.Add("* Requires game restart to take effect", "* Requires game restart to take effect", "* 需要重启游戏才能生效");
|
I18N.Add("* Requires game restart to take effect", "* Requires game restart to take effect", "* 需要重启游戏才能生效");
|
||||||
I18N.Add("Maximum star count", "Maximum star count", "最大恒星数");
|
I18N.Add("Maximum star count", "Maximum star count", "最大恒星数");
|
||||||
@@ -37,32 +38,34 @@ public static class UIConfigWindow
|
|||||||
// General tab
|
// General tab
|
||||||
var x = 0f;
|
var x = 0f;
|
||||||
var y = 10f;
|
var y = 10f;
|
||||||
var tab = wnd.AddTab(_windowTrans, "GalaxyGen");
|
wnd.AddSplitter(trans, 10f);
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab, MoreSettings.Enabled, "Enable more settings on UniverseGen");
|
wnd.AddTabGroup(trans, "UniverseGen", "tab-group-galaxygen");
|
||||||
|
var tab1 = wnd.AddTab(_windowTrans, "General");
|
||||||
|
MyCheckBox.CreateCheckBox(x, y, tab1, MoreSettings.Enabled, "Enable more settings on UniverseGen");
|
||||||
x += 20f;
|
x += 20f;
|
||||||
y += 26f;
|
y += 26f;
|
||||||
MyWindow.AddText(x, y, tab, "* Requires game restart to take effect", 13);
|
MyWindow.AddText(x, y, tab1, "* Requires game restart to take effect", 13);
|
||||||
x -= 20f;
|
x -= 20f;
|
||||||
y += 36f;
|
y += 36f;
|
||||||
x += 10f;
|
x += 10f;
|
||||||
MyWindow.AddText(x, y, tab, "Maximum star count", 16);
|
MyWindow.AddText(x, y, tab1, "Maximum star count", 16);
|
||||||
x += 20f;
|
x += 20f;
|
||||||
y += 26f;
|
y += 26f;
|
||||||
var sl0 = MySlider.CreateSlider(x, y, tab, MoreSettings.MaxStarCount.Value, 64f, 1024f, "G", 240f);
|
var sl0 = MySlider.CreateSlider(x, y, tab1, MoreSettings.MaxStarCount.Value, 64f, 1024f, "G", 240f);
|
||||||
sl0.OnValueChanged += () =>
|
sl0.OnValueChanged += () =>
|
||||||
{
|
{
|
||||||
sl0.Value = MoreSettings.MaxStarCount.Value = (Mathf.RoundToInt(sl0.Value) + 7) & ~7;
|
sl0.Value = MoreSettings.MaxStarCount.Value = (Mathf.RoundToInt(sl0.Value) + 7) & ~7;
|
||||||
};
|
};
|
||||||
x -= 30f;
|
x -= 30f;
|
||||||
y += 36f;
|
y += 36f;
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab, EpicDifficulty.Enabled, "Enable Epic difficulty");
|
MyCheckBox.CreateCheckBox(x, y, tab1, EpicDifficulty.Enabled, "Enable Epic difficulty");
|
||||||
y += 36f;
|
y += 36f;
|
||||||
x += 10f;
|
x += 10f;
|
||||||
MyWindow.AddText(x, y, tab, "Resource multiplier", 16);
|
MyWindow.AddText(x, y, tab1, "Resource multiplier", 16);
|
||||||
x += 20f;
|
x += 20f;
|
||||||
y += 26f;
|
y += 26f;
|
||||||
var index = EpicDifficulty.ResourceMultiplierToIndex(EpicDifficulty.ResourceMultiplier.Value);
|
var index = EpicDifficulty.ResourceMultiplierToIndex(EpicDifficulty.ResourceMultiplier.Value);
|
||||||
var sl1 = MySlider.CreateSlider(x, y, tab, index, 0f, (float)EpicDifficulty.ResourceMultipliersCount() - 1, "G", 240f);
|
var sl1 = MySlider.CreateSlider(x, y, tab1, index, 0f, (float)EpicDifficulty.ResourceMultipliersCount() - 1, "G", 240f);
|
||||||
sl1.SetLabelText(EpicDifficulty.IndexToResourceMultiplier(Mathf.RoundToInt(sl1.Value)).ToString(sl1.labelFormat));
|
sl1.SetLabelText(EpicDifficulty.IndexToResourceMultiplier(Mathf.RoundToInt(sl1.Value)).ToString(sl1.labelFormat));
|
||||||
sl1.OnValueChanged += () =>
|
sl1.OnValueChanged += () =>
|
||||||
{
|
{
|
||||||
@@ -73,11 +76,11 @@ public static class UIConfigWindow
|
|||||||
x -= 30f;
|
x -= 30f;
|
||||||
y += 31f;
|
y += 31f;
|
||||||
x += 10f;
|
x += 10f;
|
||||||
MyWindow.AddText(x, y, tab, "Oil multiplier (relative to Very Hard)", 16);
|
MyWindow.AddText(x, y, tab1, "Oil multiplier (relative to Very Hard)", 16);
|
||||||
x += 20f;
|
x += 20f;
|
||||||
y += 26f;
|
y += 26f;
|
||||||
index = EpicDifficulty.OilMultiplierToIndex(EpicDifficulty.OilMultiplier.Value);
|
index = EpicDifficulty.OilMultiplierToIndex(EpicDifficulty.OilMultiplier.Value);
|
||||||
var sl2 = MySlider.CreateSlider(x, y, tab, index, 0f, (float)EpicDifficulty.OilMultipliersCount() - 1, "G", 240f);
|
var sl2 = MySlider.CreateSlider(x, y, tab1, index, 0f, (float)EpicDifficulty.OilMultipliersCount() - 1, "G", 240f);
|
||||||
sl2.SetLabelText(EpicDifficulty.IndexToOilMultiplier(Mathf.RoundToInt(sl2.Value)).ToString(sl2.labelFormat));
|
sl2.SetLabelText(EpicDifficulty.IndexToOilMultiplier(Mathf.RoundToInt(sl2.Value)).ToString(sl2.labelFormat));
|
||||||
sl2.OnValueChanged += () =>
|
sl2.OnValueChanged += () =>
|
||||||
{
|
{
|
||||||
@@ -85,26 +88,28 @@ public static class UIConfigWindow
|
|||||||
EpicDifficulty.OilMultiplier.Value = val;
|
EpicDifficulty.OilMultiplier.Value = val;
|
||||||
sl2.SetLabelText(val.ToString(sl2.labelFormat));
|
sl2.SetLabelText(val.ToString(sl2.labelFormat));
|
||||||
};
|
};
|
||||||
|
var tab2 = wnd.AddTab(_windowTrans, "Birth Star");
|
||||||
|
x = 0f;
|
||||||
|
y = 10f;
|
||||||
|
MyCheckBox.CreateCheckBox(x, y, tab2, BirthPlanetPatch.SitiVeinsOnBirthPlanet, "Silicon/Titanium on birth planet");
|
||||||
|
y += 36f;
|
||||||
|
MyCheckBox.CreateCheckBox(x, y, tab2, BirthPlanetPatch.FireIceOnBirthPlanet, "Fire ice on birth planet");
|
||||||
|
y += 36f;
|
||||||
|
MyCheckBox.CreateCheckBox(x, y, tab2, BirthPlanetPatch.KimberliteOnBirthPlanet, "Kimberlite on birth planet");
|
||||||
|
y += 36f;
|
||||||
|
MyCheckBox.CreateCheckBox(x, y, tab2, BirthPlanetPatch.FractalOnBirthPlanet, "Fractal silicon on birth planet");
|
||||||
|
y += 36f;
|
||||||
|
MyCheckBox.CreateCheckBox(x, y, tab2, BirthPlanetPatch.OrganicOnBirthPlanet, "Organic crystal on birth planet");
|
||||||
|
y += 36f;
|
||||||
|
MyCheckBox.CreateCheckBox(x, y, tab2, BirthPlanetPatch.OpticalOnBirthPlanet, "Optical grating crystal on birth planet");
|
||||||
|
y += 36f;
|
||||||
|
MyCheckBox.CreateCheckBox(x, y, tab2, BirthPlanetPatch.SpiniformOnBirthPlanet, "Spiniform stalagmite crystal on birth planet");
|
||||||
|
y += 36f;
|
||||||
|
MyCheckBox.CreateCheckBox(x, y, tab2, BirthPlanetPatch.UnipolarOnBirthPlanet, "Unipolar magnet on birth planet");
|
||||||
x = 300f;
|
x = 300f;
|
||||||
y = 10f;
|
y = 10f;
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab, BirthPlanetPatch.SitiVeinsOnBirthPlanet, "Silicon/Titanium on birth planet");
|
MyCheckBox.CreateCheckBox(x, y, tab2, BirthPlanetPatch.FlatBirthPlanet, "Birth planet is solid flat (no water at all)");
|
||||||
y += 36f;
|
y += 36f;
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab, BirthPlanetPatch.FireIceOnBirthPlanet, "Fire ice on birth planet");
|
MyCheckBox.CreateCheckBox(x, y, tab2, BirthPlanetPatch.HighLuminosityBirthStar, "Birth star has high luminosity");
|
||||||
y += 36f;
|
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab, BirthPlanetPatch.KimberliteOnBirthPlanet, "Kimberlite on birth planet");
|
|
||||||
y += 36f;
|
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab, BirthPlanetPatch.FractalOnBirthPlanet, "Fractal silicon on birth planet");
|
|
||||||
y += 36f;
|
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab, BirthPlanetPatch.OrganicOnBirthPlanet, "Organic crystal on birth planet");
|
|
||||||
y += 36f;
|
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab, BirthPlanetPatch.OpticalOnBirthPlanet, "Optical grating crystal on birth planet");
|
|
||||||
y += 36f;
|
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab, BirthPlanetPatch.SpiniformOnBirthPlanet, "Spiniform stalagmite crystal on birth planet");
|
|
||||||
y += 36f;
|
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab, BirthPlanetPatch.UnipolarOnBirthPlanet, "Unipolar magnet on birth planet");
|
|
||||||
y += 36f;
|
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab, BirthPlanetPatch.FlatBirthPlanet, "Birth planet is solid flat (no water at all)");
|
|
||||||
y += 36f;
|
|
||||||
MyCheckBox.CreateCheckBox(x, y, tab, BirthPlanetPatch.HighLuminosityBirthStar, "Birth star has high luminosity");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
<AssemblyName>UniverseGenTweaks</AssemblyName>
|
<AssemblyName>UniverseGenTweaks</AssemblyName>
|
||||||
<BepInExPluginGuid>org.soardev.universegentweaks</BepInExPluginGuid>
|
<BepInExPluginGuid>org.soardev.universegentweaks</BepInExPluginGuid>
|
||||||
<Description>DSP MOD - UniverseGenTweaks</Description>
|
<Description>DSP MOD - UniverseGenTweaks</Description>
|
||||||
<Version>1.2.0</Version>
|
<Version>1.2.1</Version>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<LangVersion>latest</LangVersion>
|
<LangVersion>latest</LangVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"name": "UniverseGenTweaks",
|
"name": "UniverseGenTweaks",
|
||||||
"version_number": "1.2.0",
|
"version_number": "1.2.1",
|
||||||
"website_url": "https://github.com/soarqin/DSP_Mods/tree/master/UniverseGenTweaks",
|
"website_url": "https://github.com/soarqin/DSP_Mods/tree/master/UniverseGenTweaks",
|
||||||
"description": "Universe Generation Tweaks / 宇宙生成参数调节",
|
"description": "Universe Generation Tweaks / 宇宙生成参数调节",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
"xiaoye97-BepInEx-5.4.17",
|
"xiaoye97-BepInEx-5.4.17",
|
||||||
"soarqin-UXAssist-1.0.0"
|
"soarqin-UXAssist-1.0.2"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user