Fix station docking bays, save-safe instance keys, and zero-weight draws
One rule now governs interior space: an empty hardpoint cell is usable, in both UnoccupiedSpace and ItemFits. ItemFits used to refuse hardpoint cells that UnoccupiedSpace offered, so stations failed to equip a docking bay. CraftedItemInstance.Ingredients and Product move from keys 3 and 4 to 9 and 10, past every key the derived instances use. At 3 and 4 an older save reads nil into a non-nullable Guid and fails to load. WeightedRandomElements returns an empty array when every weight is zero, instead of an array of nulls. LoadoutGenerator treats a missing Galaxy as "every product available", the seam a fixture needs to generate loadouts without a galaxy. ZoneGenerator skips a story station that fails to generate and logs it, instead of throwing. Verified: Aetheria.Shared and tools/AetherDb build headless; Unity 6000.3.24f1 batchmode compile succeeds; AetherDb doctor, station-fit and loadout pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
68fbce4a8a
commit
6bd3e17690
5 changed files with 25 additions and 12 deletions
|
|
@ -532,13 +532,11 @@ public abstract class Entity
|
|||
// Check every cell of the item's shape
|
||||
foreach (var i in itemData.Shape.Coordinates)
|
||||
{
|
||||
// If there is any gear already occupying that space, it won't fit
|
||||
// If there's a hardpoint there, it won't fit
|
||||
// Thermal items have their own layer and do not collide with gear
|
||||
// An interior cell is usable when no gear occupies it. An empty hardpoint cell counts as usable:
|
||||
// general gear may take it until hardpoint gear claims it, which is the same rule
|
||||
// UnoccupiedSpace reports, so what generation is offered and what equipping accepts agree.
|
||||
var itemCoord = hullCoord + itemData.Shape.Rotate(i, item.Rotation);
|
||||
if (!hullData.InteriorCells[itemCoord] ||
|
||||
itemData.HardpointType == HardpointType.Tool && Hardpoints[itemCoord.x, itemCoord.y] != null ||
|
||||
GearOccupancy[itemCoord.x, itemCoord.y] != null)
|
||||
if (!hullData.InteriorCells[itemCoord] || GearOccupancy[itemCoord.x, itemCoord.y] != null)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue