Added Tutorial Mode.

This commit is contained in:
Lizbeth Rika committed 2015-02-16 14:11:32 +00:00
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";