Esempio n. 1
0
        ////////////////

        private bool SetOverhaulMenuDataOffset(Vector2 newValue)
        {
            Mod ohMod = ModLoader.GetMod("OverhaulMod");

            if (ohMod == null)
            {
                return(false);
            }

            Type ohModType      = ohMod.GetType();
            var  ohLogoPosField = ohModType.GetField("mainMenuDataOffset", ReflectionLibraries.MostAccess);

            if (ohLogoPosField != null)
            {
                if (this.OldOverhaulLogoPos != default(Vector2))
                {
                    this.OldOverhaulLogoPos = (Vector2)ohLogoPosField.GetValue(ohMod);
                }
                ohLogoPosField.SetValue(ohMod, newValue);
            }
            else                        // For version 3.3
            {
                Type classType = ReflectionLibraries.GetTypeFromAssembly(ohModType.AssemblyQualifiedName, "TerrariaOverhaul.UI.OverhaulUI");
                if (classType == null)
                {
                    return(false);
                }

                ReflectionLibraries.Set(classType, null, "mainMenuDataOffset", newValue);
            }

            return(true);
        }
Esempio n. 2
0
        /// <summary>
        /// Gets the recommended element to add content to an "inner" container element of a given menu UI.
        /// </summary>
        /// <param name="uiInnerContainer"></param>
        /// <returns></returns>
        public static UIElement GetMenuContainerInsertPoint(UIElement uiInnerContainer)
        {
            List <UIElement> uiContainerElems;

            if (!ReflectionLibraries.Get(uiInnerContainer, "Elements", out uiContainerElems) ||
                uiContainerElems == null)
            {
                LogLibraries.AlertOnce("No Elements for " + uiInnerContainer?.GetType().Name);
                return(null);
            }

            //Type uiContainerType = uiInnerContainer.GetType();
            //FieldInfo uiContainerElemsField = uiContainerType.GetField( "Elements", BindingFlags.Instance | BindingFlags.NonPublic );
            //List<UIElement> uiContainerElems = (List<UIElement>)uiContainerElemsField.GetValue( uiInnerContainer );

            for (int i = 0; i < uiContainerElems.Count; i++)
            {
                if (uiContainerElems[i] is UIElement &&
                    !(uiContainerElems[i] is UIList) &&
                    !(uiContainerElems[i] is UIScrollbar))
                {
                    return(uiContainerElems[i]);
                }
            }

            LogLibraries.AlertOnce("Not found");
            return(null);
        }
Esempio n. 3
0
        /// <summary>
        /// Gets the mod name of a mod-representing menu UI (sometimes needs the previous UI for context).
        /// </summary>
        /// <param name="prevUi"></param>
        /// <param name="currUi"></param>
        /// <returns></returns>
        public static string GetModName(UIState prevUi, UIState currUi)
        {
            // = uiType.GetField( "_localMod", BindingFlags.NonPublic | BindingFlags.Instance );
            object localmod;                    // <- is a LocalMod class

            if (!ReflectionLibraries.Get(currUi, "_localMod", out localmod))
            {
                LogLibraries.Warn("No '_localMod' field in " + currUi.GetType());
                return(null);
            }

            if (localmod != null)
            {
                return(ModMenuLibraries.GetLocalMod(localmod).name);
            }
            else
            {
                if (prevUi?.GetType().Name == "UIModBrowser")
                {
                    return(ModMenuLibraries.GetSelectedModBrowserModName(prevUi));
                }
            }

            LogLibraries.Alert("No mod loaded.");
            return(null);
        }
Esempio n. 4
0
        ////////////////

        private static void RemoveWingSlotProperty(ModPlayer mywingplayer, string propName)
        {
            object wingEquipSlot;

            if (ReflectionLibraries.Get(mywingplayer, propName, out wingEquipSlot) && wingEquipSlot != null)
            {
                Item wingItem;

                if (ReflectionLibraries.Get(wingEquipSlot, "Item", out wingItem))
                {
                    if (wingItem != null && !wingItem.IsAir)
                    {
                        ReflectionLibraries.Set(wingEquipSlot, "Item", new Item());
                        ReflectionLibraries.Set(mywingplayer, propName, wingEquipSlot);
                    }
                }
                else
                {
                    LogLibraries.Warn("Invalid Wing Mod item slot for " + propName);
                }
            }
            else
            {
                LogLibraries.Log("No Wing Mod item slot recognized for " + propName);
            }
        }
Esempio n. 5
0
        ////

        public void SetOverride <T>(string propName, T value)
        {
            if (!ReflectionLibraries.Get(this, propName, out T _))
            {
                throw new ModLibsException("Invalid property " + propName + " of type " + typeof(T).Name);
            }
            this.Overrides[propName] = value;
        }
 public bool UnsetOverride <T>(string propName)
 {
     if (!ReflectionLibraries.Get(this, propName, out T _))
     {
         throw new ModLibsException("Invalid property " + propName + " of type " + typeof(T).Name);
     }
     return(this.Overrides.Remove(propName));
 }
        /// <summary>
        /// Gets a menu UI corresponding to a given menu definition.
        /// </summary>
        /// <param name="menuDef"></param>
        /// <returns></returns>
        public static UIState GetMenuUI(MenuUIDefinition menuDef)
        {
            string menuUiName = Enum.GetName(typeof(MenuUIDefinition), menuDef);

            UIState menuUi;

            ReflectionLibraries.Get(typeof(MenuUIs), null, menuUiName, out menuUi);

            return(menuUi);
        }
Esempio n. 8
0
        /// <summary>
        /// Clears mod data for a player.
        /// </summary>
        /// <param name="player"></param>
        /// <param name="exemptMods">Names of mods to skip (internal names).</param>
        public static void ModdedExtensionsReset(Player player, ISet <string> exemptMods)
        {
            foreach (Mod mod in ModLoader.Mods)
            {
                if (exemptMods.Contains(mod.Name))
                {
                    continue;
                }

                try {
                    mod.Call("ResetPlayerModData", player);
                } catch (Exception e) {
                    LogLibraries.Warn("Mod.Call failed for " + mod.Name + ": " + e.ToString());
                }
            }

            var wingSlotMod      = ModLoader.GetMod("WingSlot");
            var thoriumMod       = ModLoader.GetMod("ThoriumMod");
            var weaponOutMod     = ModLoader.GetMod("WeaponOut");
            var weaponOutLiteMod = ModLoader.GetMod("WeaponOutLite");

            if (wingSlotMod != null && !exemptMods.Contains("WingSlot"))
            {
                ModPlayer modplayer = player.GetModPlayer(wingSlotMod, "WingSlotPlayer");

                PlayerModLibraries.RemoveWingSlotProperty(modplayer, "EquipSlot");
                PlayerModLibraries.RemoveWingSlotProperty(modplayer, "VanitySlot");
                PlayerModLibraries.RemoveWingSlotProperty(modplayer, "DyeSlot");
            }

            if (thoriumMod != null && !exemptMods.Contains("ThoriumMod"))
            {
                ModPlayer modplayer = player.GetModPlayer(thoriumMod, "ThoriumPlayer");

                // "Inspiration" resets to the recommended default:
                ReflectionLibraries.Set(modplayer, "bardResource", 8);
            }

            if (weaponOutMod != null && !exemptMods.Contains("WeaponOut"))
            {
                ModPlayer modplayer = player.GetModPlayer(weaponOutMod, "PlayerFX");

                // "Frenzy Heart" resets:
                ReflectionLibraries.Set(modplayer, "demonBlood", false);
            }

            if (weaponOutLiteMod != null && !exemptMods.Contains("WeaponOutLite"))
            {
                ModPlayer modplayer = player.GetModPlayer(weaponOutLiteMod, "PlayerFX");

                // "Frenzy Heart" resets:
                ReflectionLibraries.Set(modplayer, "demonBlood", false);
            }
        }
        ////////////////

        private static UIState GetMainMenuUI(string menuFieldName)
        {
            UIState menuUI;

            if (!ReflectionLibraries.Get(typeof(Main), null, menuFieldName, out menuUI))
            {
                LogLibraries.Warn("Could not find Main." + menuFieldName);
                return(null);
            }

            return(menuUI);
        }
Esempio n. 10
0
        private static TmodFile GetLocalMod(object localmod)
        {
            object rawModFile;

            if (!ReflectionLibraries.Get(localmod, "modFile", out rawModFile) || rawModFile == null)
            {
                LogLibraries.Warn("Empty 'modFile' field");
                return(null);
            }

            return((TmodFile)rawModFile);
        }
        /*public static readonly string[] VanillaWorldGenTaskNames = new string[] {
         *      "Reset",
         *      "Terrain",
         *      "Tunnels",
         *      "Sand",
         *      "Mount Caves",
         *      "Dirt Wall Backgrounds",
         *      "Rocks In Dirt",
         *      "Dirt In Rocks",
         *      "Clay",
         *      "Small Holes",
         *      "Dirt Layer Caves",
         *      "Rock Layer Caves",
         *      "Surface Caves",
         *      "Slush Check",
         *      "Grass",
         *      "Jungle",
         *      "Marble",
         *      "Granite",
         *      "Mud Caves To Grass",
         *      "Full Desert",
         *      "Floating Islands",
         *      "Mushroom Patches",
         *      "Mud To Dirt",
         *      "Silt",
         *      "Shinies",
         *      "Webs",
         *      "Underworld",
         *      "Lakes",
         *      "Dungeon",
         *      "Corruption",
         *      "Slush",
         *      "Mud Caves To Grass",
         *      "Beaches",
         *      "Gems",
         *      "Gravitating Sand",
         *      "Clean Up Dirt",
         *      "Pyramids",
         *      "Dirt Rock Wall Runner",
         *      "Living Trees",
         *      "Wood Tree Walls",
         *      "Altars",
         *      "Wet Jungle",
         *      "Remove Water From Sand",
         *      "Jungle Temple",
         *      "Hives",
         *      "Jungle Chests",
         *      "Smooth World",
         *      "Settle Liquids",
         *      "Waterfalls",
         *      "Ice",
         *      "Wall Variety",
         *      "Traps",
         *      "Life Crystals",
         *      "Statues",
         *      "Buried Chests",
         *      "Surface Chests",
         *      "Jungle Chests Placement",
         *      "Water Chests",
         *      "Spider Caves",
         *      "Gem Caves",
         *      "Moss",
         *      "Temple",
         *      "Ice Walls",
         *      "Jungle Trees",
         *      "Floating Island Houses",
         *      "Quick Cleanup",
         *      "Pots",
         *      "Hellforge",
         *      "Spreading Grass",
         *      "Piles",
         *      "Moss",
         *      "Spawn Point",
         *      "Grass Wall",
         *      "Guide",
         *      "Sunflowers",
         *      "Planting Trees",
         *      "Herbs",
         *      "Dye Plants",
         *      "Webs And Honey",
         *      "Weeds",
         *      "Mud Caves To Grass",
         *      "Jungle Plants",
         *      "Vines",
         *      "Flowers",
         *      "Mushrooms",
         *      "Stalac",
         *      "Gems In Ice Biome",
         *      "Random Gems",
         *      "Moss Grass",
         *      "Muds Walls In Jungle",
         *      "Larva",
         *      "Settle Liquids Again",
         *      "Tile Cleanup",
         *      "Lihzahrd Altars",
         *      "Micro Biomes",
         *      "Final Cleanup",
         * };*/



        ////////////////

        /// <summary>
        /// Gets the full list of world gen passes.
        /// </summary>
        /// <returns></returns>
        public static IList <GenPass> GetWorldGenPasses()
        {
            if (!ReflectionLibraries.Get(typeof(WorldGen), null, "_generator", out WorldGenerator generator))
            {
                return(null);
            }
            if (!ReflectionLibraries.Get(typeof(WorldGenerator), generator, "_passes", out IList <GenPass> passes))
            {
                return(null);
            }
            return(passes);
        }
Esempio n. 12
0
        ////////////////

        public T Get <T>(string propName)
        {
            if (!this.Overrides.TryGetValue(propName, out object val))
            {
                if (!ReflectionLibraries.Get(this, propName, out T myval))
                {
                    throw new ModLibsException("Invalid property " + propName + " of type " + typeof(T).Name);
                }
                return(myval);
            }

            if (val.GetType() != typeof(T))
            {
                throw new ModLibsException("Invalid type (" + typeof(T).Name + ") of property " + propName + ".");
            }
            return((T)val);
        }
        /// <summary>
        /// Loads the mod browser menu.
        /// </summary>
        public static void OpenModBrowserMenu()
        {
            Type interfaceType = ReflectionLibraries.GetMainAssembly()
                                 .GetType("Terraria.ModLoader.UI.Interface");

            int modBrowserMenuMode;

            if (!ReflectionLibraries.Get(interfaceType, null, "modBrowserID", out modBrowserMenuMode))
            {
                LogLibraries.Warn("Could not switch to mod browser menu context.");
                return;
            }

            Main.PlaySound(SoundID.MenuTick);
            Main.menuMode = modBrowserMenuMode;

            UIState modBrowserUi;

            if (!ReflectionLibraries.Get(interfaceType, null, "modBrowser", out modBrowserUi))
            {
                LogLibraries.Warn("Could not acquire mod browser UI.");
                return;
            }

            Timers.SetTimer("ModLibsModDownloadPrompt", 5, true, () => {
                if (MenuContextService.GetCurrentMenuUI()?.GetType().Name != "UIModBrowser")
                {
                    return(false);
                }

                bool isLoading;
                if (!ReflectionLibraries.Get(modBrowserUi, "loading", out isLoading))
                {
                    return(false);
                }

                if (isLoading)
                {
                    return(true);
                }

                ModMenuLibraries.ApplyModBrowserFilter("", false, new List <string>());
                return(false);
            });
        }
Esempio n. 14
0
        /// <summary>
        /// Gets the "outer" container element (the element as positioned on the screen) of a menu's UI class.
        /// </summary>
        /// <param name="ui"></param>
        /// <returns></returns>
        public static UIElement GetMenuContainerOuter(UIState ui)
        {
            UIElement elem;

            if (!ReflectionLibraries.Get(ui, "uIElement", out elem) || elem == null)
            {
                LogLibraries.AlertOnce("No uiElement for " + ui?.GetType().Name);
                return(null);
            }

            return(elem);

            //Type uiType = ui.GetType();
            //FieldInfo uiOuterBoxField = uiType.GetField( "uIElement", BindingFlags.Instance | BindingFlags.NonPublic );
            //UIElement uiOuterBox = (UIElement)uiOuterBoxField.GetValue( ui );
            //
            //return uiOuterBox;
        }
        /// <summary>
        /// Loads the UI for mod configs.
        /// </summary>
        /// <param name="config"></param>
        public static void OpenModConfigUI(ModConfig config)
        {
            Type interfaceType = ReflectionLibraries.GetMainAssembly()
                                 .GetType("Terraria.ModLoader.UI.Interface");

            if (!Main.gameMenu)
            {
                IngameOptions.Close();
                IngameFancyUI.CoverNextFrame();
                Main.playerInventory = false;
                Main.editChest       = false;
                Main.npcChatText     = "";
                Main.inFancyUI       = true;
            }
            else
            {
                if (!ReflectionLibraries.Get(interfaceType, null, "modConfigID", out Main.menuMode))
                {
                    LogLibraries.Warn("Could not get Interface.modConfigID");
                    return;
                }
            }

            UIState modConfigInterfaceObj;

            if (!ReflectionLibraries.Get(interfaceType, null, "modConfig", out modConfigInterfaceObj) || modConfigInterfaceObj == null)
            {
                LogLibraries.Warn("Could not get Interface.modConfig");
                return;
            }

            object _;

            if (!ReflectionLibraries.RunMethod(modConfigInterfaceObj, "SetMod", new object[] { config.mod, config }, out _))
            {
                LogLibraries.Warn("Could not run Interface.modConfig.SetMod");
                return;
            }

            Main.InGameUI.SetState(modConfigInterfaceObj);

            Main.PlaySound(SoundID.MenuTick);
        }
        ////

        private void BlockWingSlotIfDisabled(string fieldName)
        {
            var mymod   = (NihilismMod)this.mod;
            var myworld = ModContent.GetInstance <NihilismWorld>();

            if (myworld.Logic == null)
            {
                return;
            }

            ModPlayer mywingplayer = this.player.GetModPlayer(mymod.WingSlotMod, "WingSlotPlayer");
            object    wingEquipSlot;

            if (!ReflectionLibraries.Get(mywingplayer, fieldName, out wingEquipSlot) || wingEquipSlot == null)
            {
                return;
            }

            Item wingItem;

            if (!ReflectionLibraries.Get(wingEquipSlot, "Item", out wingItem) || wingItem == null || wingItem.IsAir)
            {
                return;
            }

            bool _;

            if (!myworld.Logic.DataAccess.IsItemEnabled(wingItem, out _, out _))
            {
                int idx = Item.NewItem(player.position, wingItem.width, wingItem.height, wingItem.type, wingItem.stack, false, wingItem.prefix, false, false);

                wingItem.position = Main.item[idx].position;
                Main.item[idx]    = wingItem;

                if (Main.netMode == 1)                      // Client
                {
                    NetMessage.SendData(21, -1, -1, null, idx, 1f, 0f, 0f, 0, 0, 0);
                }

                ReflectionLibraries.Set(wingEquipSlot, "Item", new Item());
                ReflectionLibraries.Set(mywingplayer, fieldName, wingEquipSlot);
            }
        }
Esempio n. 17
0
        /// <summary>
        /// Gets the "inner" container element (contains the UI's components) of a menu's UI class's "outer" container
        /// element.
        /// </summary>
        /// <param name="uiOuterBox"></param>
        /// <returns></returns>
        public static UIElement GetMenuContainerInner(UIElement uiOuterBox)
        {
            List <UIElement> uiOuterBoxElems;

            if (!ReflectionLibraries.Get(uiOuterBox, "Elements", out uiOuterBoxElems) ||
                uiOuterBoxElems == null ||
                uiOuterBoxElems.Count == 0)
            {
                LogLibraries.AlertOnce("No Elements for " + uiOuterBox?.GetType().Name);
                return(null);
            }

            return(uiOuterBoxElems[0]);

            //Type uiOuterBoxType = uiOuterBox.GetType();
            //FieldInfo uiOuterBoxElemsField = uiOuterBoxType.GetField( "Elements", BindingFlags.Instance | BindingFlags.NonPublic );
            //List<UIElement> uiOuterBoxElems = (List<UIElement>)uiOuterBoxElemsField.GetValue( uiOuterBox );
            //
            //return uiOuterBoxElems[0];
        }
Esempio n. 18
0
        ////////////////

        /// <summary>
        /// Retrieves the file data for a given mod within a given mod-representing menu UI (typically the Mod Info menu page).
        /// </summary>
        /// <param name="ui"></param>
        /// <returns></returns>
        public static TmodFile GetModFile(UIState ui)
        {
            FieldInfo uiLocalmodField;            // = uiType.GetField( "_localMod", BindingFlags.NonPublic | BindingFlags.Instance );

            if (!ReflectionLibraries.Get(ui, "_localMod", out uiLocalmodField) || uiLocalmodField == null)
            {
                LogLibraries.Warn("No '_localMod' field in " + ui.GetType());
                return(null);
            }

            object localmod = uiLocalmodField.GetValue(ui);

            if (localmod != null)
            {
                return(ModMenuLibraries.GetLocalMod(localmod));
            }

            LogLibraries.Alert("No mod loaded.");
            return(null);
        }
Esempio n. 19
0
        ////

        private static string GetSelectedModBrowserModName(UIState modBrowserUi)
        {
            object modDownloadItem;

            if (!ReflectionLibraries.Get(modBrowserUi, "SelectedItem", out modDownloadItem) || modDownloadItem == null)
            {
                LogLibraries.Warn("No 'selectedItem' list item in " + modBrowserUi.GetType().ToString());
                return(null);
            }

            string modName;

            if (!ReflectionLibraries.Get(modDownloadItem, "ModName", out modName))
            {
                LogLibraries.Warn("Invalid 'mod' data in mod browser listed entry.");
                return(null);
            }

            return(modName);
        }
Esempio n. 20
0
        private void ApplyTabButtonMouseOver(string tabName)
        {
            UITextPanelButton button = this.TabButtonsByName[tabName];
            var evt = new UIMouseEvent(button, new Vector2(Main.mouseX, Main.mouseY));

            if (!this.TabButtonHover[tabName])
            {
                this.TabButtonHover[tabName] = true;

                ReflectionLibraries.Set(button, "_isMouseHovering", true);

                Timers.RunNow(() => button.MouseOver(evt));
            }

            if (Main.mouseLeft && Main.mouseLeftRelease)
            {
                Timers.RunNow(() => {
                    button.Click(evt);
                });
            }
        }
        private static UIState GetInterfacesMenuUI(string menuFieldName)
        {
            Assembly ass = ReflectionLibraries.GetMainAssembly();
            //Type interfaceType = ass.GetType( "Terraria.ModLoader.Interface" );

            Type type = ReflectionLibraries.GetTypeFromAssembly(ass, "Terraria.ModLoader.UI.Interface");

            if (type == null)
            {
                LogLibraries.Warn("Could not find Terraria.ModLoader.UI.Interface");
                return(null);
            }

            UIState menuUI;

            if (!ReflectionLibraries.Get(type, null, menuFieldName, out menuUI))
            {
                LogLibraries.Warn("Could not find Terraria.ModLoader.UI.Interface." + menuFieldName);
                return(null);
            }
            return(menuUI);
        }
        private void ProcessUnloadedShells(Player plr, int shells)
        {
            int shellGoreSlot = TMRMod.Instance.GetGoreSlot("Gores/ShellCasing");

            Vector2 itemScrPos;

            ReflectionLibraries.RunMethod(
                Main.instance,
                "DrawPlayerItemPos",
                new object[] { plr.gravDir, plr.HeldItem.type },
                out itemScrPos
                );

            Texture2D itemTex       = Main.itemTexture[plr.HeldItem.type];
            var       itemTexOffset = new Vector2(itemTex.Width / 2, itemScrPos.Y);

            Vector2 itemWldPos = plr.itemLocation + itemTexOffset;

            for (int i = 0; i < shells; i++)
            {
                Gore.NewGore(itemWldPos, ShellCasing.GetVelocity(), shellGoreSlot, ShellCasing.GetScale());
            }
        }
Esempio n. 23
0
        ////

        /// <summary>
        /// Gets the shown description text from the given mod-representing UI, if applicable.
        /// </summary>
        /// <param name="output"></param>
        /// <returns></returns>
        public static bool GetModDescriptionFromCurrentMenuUI(out string output)
        {
            UIState modUI = Main.MenuUI.CurrentState;

            if (modUI == null)
            {
                output = "No current UI state found.";
                return(false);
            }
            if (modUI.GetType().Name != "UIModInfo")
            {
                output = "Not currently viewing mod info (or no such UI found).";
                return(false);
            }

            UIPanel msgBox;

            if (!ReflectionLibraries.Get(modUI, "_modInfo", out msgBox))
            {
                output = "No _modInfo field.";
                return(false);
            }

            string modDesc;

            if (!ReflectionLibraries.Get(msgBox, "_text", out modDesc))
            {
                if (!ReflectionLibraries.Get(msgBox, "text", out modDesc))
                {
                    output = "No modInfo._text or text field.";
                    return(false);
                }
            }

            output = modDesc;
            return(true);
        }
        ////////////////

        public static IEnumerable <DrawData> GetPlayerLayerForHeldItem(
            PlayerDrawInfo plrDrawInfo,
            Color plrLight,
            float shadow = 0f)
        {
            DrawData drawData;

            Player plr       = plrDrawInfo.drawPlayer;
            Color  itemLight = PlayerDraw.GetItemLightColor(plr, plrLight);

            Vector2 itemScrPos;

            ReflectionLibraries.RunMethod(
                Main.instance,
                "DrawPlayerItemPos",
                new object[] { plr.gravDir, plr.HeldItem.type },
                out itemScrPos
                );

            Texture2D itemTex       = Main.itemTexture[plr.HeldItem.type];
            var       itemTexOffset = new Vector2(itemTex.Width / 2, itemScrPos.Y);

            Vector2 itemWldPos = plr.itemLocation.Floor();            //plr.position + (plr.itemLocation - plr.position);

            Vector2 origin = new Vector2(
                (float)(-itemScrPos.X),
                (float)(itemTex.Height / 2)
                );

            if (plr.direction == -1)
            {
                origin.X = (float)(itemTex.Width + itemScrPos.X);
            }

            //

            Vector2 pos = (itemWldPos - Main.screenPosition) + itemTexOffset;

            pos.Y += plrDrawInfo.drawPlayer.gfxOffY;
            pos.Y *= plr.gravDir;

            DrawData getDrawData(Texture2D tex, Color color)
            {
                return(new DrawData(
                           texture: tex,
                           position: pos,
                           sourceRect: new Rectangle(0, 0, itemTex.Width, itemTex.Height),
                           color: color,
                           rotation: plr.itemRotation,
                           origin: origin,
                           scale: plr.HeldItem.scale,
                           effect: plrDrawInfo.spriteEffects,
                           inactiveLayerDepth: 0
                           ));
            }

            //

            drawData = getDrawData(itemTex, plr.HeldItem.GetAlpha(itemLight));
            //drawInfo.Draw( Main.spriteBatch );
            yield return(drawData);

            if (plr.HeldItem.color != default(Color))
            {
                drawData = getDrawData(itemTex, plr.HeldItem.GetColor(itemLight));
                //drawInfo.Draw( Main.spriteBatch );
                yield return(drawData);
            }

            if (plr.HeldItem.glowMask != -1)
            {
                drawData = getDrawData(
                    Main.glowMaskTexture[(int)plr.HeldItem.glowMask],
                    new Color(250, 250, 250, plr.HeldItem.alpha)
                    );
                //drawInfo.Draw( Main.spriteBatch );
                yield return(drawData);
            }
        }
Esempio n. 25
0
        /// <summary>
        /// Filters the mod browser mod list to a specific set of mods, or none.
        /// </summary>
        /// <param name="filterName">Name of the filter (appears on the Download All button).</param>
        /// <param name="isFiltered">Indicates whether to simply clear the filter list and filtered state.</param>
        /// <param name="modNames">List of (internal) mod names to filter the list to.</param>
        public static void ApplyModBrowserFilter(string filterName, bool isFiltered, List <string> modNames)
        {
            Type interfaceType = ReflectionLibraries.GetMainAssembly()
                                 .GetType("Terraria.ModLoader.UI.Interface");

            UIState modBrowserUi;

            if (!ReflectionLibraries.Get(interfaceType, null, "modBrowser", out modBrowserUi) || modBrowserUi == null)
            {
                LogLibraries.Warn("Could not acquire mod browser UI.");
                return;
            }

            Type         uiType            = modBrowserUi.GetType();
            PropertyInfo specialFilterProp = uiType.GetProperty("SpecialModPackFilter", BindingFlags.Instance | BindingFlags.Public);
            PropertyInfo filterTitleProp   = uiType.GetProperty("SpecialModPackFilterTitle", BindingFlags.Instance | BindingFlags.NonPublic);

            if (specialFilterProp == null)
            {
                LogLibraries.Warn("Could not acquire mod browser UI 'SpecialModPackFilter'");
                return;
            }
            if (filterTitleProp == null)
            {
                LogLibraries.Warn("Could not acquire mod browser UI 'SpecialModPackFilterTitle'");
                return;
            }

            object _;

            if (!ReflectionLibraries.RunMethod(modBrowserUi, "Activate", new object[] { }, out _))
            {
                LogLibraries.Warn("Could not acquire run method 'Activate' for mod browser");
                return;
            }
            if (!ReflectionLibraries.Set(modBrowserUi, "UpdateNeeded", true))
            {
                LogLibraries.Warn("Could not acquire set 'updateNeeded' for mod browser");
                return;
            }
            if (!ReflectionLibraries.Set(modBrowserUi, "UpdateFilterMode", (UpdateFilter)0))
            {
                LogLibraries.Warn("Could not acquire set 'UpdateFilterMode' for mod browser");
                return;
            }

            UIElement inputTextUi;                //UIInputTextField

            if (ReflectionLibraries.Get(modBrowserUi, "FilterTextBox", out inputTextUi) && inputTextUi != null)
            {
                if (!ReflectionLibraries.Set(inputTextUi, "_currentString", (object)""))
                {
                    LogLibraries.Alert("Could not acquire set '_currentString' of mod browser's filter box");
                }
            }
            else
            {
                LogLibraries.Alert("Could not acquire get 'FilterTextBox' from mod browser");
            }

            //UIElement filterToggle;
            //ReflectionLibaries.GetProperty<UIElement>( modBrowserUi, "UpdateFilterToggle", out filterToggle );
            //ReflectionLibaries.SetProperty( filterToggle, "CurrentState", 0 );

            if (isFiltered)
            {
                specialFilterProp.SetValue(modBrowserUi, modNames);
                filterTitleProp.SetValue(modBrowserUi, filterName);
            }
            else
            {
                specialFilterProp.SetValue(modBrowserUi, null);
                filterTitleProp.SetValue(modBrowserUi, "");
            }
        }
Esempio n. 26
0
        internal static void MergeConfigsForType(Type configType, ModConfig toConfig, ModConfig froConfig)
        {
            var defaultConfig = (ModConfig)Activator.CreateInstance(
                configType,
                BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic,
                null,
                new object[] { },
                null
                );

            if (defaultConfig == null)
            {
                throw new ModLibsException("Could generate default template for ModConfig " + configType.Name);
            }

            JsonConvert.PopulateObject("{}", defaultConfig, ConfigManager.serializerSettings);

            object froVal, defaultVal;
            IEnumerable <MemberInfo> members = configType.GetMembers(BindingFlags.Public | BindingFlags.Instance);

            foreach (MemberInfo memb in members)
            {
                if (memb.MemberType == MemberTypes.Property)
                {
                    var prop = (PropertyInfo)memb;

                    if (!prop.CanWrite || !prop.CanRead)
                    {
                        continue;
                    }
                    if (prop.GetCustomAttribute <JsonIgnoreAttribute>() != null)
                    {
                        continue;
                    }
                }
                else if (memb.MemberType != MemberTypes.Field)
                {
                    continue;
                }

                if (!ReflectionLibraries.Get(froConfig, memb.Name, out froVal))
                {
                    throw new ModLibsException("Could retrieve member " + memb.Name + " from 'fro' instance of " + configType.Name);
                }
                if (!ReflectionLibraries.Get(defaultConfig, memb.Name, out defaultVal))
                {
                    throw new ModLibsException("Could retrieve member " + memb.Name + " from template instance of " + configType.Name);
                }

                bool froValueIsDefault = froVal?.Equals(defaultVal)
                                         ?? froVal == defaultVal;   // <- default is null
                bool froValueIsCollection = froVal is IEnumerable;
                bool froValueIsEmpty      = froValueIsCollection &&
                                            (froVal == null || ((IEnumerable)froVal).Cast <object>().Count() == 0);

                if ((!froValueIsCollection && !froValueIsDefault) || (froValueIsCollection && !froValueIsEmpty))
                {
                    if (!ReflectionLibraries.Set(toConfig, memb.Name, froVal))
                    {
                        throw new ModLibsException("Could set merged field/property " + memb.Name + " for " + configType.Name);
                    }
                }
            }
        }
Esempio n. 27
0
 /// <summary>
 /// Applies standard disabled text input theming to a UI text area.
 /// </summary>
 /// <param name="panel"></param>
 public virtual void ApplyInputDisable(UIPanel panel)
 {
     panel.BackgroundColor = this.InputBgDisabledColor;
     panel.BorderColor     = this.InputEdgeDisabledColor;
     ReflectionLibraries.Set(panel, "TextColor", this.InputTextDisabledColor);
 }
        public static void DrawPlayerHead(SpriteBatch sb, Player player, float x, float y, float alpha = 1f, float scale = 1f)
        {
            object _;

            ReflectionLibraries.RunMethod(Main.instance, "DrawPlayerHead", new object[] { player, x, y, alpha, scale }, out _);
        }
        /// <summary>
        /// Loads the mod browser menu with a given set of mods to one-click bulk download
        /// (via. `ModMenuLibaries.ApplyModBrowserFilter(...)`).
        /// </summary>
        /// <param name="packTitle">Name of the set.</param>
        /// <param name="modNames">Mod (internal) names of the set.</param>
        public static void OpenModBrowserWithDownloadList(string packTitle, List <string> modNames)
        {
            Type interfaceType = ReflectionLibraries.GetMainAssembly()
                                 .GetType("Terraria.ModLoader.UI.Interface");

            int modBrowserMenuMode;

            if (!ReflectionLibraries.Get(interfaceType, null, "modBrowserID", out modBrowserMenuMode))
            {
                LogLibraries.Warn("Could not switch to mod browser menu context.");
                return;
            }

            Main.PlaySound(SoundID.MenuTick);
            Main.menuMode = modBrowserMenuMode;

            UIState modBrowserUi;

            if (!ReflectionLibraries.Get(interfaceType, null, "modBrowser", out modBrowserUi))
            {
                LogLibraries.Warn("Could not acquire mod browser UI.");
                return;
            }

            Timers.SetTimer("ModLibsModDownloadPrompt", 5, true, () => {
                if (MenuContextService.GetCurrentMenuUI()?.GetType().Name != "UIModBrowser")
                {
                    return(false);
                }

                bool isLoading;
                if (!ReflectionLibraries.Get(modBrowserUi, "loading", out isLoading))
                {
                    return(false);
                }

                if (isLoading)
                {
                    return(true);
                }

                ModMenuLibraries.ApplyModBrowserFilter(packTitle, true, modNames);
                return(false);
            });

            /*Assembly tmlAsm = typeof( ModLoader ).Assembly;
             * Type interfaceType = tmlAsm.GetType( "Interface" );
             *
             * Type uiModDlType = tmlAsm.GetType( "UIModDownloadItem" );
             * object uiModDl = Activator.CreateInstance( uiModDlType, "ModName", "0.0.0", "hamstar", "", ModSide.Both, "", "http://javid.ddns.net/tModLoader/download.php?Down=mods/ModLibsUI.tmod", 0, 0, "", false, false, null );
             * //UIModDownloadItem modItem = new UIModDownloadItem( displayname, name, version, author, modreferences, modside, modIconURL, download, downloads, hot, timeStamp, update, updateIsDowngrade, installed );
             * items.Add( modItem );
             *
             * Interface.downloadMods.SetDownloading( packTitle );
             * Interface.downloadMods.SetModsToDownload( modFilter, items );
             * Interface.modBrowser.updateNeeded = true;
             *
             * int menuMode;
             * if( !ReflectionLibaries.GetField<int>( interfaceType, null, "downloadModsID", out menuMode ) ) {
             *      LogLibaries.Log( "Could not switch to downloads menu." );
             *      return;
             * }
             * Main.PlaySound( SoundID.MenuTick );
             * Main.menuMode = menuMode;*/
        }