Esempio n. 1
0
        public override bool FindAllComponents()
        {
            QuickLogger.Debug("Find All Components");

            #region Canvas

            CanvasGameObject = gameObject.GetComponentInChildren <Canvas>()?.gameObject;

            if (CanvasGameObject == null)
            {
                QuickLogger.Error("Canvas not found.");
                return(false);
            }

            #endregion


            // == Canvas Elements == //

            #region Home Screen
            _homePage = CanvasGameObject.transform.Find("HomePage")?.gameObject;
            if (_homePage == null)
            {
                QuickLogger.Error("Screen: Home Page not found.");
                return(false);
            }
            #endregion

            #region Depth
            _depth = _homePage.transform.Find("Depth")?.gameObject;

            if (_depth == null)
            {
                QuickLogger.Error("Panel: Depth not found.");
                return(false);
            }
            #endregion

            #region Depth Value
            _depthValue = _depth.transform.Find("Depth_Value")?.GetComponent <Text>();

            if (_depthValue == null)
            {
                QuickLogger.Error("Text: Depth Value not found.");
                return(false);
            }
            #endregion

            #region Turbine Speed
            _turbineSpeed = _homePage.transform.Find("TurbineSpeed")?.gameObject;

            if (_turbineSpeed == null)
            {
                QuickLogger.Error("GameObject: Turbine Speed not found.");
                return(false);
            }
            #endregion

            #region Home Screen Power BTN
            _homeScreenPowerBTN = _homePage.transform.Find("Power_BTN")?.gameObject;

            if (_homeScreenPowerBTN == null)
            {
                QuickLogger.Error("Screen: Powered Off Screen Button not found.");
                return(false);
            }


            var homeScreenPowerBTN = _homeScreenPowerBTN.AddComponent <InterfaceButton>();
            homeScreenPowerBTN.ButtonMode    = InterfaceButtonMode.Background;
            homeScreenPowerBTN.OnButtonClick = OnButtonClick;
            homeScreenPowerBTN.BtnName       = "HPPBtn";

            #endregion

            #region Health Meter
            _healthMeters = _homePage.transform.Find("Health_Meter")?.gameObject;

            if (_healthMeters == null)
            {
                QuickLogger.Error("Screen: Health Meter not found.");
                return(false);
            }
            #endregion

            #region Health Meter Bar
            _healthSlider = _healthMeters.transform.Find("Slider")?.gameObject;

            if (_healthSlider == null)
            {
                QuickLogger.Error("Screen: Health Slider not found.");
                return(false);
            }
            #endregion

            #region Health Meter Percentage
            _healthPercentage = _healthSlider.transform.Find("Heath_Percentage")?.gameObject;

            if (_healthPercentage == null)
            {
                QuickLogger.Error("Screen: Health Percentage not found.");
                return(false);
            }
            #endregion

            #region Power Meter
            _powerMeters = _homePage.transform.Find("Power_Meter")?.gameObject;

            if (_powerMeters == null)
            {
                QuickLogger.Error("Screen: Power Meter not found.");
                return(false);
            }
            #endregion

            #region Power Meter Bar
            _powerSlider = _powerMeters.transform.Find("Slider")?.gameObject;

            if (_powerSlider == null)
            {
                QuickLogger.Error("Screen: Power Slider not found.");
                return(false);
            }
            #endregion

            #region Power Meter Percentage
            _powerPercentage = _powerSlider.transform.Find("Power_Percentage")?.gameObject;

            if (_powerPercentage == null)
            {
                QuickLogger.Error("Screen: Power Percentage not found.");
                return(false);
            }
            #endregion

            #region Background
            _background = CanvasGameObject.transform.Find("Background")?.gameObject;
            if (_background == null)
            {
                QuickLogger.Error("Screen: Background not found.");
                return(false);
            }
            #endregion

            #region PowerOff
            _poweredOffScreen = CanvasGameObject.transform.Find("PowerOffPage")?.gameObject;
            if (_poweredOffScreen == null)
            {
                QuickLogger.Error("Screen: Powered Off Page not found.");
                return(false);
            }
            #endregion

            #region Power BTN
            _poweredScreenPowerBTN = _poweredOffScreen.transform.Find("Power_BTN")?.gameObject;
            if (_poweredScreenPowerBTN == null)
            {
                QuickLogger.Error("Screen: Powered Off Screen Button not found.");
                return(false);
            }

            var poweredOffScreenBTN = _poweredScreenPowerBTN.AddComponent <InterfaceButton>();
            poweredOffScreenBTN.ButtonMode    = InterfaceButtonMode.Background;
            poweredOffScreenBTN.OnButtonClick = OnButtonClick;
            poweredOffScreenBTN.BtnName       = "PPBtn";
            #endregion
            return(true);
        }
Esempio n. 2
0
        internal static Pickupable ConvertToPickupable(ItemData itemData)
        {
            QuickLogger.Debug("ConvertToPickupable", true);

            if (itemData == null)
            {
                QuickLogger.Debug("Item Data is null", true);
                return(null);
            }

            QuickLogger.Debug("1");
            if (EggHandler.GetDiscoveredEgg(itemData.TechType, out TechType value))
            {
                return(CraftData.InstantiateFromPrefab(value).GetComponent <Pickupable>());
            }

            QuickLogger.Debug("2");

            var gameObject = CraftData.GetPrefabForTechType(itemData.TechType);

            QuickLogger.Debug("3");


            if (gameObject == null)
            {
                QuickLogger.Error($"Couldn't get the prefab for the tech-type {itemData.TechType}");
                return(null);
            }

            QuickLogger.Debug("4");

            var go = GameObject.Instantiate(gameObject);

            QuickLogger.Debug("5");

            if (go == null)
            {
                QuickLogger.Debug("GameObject is null in convert to pickupable", true);
                QuickLogger.Debug($"TechType = {itemData.Type}", true);
                return(null);
            }

            switch (itemData.Type)
            {
            case ItemType.Battery:
                go.GetComponent <Battery>()._charge = itemData.BatteryData.Charge;
                break;

            case ItemType.Food:
                var eatable = go.GetComponent <Eatable>();
                eatable.foodValue  = itemData.FoodData.FoodValue;
                eatable.waterValue = itemData.FoodData.WaterValue;
                break;

            case ItemType.Fuel:
                go.GetComponent <FireExtinguisher>().fuel = itemData.FuelData.Fuel;
                break;

            case ItemType.PlayerTool:
                if (itemData.PlayerToolData.HasBattery)
                {
                    var batteryTechType = itemData.PlayerToolData.BatteryInfo.TechType;
                    var tempBattery     = CraftData.GetPrefabForTechType(batteryTechType);
                    var capacity        = tempBattery?.gameObject.GetComponent <IBattery>()?.capacity;

                    if (itemData.PlayerToolData.HasBattery && capacity != null && capacity > 0)
                    {
                        //var pickup = CraftData.InstantiateFromPrefab(itemData.TechType).GetComponent<Pickupable>();
                        var energyMixin      = go.gameObject.GetComponent <EnergyMixin>();
                        var normalizedCharge = itemData.PlayerToolData.BatteryInfo.BatteryCharge / capacity;
                        if (energyMixin.GetBattery() != null)
                        {
                            QuickLogger.Debug("Battery was already in device destroying");
                        }

                        if (!energyMixin.compatibleBatteries.Contains(batteryTechType))
                        {
                            energyMixin.compatibleBatteries.Add(batteryTechType);
                        }

                        energyMixin.SetBattery(itemData.PlayerToolData.BatteryInfo.TechType,
                                               (float)normalizedCharge);
                        QuickLogger.Info($"Gave Player Player tool {itemData.PlayerToolData.TechType} with battery {batteryTechType}");
                    }
                    else
                    {
                        QuickLogger.Error("While trying to get the batter capacity of the battery it returned null or 0.");
                    }
                }
                break;

            case ItemType.FCSFilteredStorage:
                var storage = go.GetComponent <FCSFilteredStorage>();
                storage.Items   = itemData.FcsFilteredStorage;
                storage.Filters = itemData.FcsFilters;
                storage.ForceUpdateDisplay();
                break;
            }

            QuickLogger.Debug("6");

            return(go.GetComponent <Pickupable>());
        }
        public override GameObject GetGameObject()
        {
            try
            {
                QuickLogger.Debug("Making GameObject");

                QuickLogger.Debug("Instantiate GameObject");

                var prefab      = GameObject.Instantiate(_Prefab);
                var transmitter = GameObject.Instantiate(CraftData.GetPrefabForTechType(TechType.PowerTransmitter));


                // Add large world entity ALLOWS YOU TO SAVE ON TERRAIN
                var lwe = prefab.AddComponent <LargeWorldEntity>();
                lwe.cellLevel = LargeWorldEntity.CellLevel.Far;

                var model = prefab.FindChild("model");

                SkyApplier skyApplier = prefab.AddComponent <SkyApplier>();
                skyApplier.renderers = model.GetComponentsInChildren <MeshRenderer>();
                skyApplier.anchorSky = Skies.Auto;

                //========== Allows the building animation and material colors ==========//

                QuickLogger.Debug("Adding Constructible");

                // Add constructible
                var constructable = prefab.AddComponent <Constructable>();
                constructable.allowedOnWall           = false;
                constructable.allowedOnGround         = true;
                constructable.allowedInSub            = false;
                constructable.allowedInBase           = false;
                constructable.allowedOnCeiling        = false;
                constructable.allowedOutside          = true;
                constructable.model                   = model;
                constructable.rotationEnabled         = true;
                constructable.allowedOnConstructables = false;
                constructable.techType                = TechType;

                var center = new Vector3(0f, 2.970485f, 0f);
                var size   = new Vector3(4.03422f, 5.701298f, 3.179399f);
                GameObjectHelpers.AddConstructableBounds(prefab, size, center);

                PrefabIdentifier prefabID = prefab.AddComponent <PrefabIdentifier>();
                prefabID.ClassId = this.ClassID;

                var lm = prefab.AddComponent <LiveMixin>();
                lm.data = CustomLiveMixinData.Get();

                prefab.AddComponent <TechTag>().type = TechType;

                prefab.AddComponent <BeaconController>();

                prefab.AddComponent <AIJetStreamT242Display>();

                prefab.AddComponent <AIJetStreamT242PowerManager>();

                prefab.AddComponent <AIJetStreamT242HealthManager>();

                prefab.AddComponent <AIJetStreamT242AnimationManager>();

                prefab.AddComponent <AIJetStreamT242Controller>();

                return(prefab);
            }
            catch (Exception e)
            {
                QuickLogger.Error(e.Message);
                return(null);
            }
        }
        public override bool FindAllComponents()
        {
            try
            {
                #region Canvas

                var canvas = gameObject.GetComponentInChildren <Canvas>()?.gameObject;

                if (canvas == null)
                {
                    QuickLogger.Error("Canvas could not be found!");
                    return(false);
                }

                #endregion

                #region Home Screen

                var home = InterfaceHelpers.FindGameObject(canvas, "Home");

                #endregion

                #region Multiplier

                var multiplier = InterfaceHelpers.FindGameObject(home, "Multiplier");

                #endregion

                #region Item Count

                _itemCount = InterfaceHelpers.FindGameObject(home, "StorageAmount")?.GetComponent <Text>();

                #endregion

                #region Plier

                _plier = InterfaceHelpers.FindGameObject(multiplier, "plier")?.GetComponent <Text>();

                #endregion

                #region Storage Labels

                _storageLabels = InterfaceHelpers.FindGameObject(home, "Storage_Labels");

                #endregion

                #region Grid

                var grid = InterfaceHelpers.FindGameObject(home, "Grid");
                _grid = _mono.gameObject.AddComponent <GridHelper>();
                _grid.OnLoadDisplay += OnLoadDisplay;
                _grid.Setup(16, ExStorageDepotBuildable.ItemPrefab, home, _startColor, _hoverColor, OnButtonClick);

                #endregion

                #region Dump Button

                var dumpBTN = InterfaceHelpers.FindGameObject(home, "Dump_Button");
                InterfaceHelpers.CreateButton(dumpBTN, "DumpBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, _startColor, _hoverColor, MAX_INTERACTION_DISTANCE, ExStorageDepotBuildable.AddToExStorage());

                #endregion

                #region Rename Button

                var renameBTN = InterfaceHelpers.FindGameObject(home, "Rename_Button");
                InterfaceHelpers.CreateButton(renameBTN, "RenameBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, _startColor, _hoverColor, MAX_INTERACTION_DISTANCE, ExStorageDepotBuildable.RenameStorage());

                #endregion

                #region Multiplier Previous Button

                var multiplierPrevBtn = InterfaceHelpers.FindGameObject(multiplier, "Prev_BTN");
                InterfaceHelpers.CreateButton(multiplierPrevBtn, "LButton", InterfaceButtonMode.Background,
                                              OnButtonClick, _startColor, _hoverColor, MAX_INTERACTION_DISTANCE, "");

                #endregion

                #region Multiplier Next Button

                var multiplierNextBtn = InterfaceHelpers.FindGameObject(multiplier, "Next_BTN");
                InterfaceHelpers.CreateButton(multiplierNextBtn, "RButton", InterfaceButtonMode.Background,
                                              OnButtonClick, _startColor, _hoverColor, MAX_INTERACTION_DISTANCE, "");

                #endregion
            }
            catch (Exception e)
            {
                QuickLogger.Error($"{e.Message}:\n{e.StackTrace}");
                return(false);
            }
            return(true);
        }
Esempio n. 5
0
        public override bool FindAllComponents()
        {
            #region Canvas
            var canvasGameObject = gameObject.GetComponentInChildren <Canvas>()?.gameObject;

            if (canvasGameObject == null)
            {
                QuickLogger.Error("Canvas cannot be found");
                return(false);
            }
            #endregion

            #region Main
            var main = canvasGameObject.FindChild("Main")?.gameObject;
            if (main == null)
            {
                QuickLogger.Error("Main cannot be found");
                return(false);
            }
            #endregion

            #region Status_LBL
            var statuslbl = main.FindChild("Status_LBL")?.gameObject.GetComponent <Text>();

            if (statuslbl == null)
            {
                QuickLogger.Error("Status_LBL cannot be found");
                return(false);
            }

            statuslbl.text = AIPowerCellSocketBuildable.Status();

            #endregion

            #region Slot1
            var slot1 = main.FindChild("Battery_1")?.gameObject;
            if (slot1 == null)
            {
                QuickLogger.Error("Battery_1 cannot be found");
                return(false);
            }

            _s1Percent         = slot1.FindChild("percentage").GetComponent <Text>();
            _s1Percent.text    = Language.main.Get("ChargerSlotEmpty");
            _s1Fill            = slot1.FindChild("Fill").GetComponent <Image>();
            _s1Fill.color      = _colorEmpty;
            _s1Fill.fillAmount = 0f;
            #endregion

            #region Slot2
            var slot2 = main.FindChild("Battery_2")?.gameObject;
            if (slot2 == null)
            {
                QuickLogger.Error("Battery_2 cannot be found");
                return(false);
            }

            _s2Percent         = slot2.FindChild("percentage").GetComponent <Text>();
            _s2Percent.text    = Language.main.Get("ChargerSlotEmpty");
            _s2Fill            = slot2.FindChild("Fill").GetComponent <Image>();
            _s2Fill.color      = _colorEmpty;
            _s2Fill.fillAmount = 0f;
            #endregion

            #region Slot3
            var slot3 = main.FindChild("Battery_3")?.gameObject;
            if (slot3 == null)
            {
                QuickLogger.Error("Battery_3 cannot be found");
                return(false);
            }

            _s3Percent         = slot3.FindChild("percentage").GetComponent <Text>();
            _s3Percent.text    = Language.main.Get("ChargerSlotEmpty");
            _s3Fill            = slot3.FindChild("Fill").GetComponent <Image>();
            _s3Fill.color      = _colorEmpty;
            _s3Fill.fillAmount = 0f;
            #endregion

            #region Slot4
            var slot4 = main.FindChild("Battery_4")?.gameObject;
            if (slot4 == null)
            {
                QuickLogger.Error("Battery_4 cannot be found");
                return(false);
            }

            _s4Percent         = slot4.FindChild("percentage").GetComponent <Text>();
            _s4Percent.text    = Language.main.Get("ChargerSlotEmpty");
            _s4Fill            = slot4.FindChild("Fill").GetComponent <Image>();
            _s4Fill.color      = _colorEmpty;
            _s4Fill.fillAmount = 0f;
            #endregion

            return(true);
        }
Esempio n. 6
0
        private static void PatchEasyCraft(Harmony harmony)
        {
            var isEasyCraftInstalled = QModServices.Main.ModPresent("EasyCraft");

            if (isEasyCraftInstalled)
            {
                QuickLogger.Debug("EasyCraft is installed");

                var easyCraftClosestItemContainersType = Type.GetType("EasyCraft.ClosestItemContainers, EasyCraft");
                var easyCraftMainType     = Type.GetType("EasyCraft.Main, EasyCraft");
                var easyCraftSettingsType = Type.GetType("EasyCraft.Settings, EasyCraft");

                if (easyCraftMainType != null)
                {
                    QuickLogger.Debug("Got EasyCraft Main Type");
                    EasyCraftSettingsInstance = easyCraftMainType
                                                .GetField("settings", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null);
                    if (EasyCraftSettingsInstance != null)
                    {
                        QuickLogger.Debug("Got EasyCraft Settings Field Info");
                        if (easyCraftSettingsType != null)
                        {
                            QuickLogger.Debug("Got EasyCraft Settings type");

                            QuickLogger.Debug($"Got EasyCraft Settings type: {easyCraftSettingsType.Name}");
                            var autoCraft = easyCraftSettingsType.GetField("autoCraft").GetValue(EasyCraftSettingsInstance);
                            UseStorage = easyCraftSettingsType.GetField("useStorage");
                            var returnSurplus = easyCraftSettingsType.GetField("returnSurplus")
                                                .GetValue(EasyCraftSettingsInstance);
                        }
                    }
                }


                if (easyCraftClosestItemContainersType != null)
                {
                    QuickLogger.Debug("Got EasyCraft Type");
                    var destroyItemMethodInfo    = easyCraftClosestItemContainersType.GetMethod("DestroyItem");
                    var getPickupCountMethodInfo = easyCraftClosestItemContainersType.GetMethod("GetPickupCount");

                    if (destroyItemMethodInfo != null)
                    {
                        QuickLogger.Debug("Got EasyCraft DestroyItem Method");
                        var postfix = typeof(EasyCraft_Patch).GetMethod("DestroyItem");
                        harmony.Patch(destroyItemMethodInfo, null, new HarmonyMethod(postfix));
                    }

                    if (getPickupCountMethodInfo != null)
                    {
                        QuickLogger.Debug("Got EasyCraft GetPickupCount Method");
                        var postfix = typeof(EasyCraft_Patch).GetMethod("GetPickupCount");
                        harmony.Patch(getPickupCountMethodInfo, null, new HarmonyMethod(postfix));
                    }
                }
                else
                {
                    QuickLogger.Error("Failed to get EasyCraft Type");
                }
            }
            else
            {
                QuickLogger.Debug("EasyCraft  not installed");
            }
        }
Esempio n. 7
0
        public override GameObject GetGameObject()
        {
            try
            {
                if (GetPrefabs())
                {
                    var prefab = GameObject.Instantiate(Prefab);

                    //Scale the object
                    prefab.transform.localScale += new Vector3(0.24f, 0.24f, 0.24f);

                    var size   = new Vector3(2.493512f, 1.875936f, 1.439421f);
                    var center = new Vector3(0.07963049f, 1.088284f, 0f);

                    GameObjectHelpers.AddConstructableBounds(prefab, size, center);

                    var model = prefab.FindChild("model");

                    //========== Allows the building animation and material colors ==========//
                    Shader     shader     = Shader.Find("MarmosetUBER");
                    Renderer[] renderers  = prefab.GetComponentsInChildren <Renderer>();
                    SkyApplier skyApplier = prefab.EnsureComponent <SkyApplier>();
                    skyApplier.renderers = renderers;
                    skyApplier.anchorSky = Skies.Auto;
                    //========== Allows the building animation and material colors ==========//

                    // Add large world entity ALLOWS YOU TO SAVE ON TERRAIN
                    var lwe = prefab.AddComponent <LargeWorldEntity>();
                    lwe.cellLevel = LargeWorldEntity.CellLevel.Far;

                    // Add constructible
                    var constructable = prefab.AddComponent <Constructable>();

                    constructable.allowedOutside          = true;
                    constructable.allowedInBase           = true;
                    constructable.allowedOnGround         = true;
                    constructable.allowedOnWall           = false;
                    constructable.rotationEnabled         = true;
                    constructable.allowedOnCeiling        = false;
                    constructable.allowedInSub            = false;
                    constructable.allowedOnConstructables = false;
                    constructable.model    = model;
                    constructable.techType = TechType;



                    PrefabIdentifier prefabID = prefab.AddComponent <PrefabIdentifier>();
                    prefabID.ClassId = ClassID;

                    //AddBubbles(prefab);

                    PowerRelay solarPowerRelay = CraftData.GetPrefabForTechType(TechType.SolarPanel).GetComponent <PowerRelay>();

                    var ps = prefab.AddComponent <PowerSource>();
                    ps.maxPower = 500f;

                    var pFX = prefab.AddComponent <PowerFX>();
                    pFX.vfxPrefab   = solarPowerRelay.powerFX.vfxPrefab;
                    pFX.attachPoint = prefab.transform;

                    var pr = prefab.AddComponent <PowerRelay>();
                    pr.powerFX             = pFX;
                    pr.maxOutboundDistance = 15;
                    pr.internalPowerSource = ps;

                    prefab.AddComponent <TechTag>().type = TechType;
                    prefab.AddComponent <AlterraGenController>();


                    Resources.UnloadAsset(solarPowerRelay);

                    //Apply the glass shader here because of autosort lockers for some reason doesnt like it.
                    MaterialHelpers.ApplyGlassShaderTemplate(prefab, "_glass", Mod.ModName);
                    return(prefab);
                }
            }
            catch (Exception e)
            {
                QuickLogger.Error(e.Message);
            }

            return(null);
        }
        public override bool FindAllComponents()
        {
            try
            {
                if (_isInitialized)
                {
                    return(true);
                }
                #region Canvas
                var canvasGameObject = gameObject.GetComponentInChildren <Canvas>()?.gameObject;

                if (canvasGameObject == null)
                {
                    QuickLogger.Error("Canvas cannot be found");
                    return(false);
                }
                #endregion

                #region Home
                var home = InterfaceHelpers.FindGameObject(canvasGameObject, "Home");
                #endregion

                #region Amount
                _amountOfPodsCount = InterfaceHelpers.FindGameObject(home, "AmountOfPodsCount")?.GetComponent <Text>();
                #endregion

                #region GasPodButton
                var gasPodButtonObj = InterfaceHelpers.FindGameObject(home, "GasPodButton");

                InterfaceHelpers.CreateButton(gasPodButtonObj, "GasPodBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, Color.black, Color.white, MAX_INTERACTION_DISTANCE, GaspodCollectorBuildable.TakeGaspod());

                var image   = gasPodButtonObj.transform.Find("Image");
                var guiIcon = image.gameObject.EnsureComponent <uGUI_Icon>();
                guiIcon.sprite = SpriteManager.Get(TechType.GasPod);

                #endregion

                #region DumpBTNButton
                var dumpBTNButtonObj = InterfaceHelpers.FindGameObject(home, "DumpBTN");

                InterfaceHelpers.CreateButton(dumpBTNButtonObj, "DumpBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, Color.black, Color.white, MAX_INTERACTION_DISTANCE, GaspodCollectorBuildable.DumpPull(), GaspodCollectorBuildable.DumpMessage());
                #endregion

                #region Messages
                InterfaceHelpers.FindGameObject(home, "AmountOfPods").GetComponent <Text>().text = GaspodCollectorBuildable.AmountOfPodsMessage();
                InterfaceHelpers.FindGameObject(home, "ClickToTake").GetComponent <Text>().text  = GaspodCollectorBuildable.InstructionsMessage();
                InterfaceHelpers.FindGameObject(home, "Battery (1)").FindChild("Battery Label").GetComponent <Text>().text = $"{GaspodCollectorBuildable.Battery()} 1";
                InterfaceHelpers.FindGameObject(home, "Battery (2)").FindChild("Battery Label").GetComponent <Text>().text = $"{GaspodCollectorBuildable.Battery()} 2";
                #endregion

                #region ColorPicker Button

                var colorBTN = InterfaceHelpers.FindGameObject(home, "ColorBTN");

                InterfaceHelpers.CreateButton(colorBTN, "ColorBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, _startColor, _hoverColor, MAX_INTERACTION_DISTANCE, GaspodCollectorBuildable.ColorPicker());

                #endregion

                #region Battery Button

                var batteryBTN = InterfaceHelpers.FindGameObject(home, "BatteryBTN").FindChild("Fill");

                InterfaceHelpers.CreateButton(batteryBTN, "BatteryBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, _greenColor, _fireBrickColor, MAX_INTERACTION_DISTANCE, GaspodCollectorBuildable.BatteryReceptacle());

                #endregion

                #region ColorPicker

                var colorPicker = InterfaceHelpers.FindGameObject(canvasGameObject, "ColorPicker");
                #endregion

                #region Color Paginator
                var _colorPaginator = InterfaceHelpers.FindGameObject(colorPicker, "Paginator");
                #endregion

                #region Color Grid
                var _colorGrid = InterfaceHelpers.FindGameObject(colorPicker, "Grid");
                #endregion

                #region ColorPage
                _colorPage.SetupGrid(66, GaspodCollectorBuildable.ColorItemPrefab, _colorGrid, _colorPaginator.GetComponent <Text>(), OnButtonClick);
                #endregion

                #region Prev Color Button
                var prevColorBtn = InterfaceHelpers.FindGameObject(colorPicker, "PrevBTN");

                InterfaceHelpers.CreatePaginator(prevColorBtn, -1, _colorPage.ChangeColorPageBy, _startColor, _hoverColor);
                #endregion

                #region Next Color Button
                var nextColorBtn = InterfaceHelpers.FindGameObject(colorPicker, "NextBTN");

                InterfaceHelpers.CreatePaginator(nextColorBtn, 1, _colorPage.ChangeColorPageBy, _startColor, _hoverColor);
                #endregion

                #region HomeButton
                var homeBTN = InterfaceHelpers.FindGameObject(colorPicker, "HomeBTN");

                InterfaceHelpers.CreateButton(homeBTN, "HomeBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, _startColor, _hoverColor, MAX_INTERACTION_DISTANCE, GaspodCollectorBuildable.GoHome());

                #endregion

                #region Batteries

                var b1 = InterfaceHelpers.FindGameObject(home, "Battery (1)");
                var b2 = InterfaceHelpers.FindGameObject(home, "Battery (2)");

                _b1Fill = InterfaceHelpers.FindGameObject(b1, "Fill")?.GetComponent <Image>();
                _b2Fill = InterfaceHelpers.FindGameObject(b2, "Fill")?.GetComponent <Image>();

                _b1Amount = InterfaceHelpers.FindGameObject(b1, "Amount")?.GetComponent <Text>();
                _b2Amount = InterfaceHelpers.FindGameObject(b2, "Amount")?.GetComponent <Text>();

                #endregion

                return(true);
            }
            catch (Exception e)
            {
                QuickLogger.Error <GasopodCollectorDisplayManager>($"{e.Message}\n{e.StackTrace}");
                return(false);
            }
        }
Esempio n. 9
0
        public override bool FindAllComponents()
        {
            try
            {
                #region Canvas
                var canvasGameObject = gameObject.GetComponentInChildren <Canvas>()?.gameObject;

                if (canvasGameObject == null)
                {
                    QuickLogger.Error("Canvas cannot be found");
                    return(false);
                }
                #endregion

                #region Home
                var home = InterfaceHelpers.FindGameObject(canvasGameObject, "Home");
                #endregion

                #region NotOnBase
                var notOnbase = InterfaceHelpers.FindGameObject(canvasGameObject, "NotOnBase")?.GetComponentInChildren <Text>();
                if (notOnbase != null)
                {
                    notOnbase.text = HydroponicHarvestersBuildable.NotOnBaseMessage();
                }
                #endregion

                #region Controls
                var controls = InterfaceHelpers.FindGameObject(home, "Controls");
                #endregion

                #region LightButton
                var lightBTN = InterfaceHelpers.FindGameObject(controls, "LightBTN");

                InterfaceHelpers.CreateButton(lightBTN, "LightBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, _startColor, _hoverColor, MAX_INTERACTION_DISTANCE, HydroponicHarvestersBuildable.ToggleLightMessage());

                var ligtIcon = InterfaceHelpers.FindGameObject(lightBTN, "Icon").AddComponent <uGUI_Icon>();
                ligtIcon.sprite = SpriteManager.Get(TechType.Flashlight);
                #endregion

                #region DNA Counter
                _dnaCounter = InterfaceHelpers.FindGameObject(home, "Limit")?.GetComponent <Text>();
                #endregion

                #region Power Usage
                _powerUsage = InterfaceHelpers.FindGameObject(home, "PowerUsage")?.GetComponent <Text>();
                #endregion

                #region ItemsCount
                _itemsCount = InterfaceHelpers.FindGameObject(home, "ItemsCount")?.GetComponent <Text>();
                #endregion

                #region TimeLeft
                _timeLeft = InterfaceHelpers.FindGameObject(home, "TimeLeft")?.GetComponent <Text>();
                #endregion

                #region CleanerButton
                var cleanerButtonObj = InterfaceHelpers.FindGameObject(controls, "CleanerBTN");

                var cleanerIcon = InterfaceHelpers.FindGameObject(cleanerButtonObj, "Icon").AddComponent <uGUI_Icon>();
                cleanerIcon.sprite = ImageUtils.LoadSpriteFromFile(Path.Combine(Mod.GetAssetFolder(), "FloraKleen.png"));

                InterfaceHelpers.CreateButton(cleanerButtonObj, "CleanerBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, _startColor, _hoverColor, MAX_INTERACTION_DISTANCE, HydroponicHarvestersBuildable.CleanerBTNMessage());
                #endregion

                #region DumpBTNButton
                var dumpBTNButtonObj = InterfaceHelpers.FindGameObject(controls, "DumpBTN");

                InterfaceHelpers.CreateButton(dumpBTNButtonObj, "DumpBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, _startColor, _hoverColor, MAX_INTERACTION_DISTANCE, HydroponicHarvestersBuildable.DumpBTNMessage());
                #endregion

                #region ColorPicker Button

                var colorBTN = InterfaceHelpers.FindGameObject(controls, "ColorBTN");

                InterfaceHelpers.CreateButton(colorBTN, "ColorBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, _startColor, _hoverColor, MAX_INTERACTION_DISTANCE, HydroponicHarvestersBuildable.ColorPickerBTNMessage());

                #endregion

                #region ColorPicker

                var colorPicker = InterfaceHelpers.FindGameObject(canvasGameObject, "ColorPicker");
                #endregion

                #region ColorPage
                _colorPage.SetupGrid(50, HydroponicHarvestersModelPrefab.ColorItemPrefab, colorPicker, OnButtonClick, _startColor, _hoverColor);
                #endregion

                #region PowerLevelButton
                var powerLevelBTN = InterfaceHelpers.FindGameObject(controls, "PowerLevelBTN");
                _powerLevelText = InterfaceHelpers.FindGameObject(powerLevelBTN, "Text").GetComponent <Text>();

                InterfaceHelpers.CreateButton(powerLevelBTN, "PowerLevelBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, _startColor, _hoverColor, MAX_INTERACTION_DISTANCE, HydroponicHarvestersBuildable.PowerLevelBTNMessage());

                #endregion

                #region DNA

                _dnaGrid = _mono.gameObject.AddComponent <GridHelper>();
                _dnaGrid.OnLoadDisplay += OnLoadDnaGrid;
                _dnaGrid.Setup(4, HydroponicHarvestersModelPrefab.ItemPrefab, home, _startColor, _hoverColor, OnButtonClick, 5, string.Empty, string.Empty, "Slots", string.Empty, string.Empty);
                #endregion

                #region ModeButton
                var modeBTN = InterfaceHelpers.FindGameObject(controls, "ModeBTN");

                _modeIcon        = InterfaceHelpers.FindGameObject(modeBTN, "Icon").AddComponent <uGUI_Icon>();
                _modeIcon.sprite = MelonIconSprite;

                InterfaceHelpers.CreateButton(modeBTN, "ModeBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, _startColor, _hoverColor, MAX_INTERACTION_DISTANCE, HydroponicHarvestersBuildable.ModeBTNMessage());

                #endregion
            }
            catch (Exception e)
            {
                QuickLogger.Error($"Message: {e.Message} || StackTrace: {e.StackTrace}");
                return(false);
            }

            return(true);
        }
        private void AddComponentsToPrefab()
        {
            var go = FcAssetBundlesService.PublicAPI.GetAssetBundleByName(FcAssetBundlesService.PublicAPI.GlobalBundleName);

            if (go != null)
            {
                OriginalPrefab = go.LoadAsset <GameObject>("FloraKleen_Bottle");
            }
            else
            {
                QuickLogger.Error <FloraKleenPatcher>("Couldnt find bundle in the bundle service.");
                return;
            }

            if (OriginalPrefab == null)
            {
                QuickLogger.Error("Freon prefab not found");
                return;
            }

            var rigidbody = OriginalPrefab.AddComponent <Rigidbody>();

            // Make the object drop slowly in water
            var wf = OriginalPrefab.AddComponent <WorldForces>();

            wf.underwaterGravity = 0;
            wf.underwaterDrag    = 10f;
            wf.enabled           = true;
            wf.useRigidbody      = rigidbody;

            // Add fabricating animation
            var fabricatingA = OriginalPrefab.AddComponent <VFXFabricating>();

            fabricatingA.localMinY   = -0.1f;
            fabricatingA.localMaxY   = 0.6f;
            fabricatingA.posOffset   = new Vector3(0f, 0f, 0f);
            fabricatingA.eulerOffset = new Vector3(0f, 0f, 0f);
            fabricatingA.scaleFactor = 1.0f;

            //// Set proper shaders (for crafting animation)
            Shader marmosetUber = Shader.Find("MarmosetUBER");
            var    renderer     = OriginalPrefab.GetComponentInChildren <Renderer>();

            renderer.material.shader = marmosetUber;

            // Update sky applier
            var applier = OriginalPrefab.GetComponent <SkyApplier>();

            if (applier == null)
            {
                applier = OriginalPrefab.AddComponent <SkyApplier>();
            }
            applier.renderers = new Renderer[] { renderer };
            applier.anchorSky = Skies.Auto;

            // We can pick this item
            var pickupable = OriginalPrefab.AddComponent <Pickupable>();

            pickupable.isPickupable = true;
            pickupable.randomizeRotationWhenDropped = true;

            // Set collider
            var collider = OriginalPrefab.GetComponent <BoxCollider>();

            collider.enabled   = true;
            collider.isTrigger = true;

            var placeTool = OriginalPrefab.AddComponent <PlaceTool>();

            placeTool.allowedInBase          = true;
            placeTool.allowedOnBase          = false;
            placeTool.allowedOnCeiling       = false;
            placeTool.allowedOnConstructable = true;
            placeTool.allowedOnGround        = true;
            placeTool.allowedOnRigidBody     = true;
            placeTool.allowedOnWalls         = false;
            placeTool.allowedOutside         = false;
            placeTool.rotationEnabled        = true;
            placeTool.enabled              = true;
            placeTool.hasAnimations        = false;
            placeTool.hasBashAnimation     = false;
            placeTool.hasFirstUseAnimation = false;
            placeTool.mainCollider         = collider;
            placeTool.pickupable           = pickupable;
            placeTool.drawTime             = 0.5f;
            placeTool.dropTime             = 1;
            placeTool.holsterTime          = 0.35f;

            OriginalPrefab.EnsureComponent <FCSTechFabricatorTag>();

            ApplyShaders();
        }
        internal void Register()
        {
            HydroponicHarvestersModelPrefab.GetPrefabs();

            _prefab = HydroponicHarvestersModelPrefab.BottlePrefab;

            if (_prefab == null)
            {
                QuickLogger.Error("FloraKleen prefab is null");
                return;
            }

            GameObjectHelpers.AddConstructableBounds(_prefab, new Vector3(0.1969692f, 0.25098f, 0.1916926f), new Vector3(0, -0.01675579f, 0));

            QuickLogger.Debug("Added Constructable Bounds");

            //Make the rigid body isKinematic so it doesnt shake the cyclops
            var rb = _prefab.AddComponent <Rigidbody>();

            rb.isKinematic = true;
            QuickLogger.Debug("Added Rigid Body");

            // Set collider
            var collider = _prefab.GetComponentInChildren <Collider>();

            collider.enabled   = true;
            collider.isTrigger = true;
            QuickLogger.Debug("Added Getting Collider");


            // Make the object drop slowly in water
            var wf = _prefab.EnsureComponent <WorldForces>();

            wf.underwaterGravity = 0;
            wf.underwaterDrag    = 10f;
            wf.enabled           = true;
            QuickLogger.Debug("Ensuring World Forces");


            // Add fabricating animation
            var fabricatingA = _prefab.EnsureComponent <VFXFabricating>();

            fabricatingA.localMinY   = -0.1f;
            fabricatingA.localMaxY   = 0.6f;
            fabricatingA.posOffset   = new Vector3(0f, 0f, 0f);
            fabricatingA.eulerOffset = new Vector3(0f, 0f, 0f);
            fabricatingA.scaleFactor = 1.0f;
            QuickLogger.Debug("Ensuring VFXFabricating");

            //// Set proper shaders (for crafting animation)
            var renderer = _prefab.GetComponentInChildren <Renderer>();

            QuickLogger.Debug("Getting Renderer");

            // Update sky applier
            var applier = _prefab.EnsureComponent <SkyApplier>();

            applier.renderers = new Renderer[] { renderer };
            applier.anchorSky = Skies.Auto;
            QuickLogger.Debug("Ensuring SkyApplier");

            // We can pick this item
            var pickupable = _prefab.EnsureComponent <Pickupable>();

            pickupable.isPickupable = true;
            pickupable.randomizeRotationWhenDropped = true;
            QuickLogger.Debug("Ensuring Pickupable");

            //Allow this kit to be placed on surfaces in these situations
            var placeTool = _prefab.EnsureComponent <PlaceTool>();

            placeTool.allowedInBase          = true;
            placeTool.allowedOnBase          = false;
            placeTool.allowedOnCeiling       = false;
            placeTool.allowedOnConstructable = true;
            placeTool.allowedOnGround        = true;
            placeTool.allowedOnRigidBody     = true;
            placeTool.allowedOnWalls         = false;
            placeTool.allowedOutside         = false;
            placeTool.rotationEnabled        = true;
            placeTool.enabled              = true;
            placeTool.hasAnimations        = false;
            placeTool.hasBashAnimation     = false;
            placeTool.hasFirstUseAnimation = false;
            placeTool.mainCollider         = collider;
            placeTool.pickupable           = pickupable;
            placeTool.drawTime             = 0.5f;
            placeTool.dropTime             = 1;
            placeTool.holsterTime          = 0.35f;
            QuickLogger.Debug("Ensuring PlaceTool");
        }
Esempio n. 12
0
        /// <summary>
        /// Gets the prefabs from the bundle
        /// </summary>
        /// <returns></returns>
        internal static bool GetPrefabs()
        {
            if (!_initialized)
            {
                QuickLogger.Debug("GetPrefabs");
                AssetBundle assetBundle = AssetHelper.Asset(Mod.ModFolderName, Mod.BundleName);

                //If the result is null return false.
                if (assetBundle == null)
                {
                    QuickLogger.Error($"AssetBundle is Null!");
                    return(false);
                }

                QuickLogger.Debug($"AssetBundle Set");

                //We have found the asset bundle and now we are going to continue by looking for the model.
                GameObject prefab       = assetBundle.LoadAsset <GameObject>(Mod.ModName);
                GameObject screenPrefab = assetBundle.LoadAsset <GameObject>(Mod.ModScreenName);

                //If the prefab isn't null lets add the shader to the materials
                if (prefab != null)
                {
                    ApplyShaders(prefab, assetBundle);
                    OxstationPrefab = prefab;

                    QuickLogger.Debug($"Oxstation Prefab Found!");
                }
                else
                {
                    QuickLogger.Error($"Oxstation Prefab Not Found!");
                    return(false);
                }

                //If the prefab isn't null lets add the shader to the materials
                if (screenPrefab != null)
                {
                    ApplyShaders(screenPrefab, assetBundle);
                    OxstationScreenPrefab = screenPrefab;

                    QuickLogger.Debug($"Oxstation Screen Prefab Found!");
                }
                else
                {
                    QuickLogger.Error($"Oxstation Screen Prefab Not Found!");
                    return(false);
                }

                GameObject item = assetBundle.LoadAsset <GameObject>("OxStation_Item");

                if (item != null)
                {
                    ItemPrefab = item;
                }
                else
                {
                    QuickLogger.Error($"OxStation_Item Not Found!");
                    return(false);
                }

                _initialized = true;
            }

            return(true);
        }
Esempio n. 13
0
        public override void Initialize()
        {
            _prefabIdentifier = GetComponent <PrefabIdentifier>().Id ?? GetComponentInParent <PrefabIdentifier>().Id;
            _spinTitle        = Animator.StringToHash("SpinTitle");

            var target = gameObject.FindChild("targetPos");

            if (target == null)
            {
                QuickLogger.Error("Cant find trigger targetPos");
                return;
            }

            if (_buildable == null)
            {
                _buildable = GetComponentInParent <Constructable>() ?? GetComponent <Constructable>();
            }

            if (ColorManager == null)
            {
                ColorManager = new ColorManager();
            }

            ColorManager.Initialize(gameObject, QuantumTeleporterBuildable.BodyMaterial);

            TeleportManager.Initialize();

            if (NameController == null)
            {
                NameController = gameObject.EnsureComponent <NameController>();
            }


            if (AnimationManager == null)
            {
                AnimationManager = gameObject.GetComponent <AnimationManager>();
            }

            if (DisplayManager == null)
            {
                DisplayManager = gameObject.GetComponent <QTDisplayManager>();
            }

            if (SubRoot == null)
            {
                SubRoot = GetComponentInParent <SubRoot>();
            }

            if (Manager == null)
            {
                Manager = BaseManager.FindManager(SubRoot);
            }

            if (AudioManager == null)
            {
                AudioManager = new AudioManager(gameObject.GetComponent <FMOD_CustomLoopingEmitter>());
            }

            AudioManager.LoadFModAssets("/env/use_teleporter_use_loop", "use_teleporter_use_loop");

            if (PowerManager == null)
            {
                PowerManager = new QTPowerManager(this);
            }

            //var pingInstance = gameObject.GetComponent<PingInstance>() ??
            //                   gameObject.GetComponentInChildren<PingInstance>();

            //if (QTPingManager == null)
            //    QTPingManager = new QTPingManager();

            //QTPingManager.Initialize(pingInstance);

            DisplayManager.Setup(this);

            NameController.Initialize(QuantumTeleporterBuildable.Submit(), Mod.FriendlyName);
            NameController.SetCurrentName(GetNewName(), DisplayManager.GetNameTextBox());
            NameController.OnLabelChanged += OnLabelChanged;
            Manager.OnBaseUnitsChanged    += OnBaseUnitsChanged;
            AddToManager();

            AnimationManager.SetBoolHash(_spinTitle, true);

            if (QTDoorManager == null)
            {
                QTDoorManager = gameObject.FindChild("model").FindChild("anims").FindChild("door").AddComponent <QTDoorManager>();
            }
            QTDoorManager.Initalize(this);

            var trigger = target.AddComponent <QTTriggerBoxManager>();

            trigger.OnPlayerExit += QTDoorManager.OnPlayerExit;
            _target = target.transform;

            IsInitialized = true;
        }
        public override bool FindAllComponents()
        {
            try
            {
                #region Canvas
                var canvasGameObject = gameObject.GetComponentInChildren <Canvas>()?.gameObject;

                if (canvasGameObject == null)
                {
                    QuickLogger.Error("Canvas cannot be found");
                    return(false);
                }
                #endregion

                #region Home
                var home = InterfaceHelpers.FindGameObject(canvasGameObject, "Home");
                #endregion

                #region Powered Off Page
                var poweredOffPage = InterfaceHelpers.FindGameObject(canvasGameObject, "PoweredOff");
                #endregion

                #region ColorPickerPage

                var colorPickerPage = InterfaceHelpers.FindGameObject(canvasGameObject, "ColorPage");

                #endregion

                #region OpenRackBTNButton
                var openRackBTN = InterfaceHelpers.FindGameObject(home, "OpenBTN");

                InterfaceHelpers.CreateButton(openRackBTN, "OpenBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, _startColor, _hoverColor, MAX_INTERACTION_DISTANCE, AuxPatchers.OpenServerRackPage());
                #endregion

                #region CloseRackBTNButton
                var closeBTN = InterfaceHelpers.FindGameObject(home, "CloseBTN");

                InterfaceHelpers.CreateButton(closeBTN, "CloseBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, _startColor, _hoverColor, MAX_INTERACTION_DISTANCE, AuxPatchers.CloseServerRackPage());
                #endregion

                #region ColorPickerBTN
                var colorPickerBTN = InterfaceHelpers.FindGameObject(home, "ColorPicker");

                InterfaceHelpers.CreateButton(colorPickerBTN, "ColorPickerBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, _startColor, _hoverColor, MAX_INTERACTION_DISTANCE, AuxPatchers.ColorPage());
                #endregion

                #region ColorPickerMainHomeBTN
                var colorPickerHomeBTN = InterfaceHelpers.FindGameObject(colorPickerPage, "HomeBTN");

                InterfaceHelpers.CreateButton(colorPickerHomeBTN, "HomeBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, _startColor, _hoverColor, MAX_INTERACTION_DISTANCE, AuxPatchers.GoToHome());
                #endregion

                #region ColorPage
                _colorPickerPage.SetupGrid(20, DSSModelPrefab.ColorItemPrefab, colorPickerPage, OnButtonClick, _startColor, _hoverColor);
                #endregion

                #region AddServerBTN
                var addServerBTN = InterfaceHelpers.FindGameObject(home, "AddServerBTN");

                InterfaceHelpers.CreateButton(addServerBTN, "AddServerBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, _startColor, _hoverColor, MAX_INTERACTION_DISTANCE, AuxPatchers.AddServer());
                #endregion

                _counter = InterfaceHelpers.FindGameObject(home, "Counter")?.GetComponent <Text>();

                var poweredOffMessage = InterfaceHelpers.FindGameObject(poweredOffPage, "Text")?.GetComponent <Text>();
                poweredOffMessage.text = AuxPatchers.PoweredOff();

                return(true);
            }
            catch (Exception e)
            {
                QuickLogger.Error($"{e.Message} || {e.StackTrace}");
                return(false);
            }
        }
Esempio n. 15
0
        public override GameObject GetGameObject()
        {
            try
            {
                if (_prefab == null)
                {
                    QuickLogger.Error("Bottle Prefab is null", true);
                    return(null);
                }
                var prefab = GameObject.Instantiate(_prefab);

                prefab.name = this.PrefabFileName;

                PrefabIdentifier prefabID = prefab.EnsureComponent <PrefabIdentifier>();
                prefabID.ClassId = this.ClassID;

                var techTag = prefab.EnsureComponent <TechTag>();
                techTag.type = TechType;

                //Add the FCSTechFabricatorTag component
                prefab.AddComponent <FCSTechFabricatorTag>();

                // Set collider
                var collider = prefab.GetComponentInChildren <Collider>();
                collider.enabled   = true;
                collider.isTrigger = true;
                QuickLogger.Debug("Added Getting Collider");

                // We can pick this item
                var pickupable = prefab.EnsureComponent <Pickupable>();
                pickupable.isPickupable = true;
                pickupable.randomizeRotationWhenDropped = true;
                QuickLogger.Debug("Ensuring Pickupable");

                //Allow this kit to be placed on surfaces in these situations
                var placeTool = prefab.EnsureComponent <PlaceTool>();
                placeTool.allowedInBase          = true;
                placeTool.allowedOnBase          = false;
                placeTool.allowedOnCeiling       = false;
                placeTool.allowedOnConstructable = true;
                placeTool.allowedOnGround        = true;
                placeTool.allowedOnRigidBody     = true;
                placeTool.allowedOnWalls         = false;
                placeTool.allowedOutside         = false;
                placeTool.rotationEnabled        = true;
                placeTool.enabled              = true;
                placeTool.hasAnimations        = false;
                placeTool.hasBashAnimation     = false;
                placeTool.hasFirstUseAnimation = false;
                placeTool.mainCollider         = collider;
                placeTool.pickupable           = pickupable;
                placeTool.drawTime             = 0.5f;
                placeTool.dropTime             = 1;
                placeTool.holsterTime          = 0.35f;
                QuickLogger.Debug("Ensuring PlaceTool");


                MaterialHelpers.ApplyAlphaShader(HydroponicHarvestersModelPrefab.BodyMaterial, prefab);

                return(prefab);
            }
            catch (Exception e)
            {
                QuickLogger.Error(e.Message);
                return(null);
            }
        }
Esempio n. 16
0
        public bool GetPrefabs()
        {
            QuickLogger.Debug("GetPrefabs");
            AssetBundle assetBundle = AssetHelper.Asset(Mod.ModFolderName, Mod.BundleName);

            //If the result is null return false.
            if (assetBundle == null)
            {
                QuickLogger.Error($"AssetBundle is Null!");
                return(false);
            }

            _assetBundle = assetBundle;

            QuickLogger.Debug($"AssetBundle Set");

            //We have found the asset bundle and now we are going to continue by looking for the model.
            GameObject prefab = assetBundle.LoadAsset <GameObject>(Mod.GameObjectName);

            //If the prefab isn't null lets add the shader to the materials
            if (prefab != null)
            {
                _Prefab = prefab;

                //Lets apply the material shader
                ApplyShaders(prefab);

                QuickLogger.Debug($"{this.FriendlyName} Prefab Found!");
            }
            else
            {
                QuickLogger.Error($"{this.FriendlyName} Prefab Not Found!");
                return(false);
            }

            var itemPrefab = assetBundle.LoadAsset <GameObject>("Item");

            //If the prefab isn't null lets add the shader to the materials
            if (itemPrefab != null)
            {
                ItemPrefab = itemPrefab;

                QuickLogger.Debug($"{this.FriendlyName} Item Prefab Found!");
            }
            else
            {
                QuickLogger.Error($"{this.FriendlyName} Item Prefab Not Found!");
                return(false);
            }

            var colorItemPrefab = assetBundle.LoadAsset <GameObject>("ColorItem");

            //If the prefab isn't null lets add the shader to the materials
            if (colorItemPrefab != null)
            {
                ColorItemPrefab = colorItemPrefab;

                QuickLogger.Debug($"{this.FriendlyName} Color Item Prefab Found!");
            }
            else
            {
                QuickLogger.Error($"{this.FriendlyName} Color Item Prefab Not Found!");
                return(false);
            }

            return(true);
        }
        private bool FindAllComponents()
        {
            #region Canvas
            _canvasGameObject = this.gameObject.GetComponentInChildren <Canvas>()?.gameObject;
            if (_canvasGameObject == null)
            {
                QuickLogger.Error("Canvas not found.");
                return(false);
            }
            #endregion

            #region HandTarget

            var storage = _canvasGameObject.FindChild("HandTarget");

            if (storage == null)
            {
                QuickLogger.Error("Storage not found.");
                return(false);
            }


            var storageTarget = storage.AddComponent <InterfaceButton>();
            storageTarget.BtnName       = "StorageBTN";
            storageTarget.ButtonMode    = InterfaceButtonMode.None;
            storageTarget.OnButtonClick = OnButtonClick;
            storageTarget.TextLineOne   = GetLanguage(AMMiniMedBayBuildable.OpenStorageKey);
            storageTarget.Container     = _mono.Container;
            #endregion

            #region MainPage

            var mainPage = _canvasGameObject.FindChild("Main")?.gameObject;

            if (mainPage == null)
            {
                QuickLogger.Error("Main Page not found.");
                return(false);
            }
            #endregion

            #region Color Picker Page

            var colorPickerPage = _canvasGameObject.FindChild("ColorPicker")?.gameObject;

            if (colorPickerPage == null)
            {
                QuickLogger.Error("Color Picker Page not found.");
                return(false);
            }
            #endregion

            #region Power Page

            var powerPage = _canvasGameObject.FindChild("NoPower")?.gameObject;

            if (powerPage == null)
            {
                QuickLogger.Error("Power Page not found.");
                return(false);
            }
            #endregion

            #region Storage Text

            _storageTxt = _canvasGameObject.FindChild("StorageTXT").GetComponent <Text>();

            if (_storageTxt == null)
            {
                QuickLogger.Error("Storage Text not found.");
                return(false);
            }
            #endregion

            #region Heal Button

            _healButton = mainPage.FindChild("HealBTN")?.gameObject;

            if (_healButton == null)
            {
                QuickLogger.Error("Heal button not found.");
                return(false);
            }

            var healBtn = _healButton.AddComponent <InterfaceButton>();
            healBtn.BtnName       = "HealBTN";
            healBtn.ButtonMode    = InterfaceButtonMode.Background;
            healBtn.OnButtonClick = OnButtonClick;
            healBtn.TextLineOne   = GetLanguage(AMMiniMedBayBuildable.HealKey);
            #endregion

            #region Home Button

            var homeButton = colorPickerPage.FindChild("Image")?.gameObject;

            if (homeButton == null)
            {
                QuickLogger.Error("Home Button Not Found not found.");
                return(false);
            }

            var homeBtn = homeButton.AddComponent <InterfaceButton>();
            homeBtn.BtnName       = "HomeBTN";
            homeBtn.ButtonMode    = InterfaceButtonMode.Background;
            homeBtn.OnButtonClick = OnButtonClick;
            homeBtn.TextLineOne   = GetLanguage(AMMiniMedBayBuildable.HomeKey);
            #endregion

            #region Color Picker Button

            var cPButton = mainPage.FindChild("Paint_Spray")?.gameObject;

            if (cPButton == null)
            {
                QuickLogger.Error("Color Picker Button not found.");
                return(false);
            }

            var cpBtn = cPButton.AddComponent <InterfaceButton>();
            cpBtn.BtnName       = "CPBTN";
            cpBtn.ButtonMode    = InterfaceButtonMode.Background;
            cpBtn.OnButtonClick = OnButtonClick;
            cpBtn.TextLineOne   = GetLanguage(AMMiniMedBayBuildable.ColorPickerKey);
            #endregion

            #region L Nav

            var lNavButton = colorPickerPage.FindChild("L_Nav")?.gameObject;

            if (lNavButton == null)
            {
                QuickLogger.Error("LNav button not found.");
                return(false);
            }

            var lNavBtn = lNavButton.AddComponent <PaginatorButton>();
            lNavBtn.AmountToChangePageBy = -1;
            lNavBtn.ChangePageBy         = ChangeColorPageBy;
            lNavBtn.HoverTextLineOne     = GetLanguage(AMMiniMedBayBuildable.OnHoverLPaginatorKey);
            #endregion

            #region R Nav

            var rNavButton = colorPickerPage.FindChild("R_Nav")?.gameObject;

            if (rNavButton == null)
            {
                QuickLogger.Error("RNav button not found.");
                return(false);
            }

            var rNavBtn = rNavButton.AddComponent <PaginatorButton>();
            rNavBtn.AmountToChangePageBy = 1;
            rNavBtn.ChangePageBy         = ChangeColorPageBy;
            rNavBtn.HoverTextLineOne     = GetLanguage(AMMiniMedBayBuildable.OnHoverRPaginatorKey);
            #endregion

            #region Page Number

            _colorPageNumber = colorPickerPage.FindChild("Text").GetComponent <Text>();
            if (_colorPageNumber == null)
            {
                QuickLogger.Error("Page Number not found");
                return(false);
            }
            #endregion

            #region Color Container

            _colorPageContainer = colorPickerPage.FindChild("Grid")?.gameObject;
            if (_colorPageContainer == null)
            {
                QuickLogger.Error("Color Grid not found");
                return(false);
            }
            #endregion

            #region Health Staus Text

            var health_LBL = mainPage.FindChild("Health_LBL").GetComponent <Text>();

            if (health_LBL == null)
            {
                QuickLogger.Error("Health Status label not found.");
                return(false);
            }

            health_LBL.text = GetLanguage(AMMiniMedBayBuildable.HealthStatusLBLKey);
            #endregion

            #region N2 Status Text

            _n2Status = mainPage.FindChild("N2TXT")?.gameObject;

            if (_n2Status == null)
            {
                QuickLogger.Error("N2 Status label not found.");
                return(false);
            }

            #endregion

            #region Health Text

            _healthPercentage = mainPage.FindChild("PlayerHealthTXT").GetComponent <Text>();

            if (_healthPercentage == null)
            {
                QuickLogger.Error("Player Health TXT label not found.");
                return(false);
            }

            #endregion

            #region No Power Text

            var noPowerText = powerPage.FindChild("NoPowerTxt").GetComponent <Text>();

            if (noPowerText == null)
            {
                QuickLogger.Error("No Power TXT label not found.");
                return(false);
            }

            noPowerText.text = GetLanguage(AMMiniMedBayBuildable.NoPowerKey);

            #endregion

            #region No Power Message

            var noPowerMessageText = powerPage.FindChild("MessageTXT").GetComponent <Text>();

            if (noPowerMessageText == null)
            {
                QuickLogger.Error("No Power Message TXT label not found.");
                return(false);
            }

            noPowerMessageText.text = GetLanguage(AMMiniMedBayBuildable.NoPowerMessage);

            #endregion

            return(true);
        }
        private bool GetPrefabs()
        {
            QuickLogger.Debug("GetPrefabs");
            AssetBundle assetBundle = AssetHelper.Asset(Mod.ModFolderName, Mod.BundleName);

            //If the result is null return false.
            if (assetBundle == null)
            {
                QuickLogger.Error($"AssetBundle is Null!");
                return(false);
            }

            AssetBundle = assetBundle;

            QuickLogger.Debug($"AssetBundle Set");

            //We have found the asset bundle and now we are going to continue by looking for the model.
            GameObject prefab = assetBundle.LoadAsset <GameObject>("AlterraDeepDriller");

            //If the prefab isn't null lets add the shader to the materials
            if (prefab != null)
            {
                _prefab = prefab;

                //Lets apply the material shader
                ApplyShaders(prefab);

                QuickLogger.Debug($"{this.FriendlyName} Prefab Found!");
            }
            else
            {
                QuickLogger.Error($"{this.FriendlyName} Prefab Not Found!");
                return(false);
            }

            //We have found the asset bundle and now we are going to continue by looking for the model.
            GameObject listItem = assetBundle.LoadAsset <GameObject>("ListButton");

            //If the prefab isn't null lets add the shader to the materials
            if (listItem != null)
            {
                ItemPrefab = listItem;

                QuickLogger.Debug("List item Prefab Found!");
            }
            else
            {
                QuickLogger.Error("List item Prefab Not Found!");
                return(false);
            }

            #region Battery Module
            //We have found the asset bundle and now we are going to continue by looking for the model.
            GameObject batteryModule = assetBundle.LoadAsset <GameObject>("Battery_Attachment");

            //If the prefab isn't null lets add the shader to the materials
            if (batteryModule != null)
            {
                ApplyShaders(batteryModule);

                BatteryModule = batteryModule;

                QuickLogger.Debug($"Battery Module Prefab Found!");
            }
            else
            {
                QuickLogger.Error($"Battery Module  Prefab Not Found!");
                return(false);
            }
            #endregion

            #region Solar Module
            //We have found the asset bundle and now we are going to continue by looking for the model.
            GameObject solarModule = assetBundle.LoadAsset <GameObject>("Solar_Panel_Attachment");

            //If the prefab isn't null lets add the shader to the materials
            if (solarModule != null)
            {
                ApplyShaders(solarModule);

                SolarModule = solarModule;

                QuickLogger.Debug($"Solar Module Prefab Found!");
            }
            else
            {
                QuickLogger.Error($"Solar Module  Prefab Not Found!");
                return(false);
            }
            #endregion

            #region Focus Module
            //We have found the asset bundle and now we are going to continue by looking for the model.
            GameObject focusModule = assetBundle.LoadAsset <GameObject>("Scanner_Screen_Attachment");

            //If the prefab isn't null lets add the shader to the materials
            if (focusModule != null)
            {
                ApplyShaders(focusModule);

                FocusModule = focusModule;

                QuickLogger.Debug($"Focus Module Prefab Found!");
            }
            else
            {
                QuickLogger.Error($"Solar Module  Prefab Not Found!");
                return(false);
            }
            #endregion

            return(true);
        }
        private bool FindAllComponents()
        {
            #region Speed Text

            _speedText = gameObject.FindChild("Speed").FindChild("Text")?.GetComponent <Text>();

            if (_speedText == null)
            {
                QuickLogger.Error("Speed Text not found.");
                return(false);
            }

            #endregion

            #region Depth Text

            _depthText = gameObject.FindChild("Depth").FindChild("Text")?.GetComponent <Text>();

            if (_depthText == null)
            {
                QuickLogger.Error("Depth Text not found.");
                return(false);
            }

            #endregion

            #region Health

            _health = gameObject.FindChild("Health")?.gameObject;

            if (_health == null)
            {
                QuickLogger.Error("Health not found.");
                return(false);
            }

            #endregion

            #region Health Label

            _healthLbl = _health.FindChild("Health_LBL")?.gameObject;

            if (_healthLbl == null)
            {
                QuickLogger.Error("Health Label not found.");
                return(false);
            }

            #endregion

            #region Health Text

            _healthText = _healthLbl?.GetComponent <Text>();

            if (_healthText == null)
            {
                QuickLogger.Error("Health Text not found.");
                return(false);
            }

            #endregion

            #region Health Color

            _healthColor = _healthText.color;

            if (_healthColor == null)
            {
                QuickLogger.Error("Health Color not found.");
                return(false);
            }

            #endregion

            #region Damaged

            _damaged = gameObject.FindChild("Damaged")?.gameObject;

            if (_damaged == null)
            {
                QuickLogger.Error("Damaged not found.");
                return(false);
            }


            #endregion

            #region Damaged Label

            _damagedLbl = _damaged.FindChild("DamagedLBL")?.gameObject;

            if (_damagedLbl == null)
            {
                QuickLogger.Error("Damaged Label not found.");
                return(false);
            }

            #endregion

            #region Damaged Label

            _damagedText = _damagedLbl.GetComponent <Text>();

            if (_damagedLbl == null)
            {
                QuickLogger.Error("Damaged Text not found.");
                return(false);
            }

            #endregion

            #region Ping BTN

            _pingBTN = gameObject.FindChild("PingBTN")?.gameObject;

            if (_pingBTN == null)
            {
                QuickLogger.Error("Ping BTN not found.");
                return(false);
            }

            _pingBTNText = _pingBTN?.GetComponentInChildren <Text>();

            if (_pingBTNText == null)
            {
                QuickLogger.Error("Ping BTN Text not found.");
                return(false);
            }

            var pingBTN = _pingBTN.AddComponent <InterfaceButton>();
            pingBTN.OnButtonClick    = Display.OnButtonClick;
            pingBTN.STARTING_COLOR   = new Color(0.06640625f, 0.62109375f, 0.8828125f);
            pingBTN.BtnName          = "PingBTN";
            pingBTN.ButtonMode       = InterfaceButtonMode.BackgroundScale;
            pingBTN.TextComponent    = _pingBTNText;
            pingBTN.IncreaseButtonBy = 0.013282f;
            pingBTN.Tag = this;
            #endregion

            #region Power BTN

            PowerBTN = gameObject.FindChild("PowerBTN")?.gameObject;

            if (PowerBTN == null)
            {
                QuickLogger.Error("Power BTN not found.");
                return(false);
            }


            _powerBTNText = PowerBTN.GetComponentInChildren <Text>();

            if (_powerBTNText == null)
            {
                QuickLogger.Error("Power BTN Text not found.");
                return(false);
            }

            var powerBTN = PowerBTN.AddComponent <InterfaceButton>();
            powerBTN.OnButtonClick    = Display.OnButtonClick;
            powerBTN.BtnName          = "PowerBTN";
            powerBTN.ButtonMode       = InterfaceButtonMode.BackgroundScale;
            powerBTN.STARTING_COLOR   = new Color(0.05859375f, 0.73828125f, 0.59375f);
            powerBTN.TextComponent    = _powerBTNText;
            powerBTN.IncreaseButtonBy = 0.013282f;
            powerBTN.Tag = this;

            #endregion

            _foundComponents = true;
            return(true);
        }
Esempio n. 20
0
        internal static List <TechType> FindBiomeLoot(Transform tr, string currentBiome)
        {
            Dictionary <BiomeType, List <TechType> > biomeLoot = new Dictionary <BiomeType, List <TechType> >();

            var loot = new List <TechType>();

            foreach (BiomeType biomeType in Enum.GetValues(typeof(BiomeType)))
            {
                if (tr == null)
                {
                    QuickLogger.Debug("FindBiomeLoot: Transform cannot be null");
                    return(null);
                }


                if (string.IsNullOrEmpty(currentBiome))
                {
                    QuickLogger.Error($"No biome found!");
                    return(null);
                }

                //QuickLogger.Debug($"Biome Found: {currentBiome}");

                FindMatchingBiome(currentBiome, out var matchingBiome);

                if (biomeType.AsString().StartsWith(matchingBiome, StringComparison.OrdinalIgnoreCase))
                {
                    if (Mod.LootDistributionData == null)
                    {
                        QuickLogger.Debug("LootDistributionData is null");
                        return(null);
                    }

                    if (!Mod.LootDistributionData.GetBiomeLoot(biomeType, out LootDistributionData.DstData data))
                    {
                        QuickLogger.Debug("DstData is null");
                        continue;
                    }

                    foreach (LootDistributionData.PrefabData prefabData in data.prefabs)
                    {
                        if (prefabData.classId.ToLower() != "none")
                        {
                            if (WorldEntityDatabase.TryGetInfo(prefabData.classId, out WorldEntityInfo wei))
                            {
                                if (wei == null)
                                {
                                    QuickLogger.Debug("WorldEntityInfo is null");
                                    continue;
                                }

                                if (Resources.Contains(wei.techType))
                                {
                                    if (!biomeLoot.ContainsKey(biomeType))
                                    {
                                        biomeLoot[biomeType] = new List <TechType>();
                                    }

                                    biomeLoot[biomeType].Add(wei.techType);

                                    QuickLogger.Debug($"Added Resource: {wei.techType} in biome {biomeType}");
                                }
                            }
                        }
                    }
                }
            }

            foreach (KeyValuePair <BiomeType, List <TechType> > pair in biomeLoot)
            {
                foreach (TechType techType in pair.Value)
                {
                    if (techType.ToString().EndsWith("Chunk", StringComparison.OrdinalIgnoreCase) ||
                        techType.ToString().StartsWith("Drillable", StringComparison.OrdinalIgnoreCase))
                    {
                        GetResourceForSpecial(techType, loot);
                    }
                    else
                    {
                        loot.Add(techType);
                    }

                    loot = loot.Distinct().ToList();
                }
            }

            var lootWithAdditions = AdditionalLoot(loot, currentBiome);

            return(lootWithAdditions);
        }
        public override bool FindAllComponents()
        {
            #region Canvas
            var canvasGameObject = gameObject.GetComponentInChildren <Canvas>()?.gameObject;

            if (canvasGameObject == null)
            {
                QuickLogger.Error("Canvas cannot be found");
                return(false);
            }
            #endregion

            #region Home
            var home = canvasGameObject.FindChild("Home")?.gameObject;

            if (home == null)
            {
                QuickLogger.Error("Home cannot be found");
                return(false);
            }
            #endregion

            #region Oxygen Preloader
            var oxPreloaderlbl = home.FindChild("Ox_Preloader")?.FindChild("percentage")?.GetComponent <Text>();

            if (oxPreloaderlbl == null)
            {
                QuickLogger.Error("Ox_Preloader cannot be found");
                return(false);
            }

            _oxPreloaderLBL = oxPreloaderlbl;
            #endregion

            #region Oxygen Preloader Bar
            var oxPreloaderBar = home.FindChild("Ox_Preloader")?.FindChild("PreLoader_Bar_Front")?.GetComponent <Image>();

            if (oxPreloaderBar == null)
            {
                QuickLogger.Error("Ox_Preloader Bar cannot be found");
                return(false);
            }

            _oxPreloaderBar = oxPreloaderBar;
            #endregion

            #region Health Preloader
            var healthPreloaderlbl = home.FindChild("Health_Preloader")?.FindChild("percentage")?.GetComponent <Text>();

            if (healthPreloaderlbl == null)
            {
                QuickLogger.Error("Health_Preloader cannot be found");
                return(false);
            }

            _healthPreloaderlbl = healthPreloaderlbl;
            #endregion

            #region Health Preloader Bar
            var healthPreloaderBar = home.FindChild("Health_Preloader")?.FindChild("PreLoader_Bar_Front")?.GetComponent <Image>();

            if (healthPreloaderBar == null)
            {
                QuickLogger.Error("Health_Preloader Bar cannot be found");
                return(false);
            }

            _healthPreloaderBar = healthPreloaderBar;
            #endregion

            #region Take O2 BTN
            _giveO2BTN = home.transform.Find("Button")?.gameObject;
            if (_giveO2BTN == null)
            {
                QuickLogger.Error("Button not found.");
                return(false);
            }

            _giveOIntBtn                = _giveO2BTN.AddComponent <InterfaceButton>();
            _giveOIntBtn.ButtonMode     = InterfaceButtonMode.Background;
            _giveOIntBtn.STARTING_COLOR = dark_bg;
            _giveOIntBtn.OnButtonClick  = OnButtonClick;
            _giveOIntBtn.BtnName        = "giveO2";
            #endregion

            #region Take O2 BTN LBL
            _buttonLbl = home.transform.Find("Button").Find("Text")?.gameObject.GetComponent <Text>();
            if (_buttonLbl == null)
            {
                QuickLogger.Error("Button Text not found.");
                return(false);
            }

            _buttonLbl.text = OxStationBuildable.TakeOxygen();

            #endregion

            #region Power Usage
            var powerUsage = home.transform.Find("Power_Usage")?.GetComponent <Text>();
            if (powerUsage == null)
            {
                QuickLogger.Error("Power_Usage not found.");
                return(false);
            }

            _powerUsage = powerUsage;
            #endregion

            return(true);
        }
        public override GameObject GetGameObject()
        {
            try
            {
                var prefab = GameObject.Instantiate(_prefab);

                if (QPatch.Configuration.Config.UseCustomBoundingBox)
                {
                    var center = QPatch.Configuration.Config.BoundingCenter;
                    var size   = QPatch.Configuration.Config.BoundingSize;
                    GameObjectHelpers.AddConstructableBounds(prefab, size.ToVector3(), center.ToVector3());
                }

                var model = prefab.FindChild("model");

                //========== Allows the building animation and material colors ==========//
                Shader     shader     = Shader.Find("MarmosetUBER");
                Renderer[] renderers  = prefab.GetComponentsInChildren <Renderer>();
                SkyApplier skyApplier = prefab.EnsureComponent <SkyApplier>();
                skyApplier.renderers = renderers;
                skyApplier.anchorSky = Skies.Auto;

                // Add large world entity ALLOWS YOU TO SAVE ON TERRAIN
                var lwe = prefab.AddComponent <LargeWorldEntity>();
                lwe.cellLevel = LargeWorldEntity.CellLevel.Far;

                //========== Allows the building animation and material colors ==========//

                // Add constructible
                var constructable = prefab.AddComponent <Constructable>();

                constructable.allowedOutside          = QPatch.Configuration.Config.AllowedOutside;
                constructable.allowedInBase           = QPatch.Configuration.Config.AllowedInBase;
                constructable.allowedOnGround         = QPatch.Configuration.Config.AllowedOnGround;
                constructable.allowedOnWall           = QPatch.Configuration.Config.AllowedOnWall;
                constructable.rotationEnabled         = QPatch.Configuration.Config.RotationEnabled;
                constructable.allowedOnCeiling        = QPatch.Configuration.Config.AllowedOnCeiling;
                constructable.allowedInSub            = QPatch.Configuration.Config.AllowedInSub;
                constructable.allowedOnConstructables = QPatch.Configuration.Config.AllowedOnConstructables;

                constructable.placeMaxDistance     = QPatch.Configuration.Config.PlaceMaxDistance;     //7f;
                constructable.placeMinDistance     = QPatch.Configuration.Config.PlaceMinDistance;     //5f;
                constructable.placeDefaultDistance = QPatch.Configuration.Config.PlaceDefaultDistance; //6f;
                constructable.model    = model;
                constructable.techType = Singleton.TechType;

                PrefabIdentifier prefabID = prefab.AddComponent <PrefabIdentifier>();
                prefabID.ClassId = Singleton.ClassID;
                MaterialHelpers.AddNewBubbles(prefab, new Vector3(0.722f, 1.03f, 0.775f), new Vector3(270f, 266f, 0f));
                MaterialHelpers.AddNewBubbles(prefab, new Vector3(0.826f, 1.03f, -0.715f), new Vector3(270f, 266f, 0f));
                MaterialHelpers.AddNewBubbles(prefab, new Vector3(-0.796f, 1.03f, -0.828f), new Vector3(270f, 266f, 0f));
                MaterialHelpers.AddNewBubbles(prefab, new Vector3(-0.801f, 1.03f, 0.711f), new Vector3(270f, 266f, 0f));
                prefab.AddComponent <TechTag>().type = Singleton.TechType;
                prefab.AddComponent <FCSDemoController>();
                //Add the FCSTechFabricatorTag component
                prefab.AddComponent <FCSTechFabricatorTag>();


                return(prefab);
            }
            catch (Exception e)
            {
                QuickLogger.Error(e.Message);
                return(null);
            }
        }
Esempio n. 23
0
        public override void Initialize()
        {
            _prefabId = GetComponentInParent <PrefabIdentifier>();

            if (_prefabId == null)
            {
                QuickLogger.Error("Prefab Identifier Component was not found");
            }

            if (_buildable == null)
            {
                _buildable = GetComponentInParent <Constructable>() ?? GetComponent <Constructable>();
            }

            if (!FindAllComponents())
            {
                IsInitialized = false;
                throw new MissingComponentException("Failed to find all components");
            }

            if (PowerManager == null)
            {
                PowerManager = gameObject.EnsureComponent <AMMiniMedBayPowerManager>();
            }

            if (PlayerTrigger == null)
            {
                PlayerTrigger = gameObject.FindChild("model").FindChild("Trigger").EnsureComponent <AMMiniMedBayTrigger>();
            }


            if (PlayerTrigger != null)
            {
                PlayerTrigger.OnPlayerStay += OnPlayerStay;
                PlayerTrigger.OnPlayerExit += OnPlayerExit;
            }
            else
            {
                QuickLogger.Error("Player Trigger Component was not found");
            }

            if (AnimationManager == null)
            {
                AnimationManager = gameObject.EnsureComponent <AMMiniMedBayAnimationManager>();
            }

            if (PowerManager != null)
            {
                PowerManager.Initialize(this);
                PowerManager.OnPowerOutage += OnPowerOutage;
                PowerManager.OnPowerResume += OnPowerResume;

                //Setting to true to prevent power consumption when not in use on load
                PowerManager.SetHasBreakerTripped(true);
            }
            else
            {
                QuickLogger.Error("Power Manager Component was not found");
            }

            PageHash = UnityEngine.Animator.StringToHash("state");

            if (AudioHandler == null)
            {
                AudioHandler = new AMMiniMedBayAudioManager(gameObject.GetComponent <FMOD_CustomLoopingEmitter>());
            }

            if (Container == null)
            {
                Container = new AMMiniMedBayContainer(this);
            }

            if (_display == null)
            {
                _display = gameObject.AddComponent <AMMiniMedBayDisplay>();
            }

            if (Player.main.gameObject.GetComponent <NitrogenLevel>() != null)
            {
                _nitrogenLevel = Player.main.gameObject.GetComponent <NitrogenLevel>();

                InvokeRepeating(nameof(UpdateNitrogenDisplay), 1, 0.5f);
            }

            IsInitialized = true;
        }
Esempio n. 24
0
        public override bool FindAllComponents()
        {
            try
            {
                #region Canvas

                var canvas = GameObjectHelpers.FindGameObject(gameObject, "Canvas");

                #endregion

                #region Home Page

                var homePage = GameObjectHelpers.FindGameObject(canvas, "HomePage");

                //Battery Fill
                _batteryFill = GameObjectHelpers.FindGameObject(homePage, "BatteryFrameFill")?.GetComponent <Image>();

                //Power State
                GameObjectHelpers.FindGameObject(homePage, "PowerState_LBL").GetComponent <Text>().text = AlterraGenBuildable.PowerStateLBL();
                _powerStateValue = GameObjectHelpers.FindGameObject(homePage, "PoweredState_Value")?.GetComponent <Text>();

                //Power Unit
                GameObjectHelpers.FindGameObject(homePage, "PowerUnit_LBL").GetComponent <Text>().text = AlterraGenBuildable.PowerUnitLBL();
                _powerUnitValue = GameObjectHelpers.FindGameObject(homePage, "PowerUnit_Value")?.GetComponent <Text>();

                //Battery Percentage
                GameObjectHelpers.FindGameObject(homePage, "BatteryPercentage_LBL").GetComponent <Text>().text = AlterraGenBuildable.BatteryPercentageLBL();
                _batteryPercentageValue = GameObjectHelpers.FindGameObject(homePage, "BatteryPercentage_Percentage")?.GetComponent <Text>();

                //Breaker State
                GameObjectHelpers.FindGameObject(homePage, "BreakerState_LBL").GetComponent <Text>().text = AlterraGenBuildable.BreakerStateLBL();
                _breakerStatusLight = GameObjectHelpers.FindGameObject(homePage, "BreakerState_StatusLight")?.GetComponent <Image>();

                //Power Button
                var powerBTNObject = GameObjectHelpers.FindGameObject(homePage, "PowerBTN");
                InterfaceHelpers.CreateButton(powerBTNObject, "PowerBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, Color.white, Color.cyan, MAX_INTERACTION_DISTANCE);

                //Dump Button
                var dumpBTN = GameObjectHelpers.FindGameObject(homePage, "DumpBTN");
                InterfaceHelpers.CreateButton(dumpBTN, "DumpBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, Color.gray, Color.white, MAX_INTERACTION_DISTANCE);

                //Color Picker BTN
                var colorPickerBTN = GameObjectHelpers.FindGameObject(homePage, "ColorPickerBTN");
                InterfaceHelpers.CreateButton(colorPickerBTN, "ColorPickerBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, Color.gray, Color.white, MAX_INTERACTION_DISTANCE);

                _grid = _mono.gameObject.AddComponent <GridHelper>();
                _grid.OnLoadDisplay += OnLoadItemsGrid;
                _grid.Setup(3, AlterraGenBuildable.ItemPrefab, homePage, Color.gray, Color.gray, OnButtonClick);

                #endregion

                #region PowerOff Page

                var poweroffPage = GameObjectHelpers.FindGameObject(canvas, "PowerOff");

                var powerBTNObject2 = GameObjectHelpers.FindGameObject(poweroffPage, "PowerBTN");
                InterfaceHelpers.CreateButton(powerBTNObject2, "PowerBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, Color.white, Color.cyan, MAX_INTERACTION_DISTANCE);

                #endregion

                #region Color Page

                var colorPage = GameObjectHelpers.FindGameObject(canvas, "ColorPage");
                _colorPage.SetupGrid(35, AlterraGenBuildable.ColorItemPrefab, colorPage, OnButtonClick, Color.white, Color.cyan);

                #endregion
            }
            catch (Exception e)
            {
                QuickLogger.Error(e.Message);
                return(false);
            }

            return(true);
        }
 /// <summary>
 /// Writes an ERROR level log to the log file. Can be optionally printed to screen.
 /// </summary>
 /// <param name="logmessage">The log message to write.</param>
 /// <param name="showOnScreen">if set to <c>true</c> the log message will show on screen.</param>
 public void Error(string logmessage, bool showOnScreen = false)
 {
     QuickLogger.Error(logmessage, showOnScreen, Assembly.GetCallingAssembly().GetName());
 }
Esempio n. 26
0
        public override bool FindAllComponents()
        {
            #region Canvas
            var canvasGameObject = gameObject.GetComponentInChildren <Canvas>()?.gameObject;

            if (canvasGameObject == null)
            {
                QuickLogger.Error("Canvas cannot be found");
                return(false);
            }
            #endregion

            #region Home

            var home = canvasGameObject.FindChild("Home")?.gameObject;

            if (home == null)
            {
                QuickLogger.Error("Unable to find Home GameObject");
                return(false);
            }
            #endregion

            #region Settings

            var settings = canvasGameObject.FindChild("Settings")?.gameObject;

            if (settings == null)
            {
                QuickLogger.Error("Unable to find Settings GameObject");
                return(false);
            }
            #endregion

            #region ColorPicker

            var colorPicker = canvasGameObject.FindChild("ColorPicker")?.gameObject;

            if (colorPicker == null)
            {
                QuickLogger.Error("Unable to find colorPicker GameObject");
                return(false);
            }
            #endregion

            #region Doors
            var doorsResult = InterfaceHelpers.FindGameObject(canvasGameObject, "Doors", out var doorsOutput);

            if (!doorsResult)
            {
                return(false);
            }

            var doors = doorsOutput;
            #endregion

            #region Start Button
            var startButtonResult = InterfaceHelpers.CreateButton(home, "Button", "startBTN", InterfaceButtonMode.Background,
                                                                  _startColor, _hoverColor, OnButtonClick, out var startButton);
            startButton.TextLineOne = "Start Cooking";

            if (!startButtonResult)
            {
                return(false);
            }
            _startButton = startButton;
            #endregion

            #region Color Picker
            var colorPickerResult = InterfaceHelpers.CreateButton(settings, "Paint_BTN", "colorPickerBTN", InterfaceButtonMode.Background,
                                                                  OnButtonClick, out var colorPickerButton);
            colorPickerButton.TextLineOne = "Color Picker Page";

            if (!colorPickerResult)
            {
                return(false);
            }
            #endregion

            #region Settings BTN
            var settingsResult = InterfaceHelpers.CreateButton(home, "Settings", "settingsBTN", InterfaceButtonMode.Background,
                                                               OnButtonClick, out var settingsButton);
            settingsButton.TextLineOne = SeaCookerBuildable.GoToSettingsPage();

            if (!settingsResult)
            {
                return(false);
            }
            #endregion

            #region Fuel Tank BTN
            var fuelTankResult = InterfaceHelpers.CreateButton(home, "Tank_BTN", "fuelTankBTN", InterfaceButtonMode.Background,
                                                               OnButtonClick, out var fuelTankButton);
            fuelTankButton.TextLineOne = "Open Fuel Tank";

            if (!fuelTankResult)
            {
                return(false);
            }

            #endregion

            #region Settings Color BTN
            var settingsCResult = InterfaceHelpers.CreateButton(colorPicker, "Home_BTN", "settingsBTN", InterfaceButtonMode.TextColor,
                                                                OnButtonClick, out var settings_C_BTN);
            settings_C_BTN.ChangeText($"< {SeaCookerBuildable.SettingsPage()}");
            settings_C_BTN.TextLineOne = $"{SeaCookerBuildable.GoToSettingsPage()}";

            if (!settingsCResult)
            {
                QuickLogger.Error($"Can't find settingsBTN");
                return(false);
            }
            #endregion

            #region Open Input BTN
            var openInputBTN = InterfaceHelpers.CreateButton(doors, "Open_Input", "openInputBTN", InterfaceButtonMode.TextColor,
                                                             OnButtonClick, out var openInputButton);
            openInputButton.TextLineOne = "Open Input Container";

            if (!openInputBTN)
            {
                return(false);
            }
            #endregion

            #region Open Export BTN
            var openExportBTN = InterfaceHelpers.CreateButton(doors, "Open_Export", "openExportBTN", InterfaceButtonMode.TextColor,
                                                              OnButtonClick, out var openExportButton);
            openExportButton.TextLineOne = "Open Export Container";

            if (!openExportBTN)
            {
                return(false);
            }
            #endregion

            #region Next BTN
            var nextBTN = InterfaceHelpers.CreatePaginator(colorPicker, "NextPage", 1, _colorPage.ChangeColorPageBy, out var nextButton);
            nextButton.TextLineOne = "Next Page";

            if (!nextBTN)
            {
                return(false);
            }
            #endregion

            #region Prev BTN
            var prevBTN = InterfaceHelpers.CreatePaginator(colorPicker, "PrevPage", -1, _colorPage.ChangeColorPageBy, out var prevButton);
            prevButton.TextLineOne = "Previous Page";

            if (!prevBTN)
            {
                return(false);
            }
            #endregion

            #region Color Grid
            var colorGridResult = InterfaceHelpers.FindGameObject(colorPicker, "Grid", out var colorGrid);

            if (!colorGridResult)
            {
                return(false);
            }
            _colorGrid = colorGrid;
            #endregion

            #region SeaBreeze Grid
            var seaBreezeGridResult = InterfaceHelpers.FindGameObject(settings, "Grid", out var seaBreezeGrid);

            if (!seaBreezeGridResult)
            {
                return(false);
            }

            _seaBreezeGrid.Setup(4, SeaCookerBuildable.SeaBreezeItemPrefab, settings, Color.white, new Color(0.07f, 0.38f, 0.7f, 1f), OnButtonClick);
            _seaBreezeGrid.OnLoadDisplay += OnLoadDisplay;
            #endregion

            #region From Image OMIT
            //var fromImage = InterfaceHelpers.FindGameObject(home, "from_Image", out var from_Image);

            //if (!fromImage)
            //{
            //    return false;
            //}
            //_fromImage = from_Image;
            //uGUI_Icon fromIcon = _fromImage.gameObject.AddComponent<uGUI_Icon>();
            #endregion

            #region To Image OMIT
            var toImage = InterfaceHelpers.FindGameObject(home, "to_Image", out var to_Image);

            if (!toImage)
            {
                return(false);
            }
            _toImage = to_Image;
            uGUI_Icon toIcon = _toImage.gameObject.AddComponent <uGUI_Icon>();
            #endregion

            #region Percentage Bar
            var percentageResult = InterfaceHelpers.FindGameObject(home, "Preloader_Bar", out var percentage);

            if (!percentageResult)
            {
                return(false);
            }
            _percentage = percentage.GetComponent <Image>();
            #endregion

            #region Fuel Percentage
            var fuelResult = InterfaceHelpers.FindGameObject(home, "FuelPercentage", out var fuelPercentage);

            if (!fuelResult)
            {
                return(false);
            }
            _fuelPercentage      = fuelPercentage.GetComponent <Text>();
            _fuelPercentage.text = $"{SeaCookerBuildable.TankPercentage()}: (0%)";
            #endregion

            #region Version
            var versionResult = InterfaceHelpers.FindGameObject(canvasGameObject, "Version", out var version);

            if (!versionResult)
            {
                return(false);
            }
            var versionLbl = version.GetComponent <Text>();
            versionLbl.text = $"{SeaCookerBuildable.Version()}: {QPatch.Version}";
            #endregion

            #region Paginator
            var paginatorResult = InterfaceHelpers.FindGameObject(colorPicker, "Paginator", out var paginator);

            if (!paginatorResult)
            {
                return(false);
            }
            _paginator = paginator.GetComponent <Text>();
            #endregion

            #region Seabreeze Toggle
            var toggleResult = InterfaceHelpers.FindGameObject(settings, "Toggle_SB_Export", out var toggle);

            if (!toggleResult)
            {
                QuickLogger.Error($"Cannot find Toggle_SB_Export on GameObject");
                return(false);
            }

            _cusToggle               = toggle.AddComponent <CustomToggle>();
            _cusToggle.BtnName       = "seaBreezeToggle";
            _cusToggle.ButtonMode    = InterfaceButtonMode.Background;
            _cusToggle.OnButtonClick = OnButtonClick;
            _cusToggle.Tag           = _cusToggle;
            #endregion

            #region Auto Toggle
            var autoResult = InterfaceHelpers.FindGameObject(settings, "Auto_Toggle", out var autoToggle);

            if (!autoResult)
            {
                QuickLogger.Error($"Cannot find Auto_Toggle on GameObject");
                return(false);
            }

            _autoToggle               = autoToggle.AddComponent <CustomToggle>();
            _autoToggle.BtnName       = "autoToggle";
            _autoToggle.ButtonMode    = InterfaceButtonMode.Background;
            _autoToggle.OnButtonClick = OnButtonClick;
            _autoToggle.Tag           = _autoToggle;
            #endregion

            return(true);
        }
Esempio n. 27
0
        public override bool FindAllComponents()
        {
            #region Canvas

            var canvasGameObject = gameObject.GetComponentInChildren <Canvas>()?.gameObject;

            if (canvasGameObject == null)
            {
                QuickLogger.Error("Canvas not found.");
                return(false);
            }

            #endregion

            // == Canvas Elements == //

            #region Navigation Dock
            var navigationDock = canvasGameObject.transform.Find("Navigation_Dock")?.gameObject;
            if (navigationDock == null)
            {
                QuickLogger.Error("Dock: Navigation_Dock not found.");
                return(false);
            }
            #endregion

            // == Navigation Button Elements == //

            #region Screen Holder

            GameObject screenHolder = canvasGameObject.transform.Find("Screens")?.gameObject;

            if (screenHolder == null)
            {
                QuickLogger.Error("Screen Holder GameObject not found.");
                return(false);
            }

            #endregion

            // == Screen Holder Elements == //

            #region Welcome Screen

            var welcomeScreen = screenHolder.FindChild("WelcomePage")?.gameObject;
            if (welcomeScreen == null)
            {
                QuickLogger.Error("Screen: WelcomeScreen not found.");
                return(false);
            }

            #endregion

            #region Version Label
            var versionLbl = welcomeScreen.FindChild("Logo_Intro").FindChild("Version_Text")?.gameObject;

            if (versionLbl == null)
            {
                QuickLogger.Error("Cannot find Version_Text Game Object");
            }

            string assemblyVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();

            versionLbl.GetComponent <Text>().text = $"V{assemblyVersion}";
            #endregion

            #region Settings Screen

            var settingsScreen = screenHolder.FindChild("SettingsPage")?.gameObject;
            if (settingsScreen == null)
            {
                QuickLogger.Error("Screen: SettingsPage not found.");
                return(false);
            }

            #endregion

            #region Battery Monitor Page
            var batteryMonitorPage = screenHolder.FindChild("BatteryMonitorPage")?.gameObject;
            if (batteryMonitorPage == null)
            {
                QuickLogger.Error("Screen: BatteryMonitorPage not found.");
                return(false);
            }

            QuickLogger.Info("Finding Meters");
            #endregion

            #region Battery Grid
            _batteryGrid = batteryMonitorPage.FindChild("Grid")?.gameObject;
            if (_batteryGrid == null)
            {
                QuickLogger.Error("Screen: BatteryMonitorPage not found.");
                return(false);
            }

            QuickLogger.Debug($"Meter Count {_batteryGrid.transform.childCount}");


            for (int i = 0; i < _mono.BatteryCount; i++)
            {
                QuickLogger.Info($"Meter {i}");
                var powercell = _mono.PowerManager.GetPowerCell(i);
                QuickLogger.Debug($"Battery {powercell.GetName()}");
                powercell.SetMeter(_batteryGrid.transform.GetChild(i).gameObject);
            }
            #endregion

            #region Power Off Page
            var powerOffPage = screenHolder.FindChild("PowerOffPage")?.gameObject;
            if (powerOffPage == null)
            {
                QuickLogger.Error("Screen: PowerOffPage not found.");
                return(false);
            }
            #endregion

            #region Boot Page
            var bootingPage = screenHolder.FindChild("BootingPage")?.gameObject;
            if (bootingPage == null)
            {
                QuickLogger.Error("Screen: BootingPage not found.");
                return(false);
            }
            #endregion

            // == Powered off Elements
            #region PoweredOff LBL

            var poweredOffLbl = powerOffPage.FindChild("Powered_Off_LBL").GetComponent <Text>();
            if (poweredOffLbl == null)
            {
                QuickLogger.Error("Screen: Powered_Off_LBL  not found.");
                return(false);
            }
            poweredOffLbl.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.PoweredOffKey);

            #endregion


            // == Battery MonitorPage Elements

            #region Battery Monitor Power Amount Label
            _batteryMonitorAmountLbl = batteryMonitorPage.FindChild("Battery_Monitor_Amount_LBL").GetComponent <Text>();
            if (_batteryMonitorAmountLbl == null)
            {
                QuickLogger.Error("Screen: Battery_Monitor_Amount_LBL not found.");
                return(false);
            }
            #endregion

            #region Battery Monitor Label

            var batteryMonitorLbl = batteryMonitorPage.FindChild("Battery_Monitor_LBL").GetComponent <Text>();
            if (batteryMonitorLbl == null)
            {
                QuickLogger.Error("Screen: Battery_Monitor_LBL not found.");
                return(false);
            }
            batteryMonitorLbl.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.BatteryMetersKey);

            #endregion

            #region Trickle Mode BTN
            var trickleModeBtn = batteryMonitorPage.FindChild("Trickle_Mode")?.gameObject;
            if (trickleModeBtn == null)
            {
                QuickLogger.Error("Screen: Trickle_Mode not found.");
                return(false);
            }

            InterfaceButton trickleBTN = trickleModeBtn.AddComponent <InterfaceButton>();
            trickleBTN.OnButtonClick += OnButtonClick;
            trickleBTN.ButtonMode     = InterfaceButtonMode.None;
            trickleBTN.BtnName        = "TrickleModeBTN";

            #endregion

            #region Charge Mode BTN
            var chargeModeBtn = batteryMonitorPage.FindChild("Charge_Mode")?.gameObject;
            if (chargeModeBtn == null)
            {
                QuickLogger.Error("Screen: Charge_Mode not found.");
                return(false);
            }

            InterfaceButton chargeBTN = chargeModeBtn.AddComponent <InterfaceButton>();
            chargeBTN.ButtonMode     = InterfaceButtonMode.None;
            chargeBTN.OnButtonClick += OnButtonClick;
            chargeBTN.BtnName        = "ChargeModeBTN";
            #endregion


            // == Boot Page Elements == //

            #region Booting LBL

            var bootingLbl = bootingPage.FindChild("Booting_TXT").GetComponent <Text>();
            if (bootingLbl == null)
            {
                QuickLogger.Error("Screen: _bootingLBL  not found.");
                return(false);
            }
            bootingLbl.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.BootingKey);

            #endregion

            // == Settings Page Elements == //
            #region Color Picker
            var colorPicker = settingsScreen.FindChild("Color_Picker")?.gameObject;
            if (colorPicker == null)
            {
                QuickLogger.Error("Screen: _color_Picker not found.");
                return(false);
            }

            InterfaceButton colorPickerBTN = colorPicker.AddComponent <InterfaceButton>();
            colorPickerBTN.OnButtonClick += OnButtonClick;
            colorPickerBTN.ButtonMode     = InterfaceButtonMode.None;
            colorPickerBTN.BtnName        = "ColorPickerBTN";
            #endregion

            #region Color Picker LBL

            var colorPickerLbl = colorPicker.FindChild("Label").GetComponent <Text>();
            if (colorPickerLbl == null)
            {
                QuickLogger.Error("Screen: Color Picker Label not found.");
                return(false);
            }
            colorPickerLbl.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.ColorPickerKey);

            #endregion

            #region Settings LBL

            var settingsLbl = settingsScreen.FindChild("Setting_LBL").GetComponent <Text>();
            if (settingsLbl == null)
            {
                QuickLogger.Error("Screen: Settings Page Label not found.");
                return(false);
            }
            settingsLbl.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.SettingsKey);

            #endregion

            #region System Settings LBL

            var storageModeLbl = settingsScreen.FindChild("System_Settings_LBL").GetComponent <Text>();
            if (storageModeLbl == null)
            {
                QuickLogger.Error("Screen: Storage Mode Label not found.");
                return(false);
            }
            storageModeLbl.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.SystemSettingsLblKey);

            #endregion

            #region Grid
            var grid = settingsScreen.FindChild("Grid")?.gameObject;
            if (grid == null)
            {
                QuickLogger.Error("Screen: Grid not found.");
                return(false);
            }
            #endregion

            #region Auto Activate BTN
            var autoActivateBtn = grid.FindChild("Auto_Activate")?.gameObject;
            if (autoActivateBtn == null)
            {
                QuickLogger.Error("Screen: Auto_Activate not found.");
                return(false);
            }

            var autoActivateTxt = autoActivateBtn.FindChild("Label").GetComponent <Text>();

            if (autoActivateTxt == null)
            {
                QuickLogger.Error("Screen: Auto_Activate text not found.");
                return(false);
            }

            autoActivateTxt.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.AutoActivateKey);

            InterfaceButton autoABTN = autoActivateBtn.AddComponent <InterfaceButton>();
            autoABTN.ButtonMode     = InterfaceButtonMode.None;
            autoABTN.OnButtonClick += OnButtonClick;
            autoABTN.BtnName        = "AutoActivateBTN";

            #endregion

            #region Sync BTN
            var syncBtn = grid.FindChild("Sync")?.gameObject;
            if (syncBtn == null)
            {
                QuickLogger.Error("Screen: Sync not found.");
                return(false);
            }

            var syncAllBtnTxt = syncBtn.FindChild("Label").GetComponent <Text>();

            if (syncAllBtnTxt == null)
            {
                QuickLogger.Error("Screen: Sync All text not found.");
                return(false);
            }

            syncAllBtnTxt.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.SyncAllKey);

            InterfaceButton syncBTN = syncBtn.AddComponent <InterfaceButton>();
            syncBTN.ButtonMode     = InterfaceButtonMode.None;
            syncBTN.OnButtonClick += OnButtonClick;
            syncBTN.BtnName        = "SyncBTN";

            #endregion

            #region Auto Activate Limit
            var autoActivateLimitBtn = grid.FindChild("Auto_Activate_Limit")?.gameObject;
            if (autoActivateLimitBtn == null)
            {
                QuickLogger.Error("Screen: Auto_Activate_Limit not found.");
                return(false);
            }

            var autoActivateLimitTxt = autoActivateLimitBtn.FindChild("Label").GetComponent <Text>();

            if (autoActivateLimitTxt == null)
            {
                QuickLogger.Error("Screen: Auto_Activate_limit text not found.");
                return(false);
            }

            autoActivateLimitTxt.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.AutoActivateAtKey);

            var autoActivateLimitTextBox = autoActivateLimitBtn.FindChild("Background").FindChild("Text")?.gameObject;

            if (autoActivateLimitTextBox == null)
            {
                QuickLogger.Error("Screen:btnName Text not found.");
                return(false);
            }

            _autoActivateTextB      = autoActivateLimitTextBox.GetComponent <Text>();
            _autoActivateTextB.text = _mono.GetAutoActivateAt().ToString();

            var autoActivateResult = CreateSystemButton(autoActivateLimitTextBox,
                                                        LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.AutoActivateDescKey), LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.AutoActivateOnHoverKey),
                                                        _mono.GetAutoActivateAt, _mono.ValidateAutoConfigUnits);

            if (!autoActivateResult)
            {
                return(false);
            }

            #endregion

            #region Base Drain Protection BTN
            var baseDrainProtectionBtn = grid.FindChild("Base_Drain_Protection")?.gameObject;
            if (baseDrainProtectionBtn == null)
            {
                QuickLogger.Error("Screen: Base_Drain_Protection not found.");
                return(false);
            }

            var baseDrianProtectionTxt = baseDrainProtectionBtn.FindChild("Label").GetComponent <Text>();

            if (baseDrianProtectionTxt == null)
            {
                QuickLogger.Error("Screen: Base_Drain_protection text not found.");
                return(false);
            }

            baseDrianProtectionTxt.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.BaseDrainProtectionKey);

            InterfaceButton bDPBTN = baseDrainProtectionBtn.AddComponent <InterfaceButton>();
            bDPBTN.ButtonMode     = InterfaceButtonMode.None;
            bDPBTN.OnButtonClick += OnButtonClick;
            bDPBTN.BtnName        = "BaseDrainBTN";
            #endregion

            #region Base Drain Limit
            var baseDrainlimitBtn = grid.FindChild("Base_Drain_Limit")?.gameObject;

            if (baseDrainlimitBtn == null)
            {
                QuickLogger.Error("Screen: Base_Drain_Limit not found.");
                return(false);
            }

            var baseDrianLimitTxt = baseDrainlimitBtn.FindChild("Label").GetComponent <Text>();

            if (baseDrianLimitTxt == null)
            {
                QuickLogger.Error("Screen: Base_Drain_Limit  text not found.");
                return(false);
            }

            baseDrianLimitTxt.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.BaseDrainLimitKey);

            var baseDrainlimitTextBox = baseDrainlimitBtn.FindChild("Background").FindChild("Text")?.gameObject;

            if (baseDrainlimitTextBox == null)
            {
                QuickLogger.Error("Screen:baseDrainlimitTextBox Text not found.");
                return(false);
            }

            _baseDrainLimitTextB      = baseDrainlimitTextBox.GetComponent <Text>();
            _baseDrainLimitTextB.text = _mono.GetBasePowerProtectionGoal().ToString();

            var baseDrainResult = CreateSystemButton(baseDrainlimitTextBox,
                                                     LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.BaseDrainLimitDescKey), LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.BaseDrainLimitOnHoverKey),
                                                     _mono.GetBasePowerProtectionGoal, _mono.ValidateBaseProtectionUnits);

            if (!baseDrainResult)
            {
                return(false);
            }
            #endregion


            //TODO Add langugae for btns

            #region Discharge Mode LBL
            var trickleModeLbl = trickleModeBtn.FindChild("Label").GetComponent <Text>();
            if (trickleModeLbl == null)
            {
                QuickLogger.Error("Screen: TrickleModeLabel not found.");
                return(false);
            }
            trickleModeLbl.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.DischargeKey);

            #endregion

            #region Charge Mode LBL

            var chargeModeLbl = chargeModeBtn.FindChild("Label").GetComponent <Text>();
            if (chargeModeLbl == null)
            {
                QuickLogger.Error("Screen: Charge Mode LBL not found.");
                return(false);
            }
            chargeModeLbl.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.ChargeKey);

            #endregion

            // == Color Picker Elements == //

            #region Color Picker Page
            var colorPickerPage = screenHolder.FindChild("ColorPickerPage")?.gameObject;
            if (colorPickerPage == null)
            {
                QuickLogger.Error("Screen: ColorPicker not found.");
                return(false);
            }
            #endregion

            _colorPicker = colorPickerPage.FindChild("ColorPicker")?.gameObject;
            if (_colorPicker == null)
            {
                QuickLogger.Error("GameObject: ColorPicker not found.");
                return(false);
            }

            #region Color Picker Previous Page BTN
            _previousPageGameObject = colorPickerPage.FindChild("Back_Arrow_BTN")?.gameObject;
            if (_previousPageGameObject == null)
            {
                QuickLogger.Error("Screen: Back_Arrow_BTN not found.");
                return(false);
            }

            var prevPageBTN = _previousPageGameObject.AddComponent <PaginatorButton>();
            prevPageBTN.AmountToChangePageBy = -1;
            prevPageBTN.ChangePageBy         = ChangePageBy;
            #endregion

            #region Color Picker Next Page BTN
            _nextPageGameObject = colorPickerPage.FindChild("Forward_Arrow_BTN")?.gameObject;
            if (_nextPageGameObject == null)
            {
                QuickLogger.Error("Screen: Forward_Arrow_BTN not found.");
                return(false);
            }

            var nextPageBTN = _nextPageGameObject.AddComponent <PaginatorButton>();
            nextPageBTN.ChangePageBy         = ChangePageBy;
            nextPageBTN.AmountToChangePageBy = 1;
            #endregion

            #region Color Picker Page Counter
            _pageCounter = colorPickerPage.FindChild("Page_Number")?.gameObject;
            if (_pageCounter == null)
            {
                QuickLogger.Error("Screen: Page_Number not found.");
                return(false);
            }

            _pageCounterText = _pageCounter.GetComponent <Text>();
            if (_pageCounterText == null)
            {
                QuickLogger.Error("Screen: _pageCounterText not found.");
                return(false);
            }
            #endregion

            // == Navigation Dock Elements == //

            #region Settings Button
            var settingButton = navigationDock.transform.Find("Settings_BTN")?.gameObject;
            if (settingButton == null)
            {
                QuickLogger.Error("Dock: Settings_BTN not found.");
                return(false);
            }


            InterfaceButton settingsBTN = settingButton.AddComponent <InterfaceButton>();
            settingsBTN.OnButtonClick = OnButtonClick;
            settingsBTN.BtnName       = "SettingsBTN";
            settingsBTN.ButtonMode    = InterfaceButtonMode.Background;
            #endregion

            #region Home Button
            var homeButton = navigationDock.transform.Find("Home_BTN")?.gameObject;
            if (homeButton == null)
            {
                QuickLogger.Error("Dock: Home_BTN not found.");
                return(false);
            }

            InterfaceButton home = homeButton.AddComponent <InterfaceButton>();
            home.OnButtonClick = OnButtonClick;
            home.BtnName       = "HomeBTN";
            home.ButtonMode    = InterfaceButtonMode.Background;
            #endregion

            #region Power Button
            var powerButton = navigationDock.transform.Find("Power_BTN")?.gameObject;
            if (powerButton == null)
            {
                QuickLogger.Error("Dock: Power_BTN not found.");
                return(false);
            }

            InterfaceButton power = powerButton.AddComponent <InterfaceButton>();
            power.OnButtonClick = OnButtonClick;
            power.BtnName       = "PowerBTN";
            power.ButtonMode    = InterfaceButtonMode.Background;

            #endregion

            return(true);
        }
        public static bool GetPrefabs()
        {
            try
            {
                if (!_initialized)
                {
                    QuickLogger.Debug($"AssetBundle Set");

                    QuickLogger.Debug("GetPrefabs");
                    AssetBundle assetBundle = AssetHelper.Asset(Mod.ModFolderName, Mod.BundleName);

                    Bundle = assetBundle;

                    //We have found the asset bundle and now we are going to continue by looking for the model.
                    GameObject wallMountRackPrefab  = assetBundle.LoadAsset <GameObject>(Mod.WallMountedRackPrefabName);
                    GameObject floorMountRackPrefab = assetBundle.LoadAsset <GameObject>(Mod.FloorMountedRackPrefabName);
                    GameObject terminalPrefab       = assetBundle.LoadAsset <GameObject>(Mod.TerminalPrefabName);
                    GameObject colorItem            = QPatch.GlobalBundle.LoadAsset <GameObject>("ColorItem");
                    GameObject serverModel          = assetBundle.LoadAsset <GameObject>(Mod.ServerPrefabName);
                    GameObject baseItem             = assetBundle.LoadAsset <GameObject>("DSS_Base_Item");
                    GameObject vehicleItem          = assetBundle.LoadAsset <GameObject>("DSS_Vehicle_Item");
                    GameObject item             = assetBundle.LoadAsset <GameObject>("DSS_Item");
                    GameObject antenna          = assetBundle.LoadAsset <GameObject>(Mod.AntennaPrefabName);
                    GameObject formatMachine    = assetBundle.LoadAsset <GameObject>(Mod.ServerFormattingStationPrefabName);
                    GameObject filterItemPrefab = assetBundle.LoadAsset <GameObject>("FilterItem");

                    //If the prefab isn't null lets add the shader to the materials
                    if (wallMountRackPrefab != null)
                    {
                        //Lets apply the material shader
                        ApplyShaders(wallMountRackPrefab, assetBundle);

                        WallMountRackPrefab = wallMountRackPrefab;
                        QuickLogger.Debug($"Wall Mount Rack Prefab Found!");
                    }
                    else
                    {
                        QuickLogger.Error($"Wall Mount Rack Prefab Not Found!");
                        return(false);
                    }

                    //Floor Mounted Rack Has Been Cut
                    //if (floorMountRackPrefab != null)
                    //{
                    //    //Lets apply the material shader
                    //    ApplyShaders(floorMountRackPrefab, assetBundle);

                    //    FloorMountRackPrefab = floorMountRackPrefab;

                    //    QuickLogger.Debug($"Floor Mount Rack Prefab Found!");
                    //}
                    //else
                    //{
                    //    QuickLogger.Error($"Floor Mount Rack Prefab Not Found!");
                    //    return false;
                    //}

                    if (terminalPrefab != null)
                    {
                        //Lets apply the material shader
                        ApplyShaders(terminalPrefab, assetBundle);

                        TerminalPrefab = terminalPrefab;


                        QuickLogger.Debug($"Terminal Prefab Found!");
                    }
                    else
                    {
                        QuickLogger.Error($"Terminal Prefab Not Found!");
                        return(false);
                    }

                    if (colorItem != null)
                    {
                        ColorItemPrefab = colorItem;
                    }
                    else
                    {
                        QuickLogger.Error($"Color Item Not Found!");
                        return(false);
                    }

                    if (serverModel != null)
                    {
                        ApplyShaders(serverModel, assetBundle);
                        ServerPrefab = serverModel;
                    }
                    else
                    {
                        QuickLogger.Error($"HydroponicHarvesterBottleModel Not Found!");
                        return(false);
                    }

                    if (baseItem != null)
                    {
                        BaseItemPrefab = baseItem;
                    }
                    else
                    {
                        QuickLogger.Error($"DSS_Base_Item Not Found!");
                        return(false);
                    }

                    if (vehicleItem != null)
                    {
                        VehicleItemPrefab = vehicleItem;
                    }
                    else
                    {
                        QuickLogger.Error($"DSS_Vehicle_Item Not Found!");
                        return(false);
                    }

                    if (item != null)
                    {
                        ItemPrefab = item;
                    }
                    else
                    {
                        QuickLogger.Error($"DSS_Item Not Found!");
                        return(false);
                    }

                    if (antenna != null)
                    {
                        ApplyShaders(antenna, assetBundle);
                        AntennaPrefab = antenna;
                    }
                    else
                    {
                        QuickLogger.Error($"Antenna Not Found!");
                        return(false);
                    }

                    if (formatMachine != null)
                    {
                        ApplyShaders(formatMachine, assetBundle);
                        ServerFormatStationPrefab = formatMachine;
                    }
                    else
                    {
                        QuickLogger.Error($"Format Machine Not Found!");
                        return(false);
                    }

                    if (filterItemPrefab != null)
                    {
                        FilterItemPrefab = filterItemPrefab;
                    }
                    else
                    {
                        QuickLogger.Error($"Filter Item Not Found!");
                        return(false);
                    }

                    _initialized = true;
                }

                return(true);
            }
            catch (Exception e)
            {
                QuickLogger.Error <DSSModelPrefab>(e.Message);
                return(false);
            }
        }
        public override bool FindAllComponents()
        {
            try
            {
                #region Canvas

                var canvasGameObject = gameObject.GetComponentInChildren <Canvas>()?.gameObject;

                if (canvasGameObject == null)
                {
                    QuickLogger.Error("Canvas not found.");
                    return(false);
                }

                #endregion

                #region Home
                var home = InterfaceHelpers.FindGameObject(canvasGameObject, "HomeScreen");
                #endregion

                #region Battery

                var homeBattery = InterfaceHelpers.FindGameObject(home, "Battery");
                _batteryPercent = InterfaceHelpers.FindGameObject(homeBattery, "Text").GetComponent <Text>();
                _batteryFill    = InterfaceHelpers.FindGameObject(homeBattery, "Fill").GetComponent <Image>();

                #endregion

                #region Food
                var food = InterfaceHelpers.FindGameObject(canvasGameObject, "FoodScreen");
                #endregion

                #region Drinks
                var drinks = InterfaceHelpers.FindGameObject(canvasGameObject, "DrinksScreen");
                #endregion

                #region Trash
                var trash = InterfaceHelpers.FindGameObject(canvasGameObject, "TrashScreen");
                #endregion

                #region Color Picker
                var colorPicker = InterfaceHelpers.FindGameObject(canvasGameObject, "ColorPicker");
                #endregion

                #region PowerOff
                var powerOff = InterfaceHelpers.FindGameObject(canvasGameObject, "PoweredOffScreen");
                #endregion

                #region PowerButton
                var powerBtn = InterfaceHelpers.FindGameObject(home, "Power_BTN");

                InterfaceHelpers.CreateButton(powerBtn, "HPPBtn", InterfaceButtonMode.Background,
                                              OnButtonClick, _startColor, _hoverColor, MAX_INTERACTION_DISTANCE, ARSSeaBreezeFCS32Buildable.PowerBTNMessage());
                #endregion

                #region PowerOFf PowerButton
                var ppowerBtn = InterfaceHelpers.FindGameObject(powerOff, "Power_BTN");

                InterfaceHelpers.CreateButton(ppowerBtn, "PPBtn", InterfaceButtonMode.Background,
                                              OnButtonClick, _startColor, _hoverColor, MAX_INTERACTION_DISTANCE, ARSSeaBreezeFCS32Buildable.PowerBTNMessage());
                #endregion

                #region PowerOFf PowerButton
                var powerOffLbl = InterfaceHelpers.FindGameObject(powerOff, "Powered_Off_LBL");
                powerOffLbl.GetComponent <Text>().text = ARSSeaBreezeFCS32Buildable.NoPower();
                #endregion

                #region DumpBTNButton
                var dumpBtn = InterfaceHelpers.FindGameObject(home, "DumpBTN");

                InterfaceHelpers.CreateButton(dumpBtn, "DumpBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, Color.black, Color.white, MAX_INTERACTION_DISTANCE, ARSSeaBreezeFCS32Buildable.DumpButton(), ARSSeaBreezeFCS32Buildable.DumpMessage());
                #endregion

                #region FoodCButton
                var foodContainterBtn = InterfaceHelpers.FindGameObject(home, "FoodCBTN");

                InterfaceHelpers.CreateButton(foodContainterBtn, "FoodCBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, Color.black, Color.white, MAX_INTERACTION_DISTANCE, ARSSeaBreezeFCS32Buildable.FoodCButton());
                #endregion

                #region WaterCButton
                var WaterContainterBtn = InterfaceHelpers.FindGameObject(home, "WaterCBTN");

                InterfaceHelpers.CreateButton(WaterContainterBtn, "WaterCBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, Color.black, Color.white, MAX_INTERACTION_DISTANCE, ARSSeaBreezeFCS32Buildable.WaterCButton());
                #endregion

                #region Rename Button
                var RenameBtn = InterfaceHelpers.FindGameObject(home, "RenameBTN");

                InterfaceHelpers.CreateButton(RenameBtn, "RenameBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, Color.black, Color.white, MAX_INTERACTION_DISTANCE, ARSSeaBreezeFCS32Buildable.RenameButton());
                #endregion

                #region Trash Button
                var TrashBtn = InterfaceHelpers.FindGameObject(home, "TrashCBTN");

                InterfaceHelpers.CreateButton(TrashBtn, "TrashBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, Color.black, Color.white, MAX_INTERACTION_DISTANCE, ARSSeaBreezeFCS32Buildable.TrashButton(), ARSSeaBreezeFCS32Buildable.TrashMessage());
                #endregion

                #region ColorBTN Button
                var colorBtn = InterfaceHelpers.FindGameObject(home, "ColorPickerBTN");

                InterfaceHelpers.CreateButton(colorBtn, "ColorBTN", InterfaceButtonMode.Background,
                                              OnButtonClick, Color.black, Color.white, MAX_INTERACTION_DISTANCE, ARSSeaBreezeFCS32Buildable.ColorPicker());
                #endregion

                #region ColorPage
                _colorPage.SetupGrid(48, ARSSeaBreezeFCS32Buildable.ColorItemPrefab, colorPicker, OnButtonClick, _startColor, _hoverColor);
                #endregion

                #region Food Page

                _foodPage = _mono.gameObject.AddComponent <GridHelper>();
                _foodPage.OnLoadDisplay += OnLoadFoodDisplay;
                _foodPage.Setup(17, ARSSeaBreezeFCS32Buildable.ItemPrefab, food, _startColor, _hoverColor, OnButtonClick);

                #endregion

                #region Drink Page

                _waterPage = _mono.gameObject.AddComponent <GridHelper>();
                _waterPage.OnLoadDisplay += OnLoadWaterDisplay;
                _waterPage.Setup(17, ARSSeaBreezeFCS32Buildable.ItemPrefab, drinks, _startColor, _hoverColor, OnButtonClick);

                #endregion

                #region Trash Page

                _trashPage = _mono.gameObject.AddComponent <GridHelper>();
                _trashPage.OnLoadDisplay += OnLoadTrashDisplay;
                _trashPage.Setup(17, ARSSeaBreezeFCS32Buildable.ItemPrefab, trash, _startColor, _hoverColor, OnButtonClick);

                #endregion

                #region StorageAmount

                _itemCounter_LBL = InterfaceHelpers.FindGameObject(home, "ItemCounter_LBL").GetComponent <Text>();

                #endregion

                #region Unit Name

                _seaBreeze_LBL = InterfaceHelpers.FindGameObject(home, "SeaBreeze_LBL").GetComponent <Text>();

                #endregion
            }
            catch (Exception e)
            {
                QuickLogger.Error($"{e.Message}:\n{e.StackTrace}");
                return(false);
            }

            return(true);
        }
        private bool GetPrefabs()
        {
            QuickLogger.Debug("GetPrefabs");
            AssetBundle assetBundle = AssetHelper.Asset(Mod.ModFolderName, Mod.BundleName);

            //If the result is null return false.
            if (assetBundle == null)
            {
                QuickLogger.Error($"AssetBundle is Null!");
                return(false);
            }

            AssetBundle = assetBundle;

            QuickLogger.Debug($"AssetBundle Set");

            //We have found the asset bundle and now we are going to continue by looking for the model.
            GameObject prefab = assetBundle.LoadAsset <GameObject>("AlterraDeepDriller");

            //If the prefab isn't null lets add the shader to the materials
            if (prefab != null)
            {
                //Lets apply the material shader
                ApplyShaders(prefab);

                _prefab = prefab;

                QuickLogger.Debug($"{this.FriendlyName} Prefab Found!");
            }
            else
            {
                QuickLogger.Error($"{this.FriendlyName} Prefab Not Found!");
                return(false);
            }

            //We have found the asset bundle and now we are going to continue by looking for the model.
            GameObject itemButton = assetBundle.LoadAsset <GameObject>("ItemButton");

            //If the prefab isn't null lets add the shader to the materials
            if (itemButton != null)
            {
                ItemPrefab = itemButton;

                QuickLogger.Debug("Item Button Prefab Found!");
            }
            else
            {
                QuickLogger.Error("Item Button Prefab Not Found!");
                return(false);
            }

            //We have found the asset bundle and now we are going to continue by looking for the model.
            GameObject programmingItemButton = assetBundle.LoadAsset <GameObject>("ProgrammingItem");

            //If the prefab isn't null lets add the shader to the materials
            if (programmingItemButton != null)
            {
                ProgrammingItemPrefab = programmingItemButton;

                QuickLogger.Debug("Programming Item Button Prefab Found!");
            }
            else
            {
                QuickLogger.Error("Programming Item Button Prefab Not Found!");
                return(false);
            }

            GameObject listItemButton = assetBundle.LoadAsset <GameObject>("TransferToggleButton");

            if (listItemButton != null)
            {
                ListItemPrefab = listItemButton;

                QuickLogger.Debug("List Item Button Prefab Found!");
            }
            else
            {
                QuickLogger.Error("Item Button Prefab Not Found!");
                return(false);
            }

            GameObject colorItem = QPatch.GlobalBundle.LoadAsset <GameObject>("ColorItem");

            if (colorItem != null)
            {
                ColorItemPrefab = colorItem;
            }
            else
            {
                QuickLogger.Error($"Color Item Not Found!");
                return(false);
            }

            return(GetOres());
        }