Resolve dock binding from daemon assignments

This commit is contained in:
Meta Vens 2026-06-21 18:34:17 +01:00
commit 25736359ca
2 changed files with 38 additions and 10 deletions

View file

@ -7782,6 +7782,7 @@ static void RequireMainMenuContinueRunState(string root)
"RestoreDroppedPickupsFromDaemonZoneState",
"TryGetDaemonEntitySnapshot(",
"TryGetDaemonParentSnapshot(",
"TryResolveDaemonDockingBay(",
"IsCurrentEntityObservedUndocked(",
"parentSnapshot.DockingBayAssignments",
"dockedEntitySnapshot.ChildEntityIndices",
@ -7837,7 +7838,10 @@ static void RequireMainMenuContinueRunState(string root)
"entity.EntityHostility[target]",
"entity.VisibleEntities.Add(target)",
"entity.VisibleEnemies.Add(target)",
"entity.VisibleFriendlies.Add(target)"
"entity.VisibleFriendlies.Add(target)",
"currentEntity.Parent.DockingBays",
"currentEntity.Parent is OrbitalEntity",
"DoDock(currentEntity.Parent, dockingBay)"
};
var forbiddenGameplayHits = forbiddenGameplaySymbols

View file

@ -2842,16 +2842,12 @@ public class ActionGameManager : MonoBehaviour
Entity currentEntity,
IReadOnlyList<AetheriaRuntimeActionBarBindingSnapshot> actionBarBindings)
{
if (currentEntity.Parent != null)
if (TryResolveDaemonDockingBay(currentEntity, out var dockParent, out var dockingBay))
{
var dockingBay = currentEntity.Parent.DockingBays.FirstOrDefault(bay => bay.DockedShip == currentEntity);
if (dockingBay != null && currentEntity.Parent is OrbitalEntity)
{
CurrentEntity = currentEntity;
RestoreActionBarBindingsFromTypedRun(actionBarBindings);
DoDock(currentEntity.Parent, dockingBay);
return;
}
CurrentEntity = currentEntity;
RestoreActionBarBindingsFromTypedRun(actionBarBindings);
DoDock(dockParent, dockingBay);
return;
}
BindToEntity(
@ -3154,6 +3150,34 @@ public class ActionGameManager : MonoBehaviour
!TryGetDaemonParentSnapshot(CurrentEntity, out _, out _);
}
private bool TryResolveDaemonDockingBay(
Entity child,
out Entity dockParent,
out EquippedDockingBay dockingBay)
{
dockParent = null;
dockingBay = null;
if (!TryGetDaemonParentSnapshot(child, out var parentSnapshot, out var parent) ||
!(parent is OrbitalEntity) ||
parent.DockingBays == null)
{
return false;
}
var assignments = parentSnapshot.DockingBayAssignments ?? Array.Empty<int>();
for (var bayIndex = 0; bayIndex < assignments.Count && bayIndex < parent.DockingBays.Count; bayIndex++)
{
if (assignments[bayIndex] != child.DaemonEntityIndex)
continue;
dockParent = parent;
dockingBay = parent.DockingBays[bayIndex];
return dockingBay != null;
}
return false;
}
private bool TryQueryDaemonEntityContact(
Entity observer,
Entity target,