DIFF

BunkerBroadcastProxy.c

class BunkerBroadcastProxy : Building
{
	protected ref BunkerBroadcastComponent m_BunkerComponent; 

	protected Bunker m_Bunker;
	
	protected int m_NetIdLow 	= -1;
	protected int m_NetIdHigh 	= -1;
	
	void BunkerBroadcastProxy()
	{
		m_BunkerComponent = new BunkerBroadcastComponent(this);
		
		RegisterNetSyncVariableInt("m_NetIdLow", int.MIN, int.MAX);
		RegisterNetSyncVariableInt("m_NetIdHigh", int.MIN, int.MAX);

		RegisterNetSyncVariableBool("m_BunkerComponent.m_IsActive");
	}
	
	// --------------------------------------------------------------------------------
	
	override void DeferredInit()
	{
		super.DeferredInit();

		if (g_Game.IsServer())
		{
			AssignBunkerObject();
			InitializeComponents();
		}
	}
	
	// --------------------------------------------------------------------------------
	
	override void OnRPC(PlayerIdentity sender, int rpc_type, ParamsReadContext ctx)
	{
		super.OnRPC(sender, rpc_type, ctx);
		
		m_BunkerComponent.OnRPC(sender, rpc_type, ctx);
	}

	// --------------------------------------------------------------------------------
	
	override void OnVariablesSynchronized()
	{
		super.OnVariablesSynchronized();

		if (g_Game.IsMultiplayer())
		{
			m_Bunker = Bunker.Cast(g_Game.GetObjectByNetworkId(m_NetIdLow, m_NetIdHigh));
			if (m_Bunker)
				m_Bunker.SetActive(IsActive());
		}
	}
	
	
	// --------------------------------------------------------------------------------
	
	bool IsActive()
	{
		return m_BunkerComponent.IsActive();
	}
	
	// --------------------------------------------------------------------------------

	Bunker GetBunker()
	{
		return m_Bunker;
	}
	
	// --------------------------------------------------------------------------------

	protected void AssignBunkerObject()
	{
		array<Object> objects = new array<Object>();
		array<CargoBase> proxies = new array<CargoBase>();
		g_Game.GetObjectsAtPosition3D(GetWorldPosition(), 1.0, objects, proxies);
		foreach (Object bunkerObject : objects)
		{
			Bunker bunker = Bunker.Cast(bunkerObject);
			if (bunker)
			{
				int low, high;
				bunker.GetNetworkID(low, high);
				
				m_NetIdLow 	= low;
				m_NetIdHigh = high;
				m_Bunker 	= bunker;

				SetSynchDirty();

				if (m_BunkerComponent)
				{
					if (m_BunkerComponent.IsActive())
						OnBunkerActivated(true, m_BunkerComponent.GetLockCode());
				}

				return;
			}
		}
	}
	
	// --------------------------------------------------------------------------------
	
	protected void InitializeComponents()
	{
		if (m_BunkerComponent)
		{
			m_BunkerComponent.Init();
			if (m_BunkerComponent.GetOnActivated())
				m_BunkerComponent.GetOnActivated().Insert(OnBunkerActivated);
			if (m_BunkerComponent.GetOnDeactivated())
				m_BunkerComponent.GetOnDeactivated().Insert(OnBunkerDeactivated);
		}
	}
	
	// --------------------------------------------------------------------------------
	
	protected void OnBunkerActivated(bool loadedAsActive, string codeLockCode)
	{
		if (!m_Bunker)
		{
			ErrorEx("No Bunker found, cannot activate");
			return;
		}

		m_Bunker.OnBunkerActivated(loadedAsActive, m_BunkerComponent.GetLockCode());
	}

	// --------------------------------------------------------------------------------
	
	protected void OnBunkerDeactivated()
	{
		if (!m_Bunker)
		{
			ErrorEx("No Bunker found, cannot activate");
			return;
		}

		m_Bunker.OnBunkerDeactivated();
	}
}