public GameObject CreateFacility(CFacilityInterface.EType _eType, uint _uiFacilityId = uint.MaxValue, uint _uiExpansionPortId = uint.MaxValue, uint _uiAttachToId = uint.MaxValue) { CExpansionPortInterface cExpansionPort = null; if (_uiExpansionPortId != uint.MaxValue && _uiAttachToId != uint.MaxValue) { cExpansionPort = m_mFacilities[_uiFacilityId].GetComponent <CFacilityExpansion>().GetExpansionPort(_uiExpansionPortId).GetComponent <CExpansionPortInterface>(); if (cExpansionPort.HasAttachedFacility == true) { Debug.LogWarning("Failed to create new room. Port is already in use."); return(null); } } // Generate facility identifier uint uiFacilityId = m_uiFacilityIdCount; // Retrieve the facility prefab CGameRegistrator.ENetworkPrefab eRegisteredPrefab = CFacilityInterface.GetPrefabType(_eType); // Create facility GameObject cNewFacilityObject = CNetwork.Factory.CreateObject(eRegisteredPrefab); // Set facility properties CFacilityInterface cFacilityInterface = cNewFacilityObject.GetComponent <CFacilityInterface>(); cFacilityInterface.FacilityId = uiFacilityId; cFacilityInterface.FacilityType = _eType; m_uiFacilityIdCount++; // Set facility parent cNewFacilityObject.GetComponent <CNetworkView>().SetParent(GetComponent <CNetworkView>().ViewId); // Attach facility expansion port to parent expansion port if (cExpansionPort != null) { cExpansionPort.Attach(_uiAttachToId, cNewFacilityObject); } // Initialise the facility expansion ports cNewFacilityObject.GetComponent <CFacilityExpansion>().InitialiseExpansionPorts(); // Sync position & rotation cNewFacilityObject.GetComponent <CNetworkView>().SyncTransformPosition(); cNewFacilityObject.GetComponent <CNetworkView>().SyncTransformRotation(); // Server adds the facility instantaniously AddNewlyCreatedFacility(cNewFacilityObject, uiFacilityId, _eType); // Notify facility creation observers if (EventOnFaciltiyCreate != null) { EventOnFaciltiyCreate(cNewFacilityObject); } return(cNewFacilityObject); }