Capture current mission, AI, map and administration development
Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
// A support station's cleanup must not require a still-living item catalog.
|
||||
// Remember the subscriptions made by successful native initialization, rather
|
||||
// than rerunning startup validation after that catalog has been destroyed.
|
||||
modded class SCR_BaseItemSupportStationComponent
|
||||
{
|
||||
protected bool m_ERRItemStationScoped;
|
||||
protected bool m_ERRItemStationInitializing;
|
||||
protected bool m_ERRItemStationInitialized;
|
||||
protected bool m_ERRItemStationDeleted;
|
||||
protected SCR_ResourceComponent m_ERRItemStationResource;
|
||||
protected SCR_SupportStationManagerComponent m_ERRItemStationManager;
|
||||
|
||||
override void OnPostInit(IEntity owner)
|
||||
{
|
||||
m_ERRItemStationScoped = !SCR_Global.IsEditMode() && (ERR_GameMode.Get() || ERR_TerrainTakeoverSettings.Enabled());
|
||||
super.OnPostInit(owner);
|
||||
}
|
||||
protected override void DelayedInit(IEntity owner)
|
||||
{
|
||||
if (m_ERRItemStationDeleted) return;
|
||||
// A preloader/preview is not a playable world. Its transient equipment may
|
||||
// be created before any game mode/catalog exists and immediately discarded.
|
||||
if (m_ERRItemStationScoped && owner && GetGame() && owner.GetWorld() != GetGame().GetWorld() && !SCR_EntityCatalogManagerComponent.GetInstance()) return;
|
||||
m_ERRItemStationInitializing = m_ERRItemStationScoped;
|
||||
super.DelayedInit(owner);
|
||||
m_ERRItemStationInitializing = false;
|
||||
if (m_ERRItemStationInitialized && UsesRange()) m_ERRItemStationManager = SCR_SupportStationManagerComponent.GetInstance();
|
||||
}
|
||||
protected override void AddRemoveOnDamageStateChanged(IEntity owner, bool subscribe)
|
||||
{
|
||||
super.AddRemoveOnDamageStateChanged(owner, subscribe);
|
||||
// This hook is reached only after the complete native virtual validation.
|
||||
if (!subscribe || !m_ERRItemStationInitializing) return;
|
||||
m_ERRItemStationInitialized = true;
|
||||
if (m_ResourceConsumer || m_ResourceGenerator) m_ERRItemStationResource = GetResourceComponent();
|
||||
}
|
||||
override void OnDelete(IEntity owner)
|
||||
{
|
||||
if (!m_ERRItemStationScoped || SCR_Global.IsEditMode())
|
||||
{
|
||||
super.OnDelete(owner);
|
||||
return;
|
||||
}
|
||||
if (m_ERRItemStationDeleted) return;
|
||||
m_ERRItemStationDeleted = true;
|
||||
if (GetGame()) GetGame().GetCallqueue().Remove(DelayedInit);
|
||||
if (m_ERRItemStationInitialized)
|
||||
{
|
||||
AddRemoveOnDamageStateChanged(owner, false);
|
||||
// Use the managers this station joined, never a new round's singleton.
|
||||
if (m_ERRItemStationManager) m_ERRItemStationManager.RemoveSupportStation(this);
|
||||
if (m_ERRItemStationResource) m_ERRItemStationResource.TEMP_GetOnInteractorReplicated().Remove(TEMP_OnInteractorReplicated);
|
||||
}
|
||||
m_ERRItemStationManager = null;
|
||||
m_ERRItemStationResource = null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user