package speedytools.clientside.tools;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import speedytools.clientside.UndoManagerClient;
import speedytools.clientside.network.PacketSenderClient;
import speedytools.clientside.rendering.SpeedyToolRenderers;
import speedytools.clientside.selections.BlockMultiSelector;
import speedytools.clientside.sound.SoundController;
import speedytools.clientside.userinput.UserInput;
import speedytools.common.items.ItemSpeedyTool;
/**
* Created by TheGreyGhost on 30/10/14.
* This tool type switches between simple and complex using the scroll wheel
*/
public class SpeedyToolSimpleAndComplex extends SpeedyTool
{
public SpeedyToolSimpleAndComplex(SpeedyToolSimple i_simpleTool, SpeedyToolComplex i_complexTool,
ItemSpeedyTool i_parentItem, SpeedyToolRenderers i_renderers, SoundController i_speedyToolSounds,
UndoManagerClient i_undoManagerClient, PacketSenderClient i_packetSenderClient) {
super(i_parentItem, i_renderers, i_speedyToolSounds, i_undoManagerClient, i_packetSenderClient);
speedyToolComplex = i_complexTool;
speedyToolSimple = i_simpleTool;
currentToolMode = ToolMode.SIMPLE;
}
@Override
public boolean activateTool(ItemStack newToolItemStack) {
currentToolItemStack = newToolItemStack;
return (currentToolMode == ToolMode.SIMPLE) ? speedyToolSimple.activateTool(newToolItemStack) : speedyToolComplex.activateTool(newToolItemStack);
}
@Override
public boolean deactivateTool() {
return (currentToolMode == ToolMode.SIMPLE) ? speedyToolSimple.deactivateTool() : speedyToolComplex.deactivateTool();
}
@Override
public boolean processUserInput(EntityPlayerSP player, float partialTick, UserInput userInput)
{
if (currentToolMode == ToolMode.SIMPLE) {
boolean retval = speedyToolSimple.processUserInput(player, partialTick, userInput);
if (!retval) return false;
// System.out.println("simple CurrentItem:" + currentToolItemStack);
if (parentItem.isInfiniteMode(currentToolItemStack)) {
boolean deactivationComplete = speedyToolSimple.deactivateTool();
if (!deactivationComplete) return true;
speedyToolComplex.activateTool(currentToolItemStack);
currentToolMode = ToolMode.COMPLEX;
}
return true;
} else {
boolean retval = speedyToolComplex.processUserInput(player, partialTick, userInput);
if (!retval) return false;
// System.out.println("complex CurrentItem:" + currentToolItemStack);
if (!parentItem.isInfiniteMode(currentToolItemStack)) {
boolean deactivationComplete = speedyToolComplex.deactivateTool();
if (!deactivationComplete) return true;
speedyToolSimple.activateTool(currentToolItemStack);
currentToolMode = ToolMode.SIMPLE;
}
return true;
}
}
@Override
public boolean updateForThisFrame(World world, EntityPlayerSP player, float partialTick) {
return (currentToolMode == ToolMode.SIMPLE) ?
speedyToolSimple.updateForThisFrame(world, player, partialTick) :
speedyToolComplex.updateForThisFrame(world, player, partialTick);
}
@Override
public void resetTool() {
speedyToolSimple.resetTool();
speedyToolComplex.resetTool();
}
@Override
public void performTick(World world)
{
if (currentToolMode == ToolMode.SIMPLE) {
speedyToolSimple.performTick(world);
} else {
speedyToolComplex.performTick(world);
}
}
/**
* when selecting the first block in a selection, how should it be done?
*
* @return
*/
@Override
protected BlockMultiSelector.BlockSelectionBehaviour getBlockSelectionBehaviour() {
return (currentToolMode == ToolMode.SIMPLE) ? speedyToolSimple.getBlockSelectionBehaviour() : speedyToolComplex.getBlockSelectionBehaviour();
}
private enum ToolMode {SIMPLE, COMPLEX}
private ToolMode currentToolMode;
private SpeedyToolSimple speedyToolSimple;
private SpeedyToolComplex speedyToolComplex;
}