/*
         * public override IEnumerator GetGameObjectAsync(IOut<GameObject> gameObject)
         * {
         *  AsyncOperationHandle<GameObject> seatruckFabricatorModuleRequest = AddressablesUtility.LoadAsync<GameObject>("WorldEntities/Tools/SeaTruckFabricatorModule.prefab");
         *  yield return seatruckFabricatorModuleRequest;
         *  GameObject seatruckFabricatorModulePrefab = seatruckFabricatorModuleRequest.Result;
         *
         *  _GameObject = UWE.Utils.InstantiateDeactivated(seatruckFabricatorModulePrefab);
         *
         *  _GameObject.SetActive(true);
         *
         *  gameObject.Set(_GameObject);
         * }
         */

        public override IEnumerator GetGameObjectAsync(IOut <GameObject> gameObject)
        {
            AsyncOperationHandle <GameObject> loadRequest_01 = AddressablesUtility.LoadAsync <GameObject>("WorldEntities/Tools/SeaTruckFabricatorModule.prefab");

            yield return(loadRequest_01);

            if (loadRequest_01.Status == AsyncOperationStatus.Failed)
            {
                BZLogger.Error("Cannot find GameObject in Resources folder at path 'WorldEntities/Tools/SeaTruckFabricatorModule.prefab'");
                yield break;
            }

            GameObject seatruckFabricatorModulePrefab = loadRequest_01.Result;

            GameObjectClone = UWE.Utils.InstantiateDeactivated(seatruckFabricatorModulePrefab, null, Vector3.zero, Quaternion.identity);

            SetupScannerModule();

            /*
             * IAssetBundleWrapperCreateRequest bundleRequest = AssetBundleManager.LoadBundleAsync("basegeneratorpieces");
             * yield return bundleRequest;
             * IAssetBundleWrapper bundle = bundleRequest.assetBundle;
             * IAssetBundleWrapperRequest loadRequest_02 = bundle.LoadAssetAsync<GameObject>("Assets/Prefabs/Base/GeneratorPieces/BaseMapRoom.prefab");
             * yield return loadRequest_02;
             * GameObject maproom = loadRequest_02.asset as GameObject;
             */
            AsyncOperationHandle <GameObject> loadRequest_02 = AddressablesUtility.LoadAsync <GameObject>("Assets/Prefabs/Base/GeneratorPieces/BaseMapRoom.prefab");

            yield return(loadRequest_02);

            if (loadRequest_02.Status == AsyncOperationStatus.Failed)
            {
                BZLogger.Error("Cannot find Prefab at path 'Assets/Prefabs/Base/GeneratorPieces/BaseMapRoom.prefab'");
                yield break;
            }

            GameObject maproom = loadRequest_02.Result;

            if (!maproom)
            {
                BZLogger.Debug("Failed to load MapRoom prefab!");
                yield break;
            }

            antenna = UWE.Utils.InstantiateDeactivated(maproom.transform.Find("Map_room_antenna").gameObject, GameObjectClone.transform, Vector3.zero, Quaternion.identity);

            AsyncOperationHandle <GameObject> loadRequest_03 = AddressablesUtility.LoadAsync <GameObject>("Submarine/Build/BatteryCharger.prefab");

            yield return(loadRequest_03);

            GameObject batteryChargerPrefab = loadRequest_03.Result;

            GameObject powerSystemRoot = new GameObject("powerSystemRoot");

            powerSystemRoot.transform.SetParent(GameObjectClone.transform);
            powerSystemRoot.transform.localPosition = new Vector3(-1.06f, -0.20f, 1.66f);
            powerSystemRoot.transform.localRotation = Quaternion.Euler(0, 270, 180);
            powerSystemRoot.transform.localScale    = new Vector3(1.78f, 1.78f, 1.0f);

            powerSystem = UWE.Utils.InstantiateDeactivated(batteryChargerPrefab, powerSystemRoot.transform, Vector3.zero, Quaternion.identity);

            AsyncOperationHandle <GameObject> loadRequest_04 = AddressablesUtility.LoadAsync <GameObject>("Submarine/Build/MapRoomFunctionality.prefab");

            yield return(loadRequest_04);

            GameObject mapRoomFunctionalityPrefab = loadRequest_04.Result;

            scannerUIRoot = new GameObject("scannerRoot");
            scannerUIRoot.transform.SetParent(GameObjectClone.transform, false);
            scannerUIRoot.transform.localScale    = new Vector3(1.14f, 1.14f, 1.14f);
            scannerUIRoot.transform.localPosition = new Vector3(1.37f, 0.07f, 1.60f);
            scannerUIRoot.transform.localRotation = Quaternion.Euler(0, 90, 0);

            scannerUI = UWE.Utils.InstantiateDeactivated(mapRoomFunctionalityPrefab.transform.Find("screen/scannerUI").gameObject, scannerUIRoot.transform, Vector3.zero, Quaternion.identity);

            SetupAntenna();
            SetupScannerUI();
            SetupPowerSystem();

            GameObjectClone.AddComponent <SeaTruckSegmentListener>();

            gameObject.Set(GameObjectClone);

            yield break;
        }
        private void SetupPowerSystem()
        {
            powerSystem.name = "powerSystem";
            UnityEngine.Object.DestroyImmediate(powerSystem.GetComponent <BatteryCharger>());
            UnityEngine.Object.DestroyImmediate(powerSystem.GetComponent <PrefabIdentifier>());
            UnityEngine.Object.DestroyImmediate(powerSystem.GetComponent <TechTag>());
            UnityEngine.Object.DestroyImmediate(powerSystem.GetComponent <Constructable>());
            UnityEngine.Object.DestroyImmediate(powerSystem.GetComponent <FMOD_StudioEventEmitter>());
            UnityEngine.Object.DestroyImmediate(powerSystem.GetComponent <ConstructableBounds>());
            UnityEngine.Object.DestroyImmediate(powerSystem.GetComponent <PowerConsumer>());
            UnityEngine.Object.DestroyImmediate(powerSystem.transform.Find("Collider").gameObject);

            GameObject EquipmentRoot = powerSystem.transform.Find("EquipmentRoot").gameObject;

            EquipmentRoot.transform.SetParent(GameObjectClone.transform, false);

            Transform model = powerSystem.transform.Find("model");

            UnityEngine.Object.DestroyImmediate(model.GetComponent <Animator>());
            UnityEngine.Object.DestroyImmediate(model.GetComponent <BaseModuleLighting>());

            GameObject cover = model.Find("battery_charging_station_base/battery_charging_station_cover").gameObject;

            cover.transform.SetParent(model, false);

            UnityEngine.Object.DestroyImmediate(model.Find("battery_charging_station_base").gameObject);

            SkyApplier skyApplier = model.gameObject.GetComponent <SkyApplier>();

            LightingController controller = GameObjectClone.GetComponent <LightingController>();

            controller.RegisterSkyApplier(skyApplier);

            GameObject UI = powerSystem.transform.Find("UI").gameObject;

            UI.transform.localPosition = new Vector3(0f, 0f, 0.28f);
            UI.transform.localRotation = Quaternion.Euler(0, 0, 180);

            GameObject backgroundLeft = UI.transform.transform.Find("Background").gameObject;

            backgroundLeft.name = "backgroundLeft";

            RectTransform leftRt = backgroundLeft.transform as RectTransform;

            leftRt.anchoredPosition = new Vector2(-495f, 0f);
            leftRt.localScale       = new Vector3(0.70f, 0.70f, 0.1f);

            GameObject backgroundRight = UWE.Utils.Instantiate(backgroundLeft, UI.transform, Vector3.zero, Quaternion.identity);

            backgroundRight.name = "backgroundRight";

            RectTransform rightRt = backgroundRight.transform as RectTransform;

            rightRt.anchoredPosition = new Vector2(500f, 0f);
            rightRt.localScale       = new Vector3(0.70f, 0.70f, 0.1f);
            rightRt.SetSiblingIndex(0);

            RawImage imageLeft  = backgroundLeft.GetComponent <RawImage>();
            RawImage imageRight = backgroundRight.GetComponent <RawImage>();

            imageLeft.texture  = powerUI_background;
            imageRight.texture = powerUI_background;

            Transform Powered = UI.transform.Find("Powered");

            RectTransform battery1 = Powered.Find("Battery1") as RectTransform;

            battery1.anchoredPosition = new Vector2(-545f, 15f);

            RectTransform battery1_text = battery1.Find("Text") as RectTransform;

            battery1_text.anchoredPosition = new Vector2(0f, 95f);
            battery1_text.localScale       = new Vector3(1.50f, 1.50f, 0.1f);

            RectTransform battery2 = Powered.Find("Battery2") as RectTransform;

            battery2.anchoredPosition = new Vector2(-435f, 15f);

            RectTransform battery2_text = battery2.Find("Text") as RectTransform;

            battery2_text.anchoredPosition = new Vector2(0f, 95f);
            battery2_text.localScale       = new Vector3(1.50f, 1.50f, 0.1f);

            RectTransform battery3 = Powered.Find("Battery3") as RectTransform;

            battery3.anchoredPosition = new Vector2(450f, 15f);

            RectTransform battery3_text = battery3.Find("Text") as RectTransform;

            battery3_text.anchoredPosition = new Vector2(0f, 95f);
            battery3_text.localScale       = new Vector3(1.50f, 1.50f, 0.1f);

            RectTransform battery4 = Powered.Find("Battery4") as RectTransform;

            battery4.anchoredPosition = new Vector2(560f, 15f);

            RectTransform battery4_text = battery4.Find("Text") as RectTransform;

            battery4_text.anchoredPosition = new Vector2(0f, 95f);
            battery4_text.localScale       = new Vector3(1.50f, 1.50f, 0.1f);

            Powered.gameObject.SetActive(true);

            BoxCollider Trigger = powerSystem.transform.Find("Trigger").GetComponent <BoxCollider>();

            Trigger.center = new Vector3(0f, 0f, 0.32f);
            Trigger.size   = new Vector3(0.35f, 0.35f, 0.35f);

            UI.SetActive(true);

            powerSystem.AddComponent <SeaTruckScannerPowerSystem>();

            powerSystem.SetActive(true);
        }
Example #3
0
        public override IEnumerator GetGameObjectAsync(IOut <GameObject> gameObject)
        {
            if (GameObjectClone != null)
            {
                gameObject.Set(GameObjectClone);
                yield break;
            }

            GameObject result;

            if (FragmentTemplate != TechType.None)
            {
                CoroutineTask <GameObject> request = CraftData.GetPrefabForTechTypeAsync(FragmentTemplate);
                yield return(request);

                result = request.GetResult();

                if (result == null)
                {
                    BZLogger.Error($"Cannot instantiate prefab from TechType '{FragmentTemplate}'!");
                    yield break;
                }

                GameObjectClone = UWE.Utils.InstantiateDeactivated(result);
            }
            else if (!string.IsNullOrEmpty(PrefabFileName))
            {
                IPrefabRequest prefabRequest = PrefabDatabase.GetPrefabForFilenameAsync(PrefabFilePath);
                yield return(prefabRequest);

                if (prefabRequest.TryGetPrefab(out result))
                {
                    //GameObjectClone = UnityEngine.Object.Instantiate(result);
                    GameObjectClone = UWE.Utils.InstantiateDeactivated(result);
                }
                else
                {
                    BZLogger.Error($"Cannot find prefab in PrefabDatabase at path '{PrefabFilePath}!");
                    yield break;
                }
            }

            GameObjectClone.name = TechTypeName;

            PrefabIdentifier prefabIdentifier = GameObjectClone.GetComponent <PrefabIdentifier>();

            prefabIdentifier.ClassId = TechTypeName;

            TechTag techTag = GameObjectClone.GetComponent <TechTag>();

            techTag.type = TechType;

            ResourceTracker resourceTracker = GameObjectClone.GetComponent <ResourceTracker>();

            resourceTracker.overrideTechType = TechType.Fragment;

            ModifyGameObject();

            AddFragmentTracker(GameObjectClone);

            BZLogger.Debug($"GetGameObjectAsync called for fragment: {TechTypeName}");

            gameObject.Set(GameObjectClone);

            yield break;
        }