mirror of
https://github.com/GTNewHorizons/Botania.git
synced 2026-11-13 16:54:06 +00:00
Added Tutorial Mode.
This commit is contained in:
1 parent
420ac4eb86
commit
6f608edeed
10 files changed
+230
-7
No files matched your search
@@ -10,10 +10,12 @@
|
||||
*/
|
||||
package vazkii.botania.client.gui.lexicon;
|
||||
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Queue;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
@@ -28,6 +30,7 @@ import org.lwjgl.opengl.GL11;
|
||||
|
||||
import vazkii.botania.api.BotaniaAPI;
|
||||
import vazkii.botania.api.lexicon.LexiconCategory;
|
||||
import vazkii.botania.api.lexicon.LexiconEntry;
|
||||
import vazkii.botania.client.core.handler.ClientTickHandler;
|
||||
import vazkii.botania.client.core.helper.RenderHelper;
|
||||
import vazkii.botania.client.core.proxy.ClientProxy;
|
||||
@@ -35,7 +38,9 @@ import vazkii.botania.client.gui.lexicon.button.GuiButtonBookmark;
|
||||
import vazkii.botania.client.gui.lexicon.button.GuiButtonCategory;
|
||||
import vazkii.botania.client.gui.lexicon.button.GuiButtonInvisible;
|
||||
import vazkii.botania.client.lib.LibResources;
|
||||
import vazkii.botania.common.core.handler.SheddingHandler;
|
||||
import vazkii.botania.common.item.ItemLexicon;
|
||||
import vazkii.botania.common.lexicon.LexiconData;
|
||||
|
||||
public class GuiLexicon extends GuiScreen {
|
||||
|
||||
@@ -46,6 +51,8 @@ public class GuiLexicon extends GuiScreen {
|
||||
public static List<GuiLexicon> bookmarks = new ArrayList();
|
||||
boolean bookmarksNeedPopulation = false;
|
||||
|
||||
public static Queue<LexiconEntry> tutorial = new ArrayDeque();
|
||||
|
||||
public static final ResourceLocation texture = new ResourceLocation(LibResources.GUI_LEXICON);
|
||||
public static final ResourceLocation textureToff = new ResourceLocation(LibResources.GUI_TOFF);
|
||||
|
||||
@@ -53,6 +60,11 @@ public class GuiLexicon extends GuiScreen {
|
||||
public float partialTicks = 0F;
|
||||
public float timeDelta = 0F;
|
||||
|
||||
private static final int TUTORIAL_ARROW_WIDTH = 10;
|
||||
private static final int TUTORIAL_ARROW_HEIGHT = 12;
|
||||
boolean hasTutorialArrow;
|
||||
int tutorialArrowX, tutorialArrowY;
|
||||
|
||||
List<LexiconCategory> allCategories;
|
||||
|
||||
String title;
|
||||
@@ -61,9 +73,15 @@ public class GuiLexicon extends GuiScreen {
|
||||
int left, top;
|
||||
|
||||
@Override
|
||||
public void initGui() {
|
||||
public final void initGui() {
|
||||
super.initGui();
|
||||
|
||||
onInitGui();
|
||||
|
||||
putTutorialArrow();
|
||||
}
|
||||
|
||||
public void onInitGui() {
|
||||
allCategories = new ArrayList(BotaniaAPI.getAllCategories());
|
||||
Collections.sort(allCategories);
|
||||
|
||||
@@ -152,8 +170,17 @@ public class GuiLexicon extends GuiScreen {
|
||||
RenderHelper.renderTooltip(par1, par2, Arrays.asList(EnumChatFormatting.GOLD + "#goldfishchris", EnumChatFormatting.RED + "INTENSIFY HIM"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
super.drawScreen(par1, par2, par3);
|
||||
|
||||
if(hasTutorialArrow) {
|
||||
mc.renderEngine.bindTexture(texture);
|
||||
GL11.glEnable(GL11.GL_BLEND);
|
||||
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
GL11.glColor4f(1F, 1F, 1F, 0.7F + (float) (Math.sin((float) (ClientTickHandler.ticksInGame + par3) * 0.3F) + 1) * 0.15F);
|
||||
drawTexturedModalRect(tutorialArrowX, tutorialArrowY, 20, 200, TUTORIAL_ARROW_WIDTH, TUTORIAL_ARROW_HEIGHT);
|
||||
GL11.glDisable(GL11.GL_BLEND);
|
||||
}
|
||||
}
|
||||
|
||||
public void drawBookmark(int x, int y, String s, boolean drawLeft) {
|
||||
@@ -294,6 +321,56 @@ public class GuiLexicon extends GuiScreen {
|
||||
}
|
||||
}
|
||||
|
||||
public static void startTutorial() {
|
||||
tutorial.clear();
|
||||
tutorial.add(LexiconData.lexicon);
|
||||
tutorial.add(LexiconData.flowers);
|
||||
tutorial.add(LexiconData.apothecary);
|
||||
tutorial.add(LexiconData.pureDaisy);
|
||||
tutorial.add(LexiconData.wand);
|
||||
tutorial.add(LexiconData.manaIntro);
|
||||
tutorial.add(LexiconData.pool);
|
||||
tutorial.add(LexiconData.spreader);
|
||||
tutorial.add(LexiconData.generatingIntro);
|
||||
tutorial.add(LexiconData.daybloom);
|
||||
tutorial.add(LexiconData.endoflame);
|
||||
tutorial.add(LexiconData.openCrate);
|
||||
tutorial.add(LexiconData.functionalIntro);
|
||||
tutorial.add(LexiconData.runicAltar);
|
||||
tutorial.add(LexiconData.baublesIntro);
|
||||
tutorial.add(LexiconData.manaTransport);
|
||||
tutorial.add(LexiconData.manasteelGear);
|
||||
tutorial.add(LexiconData.dispenserTweaks);
|
||||
if(SheddingHandler.hasShedding())
|
||||
tutorial.add(LexiconData.shedding);
|
||||
}
|
||||
|
||||
public final void putTutorialArrow() {
|
||||
hasTutorialArrow = !tutorial.isEmpty();
|
||||
if(hasTutorialArrow)
|
||||
positionTutorialArrow();
|
||||
}
|
||||
|
||||
public void positionTutorialArrow() {
|
||||
LexiconEntry entry = tutorial.peek();
|
||||
LexiconCategory category = entry.category;
|
||||
|
||||
List<GuiButton> buttons = buttonList;
|
||||
for(GuiButton button : buttons)
|
||||
if(button instanceof GuiButtonCategory) {
|
||||
GuiButtonCategory catButton = (GuiButtonCategory) button;
|
||||
if(catButton.getCategory() == category) {
|
||||
orientTutorialArrowWithButton(button);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void orientTutorialArrowWithButton(GuiButton button) {
|
||||
tutorialArrowX = button.xPosition - TUTORIAL_ARROW_WIDTH;
|
||||
tutorialArrowY = button.yPosition - TUTORIAL_ARROW_HEIGHT;
|
||||
}
|
||||
|
||||
boolean closeScreenOnInvKey() {
|
||||
return true;
|
||||
}
|
||||
@@ -323,3 +400,4 @@ public class GuiLexicon extends GuiScreen {
|
||||
return entryGui.page < entryGui.entry.pages.size();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,8 @@ import java.util.List;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.util.ChatComponentTranslation;
|
||||
import net.minecraft.util.ChatStyle;
|
||||
import net.minecraft.util.EnumChatFormatting;
|
||||
import net.minecraft.util.StatCollector;
|
||||
|
||||
@@ -22,6 +24,7 @@ import org.lwjgl.input.Mouse;
|
||||
|
||||
import vazkii.botania.api.internal.IGuiLexiconEntry;
|
||||
import vazkii.botania.api.lexicon.IAddonEntry;
|
||||
import vazkii.botania.api.lexicon.LexiconCategory;
|
||||
import vazkii.botania.api.lexicon.LexiconEntry;
|
||||
import vazkii.botania.api.lexicon.LexiconPage;
|
||||
import vazkii.botania.client.core.handler.ClientTickHandler;
|
||||
@@ -50,8 +53,8 @@ public class GuiLexiconEntry extends GuiLexicon implements IGuiLexiconEntry, IPa
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initGui() {
|
||||
super.initGui();
|
||||
public void onInitGui() {
|
||||
super.onInitGui();
|
||||
|
||||
buttonList.add(backButton = new GuiButtonBackWithShift(0, left + guiWidth / 2 - 8, top + guiHeight + 2));
|
||||
buttonList.add(leftButton = new GuiButtonPage(1, left, top + guiHeight - 10, false));
|
||||
@@ -161,6 +164,31 @@ public class GuiLexiconEntry extends GuiLexicon implements IGuiLexiconEntry, IPa
|
||||
public void updateScreen() {
|
||||
LexiconPage page = entry.pages.get(this.page);
|
||||
page.updateScreen(this);
|
||||
|
||||
|
||||
if(this.page == entry.pages.size() - 1) {
|
||||
LexiconEntry entry = tutorial.peek();
|
||||
if(entry == this.entry) {
|
||||
tutorial.poll();
|
||||
positionTutorialArrow();
|
||||
if(tutorial.isEmpty()) {
|
||||
mc.thePlayer.addChatMessage(new ChatComponentTranslation("botaniamisc.tutorialEnded").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED)));
|
||||
hasTutorialArrow = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void positionTutorialArrow() {
|
||||
LexiconEntry entry = tutorial.peek();
|
||||
if(entry != this.entry) {
|
||||
orientTutorialArrowWithButton(backButton);
|
||||
return;
|
||||
}
|
||||
|
||||
if(rightButton.enabled && rightButton.visible)
|
||||
orientTutorialArrowWithButton(rightButton);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -28,6 +28,7 @@ import vazkii.botania.api.lexicon.LexiconCategory;
|
||||
import vazkii.botania.api.lexicon.LexiconEntry;
|
||||
import vazkii.botania.client.core.handler.ClientTickHandler;
|
||||
import vazkii.botania.client.gui.lexicon.button.GuiButtonBack;
|
||||
import vazkii.botania.client.gui.lexicon.button.GuiButtonCategory;
|
||||
import vazkii.botania.client.gui.lexicon.button.GuiButtonInvisible;
|
||||
import vazkii.botania.client.gui.lexicon.button.GuiButtonPage;
|
||||
|
||||
@@ -70,8 +71,8 @@ public class GuiLexiconIndex extends GuiLexicon implements IParented {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initGui() {
|
||||
super.initGui();
|
||||
public void onInitGui() {
|
||||
super.onInitGui();
|
||||
|
||||
if(!GuiLexicon.isValidLexiconGui(this)) {
|
||||
currentOpenLexicon = new GuiLexicon();
|
||||
@@ -130,6 +131,28 @@ public class GuiLexiconIndex extends GuiLexicon implements IParented {
|
||||
drawTexturedModalRect(left + 134, top + guiHeight - 26, 86, 180, 12, 12);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void positionTutorialArrow() {
|
||||
LexiconEntry entry = tutorial.peek();
|
||||
LexiconCategory category = entry.category;
|
||||
if(category != this.category) {
|
||||
orientTutorialArrowWithButton(backButton);
|
||||
return;
|
||||
}
|
||||
|
||||
List<GuiButton> buttons = buttonList;
|
||||
for(GuiButton button : buttons) {
|
||||
int index = button.id + page * 12;
|
||||
if(index >= entriesToDisplay.size())
|
||||
continue;
|
||||
|
||||
if(entry == entriesToDisplay.get(index)) {
|
||||
orientTutorialArrowWithButton(button);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void actionPerformed(GuiButton par1GuiButton) {
|
||||
|
||||
@@ -44,7 +44,9 @@ import vazkii.botania.common.lib.LibLexicon;
|
||||
|
||||
public final class LexiconData {
|
||||
|
||||
public static LexiconEntry tutorial;
|
||||
public static LexiconEntry introVideo;
|
||||
|
||||
public static LexiconEntry flowers;
|
||||
public static LexiconEntry apothecary;
|
||||
public static LexiconEntry lexicon;
|
||||
@@ -232,6 +234,8 @@ public final class LexiconData {
|
||||
LexiconCategory categoryMisc = BotaniaAPI.categoryMisc;
|
||||
|
||||
// BASICS ENTRIES
|
||||
tutorial = new TLexiconEntry();
|
||||
|
||||
introVideo = new BLexiconEntry(LibLexicon.BASICS_INTRO_VIDEO, categoryBasics);
|
||||
introVideo.setPriority().setLexiconPages(new PageGuide("0"));
|
||||
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
/**
|
||||
* This class was created by <Vazkii>. It's distributed as
|
||||
* part of the Botania Mod. Get the Source Code in github:
|
||||
* https://github.com/Vazkii/Botania
|
||||
*
|
||||
* Botania is Open Source and distributed under the
|
||||
* Botania License: http://botaniamod.net/license.php
|
||||
*
|
||||
* File Created @ [Feb 16, 2015, 1:41:58 PM (GMT)]
|
||||
*/
|
||||
package vazkii.botania.common.lexicon;
|
||||
|
||||
import vazkii.botania.api.BotaniaAPI;
|
||||
import vazkii.botania.api.lexicon.LexiconCategory;
|
||||
import vazkii.botania.api.lexicon.LexiconEntry;
|
||||
import vazkii.botania.common.Botania;
|
||||
import vazkii.botania.common.lexicon.page.PageTutorial;
|
||||
import vazkii.botania.common.lib.LibLexicon;
|
||||
|
||||
public class TLexiconEntry extends BLexiconEntry {
|
||||
|
||||
public TLexiconEntry() {
|
||||
super(LibLexicon.BASICS_TUTORIAL, BotaniaAPI.categoryBasics);
|
||||
setPriority();
|
||||
setLexiconPages(new PageTutorial("0"));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -46,5 +46,4 @@ public class PageGuide extends PageText {
|
||||
} catch(Exception e) { }
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
/**
|
||||
* This class was created by <Vazkii>. It's distributed as
|
||||
* part of the Botania Mod. Get the Source Code in github:
|
||||
* https://github.com/Vazkii/Botania
|
||||
*
|
||||
* Botania is Open Source and distributed under the
|
||||
* Botania License: http://botaniamod.net/license.php
|
||||
*
|
||||
* File Created @ [Feb 16, 2015, 1:39:10 PM (GMT)]
|
||||
*/
|
||||
package vazkii.botania.common.lexicon.page;
|
||||
|
||||
import java.awt.Desktop;
|
||||
import java.net.URI;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.util.ChatComponentTranslation;
|
||||
import net.minecraft.util.ChatStyle;
|
||||
import net.minecraft.util.EnumChatFormatting;
|
||||
import net.minecraft.util.StatCollector;
|
||||
import vazkii.botania.api.internal.IGuiLexiconEntry;
|
||||
import vazkii.botania.client.gui.lexicon.GuiLexicon;
|
||||
|
||||
public class PageTutorial extends PageText {
|
||||
|
||||
GuiButton button;
|
||||
|
||||
public PageTutorial(String unlocalizedName) {
|
||||
super(unlocalizedName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onOpened(IGuiLexiconEntry gui) {
|
||||
button = new GuiButton(101, gui.getLeft() + 30, gui.getTop() + gui.getHeight() - 50, gui.getWidth() - 60, 20, StatCollector.translateToLocal("botaniamisc.startTutorial"));
|
||||
gui.getButtonList().add(button);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClosed(IGuiLexiconEntry gui) {
|
||||
gui.getButtonList().remove(button);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActionPerformed(IGuiLexiconEntry gui, GuiButton button) {
|
||||
if(button == this.button) {
|
||||
GuiLexicon.startTutorial();
|
||||
Minecraft.getMinecraft().displayGuiScreen(new GuiLexicon());
|
||||
Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentTranslation("botaniamisc.tutorialStarted").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.GREEN)));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -24,7 +24,9 @@ public final class LibLexicon {
|
||||
public static final String CATEGORY_ALFHOMANCY = "alfhomancy";
|
||||
public static final String CATEGORY_MISC = "misc";
|
||||
|
||||
public static final String BASICS_TUTORIAL = "tutorial";
|
||||
public static final String BASICS_INTRO_VIDEO = "introVideo";
|
||||
|
||||
public static final String BASICS_FLOWERS = "flowers";
|
||||
public static final String BASICS_APOTHECARY = "apothecary";
|
||||
public static final String BASICS_LEXICON = "lexicon";
|
||||
|
||||
Reference in new issue
Block a user