Implement miner area and speed
This commit is contained in:
@@ -9,6 +9,7 @@ using UnityEngine;
|
|||||||
|
|
||||||
// TODO: Make battery bigger
|
// TODO: Make battery bigger
|
||||||
// TODO: Make shield and repair bigger
|
// TODO: Make shield and repair bigger
|
||||||
|
// TODO: Make fuel tanks bigger
|
||||||
|
|
||||||
namespace TerraTech {
|
namespace TerraTech {
|
||||||
[BepInPlugin(pluginGuid, pluginName, pluginVersion)]
|
[BepInPlugin(pluginGuid, pluginName, pluginVersion)]
|
||||||
@@ -29,28 +30,35 @@ namespace TerraTech {
|
|||||||
public static ConfigEntry<float> beamStrenghtMultiplier;
|
public static ConfigEntry<float> beamStrenghtMultiplier;
|
||||||
public static ConfigEntry<float> beamRadiusMultiplier;
|
public static ConfigEntry<float> beamRadiusMultiplier;
|
||||||
public static ConfigEntry<float> fuelTankRefillMultiplier;
|
public static ConfigEntry<float> fuelTankRefillMultiplier;
|
||||||
|
public static ConfigEntry<float> minerGroundArea;
|
||||||
|
public static ConfigEntry<float> minerMiningSpeed;
|
||||||
|
|
||||||
public void Awake() {
|
public void Awake() {
|
||||||
xpMultiplier = Config.Bind("General", "XP Multiplier", 1f, new ConfigDescription("XP Multiplier", new AcceptableValueRange<float>(1f, 32f)));
|
xpMultiplier = Config.Bind("General", "XP Multiplier", 1f, new ConfigDescription("XP Multiplier", new AcceptableValueRange<float>(1f, 32f)));
|
||||||
moneyMultiplier = Config.Bind("General", "Money Multiplier", 1f, new ConfigDescription("Money Multiplier", new AcceptableValueRange<float>(1f, 32f)));
|
moneyMultiplier = Config.Bind("General", "Money Multiplier", 1f,
|
||||||
|
new ConfigDescription("Money Multiplier", new AcceptableValueRange<float>(1f, 32f)));
|
||||||
energyGenMultiplier = Config.Bind("General", "Energy Generation Multiplier", 1f,
|
energyGenMultiplier = Config.Bind("General", "Energy Generation Multiplier", 1f,
|
||||||
new ConfigDescription("Energy Generation Multiplier", new AcceptableValueRange<float>(1f, 64f)));
|
new ConfigDescription("Energy Generation Multiplier", new AcceptableValueRange<float>(1f, 64f)));
|
||||||
heartbeatIntervalMultiplier = Config.Bind("General", "Heartbeat Interval Multiplier", 1f,
|
heartbeatIntervalMultiplier = Config.Bind("General", "Heartbeat Interval Multiplier", 1f,
|
||||||
new ConfigDescription("Heartbeat Interval Multiplier", new AcceptableValueRange<float>(0.1f, 2f)));
|
new ConfigDescription("Heartbeat Interval Multiplier", new AcceptableValueRange<float>(0.1f, 2f)));
|
||||||
shootingSpeedMultiplier = Config.Bind("General", "Shooting Speed Multiplier", 1f,
|
shootingSpeedMultiplier = Config.Bind("Weapons", "Shooting Speed Multiplier", 1f,
|
||||||
new ConfigDescription("Shooting Speed Multiplier", new AcceptableValueRange<float>(0.5f, 8f)));
|
new ConfigDescription("Shooting Speed Multiplier", new AcceptableValueRange<float>(0.5f, 8f)));
|
||||||
muzzleVelocityMultiplier = Config.Bind("General", "Muzzle Velocity Multiplier", 1f,
|
muzzleVelocityMultiplier = Config.Bind("Weapons", "Muzzle Velocity Multiplier", 1f,
|
||||||
new ConfigDescription("Muzzle Velocity Multiplier", new AcceptableValueRange<float>(1f, 32f)));
|
new ConfigDescription("Muzzle Velocity Multiplier", new AcceptableValueRange<float>(1f, 32f)));
|
||||||
magnetStrenghtMultiplier = Config.Bind("General", "Magnet Strength Multiplier", 1f,
|
magnetStrenghtMultiplier = Config.Bind("Attractors", "Magnet Strength Multiplier", 1f,
|
||||||
new ConfigDescription("Magnet Strength Multiplier", new AcceptableValueRange<float>(1f, 16f)));
|
new ConfigDescription("Magnet Strength Multiplier", new AcceptableValueRange<float>(1f, 16f)));
|
||||||
magnetRadiusMultiplier = Config.Bind("General", "Magnet Radius Multiplier", 1f,
|
magnetRadiusMultiplier = Config.Bind("Attractors", "Magnet Radius Multiplier", 1f,
|
||||||
new ConfigDescription("Magnet Radius Multiplier", new AcceptableValueRange<float>(1f, 16f)));
|
new ConfigDescription("Magnet Radius Multiplier", new AcceptableValueRange<float>(1f, 16f)));
|
||||||
beamStrenghtMultiplier = Config.Bind("General", "Beam Strength Multiplier", 1f,
|
beamStrenghtMultiplier = Config.Bind("Attractors", "Beam Strength Multiplier", 1f,
|
||||||
new ConfigDescription("Beam Strength Multiplier", new AcceptableValueRange<float>(1f, 16f)));
|
new ConfigDescription("Beam Strength Multiplier", new AcceptableValueRange<float>(1f, 16f)));
|
||||||
beamRadiusMultiplier = Config.Bind("General", "Beam Radius Multiplier", 1f,
|
beamRadiusMultiplier = Config.Bind("Attractors", "Beam Radius Multiplier", 1f,
|
||||||
new ConfigDescription("Beam Radius Multiplier", new AcceptableValueRange<float>(1f, 16f)));
|
new ConfigDescription("Beam Radius Multiplier", new AcceptableValueRange<float>(1f, 16f)));
|
||||||
beamRadiusMultiplier = Config.Bind("General", "Fuel Tank Refill Rate Multiplier", 1f,
|
fuelTankRefillMultiplier = Config.Bind("Propulsion", "Fuel Tank Refill Rate Multiplier", 1f,
|
||||||
new ConfigDescription("Fuel Tank Refill Rate Multiplier", new AcceptableValueRange<float>(1f, 32f)));
|
new ConfigDescription("Fuel Tank Refill Rate Multiplier", new AcceptableValueRange<float>(1f, 32f)));
|
||||||
|
minerGroundArea = Config.Bind("Production", "Miner Ground Deposit Scan Area", 1f,
|
||||||
|
new ConfigDescription("Miner Ground Deposit Scan Area", new AcceptableValueRange<float>(1f, 32f)));
|
||||||
|
minerMiningSpeed = Config.Bind("Production", "Miner Mining Speed", 1f,
|
||||||
|
new ConfigDescription("Miner Mining Speed", new AcceptableValueRange<float>(1f, 32f)));
|
||||||
|
|
||||||
allProjectilesHoming = Config.Bind("General", "Make All Projectiles Home", false);
|
allProjectilesHoming = Config.Bind("General", "Make All Projectiles Home", false);
|
||||||
|
|
||||||
@@ -61,6 +69,8 @@ namespace TerraTech {
|
|||||||
beamStrenghtMultiplier.SettingChanged += (sender, args) => BeamPropertiesManager.DoPatch();
|
beamStrenghtMultiplier.SettingChanged += (sender, args) => BeamPropertiesManager.DoPatch();
|
||||||
beamRadiusMultiplier.SettingChanged += (sender, args) => BeamPropertiesManager.DoPatch();
|
beamRadiusMultiplier.SettingChanged += (sender, args) => BeamPropertiesManager.DoPatch();
|
||||||
fuelTankRefillMultiplier.SettingChanged += (sender, args) => FuelPropertiesManager.DoPatch();
|
fuelTankRefillMultiplier.SettingChanged += (sender, args) => FuelPropertiesManager.DoPatch();
|
||||||
|
minerGroundArea.SettingChanged += (sender, args) => MinerPropertiesManager.DoPatch();
|
||||||
|
minerMiningSpeed.SettingChanged += (sender, args) => MinerPropertiesManager.DoPatch();
|
||||||
|
|
||||||
Logger.LogInfo("Cyka mod loaded");
|
Logger.LogInfo("Cyka mod loaded");
|
||||||
HarmonyFileLog.Enabled = true;
|
HarmonyFileLog.Enabled = true;
|
||||||
@@ -398,4 +408,87 @@ namespace TerraTech {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HarmonyPatch]
|
||||||
|
public class MinerPropertiesManager {
|
||||||
|
private static Dictionary<ModuleItemProducer, float> area = new Dictionary<ModuleItemProducer, float>();
|
||||||
|
private static Dictionary<ModuleItemProducer, float> speed = new Dictionary<ModuleItemProducer, float>();
|
||||||
|
|
||||||
|
[HarmonyPostfix]
|
||||||
|
[HarmonyPatch(typeof(ModuleItemProducer), "GetClosestResourceReservoirInRange")]
|
||||||
|
static void PostfixCreate(ModuleItemProducer __instance) {
|
||||||
|
// Console.WriteLine("ModuleItemProducer OnPool");
|
||||||
|
if (!area.ContainsKey(__instance)) {
|
||||||
|
// Console.WriteLine("Is new ModuleItemProducer");
|
||||||
|
area.Add(__instance, GetArea(__instance));
|
||||||
|
speed.Add(__instance, GetSpeed(__instance));
|
||||||
|
DoPatchSingle(__instance);
|
||||||
|
} else {
|
||||||
|
if (GetArea(__instance) == area[__instance]) {
|
||||||
|
DoPatchSingle(__instance);
|
||||||
|
}
|
||||||
|
if (GetSpeed(__instance) == speed[__instance]) {
|
||||||
|
DoPatchSingle(__instance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HarmonyPostfix]
|
||||||
|
[HarmonyPatch(typeof(ModuleItemProducer), "OnRecycle")]
|
||||||
|
static void PostfixDestroy(ModuleItemProducer __instance) {
|
||||||
|
// Console.WriteLine("ModuleItemProducer OnRecycle");
|
||||||
|
DoRestoreSingle(__instance);
|
||||||
|
area.Remove(__instance);
|
||||||
|
speed.Remove(__instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DoPatch() {
|
||||||
|
// Console.WriteLine("Modifying " + generators.Count + " generators");
|
||||||
|
// Console.WriteLine("Should patch: " + ShouldPatch());
|
||||||
|
foreach (KeyValuePair<ModuleItemProducer, float> keyValuePair in area) {
|
||||||
|
DoRestoreSingle(keyValuePair.Key);
|
||||||
|
DoPatchSingle(keyValuePair.Key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void DoPatchSingle(ModuleItemProducer moduleItemProducer) {
|
||||||
|
// Console.WriteLine("Patching " + moduleItemProducer.name);
|
||||||
|
// Console.WriteLine("Old value " + GetArea(moduleItemProducer));
|
||||||
|
// Console.WriteLine("Multiplier " + Main.minerGroundArea.Value);
|
||||||
|
SetArea(moduleItemProducer, area[moduleItemProducer] * Main.minerGroundArea.Value);
|
||||||
|
SetSpeed(moduleItemProducer, speed[moduleItemProducer] / Main.minerMiningSpeed.Value);
|
||||||
|
// Console.WriteLine("New value " + GetArea(moduleItemProducer));
|
||||||
|
}
|
||||||
|
|
||||||
|
[HarmonyPrefix]
|
||||||
|
[HarmonyPatch(typeof(ModuleItemProducer), "GetClosestResourceReservoirInRange")]
|
||||||
|
static void Test(ModuleItemProducer __instance) {
|
||||||
|
Console.WriteLine("" + GetArea(__instance));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void DoRestoreSingle(ModuleItemProducer moduleItemProducer) {
|
||||||
|
if (area.ContainsKey(moduleItemProducer)) {
|
||||||
|
SetArea(moduleItemProducer, area[moduleItemProducer]);
|
||||||
|
}
|
||||||
|
if (speed.ContainsKey(moduleItemProducer)) {
|
||||||
|
SetSpeed(moduleItemProducer, speed[moduleItemProducer]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static float GetArea(ModuleItemProducer moduleItemProducer) {
|
||||||
|
return Traverse.Create(moduleItemProducer).Field("m_ResourceGroundRadius").GetValue() as float? ?? 0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void SetArea(ModuleItemProducer moduleItemProducer, float value) {
|
||||||
|
Traverse.Create(moduleItemProducer).Field("m_ResourceGroundRadius").SetValue(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static float GetSpeed(ModuleItemProducer moduleItemProducer) {
|
||||||
|
return Traverse.Create(moduleItemProducer).Field("m_SecPerItemProduced").GetValue() as float? ?? 0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void SetSpeed(ModuleItemProducer moduleItemProducer, float value) {
|
||||||
|
Traverse.Create(moduleItemProducer).Field("m_SecPerItemProduced").SetValue(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user