BloodMagic/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/SpellParadigm.java

122 lines
2.6 KiB
Java
Raw Normal View History

2014-01-17 21:47:23 +00:00
package WayofTime.alchemicalWizardry.common.spell.complex;
2014-01-18 00:59:31 +00:00
import java.util.ArrayList;
import java.util.LinkedList;
2014-01-18 00:59:31 +00:00
import java.util.List;
2014-01-17 21:47:23 +00:00
2014-01-18 00:59:31 +00:00
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellEffect;
2014-01-18 16:45:31 +00:00
import WayofTime.alchemicalWizardry.common.spell.complex.enhancement.SpellEnhancement;
2014-01-18 00:59:31 +00:00
public abstract class SpellParadigm
{
protected List<SpellEffect> bufferedEffectList = new ArrayList();
protected List<String> effectList = new LinkedList();
2014-01-18 00:59:31 +00:00
public void addBufferedEffect(SpellEffect effect)
{
if(effect!=null)
{
this.bufferedEffectList.add(effect);
effectList.add(effect.getClass().getName());
2014-01-18 00:59:31 +00:00
}
}
public void modifyBufferedEffect(SpellModifier modifier)
{
SpellEffect effect = this.getBufferedEffect();
if(effect!=null)
{
effect.modifyEffect(modifier);
effectList.add(modifier.getClass().getName());
2014-01-18 00:59:31 +00:00
}
}
public void applyEnhancement(SpellEnhancement enh)
{
if(enh!=null)
2014-01-18 00:59:31 +00:00
{
if(bufferedEffectList.isEmpty())
{
this.enhanceParadigm(enh);
}
else
2014-01-18 00:59:31 +00:00
{
SpellEffect effect = this.getBufferedEffect();
if(effect!=null)
{
effect.enhanceEffect(enh);
}
2014-01-18 00:59:31 +00:00
}
effectList.add(enh.getClass().getName());
2014-01-18 00:59:31 +00:00
}
2014-01-18 00:59:31 +00:00
}
public abstract void enhanceParadigm(SpellEnhancement enh);
public abstract void castSpell(World world, EntityPlayer entityPlayer, ItemStack itemStack);
public void applySpellEffect(SpellEffect effect)
{
effect.modifyParadigm(this);
}
public void applyAllSpellEffects()
{
for(SpellEffect effect : bufferedEffectList)
{
this.applySpellEffect(effect);
}
}
public SpellEffect getBufferedEffect()
{
if(bufferedEffectList.isEmpty())
{
return null;
}
else
{
return bufferedEffectList.get(bufferedEffectList.size()-1);
}
}
2014-01-18 23:05:25 +00:00
public int getTotalCost()
{
int cost = 0;
if(this.bufferedEffectList!=null && !this.bufferedEffectList.isEmpty())
{
if(this instanceof SpellParadigmProjectile)
{
for(SpellEffect effect : bufferedEffectList)
{
cost+=effect.getCostForProjectile();
}
}else if(this instanceof SpellParadigmSelf)
{
for(SpellEffect effect : bufferedEffectList)
{
cost+=effect.getCostForSelf();
}
}else if(this instanceof SpellParadigmMelee)
{
for(SpellEffect effect : bufferedEffectList)
{
cost+=effect.getCostForMelee();
}
}
2014-01-19 01:29:20 +00:00
return (int)(cost*Math.sqrt(this.bufferedEffectList.size()));
2014-01-18 23:05:25 +00:00
}
2014-01-19 01:29:20 +00:00
return getDefaultCost();
2014-01-18 23:05:25 +00:00
}
public abstract int getDefaultCost();
2014-01-17 21:47:23 +00:00
}