package ttftcuts.physis.common.item;
import java.util.List;
import java.util.Random;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.util.WeightedRandom;
import net.minecraft.util.WeightedRandomChestContent;
import net.minecraftforge.common.ChestGenHooks;
import ttftcuts.physis.Physis;
import ttftcuts.physis.api.artifact.IArtifactEffect;
import ttftcuts.physis.api.artifact.IArtifactTrigger;
import ttftcuts.physis.api.artifact.ISocketable;
import ttftcuts.physis.common.artifact.PhysisArtifacts;
import ttftcuts.physis.common.artifact.PhysisArtifacts.WeightedEffect;
import ttftcuts.physis.common.artifact.PhysisArtifacts.WeightedTrigger;
import ttftcuts.physis.common.helper.TextureHelper;
import ttftcuts.physis.common.story.StoryEngine;
public class ItemSocketable extends ItemPhysisThemed implements ISocketable {
public IIcon[][][] icons;
public static final int ICONTYPES = 1;
public ItemSocketable() {
super();
this.setCreativeTab(Physis.socketableTab);
this.setMaxStackSize(1);
this.setUnlocalizedName("socketable");
this.setTextureName("socketable/gem0_0");
}
@Override
public int getSocketColour(ItemStack stack) {
return 5;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void getSubItems(Item item, CreativeTabs tab, List types) {
for(WeightedTrigger wtrig : PhysisArtifacts.triggers.values()) {
IArtifactTrigger trigger = wtrig.theTrigger;
for(WeightedEffect weff : PhysisArtifacts.effects.values()) {
IArtifactEffect effect = weff.theEffect;
ItemStack stack = new ItemStack(this);
PhysisArtifacts.addTriggerAndEffectToItem(stack, trigger, effect);
types.add(stack);
}
}
}
@Override
@SideOnly(Side.CLIENT)
public boolean requiresMultipleRenderPasses()
{
return true;
}
@Override
public int getRenderPasses(int metadata) {
return 9;
}
@Override
public IIcon getIcon(ItemStack stack, int pass)
{
int type = 0;
int theme = StoryEngine.get("theme", true);
return icons[type][pass][theme];
}
@Override
@SideOnly(Side.CLIENT)
public int getColorFromItemStack(ItemStack stack, int pass)
{
double fraction = (7-pass)/7.0;
double gfract = Math.min(1.0, Math.max(0.0, fraction * 1.25 - 0.65));
double l = fraction * 0.95 + 0.025;
double h = 0;
double s = 0;
IArtifactTrigger trigger = PhysisArtifacts.getTriggerFromSocketable(stack);
IArtifactEffect effect = PhysisArtifacts.getEffectFromSocketable(stack);
if (trigger != null && effect != null) {
double thue = trigger.getHue();
double tsat = trigger.getSaturation();
double ehue = effect.getHue();
double esat = effect.getSaturation();
double h1 = ehue;
double s1 = esat;
double h2 = thue;
double s2 = tsat;
if (Math.abs(h2-h1) > 0.5) {
if (h2 > h1) {
h2 -= 1;
} else {
h1 -= 1;
}
}
h = gfract * h1 + (1-gfract) * h2;
if (h < 0) h += 1;
if (h > 1) h -= 1;
s = gfract * s1 + (1-gfract) * s2;
if (pass == 8) {
h = h1;
}
}
if (pass == 8) {
l = 0.65;
s = 1.0;
}
int[] rgb = TextureHelper.hsl2rgb(h, s, l);
return TextureHelper.compose(rgb);
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister register)
{
super.registerIcons(register);
icons = new IIcon[ICONTYPES][][];
for (int i=0; i<ICONTYPES; i++) {
IIcon[][] types = new IIcon[9][];
for (int j=0; j<9; j++) {
//types[j] = register.registerIcon(Physis.MOD_ID+":socketable/gem"+i+"_"+j);
types[j] = this.registerIcon("socketable/gem"+i+"_"+j, register);
}
icons[i] = types;
}
//Physis.logger.info("Gem icons:");
//Physis.logger.info(Arrays.deepToString(icons));
}
@Override
public String getItemStackDisplayName(ItemStack stack) {
IArtifactTrigger trigger = PhysisArtifacts.getTriggerFromSocketable(stack);
IArtifactEffect effect = PhysisArtifacts.getEffectFromSocketable(stack);
int theme = StoryEngine.get("theme", true);
if (theme == -1) { theme = 0; }
if (trigger != null && effect != null) {
int type = 0;
String out = Physis.text.translate(PhysisArtifacts.PREFIX+"theme."+theme+".type."+type+".name");
out = String.format(out,
Physis.text.translate(trigger.getLocalizationName()+".name"),
Physis.text.translate(effect.getLocalizationName()+".name")
);
return Physis.text.formatArtifactNames(out, stack);
}
return super.getItemStackDisplayName(stack);
}
@Override
public WeightedRandomChestContent getChestGenBase(ChestGenHooks chest, Random rnd, WeightedRandomChestContent original)
{
IArtifactTrigger trigger = ((WeightedTrigger)WeightedRandom.getRandomItem(rnd, PhysisArtifacts.triggers.values())).theTrigger;
IArtifactEffect effect = ((WeightedEffect)WeightedRandom.getRandomItem(rnd, PhysisArtifacts.effects.values())).theEffect;
ItemStack stack = original.theItemId;
PhysisArtifacts.addTriggerAndEffectToItem(stack, trigger, effect);
original.theItemId = stack;
return original;
}
}