/* * Copyright (C) 2022 NotEnoughUpdates contributors * * This file is part of NotEnoughUpdates. * * NotEnoughUpdates is free software: you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation, either * version 3 of the License, or (at your option) any later version. * * NotEnoughUpdates is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with NotEnoughUpdates. If not, see . */ package io.github.moulberry.notenoughupdates.overlays; import com.google.common.collect.Lists; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; import io.github.moulberry.notenoughupdates.miscfeatures.PetInfoOverlay; import io.github.moulberry.notenoughupdates.miscgui.customtodos.CustomTodo; import io.github.moulberry.notenoughupdates.miscgui.customtodos.CustomTodoHud; import java.util.ArrayList; import java.util.List; public class OverlayManager { public static ArrayList> dontRenderOverlay = new ArrayList<>(); public static MiningOverlay miningOverlay; public static PowderGrindingOverlay powderGrindingOverlay; public static FarmingSkillOverlay farmingOverlay; public static FishingSkillOverlay fishingSkillOverlay; public static MiningSkillOverlay miningSkillOverlay; public static CombatSkillOverlay combatSkillOverlay; public static PetInfoOverlay petInfoOverlay; public static TimersOverlay timersOverlay; public static BonemerangOverlay bonemerangOverlay; public static CrystalHollowOverlay crystalHollowOverlay; public static SlayerOverlay slayerOverlay; public static FuelBarDummy fuelBar; public static final List textOverlays = new ArrayList<>(); static { List todoDummy = Lists.newArrayList( "\u00a73Cakes: \u00a7eInactive!", "\u00a73Cookie Buff: \u00a7eInactive!", "\u00a73Godpot: \u00a7eInactive!", "\u00a73Puzzler: \u00a7eReady!", "\u00a73Fetchur: \u00a7eReady!", "\u00a73Commissions: \u00a7eReady!", "\u00a73Experiments: \u00a7eReady!", "\u00a73Mithril Powder: \u00a7eReady", "\u00a73Gemstone Powder: \u00a7eReady", "\u00a73Cakes: \u00a7e1d21h", "\u00a73Cookie Buff: \u00a7e2d23h", "\u00a73Godpot: \u00a7e19h", "\u00a73Puzzler: \u00a7e13h", "\u00a73Fetchur: \u00a7e3h38m", "\u00a73Commissions: \u00a7e3h38m", "\u00a73Experiments: \u00a7e3h38m", "\u00a73Mithril Powder: \u00a7e3h38m", "\u00a73Gemstone Powder: \u00a7e3h38m", "\u00a73Crimson Isle Quests: \u00a7e3h38m", "\u00a73NPC Buy Daily Limit: \u00a7e3h38m" ); textOverlays.add( timersOverlay = new TimersOverlay(NotEnoughUpdates.INSTANCE.config.miscOverlays.todoPosition, () -> { List strings = new ArrayList<>(); for (int i : NotEnoughUpdates.INSTANCE.config.miscOverlays.todoText2) { if (i >= 0 && i < todoDummy.size()) strings.add(todoDummy.get(i)); } for (CustomTodo customTodo : NotEnoughUpdates.INSTANCE.config.hidden.customTodos) { if (customTodo.isEnabledOnCurrentProfile()) { strings.add(CustomTodoHud.INSTANCE.encodeCustomItem(customTodo.getIcon()) + ":§3" + customTodo.getLabel() + ":§a Ready!"); } } return strings; }, () -> { int style = NotEnoughUpdates.INSTANCE.config.miscOverlays.todoStyle; if (style >= 0 && style < TextOverlayStyle.values().length) { return TextOverlayStyle.values()[style]; } return TextOverlayStyle.BACKGROUND; })); List miningDummy = Lists.newArrayList( "§3Goblin Slayer: §626.5%\n§3Lucky Raffle: §c0.0%", "§3Mithril: §26,243\n§3Gemstone: §d37,354", "§3Forge 1) §9Diamonite§7: §aReady!", "§3Forge 2) §7EMPTY", "§3Pickaxe CD: §a43s", "§3Star Cult: §a1h14m48s", "§3Sky Mall: §a5x §9Titanium drops §a(14m2s)" ); miningOverlay = new MiningOverlay(NotEnoughUpdates.INSTANCE.config.mining.overlayPosition, () -> { List strings = new ArrayList<>(); for (int i : NotEnoughUpdates.INSTANCE.config.mining.dwarvenText2) { if (i >= 0 && i < miningDummy.size()) strings.add(miningDummy.get(i)); } return strings; }, () -> { int style = NotEnoughUpdates.INSTANCE.config.mining.overlayStyle; if (style >= 0 && style < TextOverlayStyle.values().length) { return TextOverlayStyle.values()[style]; } return TextOverlayStyle.BACKGROUND; }); List powderGrindingDummy = Lists.newArrayList( "\u00a73Chests Found: \u00a7a13", "\u00a73Opened Chests: \u00a7a11", "\u00a73Unopened Chests: \u00a7c2", "\u00a73Mithril Powder Found: \u00a726,243", "\u00a73Average Mithril Powder/Chest: \u00a72568", "\u00a73Gemstone Powder Found: \u00a7d6,243", "\u00a73Average Gemstone Powder/Chest: \u00a7d568" ); powderGrindingOverlay = new PowderGrindingOverlay(NotEnoughUpdates.INSTANCE.config.mining.powderGrindingTrackerPosition, () -> { List strings = new ArrayList<>(); for (int i : NotEnoughUpdates.INSTANCE.config.mining.powderGrindingTrackerText) { if (i >= 0 && i < powderGrindingDummy.size()) strings.add(powderGrindingDummy.get(i)); } return strings; }, () -> { int style = NotEnoughUpdates.INSTANCE.config.mining.powderGrindingTrackerOverlayStyle; if (style >= 0 && style < TextOverlayStyle.values().length) { return TextOverlayStyle.values()[style]; } return TextOverlayStyle.BACKGROUND; }); List farmingDummy = Lists.newArrayList( "\u00a7bCounter: \u00a7e37,547,860", "\u00a7bCrops/m: \u00a7e38.29", "\u00a7bFarming: \u00a7e12\u00a77 [\u00a7e|||||||||||||||||\u00a78||||||||\u00a77] \u00a7e67%", "\u00a7bCurrent XP: \u00a7e6,734", "\u00a7bRemaining XP: \u00a7e3,265", "\u00a7bXP/h: \u00a7e238,129", "\u00a7bYaw: \u00a7e68.25\u00a7l\u00b0" ); farmingOverlay = new FarmingSkillOverlay(NotEnoughUpdates.INSTANCE.config.skillOverlays.farmingPosition, () -> { List strings = new ArrayList<>(); for (int i : NotEnoughUpdates.INSTANCE.config.skillOverlays.farmingText) { if (i >= 0 && i < farmingDummy.size()) strings.add(farmingDummy.get(i)); } return strings; }, () -> { int style = NotEnoughUpdates.INSTANCE.config.skillOverlays.farmingStyle; if (style >= 0 && style < TextOverlayStyle.values().length) { return TextOverlayStyle.values()[style]; } return TextOverlayStyle.BACKGROUND; }); List miningSkillDummy = Lists.newArrayList( "\u00a7bCompact: \u00a7e547,860", "\u00a7bBlocks/m: \u00a7e38.29", "\u00a7bMining: \u00a7e12\u00a77 [\u00a7e|||||||||||||||||\u00a78||||||||\u00a77] \u00a7e67%", "\u00a7bCurrent XP: \u00a7e6,734", "\u00a7bRemaining XP: \u00a7e3,265", "\u00a7bXP/h: \u00a7e238,129", "\u00a7bYaw: \u00a7e68.25\u00a7l\u00b0" ); miningSkillOverlay = new MiningSkillOverlay(NotEnoughUpdates.INSTANCE.config.skillOverlays.miningPosition, () -> { List strings = new ArrayList<>(); for (int i : NotEnoughUpdates.INSTANCE.config.skillOverlays.miningText) { if (i >= 0 && i < miningSkillDummy.size()) strings.add(miningSkillDummy.get(i)); } return strings; }, () -> { int style = NotEnoughUpdates.INSTANCE.config.skillOverlays.miningStyle; if (style >= 0 && style < TextOverlayStyle.values().length) { return TextOverlayStyle.values()[style]; } return TextOverlayStyle.BACKGROUND; }); List fishingDummy = Lists.newArrayList( "\u00a7bCatches: \u00a7e37,547,860", //"\u00a7bCatches/m: \u00a7e38.29", "\u00a7bFish: \u00a7e12\u00a77 [\u00a7e|||||||||||||||||\u00a78||||||||\u00a77] \u00a7e67%", "\u00a7bCurrent XP: \u00a7e6,734", "\u00a7bRemaining XP: \u00a7e3,265", "\u00a7bXP/h: \u00a7e238,129" //"\u00a7bYaw: \u00a7e68.25\u00a7l\u00b0" ); fishingSkillOverlay = new FishingSkillOverlay(NotEnoughUpdates.INSTANCE.config.skillOverlays.fishingPosition, () -> { List strings = new ArrayList<>(); for (int i : NotEnoughUpdates.INSTANCE.config.skillOverlays.fishingText) { if (i >= 0 && i < fishingDummy.size()) strings.add(fishingDummy.get(i)); } return strings; }, () -> { int style = NotEnoughUpdates.INSTANCE.config.skillOverlays.fishingStyle; if (style >= 0 && style < TextOverlayStyle.values().length) { return TextOverlayStyle.values()[style]; } return TextOverlayStyle.BACKGROUND; }); List combatSkillDummy = Lists.newArrayList( "\u00a7bKills: \u00a7e547,860", "\u00a7bCombat: \u00a7e12\u00a77 [\u00a7e|||||||||||||||||\u00a78||||||||\u00a77] \u00a7e67%", "\u00a7bCurrent XP: \u00a7e6,734", "\u00a7bRemaining XP: \u00a7e3,265", "\u00a7bXP/h: \u00a7e238,129", "\u00a7bETA: \u00a7e13h12m" ); combatSkillOverlay = new CombatSkillOverlay(NotEnoughUpdates.INSTANCE.config.skillOverlays.combatPosition, () -> { List strings = new ArrayList<>(); for (int i : NotEnoughUpdates.INSTANCE.config.skillOverlays.combatText) { if (i >= 0 && i < combatSkillDummy.size()) strings.add(combatSkillDummy.get(i)); } return strings; }, () -> { int style = NotEnoughUpdates.INSTANCE.config.skillOverlays.combatStyle; if (style >= 0 && style < TextOverlayStyle.values().length) { return TextOverlayStyle.values()[style]; } return TextOverlayStyle.BACKGROUND; }); List petInfoDummy = Lists.newArrayList( "\u00a7a[Lvl 37] \u00a7fRock", "\u00a7b2,312.9/2,700\u00a7e (85.7%)", "\u00a7b2.3k/2.7k\u00a7e (85.7%)", "\u00a7bXP/h: \u00a7e27,209", "\u00a7bTotal XP: \u00a7e30,597.9", "\u00a7bHeld Item: \u00a7fMining Exp Boost", "\u00a7bUntil L38: \u00a7e5m13s", "\u00a7bUntil L100: \u00a7e2d13h" ); petInfoOverlay = new PetInfoOverlay(NotEnoughUpdates.INSTANCE.config.petOverlay.petInfoPosition, () -> { List strings = new ArrayList<>(); for (int i : NotEnoughUpdates.INSTANCE.config.petOverlay.petOverlayText) { if (i >= 0 && i < petInfoDummy.size()) strings.add(petInfoDummy.get(i)); } return strings; }, () -> { int style = NotEnoughUpdates.INSTANCE.config.petOverlay.petInfoOverlayStyle; if (style >= 0 && style < TextOverlayStyle.values().length) { return TextOverlayStyle.values()[style]; } return TextOverlayStyle.BACKGROUND; }); List bonemerangDummy = Lists.newArrayList( "\u00a7cBonemerang will break!", "\u00a77Targets: \u00a76\u00a7l10" ); bonemerangOverlay = new BonemerangOverlay( NotEnoughUpdates.INSTANCE.config.itemOverlays.bonemerangPosition, () -> bonemerangDummy, () -> { int style = NotEnoughUpdates.INSTANCE.config.itemOverlays.bonemerangOverlayStyle; if (style >= 0 && style < TextOverlayStyle.values().length) { return TextOverlayStyle.values()[style]; } return TextOverlayStyle.BACKGROUND; } ); List crystalHollowOverlayDummy = Lists.newArrayList( "\u00a73Amber Crystal: \u00a7aPlaced\n" + "\u00a73Sapphire Crystal: \u00a7eCollected\n" + "\u00a73Jade Crystal: \u00a7eMissing\n" + "\u00a73Amethyst Crystal: \u00a7cMissing\n" + "\u00a73Topaz Crystal: \u00a7cMissing\n", "\u00a73Crystals: \u00a7a4/5", "\u00a73Crystals: \u00a7a80%", "\u00a73Electron Transmitter: \u00a7aDone\n" + "\u00a73Robotron Reflector: \u00a7eIn Storage\n" + "\u00a73Superlite Motor: \u00a7eIn Inventory\n" + "\u00a73Synthetic Heart: \u00a7cMissing\n" + "\u00a73Control Switch: \u00a7cMissing\n" + "\u00a73FTX 3070: \u00a7cMissing", "\u00a73Electron Transmitter: \u00a7a3\n" + "\u00a73Robotron Reflector: \u00a7e2\n" + "\u00a73Superlite Motor: \u00a7e1\n" + "\u00a73Synthetic Heart: \u00a7c0\n" + "\u00a73Control Switch: \u00a7c0\n" + "\u00a73FTX 3070: \u00a7c0", "\u00a73Automaton parts: \u00a7a5/6", "\u00a73Automaton parts: \u00a7a83%", "\u00a73Scavenged Lapis Sword: \u00a7aDone\n" + "\u00a73Scavenged Golden Hammer: \u00a7eIn Storage\n" + "\u00a73Scavenged Diamond Axe: \u00a7eIn Inventory\n" + "\u00a73Scavenged Emerald Hammer: \u00a7cMissing\n", "\u00a73Scavenged Lapis Sword: \u00a7a3\n" + "\u00a73Scavenged Golden Hammer: \u00a7e2\n" + "\u00a73Scavenged Diamond Axe: \u00a7e1\n" + "\u00a73Scavenged Emerald Hammer: \u00a7c0\n", "\u00a73Mines of Divan parts: \u00a7a3/4", "\u00a73Mines of Divan parts: \u00a7a75%" ); crystalHollowOverlay = new CrystalHollowOverlay(NotEnoughUpdates.INSTANCE.config.mining.crystalHollowOverlayPosition, () -> { List strings = new ArrayList<>(); for (int i : NotEnoughUpdates.INSTANCE.config.mining.crystalHollowText) { if (i >= 0 && i < crystalHollowOverlayDummy.size()) strings.add(crystalHollowOverlayDummy.get(i)); } return strings; }, () -> { int style = NotEnoughUpdates.INSTANCE.config.mining.crystalHollowOverlayStyle; if (style >= 0 && style < TextOverlayStyle.values().length) { return TextOverlayStyle.values()[style]; } return TextOverlayStyle.BACKGROUND; }); List slayerDummy = Lists.newArrayList( "\u00a7eSlayer: \u00a74Sven", "\u00a7eRNG Meter: \u00a75100%", "\u00a7eLvl: \u00a7d7", "\u00a7eKill time: \u00a7c1:30", "\u00a7eXP: \u00a7d75,450/100,000", "\u00a7eBosses till next Lvl: \u00a7d17", "\u00a7eAverage kill time: \u00a7c3:20" ); slayerOverlay = new SlayerOverlay(NotEnoughUpdates.INSTANCE.config.slayerOverlay.slayerPosition, () -> { List strings = new ArrayList<>(); for (int i : NotEnoughUpdates.INSTANCE.config.slayerOverlay.slayerText) { if (i >= 0 && i < slayerDummy.size()) strings.add(slayerDummy.get(i)); } return strings; }, () -> { int style = NotEnoughUpdates.INSTANCE.config.slayerOverlay.slayerStyle; if (style >= 0 && style < TextOverlayStyle.values().length) { return TextOverlayStyle.values()[style]; } return TextOverlayStyle.BACKGROUND; }); List fuelDummy = Lists.newArrayList( "\u00a73This is a fuel bar" ); fuelBar = new FuelBarDummy(NotEnoughUpdates.INSTANCE.config.mining.drillFuelBarPosition, () -> { List strings = new ArrayList<>(); strings.add(fuelDummy.get(0)); return strings; }, () -> TextOverlayStyle.BACKGROUND); textOverlays.add(miningOverlay); textOverlays.add(powderGrindingOverlay); textOverlays.add(farmingOverlay); textOverlays.add(miningSkillOverlay); textOverlays.add(combatSkillOverlay); textOverlays.add(fishingSkillOverlay); textOverlays.add(petInfoOverlay); textOverlays.add(bonemerangOverlay); textOverlays.add(crystalHollowOverlay); textOverlays.add(slayerOverlay); textOverlays.add(fuelBar); } }