Load daemon zone view after facade rebuild
This commit is contained in:
parent
a2ce1b27d9
commit
62cb95d807
2 changed files with 25 additions and 22 deletions
|
|
@ -7755,6 +7755,7 @@ static void RequireMainMenuContinueRunState(string root)
|
|||
"CanApplyDaemonEntitySnapshotsInPlace",
|
||||
"ZoneRenderer?.ApplyDaemonFrame(daemonZone, run)",
|
||||
"ApplyDaemonEntitySnapshotsInPlace",
|
||||
"PrepareObservedDaemonZoneContext(targetZone, daemonZone)",
|
||||
"ReplaceObservedEntityFacadesFromTypedSnapshots",
|
||||
"RestoreCurrentEntityBinding",
|
||||
"RestoreCurrentEntityBinding(currentEntity, actionBarBindings)",
|
||||
|
|
@ -7774,7 +7775,7 @@ static void RequireMainMenuContinueRunState(string root)
|
|||
"_observedEntityFacadesByRecordKey",
|
||||
"_observedEntityFacadesByDaemonIndex",
|
||||
"RebuildObservedEntityFacadeIndex();",
|
||||
"ZoneRenderer.LoadDaemonZoneView(_observedEntityFacadesByDaemonIndex, daemonZone, daemonRun)",
|
||||
"ZoneRenderer?.LoadDaemonZoneView(_observedEntityFacadesByDaemonIndex, daemonZone, run)",
|
||||
"entity.RestoreStatGrids(entitySnapshot.StatGrids)",
|
||||
"RestoreThermalExposure((float)entitySnapshot.Heatstroke, (float)entitySnapshot.Hypothermia)",
|
||||
"entity.HeatsinksEnabled = entitySnapshot.HeatsinksEnabled",
|
||||
|
|
@ -8063,7 +8064,8 @@ static void RequireUnityObserverDoesNotTickLocalSimulation(string root)
|
|||
"observed.IsAuthoritative",
|
||||
"TryRestoreEntityGraphFromDaemonRun(observed.Run)",
|
||||
"CreateDaemonZoneConstructionBlueprint(daemonZone)",
|
||||
"ZoneRenderer.LoadDaemonZoneView(_observedEntityFacadesByDaemonIndex, daemonZone, daemonRun)",
|
||||
"PrepareObservedDaemonZoneContext(targetZone, daemonZone)",
|
||||
"ZoneRenderer?.LoadDaemonZoneView(_observedEntityFacadesByDaemonIndex, daemonZone, run)",
|
||||
"ZoneRenderer?.ApplyDaemonFrame(daemonZone, run)",
|
||||
"CreateDaemonEntitySnapshots(runId, daemonZone)",
|
||||
"FindCurrentDaemonZoneSnapshot()",
|
||||
|
|
@ -8134,6 +8136,19 @@ static void RequireUnityObserverDoesNotTickLocalSimulation(string root)
|
|||
"Unity frame application must project observed daemon state, not instantiate authoritative gameplay entities.");
|
||||
}
|
||||
|
||||
var contextPrepRendererLoads = FindMethodScopedLineHits(
|
||||
actionGameManager,
|
||||
new[] { "LoadDaemonZoneView(", "BindToEntity(" })
|
||||
.Where(hit => hit.MethodName == "PrepareObservedDaemonZoneContext")
|
||||
.Select(hit => $"{hit.MethodName}:{hit.LineNumber}: {hit.Line.Trim()}")
|
||||
.ToArray();
|
||||
if (contextPrepRendererLoads.Length > 0)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"Unity zone context prep must not load renderer instances before observed daemon facades have been rebuilt: " +
|
||||
string.Join("; ", contextPrepRendererLoads));
|
||||
}
|
||||
|
||||
var unauthorizedEntityProjectionHits = FindMethodScopedLineHits(
|
||||
actionGameManager,
|
||||
new[] { "Zone.Entities.Add(", "Zone.Entities.Remove(", "Zone.Agents.Clear()" })
|
||||
|
|
|
|||
|
|
@ -2075,10 +2075,9 @@ public class ActionGameManager : MonoBehaviour
|
|||
}
|
||||
}
|
||||
|
||||
public void PopulateLevel(
|
||||
private void PrepareObservedDaemonZoneContext(
|
||||
GalaxyZone galaxyZone,
|
||||
AetheriaRuntimeZoneSnapshotCommit daemonZone = null,
|
||||
AetheriaRuntimeRunCheckpointCommit daemonRun = null)
|
||||
AetheriaRuntimeZoneSnapshotCommit daemonZone = null)
|
||||
{
|
||||
if (galaxyZone == null) throw new ArgumentNullException(nameof(galaxyZone));
|
||||
|
||||
|
|
@ -2097,14 +2096,6 @@ public class ActionGameManager : MonoBehaviour
|
|||
PlayMusic(MusicType.Overworld);
|
||||
|
||||
Zone.Log = s => Debug.Log($"Zone: {s}");
|
||||
|
||||
ZoneRenderer.LoadDaemonZoneView(_observedEntityFacadesByDaemonIndex, daemonZone, daemonRun);
|
||||
|
||||
if (CurrentEntity != null)
|
||||
{
|
||||
UnbindEntity();
|
||||
BindToEntity(CurrentEntity);
|
||||
}
|
||||
}
|
||||
|
||||
public bool CanShowInputScreenFromMenu()
|
||||
|
|
@ -2254,15 +2245,17 @@ public class ActionGameManager : MonoBehaviour
|
|||
|
||||
if (Zone?.GalaxyZone != targetZone)
|
||||
{
|
||||
PopulateLevel(targetZone, daemonZone, run);
|
||||
PrepareObservedDaemonZoneContext(targetZone, daemonZone);
|
||||
}
|
||||
|
||||
var actionBarBindings = run.ActionBarBindings?
|
||||
.Select(ToActionBarBindingSnapshot)
|
||||
.Where(binding => binding != null)
|
||||
.ToArray() ?? Array.Empty<AetheriaRuntimeActionBarBindingSnapshot>();
|
||||
ReplaceObservedEntityFacadesFromTypedSnapshots(entitySnapshots, currentEntityKey, actionBarBindings);
|
||||
ZoneRenderer?.ApplyDaemonFrame(daemonZone, run);
|
||||
ReplaceObservedEntityFacadesFromTypedSnapshots(entitySnapshots);
|
||||
ZoneRenderer?.LoadDaemonZoneView(_observedEntityFacadesByDaemonIndex, daemonZone, run);
|
||||
if (_observedEntityFacadesByRecordKey.TryGetValue(currentEntityKey, out var currentEntity))
|
||||
RestoreCurrentEntityBinding(currentEntity, actionBarBindings);
|
||||
RestoreDroppedPickupsFromDaemonZoneState(daemonZone);
|
||||
_lastAppliedAuthoritativeDaemonRunId = runId;
|
||||
_lastAppliedAuthoritativeDaemonZoneIndex = run.CurrentZoneIndex;
|
||||
|
|
@ -2719,9 +2712,7 @@ public class ActionGameManager : MonoBehaviour
|
|||
}
|
||||
|
||||
private void ReplaceObservedEntityFacadesFromTypedSnapshots(
|
||||
IReadOnlyList<AetheriaRuntimeEntitySnapshot> entitySnapshots,
|
||||
string currentEntityKey,
|
||||
IReadOnlyList<AetheriaRuntimeActionBarBindingSnapshot> actionBarBindings)
|
||||
IReadOnlyList<AetheriaRuntimeEntitySnapshot> entitySnapshots)
|
||||
{
|
||||
var restoredEntities = new Dictionary<string, Entity>();
|
||||
foreach (var entitySnapshot in entitySnapshots)
|
||||
|
|
@ -2765,9 +2756,6 @@ public class ActionGameManager : MonoBehaviour
|
|||
foreach (var restoredEntity in restoredEntities)
|
||||
_observedEntityFacadesByRecordKey[restoredEntity.Key] = restoredEntity.Value;
|
||||
RebuildObservedEntityFacadeIndex();
|
||||
|
||||
if (restoredEntities.TryGetValue(currentEntityKey, out var currentEntity))
|
||||
RestoreCurrentEntityBinding(currentEntity, actionBarBindings);
|
||||
}
|
||||
|
||||
private void RebuildObservedEntityFacadeIndex()
|
||||
|
|
|
|||
Loading…
Reference in a new issue