Exemplo n.º 1
0
    public static GameObject Register(ModdedObject ModdedObject)
    {
        Debug.Log("=[HPRegistar]======(Registering: " + ModdedObject.Name + " = Type: " + ModdedObject.GetType() + ")====");
        try
        {
            GameObject asset = ModdedObject.Object;

            if (asset == null)
            {
                asset = new GameObject();
            }
            ModdedObject.Decorate();
            Object.DontDestroyOnLoad(asset);

            BuildableObject buildableObject = asset.GetComponent <BuildableObject>();
            buildableObject.dontSerialize = true;
            buildableObject.isPreview     = true;

            asset.transform.parent = _hider.transform;

            AssetManager.Instance.registerObject(buildableObject);
            Debug.Log("=[HPRegistar]======(Succelfully Registering: " + ModdedObject.Name + ")====");
            return(asset);
        }

        catch (System.Exception e)
        {
            Debug.Log("=[HPRegistar]======(Error)==[" + e + "]==");
            return(null);
        }
    }
Exemplo n.º 2
0
        internal ModOptionsWindowBuilder(GameObject owner, Mod ownerMod)
        {
            GameUIRoot.Instance.SetEscMenuDisabled(true);
            RegisterShouldCursorBeEnabledDelegate.Register(shouldCurorBeEnabled);
            GameUIRoot.Instance.RefreshCursorEnabled();

            owner.SetActive(false);
            _owner       = owner;
            _ownerMod    = ownerMod;
            _spawnedBase = InternalAssetBundleReferences.ModsWindow.InstantiateObject("ModOptionsCanvas");
            _spawnedBase.AddComponent <CloseModOptionsWindowOnEscapeKey>().Init(this); // used to make sure we can close the window with escape
            ModdedObject modObject = _spawnedBase.GetComponent <ModdedObject>();

            _content           = modObject.GetObject <GameObject>(0);
            _xButton           = modObject.GetObject <Button>(1);
            _pageButtonsHolder = modObject.GetObject <GameObject>(2);
            _xButton.onClick.AddListener(CloseWindow);

            DelegateScheduler.Instance.Schedule(delegate
            {
                PopulatePages();
                if (_pages.Count >= 1)
                {
                    SetPage(_pages[0]);
                }
            }, -1f); // We do -1f here because the game might be paused and cause this to be triggered right after it is unpaused
        }
Exemplo n.º 3
0
        /// <summary>
        /// Places the page item in the page
        /// </summary>
        /// <param name="holder"></param>
        /// <param name="owner"></param>
        public override void CreatePageItem(GameObject holder, Mod owner)
        {
            if (Options.Length <= DefaultValue || DefaultValue < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(DefaultValue) + " must be in the bounds of the passed options");
            }

            GameObject spawnedPrefab = InternalAssetBundleReferences.ModsWindow.InstantiateObject("DropDown");

            spawnedPrefab.transform.parent = holder.transform;
            ModdedObject spawnedModdedObject = spawnedPrefab.GetComponent <ModdedObject>();

            spawnedModdedObject.GetObject <Text>(0).text = DisplayName;

            Dropdown dropdown = spawnedModdedObject.GetObject <Dropdown>(1);

            dropdown.options.Clear();

            foreach (string option in Options)
            {
                Dropdown.OptionData data = new Dropdown.OptionData(option);
                dropdown.options.Add(data);
            }
            dropdown.value = DefaultValue;
            dropdown.RefreshShownValue();

            object loadedValue = OptionsSaver.LoadSetting(owner, SaveID);

            if (loadedValue != null && loadedValue is int intValue)
            {
                dropdown.value = intValue;
                dropdown.RefreshShownValue();
            }

            if (OnChange != null)
            {
                OnChange(dropdown.value);
            }

            dropdown.onValueChanged.AddListener(delegate(int value)
            {
                OptionsSaver.SetSetting(owner, SaveID, value, true);

                if (OnChange != null)
                {
                    OnChange(value);
                }
            });

            applyCustomRect(spawnedPrefab);

            if (OnCreate != null)
            {
                OnCreate(dropdown);
            }
        }
        /// <summary>
        /// Places the page item in the page
        /// </summary>
        /// <param name="holder"></param>
        /// <param name="owner"></param>
        public override void CreatePageItem(GameObject holder, Mod owner)
        {
            GameObject spawnedPrefab = InternalAssetBundleReferences.ModsWindow.InstantiateObject("InputField");

            spawnedPrefab.transform.parent = holder.transform;
            ModdedObject spawnedModdedObject = spawnedPrefab.GetComponent <ModdedObject>();

            spawnedModdedObject.GetObject <Text>(0).text = DisplayName;
            InputField inputField = spawnedModdedObject.GetObject <InputField>(1);

            inputField.text = DefaultValue;

            object loadedValue = OptionsSaver.LoadSetting(owner, SaveID);

            if (loadedValue != null && loadedValue is string stringValue)
            {
                inputField.text = stringValue;
                _oldValue       = stringValue;

                if (OnChange != null)
                {
                    OnChange(inputField.text);
                }
            }
            else
            {
                _oldValue = DefaultValue;
            }

            inputField.onEndEdit.AddListener(delegate(string value)
            {
                if (!Verify(value))
                {
                    inputField.text = _oldValue;
                    return;
                }

                _oldValue = value;

                OptionsSaver.SetSetting(owner, SaveID, value, true);

                if (OnChange != null)
                {
                    OnChange(value);
                }
            });

            applyCustomRect(spawnedPrefab);

            if (OnCreate != null)
            {
                OnCreate(inputField);
            }
        }
Exemplo n.º 5
0
        void onGetMoreModsClicked()
        {
            ModdedObject spawnedModdedObject = InternalAssetBundleReferences.ModsWindow.InstantiateObject("Mod downloads").GetComponent <ModdedObject>();
            GameObject   content             = spawnedModdedObject.GetObject <GameObject>(0);

            spawnedModdedObject.GetObject <Button>(1).onClick.AddListener(delegate
            {
                Destroy(spawnedModdedObject.gameObject);
            });

            spawnedModdedObject.StartCoroutine(downloadModData(content));
        }
Exemplo n.º 6
0
        /// <summary>
        /// Removes all of the page buttons and spawns in new ones
        /// </summary>
        public void PopulatePages()
        {
            TransformUtils.DestroyAllChildren(_pageButtonsHolder.transform);
            GameObject buttonPrefab = InternalAssetBundleReferences.ModsWindow.GetObject("PageButton");

            foreach (Page page in _pages)
            {
                GameObject spawnedButton = GameObject.Instantiate(buttonPrefab);
                spawnedButton.transform.parent = _pageButtonsHolder.transform;
                ModdedObject moddedObject = spawnedButton.GetComponent <ModdedObject>();
                moddedObject.GetObject <Text>(0).text = page.Name;
                moddedObject.GetObject <Button>(1).onClick.AddListener(delegate { SetPage(page); });
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// Places the page item in the page
        /// </summary>
        /// <param name="holder"></param>
        /// <param name="owner"></param>
        public override void CreatePageItem(GameObject holder, Mod owner)
        {
            GameObject spawnedPrefab = InternalAssetBundleReferences.ModsWindow.InstantiateObject("Slider");

            spawnedPrefab.transform.parent = holder.transform;
            ModdedObject spawnedModdedObject = spawnedPrefab.GetComponent <ModdedObject>();

            spawnedModdedObject.GetObject <Text>(0).text = DisplayName;
            Slider slider = spawnedModdedObject.GetObject <Slider>(1);

            slider.minValue     = Min;
            slider.maxValue     = Max;
            slider.value        = DefaultValue;
            slider.wholeNumbers = true;
            Text numberDisplay = spawnedModdedObject.GetObject <Text>(2);

            object loadedValue = OptionsSaver.LoadSetting(owner, SaveID);

            if (loadedValue != null && loadedValue is int intValue)
            {
                slider.value = intValue;
            }

            if (OnChange != null)
            {
                OnChange((int)slider.value);
            }

            numberDisplay.text = slider.value.ToString();

            slider.onValueChanged.AddListener(delegate(float value)
            {
                OptionsSaver.SetSetting(owner, SaveID, (int)value, true);

                if (OnChange != null)
                {
                    OnChange((int)value);
                }

                numberDisplay.text = value.ToString();
            });

            applyCustomRect(spawnedModdedObject.gameObject);

            if (OnCreate != null)
            {
                OnCreate(slider);
            }
        }
Exemplo n.º 8
0
        /// <summary>
        /// Places the page item in the page
        /// </summary>
        /// <param name="holder"></param>
        /// <param name="owner"></param>
        public override void CreatePageItem(GameObject holder, Mod owner)
        {
            GameObject spawnedPrefab = InternalAssetBundleReferences.ModsWindow.InstantiateObject("Label");

            spawnedPrefab.transform.parent = holder.transform;

            ModdedObject spawnedModdedObject = spawnedPrefab.GetComponent <ModdedObject>();
            Text         text = spawnedModdedObject.GetObject <Text>(0);

            text.text = DisplayName;

            applyCustomRect(spawnedPrefab);

            if (OnCreate != null)
            {
                OnCreate(text);
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// Gets the <see cref="UnityEngine.Object"/> at the specified index and casts it to type <typeparamref name="T"/>
        /// </summary>
        /// <typeparam name="T">The type of the object at the index</typeparam>
        /// <param name="moddedObject"></param>
        /// <param name="index">The index of the <see cref="ModdedObject.objects"/> <see cref="List{T}"/></param>
        /// <returns>The <see cref="UnityEngine.Object"/> at the specified index, casted to type <typeparamref name="T"/></returns>
        /// <exception cref="ArgumentNullException">If <paramref name="moddedObject"/> is <see langword="null"/></exception>
        /// <exception cref="IndexOutOfRangeException">If the given index is outside the range of <see cref="ModdedObject.objects"/></exception>
        /// <exception cref="InvalidCastException">If the <see cref="UnityEngine.Object"/> at index <paramref name="index"/> is not of type <typeparamref name="T"/></exception>
        public static T GetObject <T>(this ModdedObject moddedObject, int index) where T : UnityEngine.Object
        {
            if (moddedObject == null)
            {
                throw new ArgumentNullException(nameof(moddedObject));
            }

            if (index < 0 || index >= moddedObject.objects.Count)
            {
                throw new IndexOutOfRangeException("Given index was not in the range of the objects list:\tMin: 0 " + "Max: " + (moddedObject.objects.Count - 1) + ", Recieved: " + index);
            }

            if (moddedObject.objects[index] is T)
            {
                return(moddedObject.objects[index] as T);
            }

            throw new InvalidCastException("Object at index " + index + " could not be casted to type " + typeof(T).ToString());
        }
Exemplo n.º 10
0
        /// <summary>
        /// Places the page item in the page
        /// </summary>
        /// <param name="holder"></param>
        /// <param name="owner"></param>
        public override void CreatePageItem(GameObject holder, Mod owner)
        {
            GameObject spawnedPrefab = InternalAssetBundleReferences.ModsWindow.InstantiateObject("Button");

            spawnedPrefab.transform.parent = holder.transform;

            ModdedObject spawnedModdedObject = spawnedPrefab.GetComponent <ModdedObject>();
            Button       button = spawnedModdedObject.GetObject <Button>(0);

            button.onClick.AddListener(delegate { OnClick(); });
            spawnedModdedObject.GetObject <Text>(1).text = DisplayName;

            applyCustomRect(spawnedPrefab);

            if (OnCreate != null)
            {
                OnCreate(button);
            }
        }
Exemplo n.º 11
0
        /// <summary>
        /// Creates a dialoge where the user can select one of 2 options
        /// </summary>
        /// <param name="message">The text that will be displayed on screen</param>
        /// <param name="button1Text">The text on the first button</param>
        /// <param name="onPressButton1">When the first button is pressed, this will be called, then the window will be closed, if <see langword="null"/>, it will just close the window</param>
        /// <param name="button2Text">The text on the second button</param>
        /// <param name="onPressButton2">When the first button is pressed, this will be called, then the window will be closed, if <see langword="null"/>, it will just close the window</param>
        public Generic2ButtonDialogue(string message, string button1Text, Action onPressButton1, string button2Text, Action onPressButton2)
        {
            _spawnedObject = InternalAssetBundleReferences.ModsWindow.InstantiateObject("Generic2ButtonDialoge").GetComponent <ModdedObject>();

            _displayText = _spawnedObject.GetObject <Text>(0);
            _button1     = _spawnedObject.GetObject <Button>(1);
            _button2     = _spawnedObject.GetObject <Button>(2);

            _button1.GetComponentInChildren <Text>().text = button1Text;
            _button2.GetComponentInChildren <Text>().text = button2Text;

            _displayText.text = message;
            _button1.onClick.AddListener(onButton1Clicked);
            _button2.onClick.AddListener(onButton2Clicked);

            _onButton1ClickedCallback = onPressButton1;
            _onButton2ClickedCallback = onPressButton2;

            IsWindowOpen = true;
        }
Exemplo n.º 12
0
        /// <summary>
        /// Places the page item in the page
        /// </summary>
        /// <param name="holder"></param>
        /// <param name="owner"></param>
        public override void CreatePageItem(GameObject holder, Mod owner)
        {
            GameObject spawnedObject = InternalAssetBundleReferences.ModsWindow.InstantiateObject("Checkbox");

            spawnedObject.transform.parent = holder.transform;
            ModdedObject moddedObject = spawnedObject.GetComponent <ModdedObject>();
            Toggle       toggle       = moddedObject.GetObject <Toggle>(0);

            toggle.isOn = DefaultValue;
            moddedObject.GetObject <GameObject>(1).GetComponent <Text>().text = DisplayName;

            object loadedBool = OptionsSaver.LoadSetting(owner, SaveID);

            if (loadedBool != null && loadedBool is bool boolValue)
            {
                toggle.isOn = boolValue;
            }

            if (OnChange != null)
            {
                OnChange(toggle.isOn);
            }

            toggle.onValueChanged.AddListener(delegate(bool value)
            {
                OptionsSaver.SetSetting(owner, SaveID, value, true);

                if (OnChange != null)
                {
                    OnChange(value);
                }
            });

            applyCustomRect(moddedObject.gameObject);

            if (OnCreate != null)
            {
                OnCreate(toggle);
            }
        }
Exemplo n.º 13
0
        static void initilizeUI()
        {
            GameObject   spawnedUI            = InternalAssetBundleReferences.TwitchMode.InstantiateObject("Canvas");
            ModdedObject spawedUIModdedObject = spawnedUI.GetComponent <ModdedObject>();

            Logger logger = spawnedUI.AddComponent <Logger>();

            logger.Animator   = spawedUIModdedObject.GetObject <Animator>(0);
            logger.LogText    = spawedUIModdedObject.GetObject <Text>(1);
            logger.Container  = spawedUIModdedObject.GetObject <GameObject>(2);
            logger.InputField = spawedUIModdedObject.GetObject <InputField>(3);

            FPSCount fps = spawnedUI.AddComponent <FPSCount>();

            fps.Counter = spawedUIModdedObject.GetObject <Text>(4);

            ModSuggestingManager modSuggestingManager     = spawnedUI.AddComponent <ModSuggestingManager>();
            ModdedObject         modSuggestingManagerInfo = spawedUIModdedObject.GetObject <ModdedObject>(5);

            modSuggestingManager.DisplayText           = modSuggestingManagerInfo.GetObject <Text>(0);
            modSuggestingManager.ModSuggestionAnimator = modSuggestingManagerInfo.GetObject <Animator>(1);
        }
Exemplo n.º 14
0
        /// <summary>
        /// Initilizes the <see cref="ModDownloadInfoItem"/>
        /// </summary>
        /// <param name="holder"></param>
        public void Init(ModsHolder.ModHolder holder)
        {
            ModdedObject moddedObject = GetComponent <ModdedObject>();

            _modImage          = moddedObject.GetObject <Image>(0);
            _nameDisplay       = moddedObject.GetObject <Text>(1);
            _desciptionDisplay = moddedObject.GetObject <Text>(2);
            _creatorText       = moddedObject.GetObject <Text>(3);
            _downloadButton    = moddedObject.GetObject <Button>(4);
            _loadButton        = moddedObject.GetObject <Button>(5);

            _modDownloadUrl = holder.DownloadLink;

            _downloadButton.onClick.AddListener(onDownloadButtonClicked);
            _loadButton.onClick.AddListener(onLoadButtonClicked);

            _nameDisplay.text       = holder.ModName.Replace("&lt;", "<").Replace("&#39;", "'");            // makes sure we show "<" like "<" and not "&lt;"
            _desciptionDisplay.text = holder.Description.Replace("&lt;", "<").Replace("&#39;", "'");        // makes sure we show "<" like "<" and not "&lt;"
            _creatorText.text       = "by: " + holder.CreatorID.Replace("&lt;", "<").Replace("&#39;", "'"); // makes sure we show "<" like "<" and not "&lt;";

            StartCoroutine(downloadImageAsync(holder.ImageLink));
        }
Exemplo n.º 15
0
        // Old mod loading system
        IEnumerator setModImageFromURLRoutine(Mod mod, string url)
        {
            UnityWebRequest webRequest = UnityWebRequestTexture.GetTexture(url);

            yield return(webRequest.SendWebRequest());

            if (webRequest.isNetworkError || webRequest.isHttpError)
            {
                debug.Log("Error dowloading preview image for mod: \"" + mod.GetUniqueID() + "\":\n" + webRequest.error, Color.red);
                yield break;
            }

            ModdedObject modWindowItem = findModItemWithName(mod.GetUniqueID());

            if (modWindowItem != null)
            {
                DownloadHandlerTexture textureDownloader = webRequest.downloadHandler as DownloadHandlerTexture;
                modWindowItem.GetObject <RawImage>(2).texture = textureDownloader.texture;
            }
            else
            {
                debug.Log("Error: Could not find mod item in mods window for mod: \"" + mod.GetUniqueID() + "\"", Color.red);
            }
        }
Exemplo n.º 16
0
    public void LoadScenery()
    {
        try
        {
            GameObject hider = new GameObject();
            char       dsc   = System.IO.Path.DirectorySeparatorChar;

            using (WWW www = new WWW("file://" + Path + dsc + "assetbundle" + dsc + "mod"))
            {
                if (www.error != null)
                {
                    throw new Exception("Loading had an error:" + www.error);
                }

                AssetBundle bundle = www.assetBundle;
                try
                {
                    XmlDocument doc   = new XmlDocument();
                    string[]    files = System.IO.Directory.GetFiles(Path, "*.xml");
                    doc.Load(files[0]);
                    XmlElement  xelRoot  = doc.DocumentElement;
                    XmlNodeList ModNodes = xelRoot.SelectNodes("/Mod");

                    foreach (XmlNode Mod in ModNodes)
                    {
                        modName        = Mod["ModName"].InnerText;
                        modDiscription = Mod["ModDiscription"].InnerText;
                    }
                    XmlNodeList ObjectNodes = xelRoot.SelectNodes("/Mod/Objects/Object");

                    foreach (XmlNode ParkOBJ in ObjectNodes)
                    {
                        try
                        {
                            ModdedObject MO    = null;
                            GameObject   asset = Instantiate(bundle.LoadAsset(ParkOBJ["OBJName"].InnerText)) as GameObject;
                            asset.name = Identifier + "@" + ParkOBJ["OBJName"].InnerText;
                            switch (ParkOBJ["Type"].InnerText)
                            {
                            case "deco":
                                DecoMod DM = new DecoMod();
                                DM.HeightDelta     = float.Parse(ParkOBJ["heightDelta"].InnerText);
                                DM.GridSubdivision = 1f;
                                DM.SnapCenter      = Convert.ToBoolean(ParkOBJ["snapCenter"].InnerText);
                                DM.category        = ParkOBJ["category"].InnerText;
                                DM.BuildOnGrid     = Convert.ToBoolean(ParkOBJ["grid"].InnerText);
                                DM.gridSubdivision = float.Parse(ParkOBJ["gridSubdivision"].InnerText);
                                MO = DM;
                                break;

                            case "trashbin":
                                MO = new TrashBinMod();
                                break;

                            case "seating":
                                SeatingMod SM = new SeatingMod();
                                SM.hasBackRest = false;
                                MO             = SM;
                                break;

                            case "seatingAuto":
                                SeatingAutoMod SMA = new SeatingAutoMod();
                                SMA.hasBackRest = false;
                                SMA.seatCount   = 2;
                                MO = SMA;
                                break;

                            case "lamp":
                                MO = new LampMod();
                                break;

                            case "fence":
                                FenceMod FM = new FenceMod();
                                FM.FenceFlat = null;
                                FM.FencePost = null;
                                MO           = FM;
                                break;

                            case "FlatRide":
                                FlatRideMod FR = new FlatRideMod();
                                FR.XSize                = (int)float.Parse(ParkOBJ["X"].InnerText);
                                FR.ZSize                = (int)float.Parse(ParkOBJ["Z"].InnerText);
                                FR.Excitement           = float.Parse(ParkOBJ["Excitement"].InnerText);
                                FR.Intensity            = float.Parse(ParkOBJ["Intensity"].InnerText);
                                FR.Nausea               = float.Parse(ParkOBJ["Nausea"].InnerText);
                                FR.closedAngleRetraints = getVector3(ParkOBJ["RestraintAngle"].InnerText);
                                RideAnimationMod RA = new RideAnimationMod();
                                RA.motors    = FlatRideLoader.LoadMotors(ParkOBJ, asset);
                                RA.phases    = FlatRideLoader.LoadPhases(ParkOBJ, asset);
                                FR.Animation = RA;
                                XmlNodeList WaypointsNodes = ParkOBJ.SelectNodes("Waypoints/Waypoint");
                                foreach (XmlNode xndNode in WaypointsNodes)
                                {
                                    Waypoint w = new Waypoint();
                                    w.isOuter          = Convert.ToBoolean(xndNode["isOuter"].InnerText);
                                    w.isRabbitHoleGoal = Convert.ToBoolean(xndNode["isRabbitHoleGoal"].InnerText);
                                    if (xndNode["connectedTo"].InnerText != "")
                                    {
                                        w.connectedTo = xndNode["connectedTo"].InnerText.Split(',').ToList().ConvertAll(s => Int32.Parse(s));
                                    }
                                    w.localPosition = getVector3(xndNode["localPosition"].InnerText);
                                    FR.waypoints.Add(w);
                                }
                                MO = FR;
                                break;

                            case "Shop":
                                ShopMod S = new ShopMod();

                                asset.SetActive(false);
                                XmlNodeList ProductNodes = ParkOBJ.SelectNodes("Shop/Product");
                                foreach (XmlNode ProductNode in ProductNodes)
                                {
                                    ProductMod PM = new ProductMod();
                                    switch (ProductNode["Type"].InnerText)
                                    {
                                    case "consumable":
                                        consumable C = new consumable();
                                        C.ConsumeAnimation = (consumable.consumeanimation)Enum.Parse(typeof(consumable.consumeanimation), ProductNode["ConsumeAnimation"].InnerText);
                                        C.Temprature       = (consumable.temprature)Enum.Parse(typeof(consumable.temprature), ProductNode["Temprature"].InnerText);
                                        C.portions         = Int32.Parse(ProductNode["Portions"].InnerText);
                                        PM = C;
                                        break;

                                    case "wearable":
                                        wearable W = new wearable();
                                        W.BodyLocation = (wearable.bodylocation)Enum.Parse(typeof(wearable.bodylocation), ProductNode["BodyLocation"].InnerText);
                                        PM             = W;
                                        break;

                                    case "ongoing":
                                        ongoing O = new ongoing();
                                        O.duration = Int32.Parse(ProductNode["Duration"].InnerText);
                                        PM         = O;
                                        break;

                                    default:
                                        break;
                                    }
                                    PM.Name = ProductNode["Name"].InnerText;
                                    PM.GO   = Instantiate(bundle.LoadAsset(ProductNode["Model"].InnerText)) as GameObject;
                                    PM.GO.SetActive(false);
                                    PM.Hand  = (ProductMod.hand)Enum.Parse(typeof(ProductMod.hand), ProductNode["Hand"].InnerText);
                                    PM.price = float.Parse(ProductNode["Price"].InnerText);
                                    XmlNodeList IngredientNodes = ProductNode.SelectNodes("Ingredients/Ingredient");
                                    foreach (XmlNode IngredientNode in IngredientNodes)
                                    {
                                        ingredient I = new ingredient();
                                        I.Name      = IngredientNode["Name"].InnerText;
                                        I.price     = float.Parse(IngredientNode["Price"].InnerText);
                                        I.amount    = float.Parse(IngredientNode["Amount"].InnerText);
                                        I.tweakable = Boolean.Parse(IngredientNode["tweakable"].InnerText);
                                        XmlNodeList EffectNodes = IngredientNode.SelectNodes("Effects/effect");
                                        foreach (XmlNode EffectNode in EffectNodes)
                                        {
                                            effect E = new effect();
                                            E.Type   = (effect.Types)Enum.Parse(typeof(effect.Types), EffectNode["Type"].InnerText);
                                            E.amount = float.Parse(EffectNode["Amount"].InnerText);
                                            I.effects.Add(E);
                                        }
                                        PM.ingredients.Add(I);
                                    }
                                    S.products.Add(PM);
                                }
                                MO = S;
                                break;

                            case "PathStyle":
                                Registar.RegisterPath(asset.GetComponent <Renderer>().material.mainTexture, ParkOBJ["inGameName"].InnerText, (Registar.PathType)Enum.Parse(typeof(Registar.PathType), ParkOBJ["PathStyle"].InnerText));
                                break;

                            case "CoasterCar":
                                Debug.Log("Test CoasterCar");
                                CoasterCarMod CC = new CoasterCarMod();
                                CC.CoasterName = ParkOBJ["CoasterName"].InnerText;
                                CC.Name        = ParkOBJ["inGameName"].InnerText;

                                try
                                {
                                    CC.closedAngleRetraints = getVector3(ParkOBJ["RestraintAngle"].InnerText);
                                    CC.FrontCarGO           = Instantiate(bundle.LoadAsset(ParkOBJ["FrontCarGO"].InnerText)) as GameObject;
                                }
                                catch
                                { }
                                MO        = CC;
                                MO.Name   = ParkOBJ["inGameName"].InnerText;
                                MO.Object = asset;

                                break;

                            default:
                                break;
                            }
                            if (MO != null)
                            {
                                MO.Name   = ParkOBJ["inGameName"].InnerText;
                                MO.Object = asset;
                                MO.Price  = float.Parse(ParkOBJ["price"].InnerText);
                                MO.Shader = ParkOBJ["shader"].InnerText;
                                if (ParkOBJ["BoudingBoxes"] != null)
                                {
                                    XmlNodeList BoudingBoxNodes = ParkOBJ.SelectNodes("BoudingBoxes/BoudingBox");
                                    foreach (XmlNode Box in BoudingBoxNodes)
                                    {
                                        BoundingBox BB = MO.Object.AddComponent <BoundingBox>();
                                        BB.isStatic   = false;
                                        BB.bounds.min = getVector3(Box["min"].InnerText);
                                        BB.bounds.max = getVector3(Box["max"].InnerText);
                                        BB.layers     = BoundingVolume.Layers.Buildvolume;
                                        BB.isStatic   = true;
                                    }
                                }
                                MO.Recolorable = Convert.ToBoolean(ParkOBJ["recolorable"].InnerText);
                                if (MO.Recolorable)
                                {
                                    List <Color> colors = new List <Color>();
                                    if (HexToColor(ParkOBJ["Color1"].InnerText) != new Color(0.95f, 0, 0))
                                    {
                                        colors.Add(HexToColor(ParkOBJ["Color1"].InnerText));
                                    }
                                    if (HexToColor(ParkOBJ["Color2"].InnerText) != new Color(0.32f, 1, 0))
                                    {
                                        colors.Add(HexToColor(ParkOBJ["Color2"].InnerText));
                                    }
                                    Debug.Log("Color 3" + HexToColor(ParkOBJ["Color3"].InnerText));
                                    if (ParkOBJ["Color3"].InnerText != "1C0FFF")
                                    {
                                        colors.Add(HexToColor(ParkOBJ["Color3"].InnerText));
                                    }
                                    if (HexToColor(ParkOBJ["Color4"].InnerText) != new Color(1, 0, 1))
                                    {
                                        colors.Add(HexToColor(ParkOBJ["Color4"].InnerText));
                                    }

                                    MO.Colors = colors.ToArray();
                                }
                                Registar.Register(MO).GetComponent <BuildableObject>();
                            }
                        }
                        catch (Exception e)
                        {
                            LogException(e);
                        }
                    }
                }
                catch (Exception e)
                {
                    LogException(e);
                }
                bundle.Unload(false);
                Debug.Log("Bundle Unloaded");
            }
        }
        catch (Exception e)
        {
            LogException(e);
        }
    }
Exemplo n.º 17
0
        /* New mod loading system
         * void toggleIsModDisabled(LoadedModInfo mod)
         * {
         *  if (mod == null)
         *      return;
         *              mod.IsEnabled = !mod.IsEnabled;
         *
         *  ReloadModItems();
         * }
         */

        // Old mod loading system
        void addModToList(Mod mod, GameObject parent)
        {
            bool?isModNotActive = ModsManager.Instance.IsModDeactivated(mod);

            if (!isModNotActive.HasValue)
            {
                return;
            }

            GameObject modItemPrefab = AssetLoader.GetObjectFromFile("modswindow", "ModItemPrefab", "Clone Drone in the Danger Zone_Data/");
            GameObject modItem       = Instantiate(modItemPrefab, parent.transform);

            string modName = mod.GetModName();
            string url     = mod.GetModImageURL();

            _modItems.Add(modItem);

            if (!string.IsNullOrEmpty(url))
            {
                setImageFromURL(url, mod);
            }

            ModdedObject modItemModdedObject = modItem.GetComponent <ModdedObject>();

            modItemModdedObject.GetObject <Text>(0).text = modName;                 // Set title
            modItemModdedObject.GetObject <Text>(1).text = mod.GetModDescription(); // Set description
            modItemModdedObject.GetObject <Text>(5).text = ModBotLocalizationManager.FormatLocalizedStringFromID("mods_menu_mod_id", mod.GetUniqueID());

            Button enableOrDisableButton = modItem.GetComponent <ModdedObject>().GetObject <Button>(3);

            if (isModNotActive.Value)
            {
                modItem.GetComponent <Image>().color = Color.red;
                LocalizedTextField localizedTextField = enableOrDisableButton.transform.GetChild(0).GetComponent <LocalizedTextField>();
                localizedTextField.LocalizationID = "mods_menu_enable_mod";
                Accessor.CallPrivateMethod("tryLocalizeTextField", localizedTextField);

                enableOrDisableButton.colors = new ColorBlock()
                {
                    normalColor = Color.green * 1.2f, highlightedColor = Color.green, pressedColor = Color.green * 0.8f, colorMultiplier = 1
                };
            }

            Button BroadcastButton = modItemModdedObject.GetObject <Button>(6);

            BroadcastButton.onClick.AddListener(delegate { onBroadcastButtonClicked(mod); });
            BroadcastButton.gameObject.SetActive(GameModeManager.IsMultiplayer());

            Button DownloadButton = modItemModdedObject.GetObject <Button>(7);

            DownloadButton.onClick.AddListener(delegate { onDownloadButtonClicked(mod); });
            bool hasNoFile = ModsManager.Instance.GetIsModOnlyLoadedInMemory(mod);

            DownloadButton.gameObject.SetActive(hasNoFile);

            int modId = ModsManager.Instance.GetAllMods().IndexOf(mod);

            modItemModdedObject.GetObject <Button>(3).onClick.AddListener(delegate { toggleIsModDisabled(modId); });       // Add disable button callback
            modItemModdedObject.GetObject <Button>(4).onClick.AddListener(delegate { openModsOptionsWindowForMod(mod); }); // Add Mod Options button callback
            modItemModdedObject.GetObject <Button>(4).interactable = mod.ImplementsSettingsWindow();
        }