Backwards compat

This commit is contained in:
xen-42 2025-01-06 17:27:33 -05:00
parent 3b19c81b42
commit cdb5604cff

View File

@ -241,54 +241,6 @@ namespace NewHorizons.External.Configs
if (Bramble?.dimension != null) canShowOnTitle = false; if (Bramble?.dimension != null) canShowOnTitle = false;
if (Orbit?.staticPosition != null) Orbit.isStatic = true; if (Orbit?.staticPosition != null) Orbit.isStatic = true;
// For each quantum group, verify the following:
// this group's id should be unique
// if type == sockets, group.sockets should not be null or empty
// if type == sockets, count every prop that references this group. the number should be < group.sockets.Count
// if type == sockets, for each socket, if rotation == null, rotation = Vector3.zero
// if type == sockets, for each socket, position must not be null
// For each detail prop,
// if detail.quantumGroupID != null, there exists a quantum group with that id
if (Props?.quantumGroups != null && Props?.details != null)
{
Dictionary<string, QuantumGroupInfo> existingGroups = new Dictionary<string, QuantumGroupInfo>();
foreach (var quantumGroup in Props.quantumGroups)
{
if (existingGroups.ContainsKey(quantumGroup.id)) { NHLogger.LogWarning($"Duplicate quantumGroup id found: {quantumGroup.id}"); quantumGroup.type = QuantumGroupType.FailedValidation; }
existingGroups[quantumGroup.id] = quantumGroup;
if (quantumGroup.type == QuantumGroupType.Sockets)
{
if (quantumGroup.sockets?.Length == 0) { NHLogger.LogError($"quantumGroup {quantumGroup.id} is of type \"sockets\" but has no defined sockets."); quantumGroup.type = QuantumGroupType.FailedValidation; }
else
{
foreach (var socket in quantumGroup.sockets)
{
if (socket.rotation == null) socket.rotation = UnityEngine.Vector3.zero;
if (socket.position == null) { NHLogger.LogError($"quantumGroup {quantumGroup.id} has a socket without a position."); quantumGroup.type = QuantumGroupType.FailedValidation; }
}
}
}
}
var existingGroupsPropCounts = new Dictionary<string, int>();
foreach (var prop in Props?.details)
{
if (prop.quantumGroupID == null) continue;
if (!existingGroups.ContainsKey(prop.quantumGroupID)) NHLogger.LogWarning($"A prop wants to be a part of quantum group {prop.quantumGroupID}, but this group does not exist.");
else existingGroupsPropCounts[prop.quantumGroupID] = existingGroupsPropCounts.GetValueOrDefault(prop.quantumGroupID) + 1;
}
foreach (var quantumGroup in Props.quantumGroups)
{
if (quantumGroup.type == QuantumGroupType.Sockets && existingGroupsPropCounts.GetValueOrDefault(quantumGroup.id) >= quantumGroup.sockets?.Length)
{
NHLogger.LogError($"quantumGroup {quantumGroup.id} is of type \"sockets\" and has more props than sockets.");
quantumGroup.type = QuantumGroupType.FailedValidation;
}
}
}
// Stars and focal points shouldnt be destroyed by stars // Stars and focal points shouldnt be destroyed by stars
if (Star != null || FocalPoint != null) Base.hasFluidDetector = false; if (Star != null || FocalPoint != null) Base.hasFluidDetector = false;
@ -705,6 +657,79 @@ namespace NewHorizons.External.Configs
{ {
Base.hasFluidDetector = false; Base.hasFluidDetector = false;
} }
// OLD QUANTUM VALIDATION
// For each quantum group, verify the following:
// this group's id should be unique
// if type == sockets, group.sockets should not be null or empty
// if type == sockets, count every prop that references this group. the number should be < group.sockets.Count
// if type == sockets, for each socket, if rotation == null, rotation = Vector3.zero
// if type == sockets, for each socket, position must not be null
// For each detail prop,
// if detail.quantumGroupID != null, there exists a quantum group with that id
if (Props?.quantumGroups != null && Props?.details != null)
{
Dictionary<string, QuantumGroupInfo> existingGroups = new Dictionary<string, QuantumGroupInfo>();
foreach (var quantumGroup in Props.quantumGroups)
{
if (existingGroups.ContainsKey(quantumGroup.id)) { NHLogger.LogWarning($"Duplicate quantumGroup id found: {quantumGroup.id}"); quantumGroup.type = QuantumGroupType.FailedValidation; }
existingGroups[quantumGroup.id] = quantumGroup;
if (quantumGroup.type == QuantumGroupType.Sockets)
{
if (quantumGroup.sockets?.Length == 0) { NHLogger.LogError($"quantumGroup {quantumGroup.id} is of type \"sockets\" but has no defined sockets."); quantumGroup.type = QuantumGroupType.FailedValidation; }
else
{
foreach (var socket in quantumGroup.sockets)
{
if (socket.rotation == null) socket.rotation = UnityEngine.Vector3.zero;
if (socket.position == null) { NHLogger.LogError($"quantumGroup {quantumGroup.id} has a socket without a position."); quantumGroup.type = QuantumGroupType.FailedValidation; }
}
}
}
}
var existingGroupsPropCounts = new Dictionary<string, int>();
foreach (var prop in Props?.details)
{
if (prop.quantumGroupID == null) continue;
if (!existingGroups.ContainsKey(prop.quantumGroupID)) NHLogger.LogWarning($"A prop wants to be a part of quantum group {prop.quantumGroupID}, but this group does not exist.");
else existingGroupsPropCounts[prop.quantumGroupID] = existingGroupsPropCounts.GetValueOrDefault(prop.quantumGroupID) + 1;
}
foreach (var quantumGroup in Props.quantumGroups)
{
if (quantumGroup.type == QuantumGroupType.Sockets && existingGroupsPropCounts.GetValueOrDefault(quantumGroup.id) >= quantumGroup.sockets?.Length)
{
NHLogger.LogError($"quantumGroup {quantumGroup.id} is of type \"sockets\" and has more props than sockets.");
quantumGroup.type = QuantumGroupType.FailedValidation;
}
}
}
if (Props != null)
{
var socketQuantumGroups = Props.quantumGroups.Where(x => x.type == QuantumGroupType.Sockets).Select(x => new SocketQuantumGroupInfo()
{
id = x.id,
sockets = x.sockets,
});
if (socketQuantumGroups.Any())
{
Props.socketQuantumGroups = socketQuantumGroups.ToArray();
}
var stateQuantumGroups = Props.quantumGroups.Where(x => x.type == QuantumGroupType.States).Select(x => new StateQuantumGroupInfo()
{
id = x.id,
hasEmptyState = x.hasEmptyState,
loop = x.loop,
sequential = x.sequential
});
if (stateQuantumGroups.Any())
{
Props.stateQuantumGroups = stateQuantumGroups.ToArray();
}
}
} }
#endregion #endregion
} }